Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
ca1ba7ca
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ca1ba7ca
编写于
8月 20, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-next
Conflicts: drivers/net/ethernet/intel/e1000e/netdev.c
上级
6461be3a
66f32a8b
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
445 addition
and
359 deletion
+445
-359
drivers/net/ethernet/intel/e1000e/e1000.h
drivers/net/ethernet/intel/e1000e/e1000.h
+2
-1
drivers/net/ethernet/intel/e1000e/ethtool.c
drivers/net/ethernet/intel/e1000e/ethtool.c
+5
-4
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/e1000e/netdev.c
+114
-85
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe.h
+15
-12
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
+1
-1
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
+6
-4
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+302
-252
未找到文件。
drivers/net/ethernet/intel/e1000e/e1000.h
浏览文件 @
ca1ba7ca
...
...
@@ -461,8 +461,9 @@ struct e1000_info {
#define E1000_RX_DESC_PS(R, i) \
(&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
#define E1000_RX_DESC_EXT(R, i) \
(&(((union e1000_rx_desc_extended *)((R).desc))[i]))
#define E1000_GET_DESC(R, i, type) (&(((struct type *)((R).desc))[i]))
#define E1000_RX_DESC(R, i) E1000_GET_DESC(R, i, e1000_rx_desc)
#define E1000_TX_DESC(R, i) E1000_GET_DESC(R, i, e1000_tx_desc)
#define E1000_CONTEXT_DESC(R, i) E1000_GET_DESC(R, i, e1000_context_desc)
...
...
drivers/net/ethernet/intel/e1000e/ethtool.c
浏览文件 @
ca1ba7ca
...
...
@@ -1195,7 +1195,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
goto
err_nomem
;
}
rx_ring
->
size
=
rx_ring
->
count
*
sizeof
(
struct
e1000_rx_desc
);
rx_ring
->
size
=
rx_ring
->
count
*
sizeof
(
union
e1000_rx_desc_extended
);
rx_ring
->
desc
=
dma_alloc_coherent
(
&
pdev
->
dev
,
rx_ring
->
size
,
&
rx_ring
->
dma
,
GFP_KERNEL
);
if
(
!
rx_ring
->
desc
)
{
...
...
@@ -1221,7 +1221,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
ew32
(
RCTL
,
rctl
);
for
(
i
=
0
;
i
<
rx_ring
->
count
;
i
++
)
{
struct
e1000_rx_desc
*
rx_desc
=
E1000_RX_DESC
(
*
rx_ring
,
i
)
;
union
e1000_rx_desc_extended
*
rx_desc
;
struct
sk_buff
*
skb
;
skb
=
alloc_skb
(
2048
+
NET_IP_ALIGN
,
GFP_KERNEL
);
...
...
@@ -1239,8 +1239,9 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
ret_val
=
8
;
goto
err_nomem
;
}
rx_desc
->
buffer_addr
=
cpu_to_le64
(
rx_ring
->
buffer_info
[
i
].
dma
);
rx_desc
=
E1000_RX_DESC_EXT
(
*
rx_ring
,
i
);
rx_desc
->
read
.
buffer_addr
=
cpu_to_le64
(
rx_ring
->
buffer_info
[
i
].
dma
);
memset
(
skb
->
data
,
0x00
,
skb
->
len
);
}
...
...
drivers/net/ethernet/intel/e1000e/netdev.c
浏览文件 @
ca1ba7ca
...
...
@@ -56,7 +56,7 @@
#define DRV_EXTRAVERSION "-k"
#define DRV_VERSION "1.
4.4
" DRV_EXTRAVERSION
#define DRV_VERSION "1.
5.1
" DRV_EXTRAVERSION
char
e1000e_driver_name
[]
=
"e1000e"
;
const
char
e1000e_driver_version
[]
=
DRV_VERSION
;
...
...
@@ -192,7 +192,7 @@ static void e1000e_dump(struct e1000_adapter *adapter)
struct
e1000_buffer
*
buffer_info
;
struct
e1000_ring
*
rx_ring
=
adapter
->
rx_ring
;
union
e1000_rx_desc_packet_split
*
rx_desc_ps
;
struct
e1000_rx_desc
*
rx_desc
;
union
e1000_rx_desc_extended
*
rx_desc
;
struct
my_u1
{
u64
a
;
u64
b
;
...
...
@@ -399,41 +399,70 @@ static void e1000e_dump(struct e1000_adapter *adapter)
break
;
default:
case
0
:
/*
Legacy Receive Descriptor
Format
/*
Extended Receive Descriptor (Read)
Format
*
* +-----------------------------------------------------+
* | Buffer Address [63:0] |
* +-----------------------------------------------------+
* | VLAN Tag | Errors | Status 0 | Packet csum | Length |
* +-----------------------------------------------------+
* 63 48 47 40 39 32 31 16 15 0
* +-----------------------------------------------------+
* 0 | Buffer Address [63:0] |
* +-----------------------------------------------------+
* 8 | Reserved |
* +-----------------------------------------------------+
*/
printk
(
KERN_INFO
"Rl[desc] [address 63:0 ] "
"[vl er S cks ln] [bi->dma ] [bi->skb] "
"<-- Legacy format
\n
"
);
for
(
i
=
0
;
rx_ring
->
desc
&&
(
i
<
rx_ring
->
count
);
i
++
)
{
rx_desc
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
printk
(
KERN_INFO
"R [desc] [buf addr 63:0 ] "
"[reserved 63:0 ] [bi->dma ] "
"[bi->skb] <-- Ext (Read) format
\n
"
);
/* Extended Receive Descriptor (Write-Back) Format
*
* 63 48 47 32 31 24 23 4 3 0
* +------------------------------------------------------+
* | RSS Hash | | | |
* 0 +-------------------+ Rsvd | Reserved | MRQ RSS |
* | Packet | IP | | | Type |
* | Checksum | Ident | | | |
* +------------------------------------------------------+
* 8 | VLAN Tag | Length | Extended Error | Extended Status |
* +------------------------------------------------------+
* 63 48 47 32 31 20 19 0
*/
printk
(
KERN_INFO
"RWB[desc] [cs ipid mrq] "
"[vt ln xe xs] "
"[bi->skb] <-- Ext (Write-Back) format
\n
"
);
for
(
i
=
0
;
i
<
rx_ring
->
count
;
i
++
)
{
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
u0
=
(
struct
my_u0
*
)
rx_desc
;
printk
(
KERN_INFO
"Rl[0x%03X] %016llX %016llX "
"%016llX %p"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u0
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u0
->
b
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
skb
);
rx_desc
=
E1000_RX_DESC_EXT
(
*
rx_ring
,
i
);
u1
=
(
struct
my_u1
*
)
rx_desc
;
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
if
(
staterr
&
E1000_RXD_STAT_DD
)
{
/* Descriptor Done */
printk
(
KERN_INFO
"RWB[0x%03X] %016llX "
"%016llX ---------------- %p"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
buffer_info
->
skb
);
}
else
{
printk
(
KERN_INFO
"R [0x%03X] %016llX "
"%016llX %016llX %p"
,
i
,
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
a
),
(
unsigned
long
long
)
le64_to_cpu
(
u1
->
b
),
(
unsigned
long
long
)
buffer_info
->
dma
,
buffer_info
->
skb
);
if
(
netif_msg_pktdata
(
adapter
))
print_hex_dump
(
KERN_INFO
,
""
,
DUMP_PREFIX_ADDRESS
,
16
,
1
,
phys_to_virt
(
buffer_info
->
dma
),
adapter
->
rx_buffer_len
,
true
);
}
if
(
i
==
rx_ring
->
next_to_use
)
printk
(
KERN_CONT
" NTU
\n
"
);
else
if
(
i
==
rx_ring
->
next_to_clean
)
printk
(
KERN_CONT
" NTC
\n
"
);
else
printk
(
KERN_CONT
"
\n
"
);
if
(
netif_msg_pktdata
(
adapter
))
print_hex_dump
(
KERN_INFO
,
""
,
DUMP_PREFIX_ADDRESS
,
16
,
1
,
phys_to_virt
(
buffer_info
->
dma
),
adapter
->
rx_buffer_len
,
true
);
}
}
...
...
@@ -576,7 +605,7 @@ static void e1000e_update_tdt_wa(struct e1000_adapter *adapter, unsigned int i)
}
/**
* e1000_alloc_rx_buffers - Replace used receive buffers
; legacy & extended
* e1000_alloc_rx_buffers - Replace used receive buffers
* @adapter: address of board private structure
**/
static
void
e1000_alloc_rx_buffers
(
struct
e1000_adapter
*
adapter
,
...
...
@@ -585,7 +614,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
struct
e1000_ring
*
rx_ring
=
adapter
->
rx_ring
;
struct
e1000_rx_desc
*
rx_desc
;
union
e1000_rx_desc_extended
*
rx_desc
;
struct
e1000_buffer
*
buffer_info
;
struct
sk_buff
*
skb
;
unsigned
int
i
;
...
...
@@ -619,8 +648,8 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
break
;
}
rx_desc
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
rx_desc
->
buffer_addr
=
cpu_to_le64
(
buffer_info
->
dma
);
rx_desc
=
E1000_RX_DESC
_EXT
(
*
rx_ring
,
i
);
rx_desc
->
read
.
buffer_addr
=
cpu_to_le64
(
buffer_info
->
dma
);
if
(
unlikely
(
!
(
i
&
(
E1000_RX_BUFFER_WRITE
-
1
))))
{
/*
...
...
@@ -761,7 +790,7 @@ static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
{
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
struct
e1000_rx_desc
*
rx_desc
;
union
e1000_rx_desc_extended
*
rx_desc
;
struct
e1000_ring
*
rx_ring
=
adapter
->
rx_ring
;
struct
e1000_buffer
*
buffer_info
;
struct
sk_buff
*
skb
;
...
...
@@ -802,8 +831,8 @@ static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
PAGE_SIZE
,
DMA_FROM_DEVICE
);
rx_desc
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
rx_desc
->
buffer_addr
=
cpu_to_le64
(
buffer_info
->
dma
);
rx_desc
=
E1000_RX_DESC
_EXT
(
*
rx_ring
,
i
);
rx_desc
->
read
.
buffer_addr
=
cpu_to_le64
(
buffer_info
->
dma
);
if
(
unlikely
(
++
i
==
rx_ring
->
count
))
i
=
0
;
...
...
@@ -841,28 +870,27 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
e1000_ring
*
rx_ring
=
adapter
->
rx_ring
;
struct
e1000_rx_desc
*
rx_desc
,
*
next_rxd
;
union
e1000_rx_desc_extended
*
rx_desc
,
*
next_rxd
;
struct
e1000_buffer
*
buffer_info
,
*
next_buffer
;
u32
length
;
u32
length
,
staterr
;
unsigned
int
i
;
int
cleaned_count
=
0
;
bool
cleaned
=
0
;
unsigned
int
total_rx_bytes
=
0
,
total_rx_packets
=
0
;
i
=
rx_ring
->
next_to_clean
;
rx_desc
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
rx_desc
=
E1000_RX_DESC_EXT
(
*
rx_ring
,
i
);
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
while
(
rx_desc
->
status
&
E1000_RXD_STAT_DD
)
{
while
(
staterr
&
E1000_RXD_STAT_DD
)
{
struct
sk_buff
*
skb
;
u8
status
;
if
(
*
work_done
>=
work_to_do
)
break
;
(
*
work_done
)
++
;
rmb
();
/* read descriptor and rx_buffer_info after status DD */
status
=
rx_desc
->
status
;
skb
=
buffer_info
->
skb
;
buffer_info
->
skb
=
NULL
;
...
...
@@ -871,7 +899,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
i
++
;
if
(
i
==
rx_ring
->
count
)
i
=
0
;
next_rxd
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
next_rxd
=
E1000_RX_DESC
_EXT
(
*
rx_ring
,
i
);
prefetch
(
next_rxd
);
next_buffer
=
&
rx_ring
->
buffer_info
[
i
];
...
...
@@ -884,7 +912,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
DMA_FROM_DEVICE
);
buffer_info
->
dma
=
0
;
length
=
le16_to_cpu
(
rx_desc
->
length
);
length
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
length
);
/*
* !EOP means multiple descriptors were used to store a single
...
...
@@ -893,7 +921,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
* next frame that _does_ have the EOP bit set, as it is by
* definition only a frame fragment
*/
if
(
unlikely
(
!
(
stat
us
&
E1000_RXD_STAT_EOP
)))
if
(
unlikely
(
!
(
stat
err
&
E1000_RXD_STAT_EOP
)))
adapter
->
flags2
|=
FLAG2_IS_DISCARDING
;
if
(
adapter
->
flags2
&
FLAG2_IS_DISCARDING
)
{
...
...
@@ -901,12 +929,12 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
e_dbg
(
"Receive packet consumed multiple buffers
\n
"
);
/* recycle */
buffer_info
->
skb
=
skb
;
if
(
stat
us
&
E1000_RXD_STAT_EOP
)
if
(
stat
err
&
E1000_RXD_STAT_EOP
)
adapter
->
flags2
&=
~
FLAG2_IS_DISCARDING
;
goto
next_desc
;
}
if
(
rx_desc
->
errors
&
E1000_RXD
_ERR_FRAME_ERR_MASK
)
{
if
(
staterr
&
E1000_RXDEXT
_ERR_FRAME_ERR_MASK
)
{
/* recycle */
buffer_info
->
skb
=
skb
;
goto
next_desc
;
...
...
@@ -944,15 +972,15 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
skb_put
(
skb
,
length
);
/* Receive Checksum Offload */
e1000_rx_checksum
(
adapter
,
(
u32
)(
status
)
|
((
u32
)(
rx_desc
->
errors
)
<<
24
),
le16_to_cpu
(
rx_desc
->
csum
),
skb
);
e1000_rx_checksum
(
adapter
,
staterr
,
le16_to_cpu
(
rx_desc
->
wb
.
lower
.
hi_dword
.
csum_ip
.
csum
),
skb
);
e1000_receive_skb
(
adapter
,
netdev
,
skb
,
status
,
rx_desc
->
special
);
e1000_receive_skb
(
adapter
,
netdev
,
skb
,
staterr
,
rx_desc
->
wb
.
upper
.
vlan
);
next_desc:
rx_desc
->
status
=
0
;
rx_desc
->
wb
.
upper
.
status_error
&=
cpu_to_le32
(
~
0xFF
)
;
/* return some buffers to hardware, one at a time is too slow */
if
(
cleaned_count
>=
E1000_RX_BUFFER_WRITE
)
{
...
...
@@ -964,6 +992,8 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
/* use prefetched values */
rx_desc
=
next_rxd
;
buffer_info
=
next_buffer
;
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
}
rx_ring
->
next_to_clean
=
i
;
...
...
@@ -1347,35 +1377,34 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
struct
e1000_ring
*
rx_ring
=
adapter
->
rx_ring
;
struct
e1000_rx_desc
*
rx_desc
,
*
next_rxd
;
union
e1000_rx_desc_extended
*
rx_desc
,
*
next_rxd
;
struct
e1000_buffer
*
buffer_info
,
*
next_buffer
;
u32
length
;
u32
length
,
staterr
;
unsigned
int
i
;
int
cleaned_count
=
0
;
bool
cleaned
=
false
;
unsigned
int
total_rx_bytes
=
0
,
total_rx_packets
=
0
;
i
=
rx_ring
->
next_to_clean
;
rx_desc
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
rx_desc
=
E1000_RX_DESC_EXT
(
*
rx_ring
,
i
);
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
while
(
rx_desc
->
status
&
E1000_RXD_STAT_DD
)
{
while
(
staterr
&
E1000_RXD_STAT_DD
)
{
struct
sk_buff
*
skb
;
u8
status
;
if
(
*
work_done
>=
work_to_do
)
break
;
(
*
work_done
)
++
;
rmb
();
/* read descriptor and rx_buffer_info after status DD */
status
=
rx_desc
->
status
;
skb
=
buffer_info
->
skb
;
buffer_info
->
skb
=
NULL
;
++
i
;
if
(
i
==
rx_ring
->
count
)
i
=
0
;
next_rxd
=
E1000_RX_DESC
(
*
rx_ring
,
i
);
next_rxd
=
E1000_RX_DESC
_EXT
(
*
rx_ring
,
i
);
prefetch
(
next_rxd
);
next_buffer
=
&
rx_ring
->
buffer_info
[
i
];
...
...
@@ -1386,23 +1415,22 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
DMA_FROM_DEVICE
);
buffer_info
->
dma
=
0
;
length
=
le16_to_cpu
(
rx_desc
->
length
);
length
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
length
);
/* errors is only valid for DD + EOP descriptors */
if
(
unlikely
((
status
&
E1000_RXD_STAT_EOP
)
&&
(
rx_desc
->
errors
&
E1000_RXD_ERR_FRAME_ERR_MASK
)))
{
/* recycle both page and skb */
buffer_info
->
skb
=
skb
;
/* an error means any chain goes out the window
* too */
if
(
rx_ring
->
rx_skb_top
)
dev_kfree_skb_irq
(
rx_ring
->
rx_skb_top
);
rx_ring
->
rx_skb_top
=
NULL
;
goto
next_desc
;
if
(
unlikely
((
staterr
&
E1000_RXD_STAT_EOP
)
&&
(
staterr
&
E1000_RXDEXT_ERR_FRAME_ERR_MASK
)))
{
/* recycle both page and skb */
buffer_info
->
skb
=
skb
;
/* an error means any chain goes out the window too */
if
(
rx_ring
->
rx_skb_top
)
dev_kfree_skb_irq
(
rx_ring
->
rx_skb_top
);
rx_ring
->
rx_skb_top
=
NULL
;
goto
next_desc
;
}
#define rxtop (rx_ring->rx_skb_top)
if
(
!
(
stat
us
&
E1000_RXD_STAT_EOP
))
{
if
(
!
(
stat
err
&
E1000_RXD_STAT_EOP
))
{
/* this descriptor is only the beginning (or middle) */
if
(
!
rxtop
)
{
/* this is the beginning of a chain */
...
...
@@ -1457,10 +1485,9 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
}
/* Receive Checksum Offload XXX recompute due to CRC strip? */
e1000_rx_checksum
(
adapter
,
(
u32
)(
status
)
|
((
u32
)(
rx_desc
->
errors
)
<<
24
),
le16_to_cpu
(
rx_desc
->
csum
),
skb
);
e1000_rx_checksum
(
adapter
,
staterr
,
le16_to_cpu
(
rx_desc
->
wb
.
lower
.
hi_dword
.
csum_ip
.
csum
),
skb
);
/* probably a little skewed due to removing CRC */
total_rx_bytes
+=
skb
->
len
;
...
...
@@ -1473,11 +1500,11 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
goto
next_desc
;
}
e1000_receive_skb
(
adapter
,
netdev
,
skb
,
stat
us
,
rx_desc
->
special
);
e1000_receive_skb
(
adapter
,
netdev
,
skb
,
stat
err
,
rx_desc
->
wb
.
upper
.
vlan
);
next_desc:
rx_desc
->
status
=
0
;
rx_desc
->
wb
.
upper
.
status_error
&=
cpu_to_le32
(
~
0xFF
)
;
/* return some buffers to hardware, one at a time is too slow */
if
(
unlikely
(
cleaned_count
>=
E1000_RX_BUFFER_WRITE
))
{
...
...
@@ -1489,6 +1516,8 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
/* use prefetched values */
rx_desc
=
next_rxd
;
buffer_info
=
next_buffer
;
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
}
rx_ring
->
next_to_clean
=
i
;
...
...
@@ -2887,6 +2916,10 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
break
;
}
/* Enable Extended Status in all Receive Descriptors */
rfctl
=
er32
(
RFCTL
);
rfctl
|=
E1000_RFCTL_EXTEN
;
/*
* 82571 and greater support packet-split where the protocol
* header is placed in skb->data and the packet data is
...
...
@@ -2912,9 +2945,6 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
if
(
adapter
->
rx_ps_pages
)
{
u32
psrctl
=
0
;
/* Configure extra packet-split registers */
rfctl
=
er32
(
RFCTL
);
rfctl
|=
E1000_RFCTL_EXTEN
;
/*
* disable packet split support for IPv6 extension headers,
* because some malformed IPv6 headers can hang the Rx
...
...
@@ -2922,8 +2952,6 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
rfctl
|=
(
E1000_RFCTL_IPV6_EX_DIS
|
E1000_RFCTL_NEW_IPV6_EXT_DIS
);
ew32
(
RFCTL
,
rfctl
);
/* Enable Packet split descriptors */
rctl
|=
E1000_RCTL_DTYP_PS
;
...
...
@@ -2946,6 +2974,7 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
ew32
(
PSRCTL
,
psrctl
);
}
ew32
(
RFCTL
,
rfctl
);
ew32
(
RCTL
,
rctl
);
/* just started the receive unit, no need to restart */
adapter
->
flags
&=
~
FLAG_RX_RESTART_NOW
;
...
...
@@ -2971,11 +3000,11 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
adapter
->
clean_rx
=
e1000_clean_rx_irq_ps
;
adapter
->
alloc_rx_buf
=
e1000_alloc_rx_buffers_ps
;
}
else
if
(
adapter
->
netdev
->
mtu
>
ETH_FRAME_LEN
+
ETH_FCS_LEN
)
{
rdlen
=
rx_ring
->
count
*
sizeof
(
struct
e1000_rx_desc
);
rdlen
=
rx_ring
->
count
*
sizeof
(
union
e1000_rx_desc_extended
);
adapter
->
clean_rx
=
e1000_clean_jumbo_rx_irq
;
adapter
->
alloc_rx_buf
=
e1000_alloc_jumbo_rx_buffers
;
}
else
{
rdlen
=
rx_ring
->
count
*
sizeof
(
struct
e1000_rx_desc
);
rdlen
=
rx_ring
->
count
*
sizeof
(
union
e1000_rx_desc_extended
);
adapter
->
clean_rx
=
e1000_clean_rx_irq
;
adapter
->
alloc_rx_buf
=
e1000_alloc_rx_buffers
;
}
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe.h
浏览文件 @
ca1ba7ca
...
...
@@ -91,13 +91,16 @@
#define IXGBE_RX_BUFFER_WRITE 16
/* Must be power of 2 */
#define IXGBE_TX_FLAGS_CSUM (u32)(1)
#define IXGBE_TX_FLAGS_VLAN (u32)(1 << 1)
#define IXGBE_TX_FLAGS_TSO (u32)(1 << 2)
#define IXGBE_TX_FLAGS_IPV4 (u32)(1 << 3)
#define IXGBE_TX_FLAGS_FCOE (u32)(1 << 4)
#define IXGBE_TX_FLAGS_FSO (u32)(1 << 5)
#define IXGBE_TX_FLAGS_HW_VLAN (u32)(1 << 1)
#define IXGBE_TX_FLAGS_SW_VLAN (u32)(1 << 2)
#define IXGBE_TX_FLAGS_TSO (u32)(1 << 3)
#define IXGBE_TX_FLAGS_IPV4 (u32)(1 << 4)
#define IXGBE_TX_FLAGS_FCOE (u32)(1 << 5)
#define IXGBE_TX_FLAGS_FSO (u32)(1 << 6)
#define IXGBE_TX_FLAGS_MAPPED_AS_PAGE (u32)(1 << 7)
#define IXGBE_TX_FLAGS_VLAN_MASK 0xffff0000
#define IXGBE_TX_FLAGS_VLAN_PRIO_MASK 0x0000e000
#define IXGBE_TX_FLAGS_VLAN_PRIO_MASK 0xe0000000
#define IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT 29
#define IXGBE_TX_FLAGS_VLAN_SHIFT 16
#define IXGBE_MAX_RSC_INT_RATE 162760
...
...
@@ -141,14 +144,14 @@ struct vf_macvlans {
/* wrapper around a pointer to a socket buffer,
* so a DMA handle can be stored along with the buffer */
struct
ixgbe_tx_buffer
{
struct
sk_buff
*
skb
;
dma_addr_t
dma
;
union
ixgbe_adv_tx_desc
*
next_to_watch
;
unsigned
long
time_stamp
;
u16
length
;
u16
next_to_watch
;
unsigned
int
bytecount
;
dma_addr_t
dma
;
u32
length
;
u32
tx_flags
;
struct
sk_buff
*
skb
;
u32
bytecount
;
u16
gso_segs
;
u8
mapped_as_page
;
};
struct
ixgbe_rx_buffer
{
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c
浏览文件 @
ca1ba7ca
...
...
@@ -414,7 +414,7 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
u8
prio_tc
[
MAX_TRAFFIC_CLASS
]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
};
int
max_frame
=
adapter
->
netdev
->
mtu
+
ETH_HLEN
+
ETH_FCS_LEN
;
#ifdef
CONFIG
_FCOE
#ifdef
IXGBE
_FCOE
if
(
adapter
->
netdev
->
features
&
NETIF_F_FCOE_MTU
)
max_frame
=
max
(
max_frame
,
IXGBE_FCOE_JUMBO_FRAME_SIZE
);
#endif
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c
浏览文件 @
ca1ba7ca
...
...
@@ -241,10 +241,12 @@ static int ixgbe_fcoe_ddp_setup(struct net_device *netdev, u16 xid,
*/
if
(
lastsize
==
bufflen
)
{
if
(
j
>=
IXGBE_BUFFCNT_MAX
)
{
e_err
(
drv
,
"xid=%x:%d,%d,%d:addr=%llx "
"not enough user buffers. We need an extra "
"buffer because lastsize is bufflen.
\n
"
,
xid
,
i
,
j
,
dmacount
,
(
u64
)
addr
);
printk_once
(
"Will NOT use DDP since there are not "
"enough user buffers. We need an extra "
"buffer because lastsize is bufflen. "
"xid=%x:%d,%d,%d:addr=%llx
\n
"
,
xid
,
i
,
j
,
dmacount
,
(
u64
)
addr
);
goto
out_noddp_free
;
}
...
...
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
浏览文件 @
ca1ba7ca
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录