Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
74e04aca
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
74e04aca
编写于
5月 10, 2012
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
上级
01da0c2b
eef4560f
变更
14
展开全部
隐藏空白更改
内联
并排
Showing
14 changed file
with
1370 addition
and
245 deletion
+1370
-245
drivers/net/ethernet/intel/Kconfig
drivers/net/ethernet/intel/Kconfig
+11
-0
drivers/net/ethernet/intel/igb/igb_ethtool.c
drivers/net/ethernet/intel/igb/igb_ethtool.c
+37
-1
drivers/net/ethernet/intel/ixgbe/Makefile
drivers/net/ethernet/intel/ixgbe/Makefile
+2
-0
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe.h
+37
-0
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+1
-1
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
+31
-38
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c
+45
-48
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
+38
-60
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+47
-24
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+164
-34
drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+900
-0
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+9
-4
drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c
drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c
+4
-32
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+44
-3
未找到文件。
drivers/net/ethernet/intel/Kconfig
浏览文件 @
74e04aca
...
...
@@ -220,6 +220,17 @@ config IXGBE_DCB
If unsure, say N.
config IXGBE_PTP
bool "PTP Clock Support"
default n
depends on IXGBE && PTP_1588_CLOCK
---help---
Say Y here if you want support for 1588 Timestamping with a
PHC device, using the PTP 1588 Clock support. This is
required to enable timestamping support for the device.
If unsure, say N.
config IXGBEVF
tristate "Intel(R) 82599 Virtual Function Ethernet support"
depends on PCI_MSI
...
...
drivers/net/ethernet/intel/igb/igb_ethtool.c
浏览文件 @
74e04aca
...
...
@@ -335,7 +335,7 @@ static void igb_set_msglevel(struct net_device *netdev, u32 data)
static
int
igb_get_regs_len
(
struct
net_device
*
netdev
)
{
#define IGB_REGS_LEN
551
#define IGB_REGS_LEN
739
return
IGB_REGS_LEN
*
sizeof
(
u32
);
}
...
...
@@ -556,6 +556,42 @@ static void igb_get_regs(struct net_device *netdev,
regs_buff
[
552
]
=
adapter
->
stats
.
b2ospc
;
regs_buff
[
553
]
=
adapter
->
stats
.
o2bspc
;
regs_buff
[
554
]
=
adapter
->
stats
.
b2ogprc
;
if
(
hw
->
mac
.
type
!=
e1000_82576
)
return
;
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
555
+
i
]
=
rd32
(
E1000_SRRCTL
(
i
+
4
));
for
(
i
=
0
;
i
<
4
;
i
++
)
regs_buff
[
567
+
i
]
=
rd32
(
E1000_PSRTYPE
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
571
+
i
]
=
rd32
(
E1000_RDBAL
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
583
+
i
]
=
rd32
(
E1000_RDBAH
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
595
+
i
]
=
rd32
(
E1000_RDLEN
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
607
+
i
]
=
rd32
(
E1000_RDH
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
619
+
i
]
=
rd32
(
E1000_RDT
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
631
+
i
]
=
rd32
(
E1000_RXDCTL
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
643
+
i
]
=
rd32
(
E1000_TDBAL
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
655
+
i
]
=
rd32
(
E1000_TDBAH
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
667
+
i
]
=
rd32
(
E1000_TDLEN
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
679
+
i
]
=
rd32
(
E1000_TDH
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
691
+
i
]
=
rd32
(
E1000_TDT
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
703
+
i
]
=
rd32
(
E1000_TXDCTL
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
715
+
i
]
=
rd32
(
E1000_TDWBAL
(
i
+
4
));
for
(
i
=
0
;
i
<
12
;
i
++
)
regs_buff
[
727
+
i
]
=
rd32
(
E1000_TDWBAH
(
i
+
4
));
}
static
int
igb_get_eeprom_len
(
struct
net_device
*
netdev
)
...
...
drivers/net/ethernet/intel/ixgbe/Makefile
浏览文件 @
74e04aca
...
...
@@ -39,4 +39,6 @@ ixgbe-objs := ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o \
ixgbe-$(CONFIG_IXGBE_DCB)
+=
ixgbe_dcb.o ixgbe_dcb_82598.o
\
ixgbe_dcb_82599.o ixgbe_dcb_nl.o
ixgbe-$(CONFIG_IXGBE_PTP)
+=
ixgbe_ptp.o
ixgbe-$(CONFIG_FCOE
:
m=y) += ixgbe_fcoe.o
drivers/net/ethernet/intel/ixgbe/ixgbe.h
浏览文件 @
74e04aca
...
...
@@ -36,6 +36,12 @@
#include <linux/aer.h>
#include <linux/if_vlan.h>
#ifdef CONFIG_IXGBE_PTP
#include <linux/clocksource.h>
#include <linux/net_tstamp.h>
#include <linux/ptp_clock_kernel.h>
#endif
/* CONFIG_IXGBE_PTP */
#include "ixgbe_type.h"
#include "ixgbe_common.h"
#include "ixgbe_dcb.h"
...
...
@@ -96,6 +102,7 @@
#define IXGBE_TX_FLAGS_FCOE (u32)(1 << 5)
#define IXGBE_TX_FLAGS_FSO (u32)(1 << 6)
#define IXGBE_TX_FLAGS_TXSW (u32)(1 << 7)
#define IXGBE_TX_FLAGS_TSTAMP (u32)(1 << 8)
#define IXGBE_TX_FLAGS_VLAN_MASK 0xffff0000
#define IXGBE_TX_FLAGS_VLAN_PRIO_MASK 0xe0000000
#define IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT 29
...
...
@@ -458,6 +465,8 @@ struct ixgbe_adapter {
#define IXGBE_FLAG2_FDIR_REQUIRES_REINIT (u32)(1 << 7)
#define IXGBE_FLAG2_RSS_FIELD_IPV4_UDP (u32)(1 << 8)
#define IXGBE_FLAG2_RSS_FIELD_IPV6_UDP (u32)(1 << 9)
#define IXGBE_FLAG2_OVERFLOW_CHECK_ENABLED (u32)(1 << 10)
#define IXGBE_FLAG2_PTP_PPS_ENABLED (u32)(1 << 11)
/* Tx fast path data */
int
num_tx_queues
;
...
...
@@ -545,6 +554,17 @@ struct ixgbe_adapter {
u32
interrupt_event
;
u32
led_reg
;
#ifdef CONFIG_IXGBE_PTP
struct
ptp_clock
*
ptp_clock
;
struct
ptp_clock_info
ptp_caps
;
unsigned
long
last_overflow_check
;
spinlock_t
tmreg_lock
;
struct
cyclecounter
cc
;
struct
timecounter
tc
;
u32
base_incval
;
u32
cycle_speed
;
#endif
/* CONFIG_IXGBE_PTP */
/* SR-IOV */
DECLARE_BITMAP
(
active_vfs
,
IXGBE_MAX_VF_FUNCTIONS
);
unsigned
int
num_vfs
;
...
...
@@ -652,12 +672,15 @@ extern void ixgbe_atr_compute_perfect_hash_82599(union ixgbe_atr_input *input,
union
ixgbe_atr_input
*
mask
);
extern
void
ixgbe_set_rx_mode
(
struct
net_device
*
netdev
);
#ifdef CONFIG_IXGBE_DCB
extern
void
ixgbe_set_rx_drop_en
(
struct
ixgbe_adapter
*
adapter
);
extern
int
ixgbe_setup_tc
(
struct
net_device
*
dev
,
u8
tc
);
#endif
extern
void
ixgbe_tx_ctxtdesc
(
struct
ixgbe_ring
*
,
u32
,
u32
,
u32
,
u32
);
extern
void
ixgbe_do_reset
(
struct
net_device
*
netdev
);
#ifdef CONFIG_IXGBE_HWMON
extern
void
ixgbe_sysfs_exit
(
struct
ixgbe_adapter
*
adapter
);
extern
int
ixgbe_sysfs_init
(
struct
ixgbe_adapter
*
adapter
);
#endif
/* CONFIG_IXGBE_HWMON */
#ifdef IXGBE_FCOE
extern
void
ixgbe_configure_fcoe
(
struct
ixgbe_adapter
*
adapter
);
extern
int
ixgbe_fso
(
struct
ixgbe_ring
*
tx_ring
,
...
...
@@ -688,4 +711,18 @@ static inline struct netdev_queue *txring_txq(const struct ixgbe_ring *ring)
return
netdev_get_tx_queue
(
ring
->
netdev
,
ring
->
queue_index
);
}
#ifdef CONFIG_IXGBE_PTP
extern
void
ixgbe_ptp_init
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_ptp_stop
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_ptp_overflow_check
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_ptp_tx_hwtstamp
(
struct
ixgbe_q_vector
*
q_vector
,
struct
sk_buff
*
skb
);
extern
void
ixgbe_ptp_rx_hwtstamp
(
struct
ixgbe_q_vector
*
q_vector
,
struct
sk_buff
*
skb
);
extern
int
ixgbe_ptp_hwtstamp_ioctl
(
struct
ixgbe_adapter
*
adapter
,
struct
ifreq
*
ifr
,
int
cmd
);
extern
void
ixgbe_ptp_start_cyclecounter
(
struct
ixgbe_adapter
*
adapter
);
extern
void
ixgbe_ptp_check_pps_event
(
struct
ixgbe_adapter
*
adapter
,
u32
eicr
);
#endif
/* CONFIG_IXGBE_PTP */
#endif
/* _IXGBE_H_ */
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
浏览文件 @
74e04aca
...
...
@@ -2561,7 +2561,7 @@ s32 ixgbe_disable_rx_buff_generic(struct ixgbe_hw *hw)
break
;
else
/* Use interrupt-safe sleep just in case */
udelay
(
10
);
udelay
(
10
00
);
}
/* For informational purposes only */
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
浏览文件 @
74e04aca
...
...
@@ -191,53 +191,46 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82598(struct ixgbe_hw *hw,
*/
s32
ixgbe_dcb_config_pfc_82598
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
)
{
u32
reg
;
u32
fcrtl
,
reg
;
u8
i
;
if
(
pfc_en
)
{
/* Enable Transmit Priority Flow Control */
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_RMCS
);
reg
&=
~
IXGBE_RMCS_TFCE_802_3X
;
/* correct the reporting of our flow control status */
reg
|=
IXGBE_RMCS_TFCE_PRIORITY
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RMCS
,
reg
);
/* Enable Receive Priority Flow Control */
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_FCTRL
);
reg
&=
~
IXGBE_FCTRL_RFCE
;
reg
|=
IXGBE_FCTRL_RPFCE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCTRL
,
reg
);
/* Configure pause time */
for
(
i
=
0
;
i
<
(
MAX_TRAFFIC_CLASS
>>
1
);
i
++
)
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCTTV
(
i
),
0x68006800
);
/* Enable Transmit Priority Flow Control */
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_RMCS
);
reg
&=
~
IXGBE_RMCS_TFCE_802_3X
;
reg
|=
IXGBE_RMCS_TFCE_PRIORITY
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RMCS
,
reg
);
/* Configure flow control refresh threshold value
*/
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTV
,
0x3400
);
}
/* Enable Receive Priority Flow Control
*/
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_FCTRL
);
reg
&=
~
(
IXGBE_FCTRL_RPFCE
|
IXGBE_FCTRL_RFCE
);
/*
* Configure flow control thresholds and enable priority flow control
* for each traffic class.
*/
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
int
enabled
=
pfc_en
&
(
1
<<
i
);
if
(
pfc_en
)
reg
|=
IXGBE_FCTRL_RPFCE
;
reg
=
hw
->
fc
.
low_water
<<
10
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCTRL
,
reg
)
;
if
(
enabled
==
pfc_enabled_tx
||
enabled
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTL_XONE
;
fcrtl
=
(
hw
->
fc
.
low_water
<<
10
)
|
IXGBE_FCRTL_XONE
;
/* Configure PFC Tx thresholds per TC */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
if
(
!
(
pfc_en
&
(
1
<<
i
)))
{
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
i
),
0
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
i
),
0
);
continue
;
}
reg
=
(
hw
->
fc
.
high_water
[
i
]
<<
10
)
|
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
i
),
fcrtl
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
i
),
reg
);
}
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
i
),
reg
);
/* Configure pause time */
reg
=
hw
->
fc
.
pause_time
*
0x00010001
;
for
(
i
=
0
;
i
<
(
MAX_TRAFFIC_CLASS
/
2
);
i
++
)
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCTTV
(
i
),
reg
);
reg
=
hw
->
fc
.
high_water
[
i
]
<<
10
;
if
(
enabled
==
pfc_enabled_tx
||
enabled
==
pfc_enabled_full
)
reg
|=
IXGBE_FCRTH_FCEN
;
/* Configure flow control refresh threshold value */
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTV
,
hw
->
fc
.
pause_time
/
2
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
i
),
reg
);
}
return
0
;
}
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c
浏览文件 @
74e04aca
...
...
@@ -211,24 +211,42 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
*/
s32
ixgbe_dcb_config_pfc_82599
(
struct
ixgbe_hw
*
hw
,
u8
pfc_en
,
u8
*
prio_tc
)
{
u32
i
,
j
,
reg
;
u32
i
,
j
,
fcrtl
,
reg
;
u8
max_tc
=
0
;
for
(
i
=
0
;
i
<
MAX_USER_PRIORITY
;
i
++
)
/* Enable Transmit Priority Flow Control */
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCCFG
,
IXGBE_FCCFG_TFCE_PRIORITY
);
/* Enable Receive Priority Flow Control */
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_MFLCN
);
reg
|=
IXGBE_MFLCN_DPF
;
/*
* X540 supports per TC Rx priority flow control. So
* clear all TCs and only enable those that should be
* enabled.
*/
reg
&=
~
(
IXGBE_MFLCN_RPFCE_MASK
|
IXGBE_MFLCN_RFCE
);
if
(
hw
->
mac
.
type
==
ixgbe_mac_X540
)
reg
|=
pfc_en
<<
IXGBE_MFLCN_RPFCE_SHIFT
;
if
(
pfc_en
)
reg
|=
IXGBE_MFLCN_RPFCE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_MFLCN
,
reg
);
for
(
i
=
0
;
i
<
MAX_USER_PRIORITY
;
i
++
)
{
if
(
prio_tc
[
i
]
>
max_tc
)
max_tc
=
prio_tc
[
i
];
}
fcrtl
=
(
hw
->
fc
.
low_water
<<
10
)
|
IXGBE_FCRTL_XONE
;
/* Configure PFC Tx thresholds per TC */
for
(
i
=
0
;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
for
(
i
=
0
;
i
<
=
max_tc
;
i
++
)
{
int
enabled
=
0
;
if
(
i
>
max_tc
)
{
reg
=
0
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
reg
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
i
),
reg
);
continue
;
}
for
(
j
=
0
;
j
<
MAX_USER_PRIORITY
;
j
++
)
{
if
((
prio_tc
[
j
]
==
i
)
&&
(
pfc_en
&
(
1
<<
j
)))
{
enabled
=
1
;
...
...
@@ -236,50 +254,29 @@ s32 ixgbe_dcb_config_pfc_82599(struct ixgbe_hw *hw, u8 pfc_en, u8 *prio_tc)
}
}
reg
=
hw
->
fc
.
low_water
<<
10
;
if
(
enabled
)
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
reg
);
if
(
enabled
)
{
reg
=
(
hw
->
fc
.
high_water
[
i
]
<<
10
)
|
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
fcrtl
);
}
else
{
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_RXPBSIZE
(
i
))
-
32
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
0
);
}
reg
=
hw
->
fc
.
high_water
[
i
]
<<
10
;
if
(
enabled
)
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
i
),
reg
);
}
if
(
pfc_en
)
{
/* Configure pause time (2 TCs per register) */
reg
=
hw
->
fc
.
pause_time
|
(
hw
->
fc
.
pause_time
<<
16
);
for
(
i
=
0
;
i
<
(
MAX_TRAFFIC_CLASS
/
2
);
i
++
)
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCTTV
(
i
),
reg
);
/* Configure flow control refresh threshold value */
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTV
,
hw
->
fc
.
pause_time
/
2
);
reg
=
IXGBE_FCCFG_TFCE_PRIORITY
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCCFG
,
reg
);
/*
* Enable Receive PFC
* 82599 will always honor XOFF frames we receive when
* we are in PFC mode however X540 only honors enabled
* traffic classes.
*/
reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_MFLCN
);
reg
&=
~
IXGBE_MFLCN_RFCE
;
reg
|=
IXGBE_MFLCN_RPFCE
|
IXGBE_MFLCN_DPF
;
if
(
hw
->
mac
.
type
==
ixgbe_mac_X540
)
{
reg
&=
~
IXGBE_MFLCN_RPFCE_MASK
;
reg
|=
pfc_en
<<
IXGBE_MFLCN_RPFCE_SHIFT
;
}
for
(;
i
<
MAX_TRAFFIC_CLASS
;
i
++
)
{
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL_82599
(
i
),
0
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH_82599
(
i
),
0
);
}
IXGBE_WRITE_REG
(
hw
,
IXGBE_MFLCN
,
reg
);
/* Configure pause time (2 TCs per register) */
reg
=
hw
->
fc
.
pause_time
*
0x00010001
;
for
(
i
=
0
;
i
<
(
MAX_TRAFFIC_CLASS
/
2
);
i
++
)
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCTTV
(
i
),
reg
);
}
else
{
hw
->
mac
.
ops
.
fc_enable
(
hw
);
}
/* Configure flow control refresh threshold value */
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTV
,
hw
->
fc
.
pause_time
/
2
);
return
0
;
}
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
浏览文件 @
74e04aca
...
...
@@ -338,6 +338,8 @@ static void ixgbe_dcbnl_devreset(struct net_device *dev)
static
u8
ixgbe_dcbnl_set_all
(
struct
net_device
*
netdev
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_dcb_config
*
dcb_cfg
=
&
adapter
->
dcb_cfg
;
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
int
ret
=
DCB_NO_HW_CHG
;
int
i
;
...
...
@@ -350,32 +352,6 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
if
(
!
adapter
->
dcb_set_bitmap
)
return
ret
;
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
{
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
if
(
adapter
->
hw
.
fc
.
current_mode
!=
ixgbe_fc_pfc
)
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
current_mode
;
break
;
default:
break
;
}
adapter
->
hw
.
fc
.
requested_mode
=
ixgbe_fc_pfc
;
}
else
{
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
adapter
->
hw
.
fc
.
requested_mode
=
ixgbe_fc_none
;
break
;
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
adapter
->
hw
.
fc
.
requested_mode
=
adapter
->
last_lfc_mode
;
break
;
default:
break
;
}
}
if
(
adapter
->
dcb_set_bitmap
&
(
BIT_PG_TX
|
BIT_PG_RX
))
{
u16
refill
[
MAX_TRAFFIC_CLASS
],
max
[
MAX_TRAFFIC_CLASS
];
u8
bwg_id
[
MAX_TRAFFIC_CLASS
],
prio_type
[
MAX_TRAFFIC_CLASS
];
...
...
@@ -388,23 +364,19 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
max_frame
=
max
(
max_frame
,
IXGBE_FCOE_JUMBO_FRAME_SIZE
);
#endif
ixgbe_dcb_calculate_tc_credits
(
&
adapter
->
hw
,
&
adapter
->
dcb_cfg
,
max_frame
,
DCB_TX_CONFIG
);
ixgbe_dcb_calculate_tc_credits
(
&
adapter
->
hw
,
&
adapter
->
dcb_cfg
,
max_frame
,
DCB_RX_CONFIG
);
ixgbe_dcb_calculate_tc_credits
(
hw
,
dcb_cfg
,
max_frame
,
DCB_TX_CONFIG
);
ixgbe_dcb_calculate_tc_credits
(
hw
,
dcb_cfg
,
max_frame
,
DCB_RX_CONFIG
);
ixgbe_dcb_unpack_refill
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
refill
);
ixgbe_dcb_unpack_max
(
&
adapter
->
dcb_cfg
,
max
);
ixgbe_dcb_unpack_bwgid
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
bwg_id
);
ixgbe_dcb_unpack_prio
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
prio_type
);
ixgbe_dcb_unpack_map
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
prio_tc
);
ixgbe_dcb_unpack_refill
(
dcb_cfg
,
DCB_TX_CONFIG
,
refill
);
ixgbe_dcb_unpack_max
(
dcb_cfg
,
max
);
ixgbe_dcb_unpack_bwgid
(
dcb_cfg
,
DCB_TX_CONFIG
,
bwg_id
);
ixgbe_dcb_unpack_prio
(
dcb_cfg
,
DCB_TX_CONFIG
,
prio_type
);
ixgbe_dcb_unpack_map
(
dcb_cfg
,
DCB_TX_CONFIG
,
prio_tc
);
ixgbe_dcb_hw_ets_config
(
&
adapter
->
hw
,
refill
,
max
,
bwg_id
,
prio_type
,
prio_tc
);
ixgbe_dcb_hw_ets_config
(
hw
,
refill
,
max
,
bwg_id
,
prio_type
,
prio_tc
);
for
(
i
=
0
;
i
<
IEEE_8021QAZ_MAX_TCS
;
i
++
)
netdev_set_prio_tc_map
(
netdev
,
i
,
prio_tc
[
i
]);
...
...
@@ -413,19 +385,21 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
}
if
(
adapter
->
dcb_set_bitmap
&
BIT_PFC
)
{
u8
pfc_en
;
u8
prio_tc
[
MAX_USER_PRIORITY
];
if
(
dcb_cfg
->
pfc_mode_enable
)
{
u8
pfc_en
;
u8
prio_tc
[
MAX_USER_PRIORITY
];
ixgbe_dcb_unpack_map
(
dcb_cfg
,
DCB_TX_CONFIG
,
prio_tc
);
ixgbe_dcb_unpack_pfc
(
dcb_cfg
,
&
pfc_en
);
ixgbe_dcb_hw_pfc_config
(
hw
,
pfc_en
,
prio_tc
);
}
else
{
hw
->
mac
.
ops
.
fc_enable
(
hw
);
}
ixgbe_dcb_unpack_map
(
&
adapter
->
dcb_cfg
,
DCB_TX_CONFIG
,
prio_tc
);
ixgbe_dcb_unpack_pfc
(
&
adapter
->
dcb_cfg
,
&
pfc_en
);
ixgbe_dcb_hw_pfc_config
(
&
adapter
->
hw
,
pfc_en
,
prio_tc
);
if
(
ret
!=
DCB_HW_CHG_RST
)
ret
=
DCB_HW_CHG
;
}
ixgbe_set_rx_drop_en
(
adapter
);
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
)
adapter
->
hw
.
fc
.
current_mode
=
ixgbe_fc_pfc
;
ret
=
DCB_HW_CHG
;
}
#ifdef IXGBE_FCOE
/* Reprogam FCoE hardware offloads when the traffic class
...
...
@@ -647,7 +621,9 @@ static int ixgbe_dcbnl_ieee_setpfc(struct net_device *dev,
struct
ieee_pfc
*
pfc
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
u8
*
prio_tc
;
int
err
;
if
(
!
(
adapter
->
dcbx_cap
&
DCB_CAP_DCBX_VER_IEEE
))
return
-
EINVAL
;
...
...
@@ -659,16 +635,18 @@ static int ixgbe_dcbnl_ieee_setpfc(struct net_device *dev,
return
-
ENOMEM
;
}
if
(
pfc
->
pfc_en
)
{
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
current_mode
;
adapter
->
hw
.
fc
.
current_mode
=
ixgbe_fc_pfc
;
}
else
{
adapter
->
hw
.
fc
.
current_mode
=
adapter
->
last_lfc_mode
;
}
prio_tc
=
adapter
->
ixgbe_ieee_ets
->
prio_tc
;
memcpy
(
adapter
->
ixgbe_ieee_pfc
,
pfc
,
sizeof
(
*
adapter
->
ixgbe_ieee_pfc
));
return
ixgbe_dcb_hw_pfc_config
(
&
adapter
->
hw
,
pfc
->
pfc_en
,
prio_tc
);
/* Enable link flow control parameters if PFC is disabled */
if
(
pfc
->
pfc_en
)
err
=
ixgbe_dcb_hw_pfc_config
(
hw
,
pfc
->
pfc_en
,
prio_tc
);
else
err
=
hw
->
mac
.
ops
.
fc_enable
(
hw
);
ixgbe_set_rx_drop_en
(
adapter
);
return
err
;
}
static
int
ixgbe_dcbnl_ieee_setapp
(
struct
net_device
*
dev
,
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
浏览文件 @
74e04aca
...
...
@@ -391,11 +391,6 @@ static void ixgbe_get_pauseparam(struct net_device *netdev,
}
else
if
(
hw
->
fc
.
current_mode
==
ixgbe_fc_full
)
{
pause
->
rx_pause
=
1
;
pause
->
tx_pause
=
1
;
#ifdef CONFIG_DCB
}
else
if
(
hw
->
fc
.
current_mode
==
ixgbe_fc_pfc
)
{
pause
->
rx_pause
=
0
;
pause
->
tx_pause
=
0
;
#endif
}
}
...
...
@@ -404,21 +399,14 @@ static int ixgbe_set_pauseparam(struct net_device *netdev,
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
ixgbe_fc_info
fc
;
struct
ixgbe_fc_info
fc
=
hw
->
fc
;
#ifdef CONFIG_DCB
if
(
adapter
->
dcb_cfg
.
pfc_mode_enable
||
((
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
&&
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)))
/* 82598 does no support link flow control with DCB enabled */
if
((
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
&&
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
))
return
-
EINVAL
;
#endif
fc
=
hw
->
fc
;
if
(
pause
->
autoneg
!=
AUTONEG_ENABLE
)
fc
.
disable_fc_autoneg
=
true
;
else
fc
.
disable_fc_autoneg
=
false
;
fc
.
disable_fc_autoneg
=
(
pause
->
autoneg
!=
AUTONEG_ENABLE
);
if
((
pause
->
rx_pause
&&
pause
->
tx_pause
)
||
pause
->
autoneg
)
fc
.
requested_mode
=
ixgbe_fc_full
;
...
...
@@ -426,14 +414,8 @@ static int ixgbe_set_pauseparam(struct net_device *netdev,
fc
.
requested_mode
=
ixgbe_fc_rx_pause
;
else
if
(
!
pause
->
rx_pause
&&
pause
->
tx_pause
)
fc
.
requested_mode
=
ixgbe_fc_tx_pause
;
else
if
(
!
pause
->
rx_pause
&&
!
pause
->
tx_pause
)
fc
.
requested_mode
=
ixgbe_fc_none
;
else
return
-
EINVAL
;
#ifdef CONFIG_DCB
adapter
->
last_lfc_mode
=
fc
.
requested_mode
;
#endif
fc
.
requested_mode
=
ixgbe_fc_none
;
/* if the thing changed then we'll update and use new autoneg */
if
(
memcmp
(
&
fc
,
&
hw
->
fc
,
sizeof
(
struct
ixgbe_fc_info
)))
{
...
...
@@ -2714,6 +2696,46 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
return
ret
;
}
static
int
ixgbe_get_ts_info
(
struct
net_device
*
dev
,
struct
ethtool_ts_info
*
info
)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
switch
(
adapter
->
hw
.
mac
.
type
)
{
#ifdef CONFIG_IXGBE_PTP
case
ixgbe_mac_X540
:
case
ixgbe_mac_82599EB
:
info
->
so_timestamping
=
SOF_TIMESTAMPING_TX_HARDWARE
|
SOF_TIMESTAMPING_RX_HARDWARE
|
SOF_TIMESTAMPING_RAW_HARDWARE
;
if
(
adapter
->
ptp_clock
)
info
->
phc_index
=
ptp_clock_index
(
adapter
->
ptp_clock
);
else
info
->
phc_index
=
-
1
;
info
->
tx_types
=
(
1
<<
HWTSTAMP_TX_OFF
)
|
(
1
<<
HWTSTAMP_TX_ON
);
info
->
rx_filters
=
(
1
<<
HWTSTAMP_FILTER_NONE
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V1_L4_SYNC
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V2_SYNC
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V2_DELAY_REQ
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V2_EVENT
)
|
(
1
<<
HWTSTAMP_FILTER_SOME
);
break
;
#endif
/* CONFIG_IXGBE_PTP */
default:
return
ethtool_op_get_ts_info
(
dev
,
info
);
break
;
}
return
0
;
}
static
const
struct
ethtool_ops
ixgbe_ethtool_ops
=
{
.
get_settings
=
ixgbe_get_settings
,
.
set_settings
=
ixgbe_set_settings
,
...
...
@@ -2742,6 +2764,7 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
.
set_coalesce
=
ixgbe_set_coalesce
,
.
get_rxnfc
=
ixgbe_get_rxnfc
,
.
set_rxnfc
=
ixgbe_set_rxnfc
,
.
get_ts_info
=
ixgbe_get_ts_info
,
};
void
ixgbe_set_ethtool_ops
(
struct
net_device
*
netdev
)
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
浏览文件 @
74e04aca
...
...
@@ -63,8 +63,8 @@ static char ixgbe_default_device_descr[] =
"Intel(R) 10 Gigabit Network Connection"
;
#endif
#define MAJ 3
#define MIN
8
#define BUILD
21
#define MIN
9
#define BUILD
15
#define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \
__stringify(BUILD) "-k"
const
char
ixgbe_driver_version
[]
=
DRV_VERSION
;
...
...
@@ -610,39 +610,50 @@ void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *ring,
/* tx_buffer must be completely set up in the transmit path */
}
static
void
ixgbe_update_xoff_r
eceived
(
struct
ixgbe_adapter
*
adapter
)
static
void
ixgbe_update_xoff_r
x_lfc
(
struct
ixgbe_adapter
*
adapter
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
ixgbe_hw_stats
*
hwstats
=
&
adapter
->
stats
;
u32
data
=
0
;
u32
xoff
[
8
]
=
{
0
};
int
i
;
u32
data
;
if
((
hw
->
fc
.
current_mode
==
ixgbe_fc_full
)
||
(
hw
->
fc
.
current_mode
==
ixgbe_fc_rx_pause
))
{
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
data
=
IXGBE_READ_REG
(
hw
,
IXGBE_LXOFFRXC
);
break
;
default:
data
=
IXGBE_READ_REG
(
hw
,
IXGBE_LXOFFRXCNT
);
}
hwstats
->
lxoffrxc
+=
data
;
if
((
hw
->
fc
.
current_mode
!=
ixgbe_fc_full
)
&&
(
hw
->
fc
.
current_mode
!=
ixgbe_fc_rx_pause
))
return
;
/* refill credits (no tx hang) if we received xoff */
if
(
!
data
)
return
;
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82598EB
:
data
=
IXGBE_READ_REG
(
hw
,
IXGBE_LXOFFRXC
);
break
;
default:
data
=
IXGBE_READ_REG
(
hw
,
IXGBE_LXOFFRXCNT
);
}
hwstats
->
lxoffrxc
+=
data
;
for
(
i
=
0
;
i
<
adapter
->
num_tx_queues
;
i
++
)
clear_bit
(
__IXGBE_HANG_CHECK_ARMED
,
&
adapter
->
tx_ring
[
i
]
->
state
);
/* refill credits (no tx hang) if we received xoff */
if
(
!
data
)
return
;
}
else
if
(((
adapter
->
dcbx_cap
&
DCB_CAP_DCBX_VER_CEE
)
&&
!
(
adapter
->
dcb_cfg
.
pfc_mode_enable
))
||
((
adapter
->
dcbx_cap
&
DCB_CAP_DCBX_VER_IEEE
)
&&
adapter
->
ixgbe_ieee_pfc
&&
!
(
adapter
->
ixgbe_ieee_pfc
->
pfc_en
)))
for
(
i
=
0
;
i
<
adapter
->
num_tx_queues
;
i
++
)
clear_bit
(
__IXGBE_HANG_CHECK_ARMED
,
&
adapter
->
tx_ring
[
i
]
->
state
);
}
static
void
ixgbe_update_xoff_received
(
struct
ixgbe_adapter
*
adapter
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
ixgbe_hw_stats
*
hwstats
=
&
adapter
->
stats
;
u32
xoff
[
8
]
=
{
0
};
int
i
;
bool
pfc_en
=
adapter
->
dcb_cfg
.
pfc_mode_enable
;
if
(
adapter
->
ixgbe_ieee_pfc
)
pfc_en
|=
!!
(
adapter
->
ixgbe_ieee_pfc
->
pfc_en
);
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
||
!
pfc_en
)
{
ixgbe_update_xoff_rx_lfc
(
adapter
);
return
;
}
/* update stats for each tc, only valid with PFC enabled */
for
(
i
=
0
;
i
<
MAX_TX_PACKET_BUFFERS
;
i
++
)
{
...
...
@@ -778,6 +789,13 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_q_vector *q_vector,
total_bytes
+=
tx_buffer
->
bytecount
;
total_packets
+=
tx_buffer
->
gso_segs
;
#ifdef CONFIG_IXGBE_PTP
if
(
unlikely
(
tx_buffer
->
tx_flags
&
IXGBE_TX_FLAGS_TSTAMP
))
ixgbe_ptp_tx_hwtstamp
(
q_vector
,
tx_buffer
->
skb
);
#endif
/* free the skb */
dev_kfree_skb_any
(
tx_buffer
->
skb
);
...
...
@@ -1378,6 +1396,11 @@ static void ixgbe_process_skb_fields(struct ixgbe_ring *rx_ring,
ixgbe_rx_checksum
(
rx_ring
,
rx_desc
,
skb
);
#ifdef CONFIG_IXGBE_PTP
if
(
ixgbe_test_staterr
(
rx_desc
,
IXGBE_RXDADV_STAT_TS
))
ixgbe_ptp_rx_hwtstamp
(
rx_ring
->
q_vector
,
skb
);
#endif
if
(
ixgbe_test_staterr
(
rx_desc
,
IXGBE_RXD_STAT_VP
))
{
u16
vid
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
__vlan_hwaccel_put_tag
(
skb
,
vid
);
...
...
@@ -2299,6 +2322,9 @@ static irqreturn_t ixgbe_msix_other(int irq, void *data)
}
ixgbe_check_fan_failure
(
adapter
,
eicr
);
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_check_pps_event
(
adapter
,
eicr
);
#endif
/* re-enable the original interrupt state, no lsc, no queues */
if
(
!
test_bit
(
__IXGBE_DOWN
,
&
adapter
->
state
))
...
...
@@ -2491,6 +2517,9 @@ static irqreturn_t ixgbe_intr(int irq, void *data)
}
ixgbe_check_fan_failure
(
adapter
,
eicr
);
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_check_pps_event
(
adapter
,
eicr
);
#endif
/* would disable interrupts here but EIAM disabled it */
napi_schedule
(
&
q_vector
->
napi
);
...
...
@@ -2760,6 +2789,61 @@ static void ixgbe_configure_tx(struct ixgbe_adapter *adapter)
ixgbe_configure_tx_ring
(
adapter
,
adapter
->
tx_ring
[
i
]);
}
static
void
ixgbe_enable_rx_drop
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
ring
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
u8
reg_idx
=
ring
->
reg_idx
;
u32
srrctl
=
IXGBE_READ_REG
(
hw
,
IXGBE_SRRCTL
(
reg_idx
));
srrctl
|=
IXGBE_SRRCTL_DROP_EN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_SRRCTL
(
reg_idx
),
srrctl
);
}
static
void
ixgbe_disable_rx_drop
(
struct
ixgbe_adapter
*
adapter
,
struct
ixgbe_ring
*
ring
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
u8
reg_idx
=
ring
->
reg_idx
;
u32
srrctl
=
IXGBE_READ_REG
(
hw
,
IXGBE_SRRCTL
(
reg_idx
));
srrctl
&=
~
IXGBE_SRRCTL_DROP_EN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_SRRCTL
(
reg_idx
),
srrctl
);
}
#ifdef CONFIG_IXGBE_DCB
void
ixgbe_set_rx_drop_en
(
struct
ixgbe_adapter
*
adapter
)
#else
static
void
ixgbe_set_rx_drop_en
(
struct
ixgbe_adapter
*
adapter
)
#endif
{
int
i
;
bool
pfc_en
=
adapter
->
dcb_cfg
.
pfc_mode_enable
;
if
(
adapter
->
ixgbe_ieee_pfc
)
pfc_en
|=
!!
(
adapter
->
ixgbe_ieee_pfc
->
pfc_en
);
/*
* We should set the drop enable bit if:
* SR-IOV is enabled
* or
* Number of Rx queues > 1 and flow control is disabled
*
* This allows us to avoid head of line blocking for security
* and performance reasons.
*/
if
(
adapter
->
num_vfs
||
(
adapter
->
num_rx_queues
>
1
&&
!
(
adapter
->
hw
.
fc
.
current_mode
&
ixgbe_fc_tx_pause
)
&&
!
pfc_en
))
{
for
(
i
=
0
;
i
<
adapter
->
num_rx_queues
;
i
++
)
ixgbe_enable_rx_drop
(
adapter
,
adapter
->
rx_ring
[
i
]);
}
else
{
for
(
i
=
0
;
i
<
adapter
->
num_rx_queues
;
i
++
)
ixgbe_disable_rx_drop
(
adapter
,
adapter
->
rx_ring
[
i
]);
}
}
#define IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT 2
static
void
ixgbe_configure_srrctl
(
struct
ixgbe_adapter
*
adapter
,
...
...
@@ -4403,9 +4487,6 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
/* default flow control settings */
hw
->
fc
.
requested_mode
=
ixgbe_fc_full
;
hw
->
fc
.
current_mode
=
ixgbe_fc_full
;
/* init for ethtool output */
#ifdef CONFIG_DCB
adapter
->
last_lfc_mode
=
hw
->
fc
.
current_mode
;
#endif
ixgbe_pbthresh_setup
(
adapter
);
hw
->
fc
.
pause_time
=
IXGBE_DEFAULT_FCPAUSE
;
hw
->
fc
.
send_xon
=
true
;
...
...
@@ -5268,8 +5349,10 @@ static void ixgbe_watchdog_update_link(struct ixgbe_adapter *adapter)
if
(
adapter
->
ixgbe_ieee_pfc
)
pfc_en
|=
!!
(
adapter
->
ixgbe_ieee_pfc
->
pfc_en
);
if
(
link_up
&&
!
((
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
&&
pfc_en
))
if
(
link_up
&&
!
((
adapter
->
flags
&
IXGBE_FLAG_DCB_ENABLED
)
&&
pfc_en
))
{
hw
->
mac
.
ops
.
fc_enable
(
hw
);
ixgbe_set_rx_drop_en
(
adapter
);
}
if
(
link_up
||
time_after
(
jiffies
,
(
adapter
->
link_check_timeout
+
...
...
@@ -5322,6 +5405,11 @@ static void ixgbe_watchdog_link_is_up(struct ixgbe_adapter *adapter)
flow_rx
=
false
;
break
;
}
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_start_cyclecounter
(
adapter
);
#endif
e_info
(
drv
,
"NIC Link is Up %s, Flow Control: %s
\n
"
,
(
link_speed
==
IXGBE_LINK_SPEED_10GB_FULL
?
"10 Gbps"
:
...
...
@@ -5359,6 +5447,10 @@ static void ixgbe_watchdog_link_is_down(struct ixgbe_adapter *adapter)
if
(
ixgbe_is_sfp
(
hw
)
&&
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
adapter
->
flags2
|=
IXGBE_FLAG2_SEARCH_FOR_SFP
;
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_start_cyclecounter
(
adapter
);
#endif
e_info
(
drv
,
"NIC Link is Down
\n
"
);
netif_carrier_off
(
netdev
);
}
...
...
@@ -5658,6 +5750,9 @@ static void ixgbe_service_task(struct work_struct *work)
ixgbe_watchdog_subtask
(
adapter
);
ixgbe_fdir_reinit_subtask
(
adapter
);
ixgbe_check_hang_subtask
(
adapter
);
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_overflow_check
(
adapter
);
#endif
ixgbe_service_event_complete
(
adapter
);
}
...
...
@@ -5808,6 +5903,11 @@ static __le32 ixgbe_tx_cmd_type(u32 tx_flags)
if
(
tx_flags
&
IXGBE_TX_FLAGS_HW_VLAN
)
cmd_type
|=
cpu_to_le32
(
IXGBE_ADVTXD_DCMD_VLE
);
#ifdef CONFIG_IXGBE_PTP
if
(
tx_flags
&
IXGBE_TX_FLAGS_TSTAMP
)
cmd_type
|=
cpu_to_le32
(
IXGBE_ADVTXD_MAC_TSTAMP
);
#endif
/* set segmentation enable bits for TSO/FSO */
#ifdef IXGBE_FCOE
if
(
tx_flags
&
(
IXGBE_TX_FLAGS_TSO
|
IXGBE_TX_FLAGS_FSO
))
...
...
@@ -6198,6 +6298,15 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
tx_flags
|=
IXGBE_TX_FLAGS_SW_VLAN
;
}
skb_tx_timestamp
(
skb
);
#ifdef CONFIG_IXGBE_PTP
if
(
unlikely
(
skb_shinfo
(
skb
)
->
tx_flags
&
SKBTX_HW_TSTAMP
))
{
skb_shinfo
(
skb
)
->
tx_flags
|=
SKBTX_IN_PROGRESS
;
tx_flags
|=
IXGBE_TX_FLAGS_TSTAMP
;
}
#endif
#ifdef CONFIG_PCI_IOV
/*
* Use the l2switch_enable flag - would be false if the DMA
...
...
@@ -6350,7 +6459,14 @@ static int ixgbe_ioctl(struct net_device *netdev, struct ifreq *req, int cmd)
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
return
mdio_mii_ioctl
(
&
adapter
->
hw
.
phy
.
mdio
,
if_mii
(
req
),
cmd
);
switch
(
cmd
)
{
#ifdef CONFIG_IXGBE_PTP
case
SIOCSHWTSTAMP
:
return
ixgbe_ptp_hwtstamp_ioctl
(
adapter
,
req
,
cmd
);
#endif
default:
return
mdio_mii_ioctl
(
&
adapter
->
hw
.
phy
.
mdio
,
if_mii
(
req
),
cmd
);
}
}
/**
...
...
@@ -6542,15 +6658,17 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
if
(
tc
)
{
netdev_set_num_tc
(
dev
,
tc
);
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
current_mode
;
adapter
->
flags
|=
IXGBE_FLAG_DCB_ENABLED
;
adapter
->
flags
&=
~
IXGBE_FLAG_FDIR_HASH_CAPABLE
;
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
{
adapter
->
last_lfc_mode
=
adapter
->
hw
.
fc
.
requested_mode
;
adapter
->
hw
.
fc
.
requested_mode
=
ixgbe_fc_none
;
}
}
else
{
netdev_reset_tc
(
dev
);
adapter
->
hw
.
fc
.
requested_mode
=
adapter
->
last_lfc_mode
;
if
(
adapter
->
hw
.
mac
.
type
==
ixgbe_mac_82598EB
)
adapter
->
hw
.
fc
.
requested_mode
=
adapter
->
last_lfc_mode
;
adapter
->
flags
&=
~
IXGBE_FLAG_DCB_ENABLED
;
adapter
->
flags
|=
IXGBE_FLAG_FDIR_HASH_CAPABLE
;
...
...
@@ -7135,6 +7253,10 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
device_set_wakeup_enable
(
&
adapter
->
pdev
->
dev
,
adapter
->
wol
);
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_init
(
adapter
);
#endif
/* CONFIG_IXGBE_PTP*/
/* save off EEPROM version number */
hw
->
eeprom
.
ops
.
read
(
hw
,
0x2e
,
&
adapter
->
eeprom_verh
);
hw
->
eeprom
.
ops
.
read
(
hw
,
0x2d
,
&
adapter
->
eeprom_verl
);
...
...
@@ -7222,8 +7344,10 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
e_dev_info
(
"%s
\n
"
,
ixgbe_default_device_descr
);
cards_found
++
;
#ifdef CONFIG_IXGBE_HWMON
if
(
ixgbe_sysfs_init
(
adapter
))
e_err
(
probe
,
"failed to allocate sysfs resources
\n
"
);
#endif
/* CONFIG_IXGBE_HWMON */
return
0
;
...
...
@@ -7263,6 +7387,10 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev)
set_bit
(
__IXGBE_DOWN
,
&
adapter
->
state
);
cancel_work_sync
(
&
adapter
->
service_task
);
#ifdef CONFIG_IXGBE_PTP
ixgbe_ptp_stop
(
adapter
);
#endif
#ifdef CONFIG_IXGBE_DCA
if
(
adapter
->
flags
&
IXGBE_FLAG_DCA_ENABLED
)
{
adapter
->
flags
&=
~
IXGBE_FLAG_DCA_ENABLED
;
...
...
@@ -7271,7 +7399,9 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev)
}
#endif
#ifdef CONFIG_IXGBE_HWMON
ixgbe_sysfs_exit
(
adapter
);
#endif
/* CONFIG_IXGBE_HWMON */
#ifdef IXGBE_FCOE
if
(
adapter
->
flags
&
IXGBE_FLAG_FCOE_ENABLED
)
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
0 → 100644
浏览文件 @
74e04aca
此差异已折叠。
点击以展开。
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
浏览文件 @
74e04aca
...
...
@@ -544,13 +544,18 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
retval
=
ixgbe_read_mbx
(
hw
,
msgbuf
,
mbx_size
,
vf
);
if
(
retval
)
if
(
retval
)
{
pr_err
(
"Error receiving message from VF
\n
"
);
return
retval
;
}
/* this is a message we already processed, do nothing */
if
(
msgbuf
[
0
]
&
(
IXGBE_VT_MSGTYPE_ACK
|
IXGBE_VT_MSGTYPE_NACK
))
return
retval
;
/* flush the ack before we write any messages back */
IXGBE_WRITE_FLUSH
(
hw
);
/*
* until the vf completes a virtual function reset it should not be
* allowed to start any configuration.
...
...
@@ -635,14 +640,14 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
}
break
;
case
IXGBE_VF_SET_MACVLAN
:
if
(
adapter
->
vfinfo
[
vf
].
pf_set_mac
)
{
index
=
(
msgbuf
[
0
]
&
IXGBE_VT_MSGINFO_MASK
)
>>
IXGBE_VT_MSGINFO_SHIFT
;
if
(
adapter
->
vfinfo
[
vf
].
pf_set_mac
&&
index
>
0
)
{
e_warn
(
drv
,
"VF %d requested MACVLAN filter but is "
"administratively denied
\n
"
,
vf
);
retval
=
-
1
;
break
;
}
index
=
(
msgbuf
[
0
]
&
IXGBE_VT_MSGINFO_MASK
)
>>
IXGBE_VT_MSGINFO_SHIFT
;
/*
* If the VF is allowed to set MAC filters then turn off
* anti-spoofing to avoid false positives. An index
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c
浏览文件 @
74e04aca
...
...
@@ -37,12 +37,7 @@
#include <linux/netdevice.h>
#include <linux/hwmon.h>
/*
* This file provides a sysfs interface to export information from the
* driver. The information presented is READ-ONLY.
*/
#ifdef CONFIG_IXGBE_HWMON
/* hwmon callback functions */
static
ssize_t
ixgbe_hwmon_show_location
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
...
...
@@ -162,17 +157,13 @@ static int ixgbe_add_hwmon_attr(struct ixgbe_adapter *adapter,
return
rc
;
}
#endif
/* CONFIG_IXGBE_HWMON */
static
void
ixgbe_sysfs_del_adapter
(
struct
ixgbe_adapter
*
adapter
)
{
#ifdef CONFIG_IXGBE_HWMON
int
i
;
#endif
/* CONFIG_IXGBE_HWMON */
if
(
adapter
==
NULL
)
return
;
#ifdef CONFIG_IXGBE_HWMON
for
(
i
=
0
;
i
<
adapter
->
ixgbe_hwmon_buff
.
n_hwmon
;
i
++
)
{
device_remove_file
(
&
adapter
->
pdev
->
dev
,
...
...
@@ -183,12 +174,6 @@ static void ixgbe_sysfs_del_adapter(struct ixgbe_adapter *adapter)
if
(
adapter
->
ixgbe_hwmon_buff
.
device
)
hwmon_device_unregister
(
adapter
->
ixgbe_hwmon_buff
.
device
);
#endif
/* CONFIG_IXGBE_HWMON */
if
(
adapter
->
info_kobj
!=
NULL
)
{
kobject_put
(
adapter
->
info_kobj
);
adapter
->
info_kobj
=
NULL
;
}
}
/* called from ixgbe_main.c */
...
...
@@ -200,32 +185,19 @@ void ixgbe_sysfs_exit(struct ixgbe_adapter *adapter)
/* called from ixgbe_main.c */
int
ixgbe_sysfs_init
(
struct
ixgbe_adapter
*
adapter
)
{
#ifdef CONFIG_IXGBE_HWMON
struct
hwmon_buff
*
ixgbe_hwmon
=
&
adapter
->
ixgbe_hwmon_buff
;
unsigned
int
i
;
int
n_attrs
;
#endif
/* CONFIG_IXGBE_HWMON */
struct
net_device
*
netdev
=
adapter
->
netdev
;
int
rc
=
0
;
/* create info kobj and attribute listings in kobj */
adapter
->
info_kobj
=
kobject_create_and_add
(
"info"
,
&
netdev
->
dev
.
kobj
);
if
(
adapter
->
info_kobj
==
NULL
)
{
rc
=
-
ENOMEM
;
goto
err
;
}
#ifdef CONFIG_IXGBE_HWMON
/* If this method isn't defined we don't support thermals */
if
(
adapter
->
hw
.
mac
.
ops
.
init_thermal_sensor_thresh
==
NULL
)
{
rc
=
-
EPERM
;
goto
err
;
goto
exit
;
}
/* Don't create thermal hwmon interface if no sensors present */
rc
=
adapter
->
hw
.
mac
.
ops
.
init_thermal_sensor_thresh
(
&
adapter
->
hw
);
if
(
rc
)
goto
err
;
if
(
adapter
->
hw
.
mac
.
ops
.
init_thermal_sensor_thresh
(
&
adapter
->
hw
))
goto
exit
;
/*
* Allocation space for max attributs
...
...
@@ -261,7 +233,6 @@ int ixgbe_sysfs_init(struct ixgbe_adapter *adapter)
if
(
rc
)
goto
err
;
}
#endif
/* CONFIG_IXGBE_HWMON */
goto
exit
;
...
...
@@ -270,4 +241,5 @@ int ixgbe_sysfs_init(struct ixgbe_adapter *adapter)
exit:
return
rc
;
}
#endif
/* CONFIG_IXGBE_HWMON */
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
浏览文件 @
74e04aca
...
...
@@ -824,6 +824,8 @@ struct ixgbe_thermal_sensor_data {
#define IXGBE_TRGTTIMH0 0x08C28
/* Target Time Register 0 High - RW */
#define IXGBE_TRGTTIML1 0x08C2C
/* Target Time Register 1 Low - RW */
#define IXGBE_TRGTTIMH1 0x08C30
/* Target Time Register 1 High - RW */
#define IXGBE_CLKTIML 0x08C34
/* Clock Out Time Register Low - RW */
#define IXGBE_CLKTIMH 0x08C38
/* Clock Out Time Register High - RW */
#define IXGBE_FREQOUT0 0x08C34
/* Frequency Out 0 Control register - RW */
#define IXGBE_FREQOUT1 0x08C38
/* Frequency Out 1 Control register - RW */
#define IXGBE_AUXSTMPL0 0x08C3C
/* Auxiliary Time Stamp 0 register Low - RO */
...
...
@@ -1309,6 +1311,7 @@ enum {
#define IXGBE_EICR_LINKSEC 0x00200000
/* PN Threshold */
#define IXGBE_EICR_MNG 0x00400000
/* Manageability Event Interrupt */
#define IXGBE_EICR_TS 0x00800000
/* Thermal Sensor Event */
#define IXGBE_EICR_TIMESYNC 0x01000000
/* Timesync Event */
#define IXGBE_EICR_GPI_SDP0 0x01000000
/* Gen Purpose Interrupt on SDP0 */
#define IXGBE_EICR_GPI_SDP1 0x02000000
/* Gen Purpose Interrupt on SDP1 */
#define IXGBE_EICR_GPI_SDP2 0x04000000
/* Gen Purpose Interrupt on SDP2 */
...
...
@@ -1326,6 +1329,7 @@ enum {
#define IXGBE_EICS_MAILBOX IXGBE_EICR_MAILBOX
/* VF to PF Mailbox Int */
#define IXGBE_EICS_LSC IXGBE_EICR_LSC
/* Link Status Change */
#define IXGBE_EICS_MNG IXGBE_EICR_MNG
/* MNG Event Interrupt */
#define IXGBE_EICS_TIMESYNC IXGBE_EICR_TIMESYNC
/* Timesync Event */
#define IXGBE_EICS_GPI_SDP0 IXGBE_EICR_GPI_SDP0
/* SDP0 Gen Purpose Int */
#define IXGBE_EICS_GPI_SDP1 IXGBE_EICR_GPI_SDP1
/* SDP1 Gen Purpose Int */
#define IXGBE_EICS_GPI_SDP2 IXGBE_EICR_GPI_SDP2
/* SDP2 Gen Purpose Int */
...
...
@@ -1344,6 +1348,7 @@ enum {
#define IXGBE_EIMS_LSC IXGBE_EICR_LSC
/* Link Status Change */
#define IXGBE_EIMS_MNG IXGBE_EICR_MNG
/* MNG Event Interrupt */
#define IXGBE_EIMS_TS IXGBE_EICR_TS
/* Thermel Sensor Event */
#define IXGBE_EIMS_TIMESYNC IXGBE_EICR_TIMESYNC
/* Timesync Event */
#define IXGBE_EIMS_GPI_SDP0 IXGBE_EICR_GPI_SDP0
/* SDP0 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP1 IXGBE_EICR_GPI_SDP1
/* SDP1 Gen Purpose Int */
#define IXGBE_EIMS_GPI_SDP2 IXGBE_EICR_GPI_SDP2
/* SDP2 Gen Purpose Int */
...
...
@@ -1361,6 +1366,7 @@ enum {
#define IXGBE_EIMC_MAILBOX IXGBE_EICR_MAILBOX
/* VF to PF Mailbox Int */
#define IXGBE_EIMC_LSC IXGBE_EICR_LSC
/* Link Status Change */
#define IXGBE_EIMC_MNG IXGBE_EICR_MNG
/* MNG Event Interrupt */
#define IXGBE_EIMC_TIMESYNC IXGBE_EICR_TIMESYNC
/* Timesync Event */
#define IXGBE_EIMC_GPI_SDP0 IXGBE_EICR_GPI_SDP0
/* SDP0 Gen Purpose Int */
#define IXGBE_EIMC_GPI_SDP1 IXGBE_EICR_GPI_SDP1
/* SDP1 Gen Purpose Int */
#define IXGBE_EIMC_GPI_SDP2 IXGBE_EICR_GPI_SDP2
/* SDP2 Gen Purpose Int */
...
...
@@ -1501,8 +1507,10 @@ enum {
#define IXGBE_ESDP_SDP4 0x00000010
/* SDP4 Data Value */
#define IXGBE_ESDP_SDP5 0x00000020
/* SDP5 Data Value */
#define IXGBE_ESDP_SDP6 0x00000040
/* SDP6 Data Value */
#define IXGBE_ESDP_SDP0_DIR 0x00000100
/* SDP0 IO direction */
#define IXGBE_ESDP_SDP4_DIR 0x00000004
/* SDP4 IO direction */
#define IXGBE_ESDP_SDP5_DIR 0x00002000
/* SDP5 IO direction */
#define IXGBE_ESDP_SDP0_NATIVE 0x00010000
/* SDP0 Native Function */
/* LEDCTL Bit Masks */
#define IXGBE_LED_IVRT_BASE 0x00000040
...
...
@@ -1879,6 +1887,40 @@ enum {
#define IXGBE_RXDCTL_RLPML_EN 0x00008000
#define IXGBE_RXDCTL_VME 0x40000000
/* VLAN mode enable */
#define IXGBE_TSAUXC_EN_CLK 0x00000004
#define IXGBE_TSAUXC_SYNCLK 0x00000008
#define IXGBE_TSAUXC_SDP0_INT 0x00000040
#define IXGBE_TSYNCTXCTL_VALID 0x00000001
/* Tx timestamp valid */
#define IXGBE_TSYNCTXCTL_ENABLED 0x00000010
/* Tx timestamping enabled */
#define IXGBE_TSYNCRXCTL_VALID 0x00000001
/* Rx timestamp valid */
#define IXGBE_TSYNCRXCTL_TYPE_MASK 0x0000000E
/* Rx type mask */
#define IXGBE_TSYNCRXCTL_TYPE_L2_V2 0x00
#define IXGBE_TSYNCRXCTL_TYPE_L4_V1 0x02
#define IXGBE_TSYNCRXCTL_TYPE_L2_L4_V2 0x04
#define IXGBE_TSYNCRXCTL_TYPE_EVENT_V2 0x0A
#define IXGBE_TSYNCRXCTL_ENABLED 0x00000010
/* Rx Timestamping enabled */
#define IXGBE_RXMTRL_V1_CTRLT_MASK 0x000000FF
#define IXGBE_RXMTRL_V1_SYNC_MSG 0x00
#define IXGBE_RXMTRL_V1_DELAY_REQ_MSG 0x01
#define IXGBE_RXMTRL_V1_FOLLOWUP_MSG 0x02
#define IXGBE_RXMTRL_V1_DELAY_RESP_MSG 0x03
#define IXGBE_RXMTRL_V1_MGMT_MSG 0x04
#define IXGBE_RXMTRL_V2_MSGID_MASK 0x0000FF00
#define IXGBE_RXMTRL_V2_SYNC_MSG 0x0000
#define IXGBE_RXMTRL_V2_DELAY_REQ_MSG 0x0100
#define IXGBE_RXMTRL_V2_PDELAY_REQ_MSG 0x0200
#define IXGBE_RXMTRL_V2_PDELAY_RESP_MSG 0x0300
#define IXGBE_RXMTRL_V2_FOLLOWUP_MSG 0x0800
#define IXGBE_RXMTRL_V2_DELAY_RESP_MSG 0x0900
#define IXGBE_RXMTRL_V2_PDELAY_FOLLOWUP_MSG 0x0A00
#define IXGBE_RXMTRL_V2_ANNOUNCE_MSG 0x0B00
#define IXGBE_RXMTRL_V2_SIGNALING_MSG 0x0C00
#define IXGBE_RXMTRL_V2_MGMT_MSG 0x0D00
#define IXGBE_FCTRL_SBP 0x00000002
/* Store Bad Packet */
#define IXGBE_FCTRL_MPE 0x00000100
/* Multicast Promiscuous Ena*/
#define IXGBE_FCTRL_UPE 0x00000200
/* Unicast Promiscuous Ena */
...
...
@@ -2008,6 +2050,7 @@ enum {
#define IXGBE_RXDADV_STAT_FCSTAT_NODDP 0x00000010
/* 01: Ctxt w/o DDP */
#define IXGBE_RXDADV_STAT_FCSTAT_FCPRSP 0x00000020
/* 10: Recv. FCP_RSP */
#define IXGBE_RXDADV_STAT_FCSTAT_DDP 0x00000030
/* 11: Ctxt w/ DDP */
#define IXGBE_RXDADV_STAT_TS 0x00010000
/* IEEE 1588 Time Stamp */
/* PSRTYPE bit definitions */
#define IXGBE_PSRTYPE_TCPHDR 0x00000010
...
...
@@ -2285,6 +2328,7 @@ struct ixgbe_adv_tx_context_desc {
/* Adv Transmit Descriptor Config Masks */
#define IXGBE_ADVTXD_DTALEN_MASK 0x0000FFFF
/* Data buf length(bytes) */
#define IXGBE_ADVTXD_MAC_LINKSEC 0x00040000
/* Insert LinkSec */
#define IXGBE_ADVTXD_MAC_TSTAMP 0x00080000
/* IEEE 1588 Time Stamp */
#define IXGBE_ADVTXD_IPSEC_SA_INDEX_MASK 0x000003FF
/* IPSec SA index */
#define IXGBE_ADVTXD_IPSEC_ESP_LEN_MASK 0x000001FF
/* IPSec ESP length */
#define IXGBE_ADVTXD_DTYP_MASK 0x00F00000
/* DTYP mask */
...
...
@@ -2573,9 +2617,6 @@ enum ixgbe_fc_mode {
ixgbe_fc_rx_pause
,
ixgbe_fc_tx_pause
,
ixgbe_fc_full
,
#ifdef CONFIG_DCB
ixgbe_fc_pfc
,
#endif
ixgbe_fc_default
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录