Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
8fc65162
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
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看板
提交
8fc65162
编写于
18年前
作者:
J
Jeff Garzik
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '7.0.38-k2' of
git://66.93.40.222/srv/git/netdev-2.6
上级
2acab771
99a1f9e8
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
118 addition
and
108 deletion
+118
-108
MAINTAINERS
MAINTAINERS
+6
-0
drivers/net/e1000/Makefile
drivers/net/e1000/Makefile
+1
-0
drivers/net/e1000/e1000.h
drivers/net/e1000/e1000.h
+4
-2
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_ethtool.c
+2
-1
drivers/net/e1000/e1000_hw.c
drivers/net/e1000/e1000_hw.c
+2
-1
drivers/net/e1000/e1000_hw.h
drivers/net/e1000/e1000_hw.h
+2
-1
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_main.c
+97
-101
drivers/net/e1000/e1000_osdep.h
drivers/net/e1000/e1000_osdep.h
+2
-1
drivers/net/e1000/e1000_param.c
drivers/net/e1000/e1000_param.c
+2
-1
未找到文件。
MAINTAINERS
浏览文件 @
8fc65162
...
...
@@ -1395,6 +1395,8 @@ P: Jesse Brandeburg
M: jesse.brandeburg@intel.com
P: Jeff Kirsher
M: jeffrey.t.kirsher@intel.com
P: Auke Kok
M: auke-jan.h.kok@intel.com
W: http://sourceforge.net/projects/e1000/
S: Supported
...
...
@@ -1407,6 +1409,8 @@ P: Jesse Brandeburg
M: jesse.brandeburg@intel.com
P: Jeff Kirsher
M: jeffrey.t.kirsher@intel.com
P: Auke Kok
M: auke-jan.h.kok@intel.com
W: http://sourceforge.net/projects/e1000/
S: Supported
...
...
@@ -1419,6 +1423,8 @@ P: John Ronciak
M: john.ronciak@intel.com
P: Jesse Brandeburg
M: jesse.brandeburg@intel.com
P: Auke Kok
M: auke-jan.h.kok@intel.com
W: http://sourceforge.net/projects/e1000/
S: Supported
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/Makefile
浏览文件 @
8fc65162
...
...
@@ -22,6 +22,7 @@
#
# Contact Information:
# Linux NICS <linux.nics@intel.com>
# e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
# Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
#
################################################################################
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000.h
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
@@ -114,6 +115,8 @@ struct e1000_adapter;
/* Supported Rx Buffer Sizes */
#define E1000_RXBUFFER_128 128
/* Used for packet split */
#define E1000_RXBUFFER_256 256
/* Used for packet split */
#define E1000_RXBUFFER_512 512
#define E1000_RXBUFFER_1024 1024
#define E1000_RXBUFFER_2048 2048
#define E1000_RXBUFFER_4096 4096
#define E1000_RXBUFFER_8192 8192
...
...
@@ -334,7 +337,6 @@ struct e1000_adapter {
boolean_t
have_msi
;
#endif
/* to not mess up cache alignment, always add to the bottom */
boolean_t
txb2b
;
#ifdef NETIF_F_TSO
boolean_t
tso_force
;
#endif
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_ethtool.c
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_hw.c
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_hw.h
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_main.c
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
@@ -74,9 +75,9 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
#else
#define DRIVERNAPI "-NAPI"
#endif
#define DRV_VERSION "7.0.3
3
-k2"DRIVERNAPI
#define DRV_VERSION "7.0.3
8
-k2"DRIVERNAPI
char
e1000_driver_version
[]
=
DRV_VERSION
;
static
char
e1000_copyright
[]
=
"Copyright (c) 1999-200
5
Intel Corporation."
;
static
char
e1000_copyright
[]
=
"Copyright (c) 1999-200
6
Intel Corporation."
;
/* e1000_pci_tbl - PCI Device ID Table
*
...
...
@@ -208,8 +209,8 @@ static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
static
void
e1000_tx_timeout
(
struct
net_device
*
dev
);
static
void
e1000_reset_task
(
struct
net_device
*
dev
);
static
void
e1000_smartspeed
(
struct
e1000_adapter
*
adapter
);
static
in
line
in
t
e1000_82547_fifo_workaround
(
struct
e1000_adapter
*
adapter
,
struct
sk_buff
*
skb
);
static
int
e1000_82547_fifo_workaround
(
struct
e1000_adapter
*
adapter
,
struct
sk_buff
*
skb
);
static
void
e1000_vlan_rx_register
(
struct
net_device
*
netdev
,
struct
vlan_group
*
grp
);
static
void
e1000_vlan_rx_add_vid
(
struct
net_device
*
netdev
,
uint16_t
vid
);
...
...
@@ -291,7 +292,7 @@ module_exit(e1000_exit_module);
* @adapter: board private structure
**/
static
inline
void
static
void
e1000_irq_disable
(
struct
e1000_adapter
*
adapter
)
{
atomic_inc
(
&
adapter
->
irq_sem
);
...
...
@@ -305,7 +306,7 @@ e1000_irq_disable(struct e1000_adapter *adapter)
* @adapter: board private structure
**/
static
inline
void
static
void
e1000_irq_enable
(
struct
e1000_adapter
*
adapter
)
{
if
(
likely
(
atomic_dec_and_test
(
&
adapter
->
irq_sem
)))
{
...
...
@@ -349,7 +350,7 @@ e1000_update_mng_vlan(struct e1000_adapter *adapter)
*
**/
static
inline
void
static
void
e1000_release_hw_control
(
struct
e1000_adapter
*
adapter
)
{
uint32_t
ctrl_ext
;
...
...
@@ -359,6 +360,7 @@ e1000_release_hw_control(struct e1000_adapter *adapter)
switch
(
adapter
->
hw
.
mac_type
)
{
case
e1000_82571
:
case
e1000_82572
:
case
e1000_80003es2lan
:
ctrl_ext
=
E1000_READ_REG
(
&
adapter
->
hw
,
CTRL_EXT
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
CTRL_EXT
,
ctrl_ext
&
~
E1000_CTRL_EXT_DRV_LOAD
);
...
...
@@ -383,7 +385,7 @@ e1000_release_hw_control(struct e1000_adapter *adapter)
*
**/
static
inline
void
static
void
e1000_get_hw_control
(
struct
e1000_adapter
*
adapter
)
{
uint32_t
ctrl_ext
;
...
...
@@ -392,6 +394,7 @@ e1000_get_hw_control(struct e1000_adapter *adapter)
switch
(
adapter
->
hw
.
mac_type
)
{
case
e1000_82571
:
case
e1000_82572
:
case
e1000_80003es2lan
:
ctrl_ext
=
E1000_READ_REG
(
&
adapter
->
hw
,
CTRL_EXT
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
CTRL_EXT
,
ctrl_ext
|
E1000_CTRL_EXT_DRV_LOAD
);
...
...
@@ -419,7 +422,7 @@ e1000_up(struct e1000_adapter *adapter)
uint16_t
mii_reg
;
e1000_read_phy_reg
(
&
adapter
->
hw
,
PHY_CTRL
,
&
mii_reg
);
if
(
mii_reg
&
MII_CR_POWER_DOWN
)
e1000_phy_reset
(
&
adapter
->
hw
);
e1000_phy_
hw_
reset
(
&
adapter
->
hw
);
}
e1000_set_multi
(
netdev
);
...
...
@@ -970,8 +973,8 @@ e1000_sw_init(struct e1000_adapter *adapter)
pci_read_config_word
(
pdev
,
PCI_COMMAND
,
&
hw
->
pci_cmd_word
);
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_2048
;
adapter
->
rx_ps_bsize0
=
E1000_RXBUFFER_
256
;
adapter
->
rx_buffer_len
=
MAXIMUM_ETHERNET_FRAME_SIZE
;
adapter
->
rx_ps_bsize0
=
E1000_RXBUFFER_
128
;
hw
->
max_frame_size
=
netdev
->
mtu
+
ENET_HEADER_SIZE
+
ETHERNET_FCS_SIZE
;
hw
->
min_frame_size
=
MINIMUM_ETHERNET_FRAME_SIZE
;
...
...
@@ -1179,7 +1182,7 @@ e1000_close(struct net_device *netdev)
* @start: address of beginning of memory
* @len: length of memory
**/
static
inline
boolean_t
static
boolean_t
e1000_check_64k_bound
(
struct
e1000_adapter
*
adapter
,
void
*
start
,
unsigned
long
len
)
{
...
...
@@ -1597,14 +1600,21 @@ e1000_setup_rctl(struct e1000_adapter *adapter)
rctl
|=
E1000_RCTL_LPE
;
/* Setup buffer sizes */
if
(
adapter
->
hw
.
mac_type
>=
e1000_82571
)
{
/* We can now specify buffers in 1K increments.
* BSIZE and BSEX are ignored in this case. */
rctl
|=
adapter
->
rx_buffer_len
<<
0x11
;
}
else
{
rctl
&=
~
E1000_RCTL_SZ_4096
;
rctl
|=
E1000_RCTL_BSEX
;
switch
(
adapter
->
rx_buffer_len
)
{
rctl
&=
~
E1000_RCTL_SZ_4096
;
rctl
|=
E1000_RCTL_BSEX
;
switch
(
adapter
->
rx_buffer_len
)
{
case
E1000_RXBUFFER_256
:
rctl
|=
E1000_RCTL_SZ_256
;
rctl
&=
~
E1000_RCTL_BSEX
;
break
;
case
E1000_RXBUFFER_512
:
rctl
|=
E1000_RCTL_SZ_512
;
rctl
&=
~
E1000_RCTL_BSEX
;
break
;
case
E1000_RXBUFFER_1024
:
rctl
|=
E1000_RCTL_SZ_1024
;
rctl
&=
~
E1000_RCTL_BSEX
;
break
;
case
E1000_RXBUFFER_2048
:
default:
rctl
|=
E1000_RCTL_SZ_2048
;
...
...
@@ -1619,7 +1629,6 @@ e1000_setup_rctl(struct e1000_adapter *adapter)
case
E1000_RXBUFFER_16384
:
rctl
|=
E1000_RCTL_SZ_16384
;
break
;
}
}
#ifndef CONFIG_E1000_DISABLE_PACKET_SPLIT
...
...
@@ -1713,7 +1722,7 @@ e1000_configure_rx(struct e1000_adapter *adapter)
if
(
hw
->
mac_type
>=
e1000_82571
)
{
ctrl_ext
=
E1000_READ_REG
(
hw
,
CTRL_EXT
);
/* Reset delay timers after every interrupt */
ctrl_ext
|=
E1000_CTRL_EXT_
CANC
;
ctrl_ext
|=
E1000_CTRL_EXT_
INT_TIMER_CLR
;
#ifdef CONFIG_E1000_NAPI
/* Auto-Mask interrupts upon ICR read. */
ctrl_ext
|=
E1000_CTRL_EXT_IAME
;
...
...
@@ -1805,7 +1814,7 @@ e1000_free_all_tx_resources(struct e1000_adapter *adapter)
e1000_free_tx_resources
(
adapter
,
&
adapter
->
tx_ring
[
i
]);
}
static
inline
void
static
void
e1000_unmap_and_free_tx_resource
(
struct
e1000_adapter
*
adapter
,
struct
e1000_buffer
*
buffer_info
)
{
...
...
@@ -2245,6 +2254,7 @@ e1000_watchdog_task(struct e1000_adapter *adapter)
if
(
link
)
{
if
(
!
netif_carrier_ok
(
netdev
))
{
boolean_t
txb2b
=
1
;
e1000_get_speed_and_duplex
(
&
adapter
->
hw
,
&
adapter
->
link_speed
,
&
adapter
->
link_duplex
);
...
...
@@ -2258,23 +2268,22 @@ e1000_watchdog_task(struct e1000_adapter *adapter)
* and adjust the timeout factor */
netdev
->
tx_queue_len
=
adapter
->
tx_queue_len
;
adapter
->
tx_timeout_factor
=
1
;
adapter
->
txb2b
=
1
;
switch
(
adapter
->
link_speed
)
{
case
SPEED_10
:
adapter
->
txb2b
=
0
;
txb2b
=
0
;
netdev
->
tx_queue_len
=
10
;
adapter
->
tx_timeout_factor
=
8
;
break
;
case
SPEED_100
:
adapter
->
txb2b
=
0
;
txb2b
=
0
;
netdev
->
tx_queue_len
=
100
;
/* maybe add some timeout factor ? */
break
;
}
if
((
adapter
->
hw
.
mac_type
==
e1000_82571
||
if
((
adapter
->
hw
.
mac_type
==
e1000_82571
||
adapter
->
hw
.
mac_type
==
e1000_82572
)
&&
adapter
->
txb2b
==
0
)
{
txb2b
==
0
)
{
#define SPEED_MODE_BIT (1 << 21)
uint32_t
tarc0
;
tarc0
=
E1000_READ_REG
(
&
adapter
->
hw
,
TARC0
);
...
...
@@ -2398,7 +2407,7 @@ e1000_watchdog_task(struct e1000_adapter *adapter)
#define E1000_TX_FLAGS_VLAN_MASK 0xffff0000
#define E1000_TX_FLAGS_VLAN_SHIFT 16
static
in
line
in
t
static
int
e1000_tso
(
struct
e1000_adapter
*
adapter
,
struct
e1000_tx_ring
*
tx_ring
,
struct
sk_buff
*
skb
)
{
...
...
@@ -2478,7 +2487,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
return
FALSE
;
}
static
inline
boolean_t
static
boolean_t
e1000_tx_csum
(
struct
e1000_adapter
*
adapter
,
struct
e1000_tx_ring
*
tx_ring
,
struct
sk_buff
*
skb
)
{
...
...
@@ -2514,7 +2523,7 @@ e1000_tx_csum(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
#define E1000_MAX_TXD_PWR 12
#define E1000_MAX_DATA_PER_TXD (1<<E1000_MAX_TXD_PWR)
static
in
line
in
t
static
int
e1000_tx_map
(
struct
e1000_adapter
*
adapter
,
struct
e1000_tx_ring
*
tx_ring
,
struct
sk_buff
*
skb
,
unsigned
int
first
,
unsigned
int
max_per_txd
,
unsigned
int
nr_frags
,
unsigned
int
mss
)
...
...
@@ -2623,7 +2632,7 @@ e1000_tx_map(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
return
count
;
}
static
inline
void
static
void
e1000_tx_queue
(
struct
e1000_adapter
*
adapter
,
struct
e1000_tx_ring
*
tx_ring
,
int
tx_flags
,
int
count
)
{
...
...
@@ -2687,7 +2696,7 @@ e1000_tx_queue(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
#define E1000_FIFO_HDR 0x10
#define E1000_82547_PAD_LEN 0x3E0
static
in
line
in
t
static
int
e1000_82547_fifo_workaround
(
struct
e1000_adapter
*
adapter
,
struct
sk_buff
*
skb
)
{
uint32_t
fifo_space
=
adapter
->
tx_fifo_size
-
adapter
->
tx_fifo_head
;
...
...
@@ -2714,7 +2723,7 @@ e1000_82547_fifo_workaround(struct e1000_adapter *adapter, struct sk_buff *skb)
}
#define MINIMUM_DHCP_PACKET_SIZE 282
static
in
line
in
t
static
int
e1000_transfer_dhcp_info
(
struct
e1000_adapter
*
adapter
,
struct
sk_buff
*
skb
)
{
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
...
...
@@ -2980,8 +2989,7 @@ e1000_change_mtu(struct net_device *netdev, int new_mtu)
/* Adapter-specific max frame size limits. */
switch
(
adapter
->
hw
.
mac_type
)
{
case
e1000_82542_rev2_0
:
case
e1000_82542_rev2_1
:
case
e1000_undefined
...
e1000_82542_rev2_1
:
if
(
max_frame
>
MAXIMUM_ETHERNET_FRAME_SIZE
)
{
DPRINTK
(
PROBE
,
ERR
,
"Jumbo Frames not supported.
\n
"
);
return
-
EINVAL
;
...
...
@@ -3015,27 +3023,32 @@ e1000_change_mtu(struct net_device *netdev, int new_mtu)
break
;
}
if
(
adapter
->
hw
.
mac_type
>
e1000_82547_rev_2
)
{
adapter
->
rx_buffer_len
=
max_frame
;
E1000_ROUNDUP
(
adapter
->
rx_buffer_len
,
1024
);
}
else
{
if
(
unlikely
((
adapter
->
hw
.
mac_type
<
e1000_82543
)
&&
(
max_frame
>
MAXIMUM_ETHERNET_FRAME_SIZE
)))
{
DPRINTK
(
PROBE
,
ERR
,
"Jumbo Frames not supported "
"on 82542
\n
"
);
return
-
EINVAL
;
}
else
{
if
(
max_frame
<=
E1000_RXBUFFER_2048
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_2048
;
else
if
(
max_frame
<=
E1000_RXBUFFER_4096
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_4096
;
else
if
(
max_frame
<=
E1000_RXBUFFER_8192
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_8192
;
else
if
(
max_frame
<=
E1000_RXBUFFER_16384
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_16384
;
}
}
/* NOTE: dev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN
* means we reserve 2 more, this pushes us to allocate from the next
* larger slab size
* i.e. RXBUFFER_2048 --> size-4096 slab */
if
(
max_frame
<=
E1000_RXBUFFER_256
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_256
;
else
if
(
max_frame
<=
E1000_RXBUFFER_512
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_512
;
else
if
(
max_frame
<=
E1000_RXBUFFER_1024
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_1024
;
else
if
(
max_frame
<=
E1000_RXBUFFER_2048
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_2048
;
else
if
(
max_frame
<=
E1000_RXBUFFER_4096
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_4096
;
else
if
(
max_frame
<=
E1000_RXBUFFER_8192
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_8192
;
else
if
(
max_frame
<=
E1000_RXBUFFER_16384
)
adapter
->
rx_buffer_len
=
E1000_RXBUFFER_16384
;
/* adjust allocation if LPE protects us, and we aren't using SBP */
#define MAXIMUM_ETHERNET_VLAN_SIZE 1522
if
(
!
adapter
->
hw
.
tbi_compatibility_on
&&
((
max_frame
==
MAXIMUM_ETHERNET_FRAME_SIZE
)
||
(
max_frame
==
MAXIMUM_ETHERNET_VLAN_SIZE
)))
adapter
->
rx_buffer_len
=
MAXIMUM_ETHERNET_VLAN_SIZE
;
netdev
->
mtu
=
new_mtu
;
...
...
@@ -3163,7 +3176,6 @@ e1000_update_stats(struct e1000_adapter *adapter)
adapter
->
stats
.
crcerrs
+
adapter
->
stats
.
algnerrc
+
adapter
->
stats
.
ruc
+
adapter
->
stats
.
roc
+
adapter
->
stats
.
cexterr
;
adapter
->
net_stats
.
rx_dropped
=
0
;
adapter
->
net_stats
.
rx_length_errors
=
adapter
->
stats
.
ruc
+
adapter
->
stats
.
roc
;
adapter
->
net_stats
.
rx_crc_errors
=
adapter
->
stats
.
crcerrs
;
...
...
@@ -3389,13 +3401,15 @@ e1000_clean_tx_irq(struct e1000_adapter *adapter,
tx_ring
->
next_to_clean
=
i
;
spin_lock
(
&
tx_ring
->
tx_lock
);
#define TX_WAKE_THRESHOLD 32
if
(
unlikely
(
cleaned
&&
netif_queue_stopped
(
netdev
)
&&
netif_carrier_ok
(
netdev
)))
netif_wake_queue
(
netdev
);
spin_unlock
(
&
tx_ring
->
tx_lock
);
netif_carrier_ok
(
netdev
)))
{
spin_lock
(
&
tx_ring
->
tx_lock
);
if
(
netif_queue_stopped
(
netdev
)
&&
(
E1000_DESC_UNUSED
(
tx_ring
)
>=
TX_WAKE_THRESHOLD
))
netif_wake_queue
(
netdev
);
spin_unlock
(
&
tx_ring
->
tx_lock
);
}
if
(
adapter
->
detect_tx_hung
)
{
/* Detect a transmit hang in hardware, this serializes the
...
...
@@ -3443,7 +3457,7 @@ e1000_clean_tx_irq(struct e1000_adapter *adapter,
* @sk_buff: socket buffer with received data
**/
static
inline
void
static
void
e1000_rx_checksum
(
struct
e1000_adapter
*
adapter
,
uint32_t
status_err
,
uint32_t
csum
,
struct
sk_buff
*
skb
)
...
...
@@ -3567,10 +3581,12 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter,
flags
);
length
--
;
}
else
{
dev_kfree_skb_irq
(
skb
);
/* recycle */
buffer_info
->
skb
=
skb
;
goto
next_desc
;
}
}
}
else
skb_put
(
skb
,
length
);
/* code added for copybreak, this should improve
* performance for small packets with large amounts
...
...
@@ -3675,6 +3691,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
i
=
rx_ring
->
next_to_clean
;
rx_desc
=
E1000_RX_DESC_PS
(
*
rx_ring
,
i
);
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
middle
.
status_error
);
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
while
(
staterr
&
E1000_RXD_STAT_DD
)
{
buffer_info
=
&
rx_ring
->
buffer_info
[
i
];
...
...
@@ -3735,7 +3752,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
/* page alloc/put takes too long and effects small packet
* throughput, so unsplit small packets and save the alloc/put*/
if
(
l1
&&
((
length
+
l1
)
<
E1000_CB_LENGTH
))
{
if
(
l1
&&
((
length
+
l1
)
<
=
adapter
->
rx_ps_bsize0
))
{
u8
*
vaddr
;
/* there is no documentation about how to call
* kmap_atomic, so we can't hold the mapping
...
...
@@ -3768,6 +3785,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
ps_page
->
ps_page
[
j
]
=
NULL
;
skb
->
len
+=
length
;
skb
->
data_len
+=
length
;
skb
->
truesize
+=
length
;
}
copydone:
...
...
@@ -4515,21 +4533,13 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
E1000_WRITE_REG
(
&
adapter
->
hw
,
WUC
,
E1000_WUC_PME_EN
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
WUFC
,
wufc
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3hot
,
1
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 wake
\n
"
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3cold
,
1
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 cold wake
\n
"
);
pci_enable_wake
(
pdev
,
PCI_D3hot
,
1
);
pci_enable_wake
(
pdev
,
PCI_D3cold
,
1
);
}
else
{
E1000_WRITE_REG
(
&
adapter
->
hw
,
WUC
,
0
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
WUFC
,
0
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3hot
,
0
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 wake
\n
"
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3cold
,
0
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 cold wake
\n
"
);
pci_enable_wake
(
pdev
,
PCI_D3hot
,
0
);
pci_enable_wake
(
pdev
,
PCI_D3cold
,
0
);
}
if
(
adapter
->
hw
.
mac_type
>=
e1000_82540
&&
...
...
@@ -4538,13 +4548,8 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
if
(
manc
&
E1000_MANC_SMBUS_EN
)
{
manc
|=
E1000_MANC_ARP_EN
;
E1000_WRITE_REG
(
&
adapter
->
hw
,
MANC
,
manc
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3hot
,
1
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 wake
\n
"
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3cold
,
1
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 cold wake
\n
"
);
pci_enable_wake
(
pdev
,
PCI_D3hot
,
1
);
pci_enable_wake
(
pdev
,
PCI_D3cold
,
1
);
}
}
...
...
@@ -4554,9 +4559,7 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
pci_disable_device
(
pdev
);
retval
=
pci_set_power_state
(
pdev
,
pci_choose_state
(
pdev
,
state
));
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error in setting power state
\n
"
);
pci_set_power_state
(
pdev
,
pci_choose_state
(
pdev
,
state
));
return
0
;
}
...
...
@@ -4567,22 +4570,15 @@ e1000_resume(struct pci_dev *pdev)
{
struct
net_device
*
netdev
=
pci_get_drvdata
(
pdev
);
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
int
retval
;
uint32_t
manc
,
ret_val
;
retval
=
pci_set_power_state
(
pdev
,
PCI_D0
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error in setting power state
\n
"
);
pci_set_power_state
(
pdev
,
PCI_D0
);
e1000_pci_restore_state
(
adapter
);
ret_val
=
pci_enable_device
(
pdev
);
pci_set_master
(
pdev
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3hot
,
0
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 wake
\n
"
);
retval
=
pci_enable_wake
(
pdev
,
PCI_D3cold
,
0
);
if
(
retval
)
DPRINTK
(
PROBE
,
ERR
,
"Error enabling D3 cold wake
\n
"
);
pci_enable_wake
(
pdev
,
PCI_D3hot
,
0
);
pci_enable_wake
(
pdev
,
PCI_D3cold
,
0
);
e1000_reset
(
adapter
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
WUS
,
~
0
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_osdep.h
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
drivers/net/e1000/e1000_param.c
浏览文件 @
8fc65162
/*******************************************************************************
Copyright(c) 1999 - 200
5
Intel Corporation. All rights reserved.
Copyright(c) 1999 - 200
6
Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
...
...
@@ -22,6 +22,7 @@
Contact Information:
Linux NICS <linux.nics@intel.com>
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
*******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部