Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
d5b1d8cd
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看板
提交
d5b1d8cd
编写于
10月 07, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge
git://github.com/Jkirsher/net-next
上级
5d6bcdfe
ebe42d16
变更
9
展开全部
隐藏空白更改
内联
并排
Showing
9 changed file
with
600 addition
and
521 deletion
+600
-521
drivers/net/ethernet/intel/e1000/e1000.h
drivers/net/ethernet/intel/e1000/e1000.h
+6
-6
drivers/net/ethernet/intel/e1000/e1000_hw.c
drivers/net/ethernet/intel/e1000/e1000_hw.c
+11
-11
drivers/net/ethernet/intel/e1000/e1000_main.c
drivers/net/ethernet/intel/e1000/e1000_main.c
+81
-88
drivers/net/ethernet/intel/e1000e/ich8lan.c
drivers/net/ethernet/intel/e1000e/ich8lan.c
+1
-1
drivers/net/ethernet/intel/igb/e1000_82575.h
drivers/net/ethernet/intel/igb/e1000_82575.h
+2
-0
drivers/net/ethernet/intel/igb/igb.h
drivers/net/ethernet/intel/igb/igb.h
+32
-22
drivers/net/ethernet/intel/igb/igb_ethtool.c
drivers/net/ethernet/intel/igb/igb_ethtool.c
+9
-7
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igb/igb_main.c
+456
-384
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+2
-2
未找到文件。
drivers/net/ethernet/intel/e1000/e1000.h
浏览文件 @
d5b1d8cd
...
...
@@ -214,9 +214,6 @@ struct e1000_rx_ring {
/* board specific private data structure */
struct
e1000_adapter
{
struct
timer_list
tx_fifo_stall_timer
;
struct
timer_list
watchdog_timer
;
struct
timer_list
phy_info_timer
;
unsigned
long
active_vlans
[
BITS_TO_LONGS
(
VLAN_N_VID
)];
u16
mng_vlan_id
;
u32
bd_number
;
...
...
@@ -237,7 +234,6 @@ struct e1000_adapter {
u16
tx_itr
;
u16
rx_itr
;
struct
work_struct
reset_task
;
u8
fc_autoneg
;
/* TX */
...
...
@@ -310,8 +306,12 @@ struct e1000_adapter {
bool
discarding
;
struct
work_struct
fifo_stall_task
;
struct
work_struct
phy_info_task
;
struct
work_struct
reset_task
;
struct
delayed_work
watchdog_task
;
struct
delayed_work
fifo_stall_task
;
struct
delayed_work
phy_info_task
;
struct
mutex
mutex
;
};
enum
e1000_state_t
{
...
...
drivers/net/ethernet/intel/e1000/e1000_hw.c
浏览文件 @
d5b1d8cd
...
...
@@ -5385,7 +5385,7 @@ static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
if
(
ret_val
)
return
ret_val
;
m
delay
(
20
);
m
sleep
(
20
);
ret_val
=
e1000_write_phy_reg
(
hw
,
0x0000
,
IGP01E1000_IEEE_FORCE_GIGA
);
...
...
@@ -5413,7 +5413,7 @@ static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
if
(
ret_val
)
return
ret_val
;
m
delay
(
20
);
m
sleep
(
20
);
/* Now enable the transmitter */
ret_val
=
...
...
@@ -5440,7 +5440,7 @@ static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
if
(
ret_val
)
return
ret_val
;
m
delay
(
20
);
m
sleep
(
20
);
ret_val
=
e1000_write_phy_reg
(
hw
,
0x0000
,
IGP01E1000_IEEE_FORCE_GIGA
);
...
...
@@ -5457,7 +5457,7 @@ static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
if
(
ret_val
)
return
ret_val
;
m
delay
(
20
);
m
sleep
(
20
);
/* Now enable the transmitter */
ret_val
=
...
...
@@ -5750,26 +5750,26 @@ static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
if
((
mii_status_reg
&
~
MII_SR_LINK_STATUS
)
==
0
)
break
;
m
delay
(
100
);
m
sleep
(
100
);
}
/* Recommended delay time after link has been lost */
m
delay
(
1000
);
m
sleep
(
1000
);
/* Now we will re-enable th transmitter on the PHY */
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_PAGE_SELECT
,
0x0019
);
if
(
ret_val
)
return
ret_val
;
m
delay
(
50
);
m
sleep
(
50
);
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_GEN_CONTROL
,
0xFFF0
);
if
(
ret_val
)
return
ret_val
;
m
delay
(
50
);
m
sleep
(
50
);
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_GEN_CONTROL
,
0xFF00
);
if
(
ret_val
)
return
ret_val
;
m
delay
(
50
);
m
sleep
(
50
);
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_GEN_CONTROL
,
0x0000
);
if
(
ret_val
)
return
ret_val
;
...
...
@@ -5794,7 +5794,7 @@ static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
if
(
mii_status_reg
&
MII_SR_LINK_STATUS
)
break
;
m
delay
(
100
);
m
sleep
(
100
);
}
return
E1000_SUCCESS
;
}
...
...
@@ -5825,6 +5825,6 @@ static s32 e1000_get_auto_rd_done(struct e1000_hw *hw)
static
s32
e1000_get_phy_cfg_done
(
struct
e1000_hw
*
hw
)
{
e_dbg
(
"e1000_get_phy_cfg_done"
);
m
delay
(
10
);
m
sleep
(
10
);
return
E1000_SUCCESS
;
}
drivers/net/ethernet/intel/e1000/e1000_main.c
浏览文件 @
d5b1d8cd
...
...
@@ -131,10 +131,8 @@ static void e1000_clean_tx_ring(struct e1000_adapter *adapter,
static
void
e1000_clean_rx_ring
(
struct
e1000_adapter
*
adapter
,
struct
e1000_rx_ring
*
rx_ring
);
static
void
e1000_set_rx_mode
(
struct
net_device
*
netdev
);
static
void
e1000_update_phy_info
(
unsigned
long
data
);
static
void
e1000_update_phy_info_task
(
struct
work_struct
*
work
);
static
void
e1000_watchdog
(
unsigned
long
data
);
static
void
e1000_82547_tx_fifo_stall
(
unsigned
long
data
);
static
void
e1000_watchdog
(
struct
work_struct
*
work
);
static
void
e1000_82547_tx_fifo_stall_task
(
struct
work_struct
*
work
);
static
netdev_tx_t
e1000_xmit_frame
(
struct
sk_buff
*
skb
,
struct
net_device
*
netdev
);
...
...
@@ -487,12 +485,21 @@ static void e1000_power_down_phy(struct e1000_adapter *adapter)
e1000_read_phy_reg
(
hw
,
PHY_CTRL
,
&
mii_reg
);
mii_reg
|=
MII_CR_POWER_DOWN
;
e1000_write_phy_reg
(
hw
,
PHY_CTRL
,
mii_reg
);
m
delay
(
1
);
m
sleep
(
1
);
}
out:
return
;
}
static
void
e1000_down_and_stop
(
struct
e1000_adapter
*
adapter
)
{
set_bit
(
__E1000_DOWN
,
&
adapter
->
flags
);
cancel_work_sync
(
&
adapter
->
reset_task
);
cancel_delayed_work_sync
(
&
adapter
->
watchdog_task
);
cancel_delayed_work_sync
(
&
adapter
->
phy_info_task
);
cancel_delayed_work_sync
(
&
adapter
->
fifo_stall_task
);
}
void
e1000_down
(
struct
e1000_adapter
*
adapter
)
{
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
...
...
@@ -522,13 +529,9 @@ void e1000_down(struct e1000_adapter *adapter)
/*
* Setting DOWN must be after irq_disable to prevent
* a screaming interrupt. Setting DOWN also prevents
* t
imers and t
asks from rescheduling.
* tasks from rescheduling.
*/
set_bit
(
__E1000_DOWN
,
&
adapter
->
flags
);
del_timer_sync
(
&
adapter
->
tx_fifo_stall_timer
);
del_timer_sync
(
&
adapter
->
watchdog_timer
);
del_timer_sync
(
&
adapter
->
phy_info_timer
);
e1000_down_and_stop
(
adapter
);
adapter
->
link_speed
=
0
;
adapter
->
link_duplex
=
0
;
...
...
@@ -543,10 +546,10 @@ static void e1000_reinit_safe(struct e1000_adapter *adapter)
{
while
(
test_and_set_bit
(
__E1000_RESETTING
,
&
adapter
->
flags
))
msleep
(
1
);
rtnl_lock
(
);
mutex_lock
(
&
adapter
->
mutex
);
e1000_down
(
adapter
);
e1000_up
(
adapter
);
rtnl_unlock
(
);
mutex_unlock
(
&
adapter
->
mutex
);
clear_bit
(
__E1000_RESETTING
,
&
adapter
->
flags
);
}
...
...
@@ -1120,21 +1123,12 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
if
(
!
is_valid_ether_addr
(
netdev
->
perm_addr
))
e_err
(
probe
,
"Invalid MAC Address
\n
"
);
init_timer
(
&
adapter
->
tx_fifo_stall_timer
);
adapter
->
tx_fifo_stall_timer
.
function
=
e1000_82547_tx_fifo_stall
;
adapter
->
tx_fifo_stall_timer
.
data
=
(
unsigned
long
)
adapter
;
init_timer
(
&
adapter
->
watchdog_timer
);
adapter
->
watchdog_timer
.
function
=
e1000_watchdog
;
adapter
->
watchdog_timer
.
data
=
(
unsigned
long
)
adapter
;
init_timer
(
&
adapter
->
phy_info_timer
);
adapter
->
phy_info_timer
.
function
=
e1000_update_phy_info
;
adapter
->
phy_info_timer
.
data
=
(
unsigned
long
)
adapter
;
INIT_WORK
(
&
adapter
->
fifo_stall_task
,
e1000_82547_tx_fifo_stall_task
);
INIT_DELAYED_WORK
(
&
adapter
->
watchdog_task
,
e1000_watchdog
);
INIT_DELAYED_WORK
(
&
adapter
->
fifo_stall_task
,
e1000_82547_tx_fifo_stall_task
);
INIT_DELAYED_WORK
(
&
adapter
->
phy_info_task
,
e1000_update_phy_info_task
);
INIT_WORK
(
&
adapter
->
reset_task
,
e1000_reset_task
);
INIT_WORK
(
&
adapter
->
phy_info_task
,
e1000_update_phy_info_task
);
e1000_check_options
(
adapter
);
...
...
@@ -1279,13 +1273,7 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
set_bit
(
__E1000_DOWN
,
&
adapter
->
flags
);
del_timer_sync
(
&
adapter
->
tx_fifo_stall_timer
);
del_timer_sync
(
&
adapter
->
watchdog_timer
);
del_timer_sync
(
&
adapter
->
phy_info_timer
);
cancel_work_sync
(
&
adapter
->
reset_task
);
e1000_down_and_stop
(
adapter
);
e1000_release_manageability
(
adapter
);
unregister_netdev
(
netdev
);
...
...
@@ -1329,6 +1317,7 @@ static int __devinit e1000_sw_init(struct e1000_adapter *adapter)
e1000_irq_disable
(
adapter
);
spin_lock_init
(
&
adapter
->
stats_lock
);
mutex_init
(
&
adapter
->
mutex
);
set_bit
(
__E1000_DOWN
,
&
adapter
->
flags
);
...
...
@@ -1369,7 +1358,7 @@ static int __devinit e1000_alloc_queues(struct e1000_adapter *adapter)
* The open entry point is called when a network interface is made
* active by the system (IFF_UP). At this point all resources needed
* for transmit and receive operations are allocated, the interrupt
* handler is registered with the OS, the watchdog t
imer
is started,
* handler is registered with the OS, the watchdog t
ask
is started,
* and the stack is notified that the interface is ready.
**/
...
...
@@ -2331,35 +2320,23 @@ static void e1000_set_rx_mode(struct net_device *netdev)
kfree
(
mcarray
);
}
/* Need to wait a few seconds after link up to get diagnostic information from
* the phy */
static
void
e1000_update_phy_info
(
unsigned
long
data
)
{
struct
e1000_adapter
*
adapter
=
(
struct
e1000_adapter
*
)
data
;
schedule_work
(
&
adapter
->
phy_info_task
);
}
/**
* e1000_update_phy_info_task - get phy info
* @work: work struct contained inside adapter struct
*
* Need to wait a few seconds after link up to get diagnostic information from
* the phy
*/
static
void
e1000_update_phy_info_task
(
struct
work_struct
*
work
)
{
struct
e1000_adapter
*
adapter
=
container_of
(
work
,
struct
e1000_adapter
,
phy_info_task
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
rtnl_lock
();
e1000_phy_get_info
(
hw
,
&
adapter
->
phy_info
);
rtnl_unlock
();
}
/**
* e1000_82547_tx_fifo_stall - Timer Call-back
* @data: pointer to adapter cast into an unsigned long
**/
static
void
e1000_82547_tx_fifo_stall
(
unsigned
long
data
)
{
struct
e1000_adapter
*
adapter
=
(
struct
e1000_adapter
*
)
data
;
schedule_work
(
&
adapter
->
fifo_stall_task
);
struct
e1000_adapter
,
phy_info_task
.
work
);
if
(
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
return
;
mutex_lock
(
&
adapter
->
mutex
);
e1000_phy_get_info
(
&
adapter
->
hw
,
&
adapter
->
phy_info
);
mutex_unlock
(
&
adapter
->
mutex
);
}
/**
...
...
@@ -2369,13 +2346,15 @@ static void e1000_82547_tx_fifo_stall(unsigned long data)
static
void
e1000_82547_tx_fifo_stall_task
(
struct
work_struct
*
work
)
{
struct
e1000_adapter
*
adapter
=
container_of
(
work
,
struct
e1000_adapter
,
fifo_stall_tas
k
);
struct
e1000_adapter
,
fifo_stall_task
.
wor
k
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
u32
tctl
;
rtnl_lock
();
if
(
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
return
;
mutex_lock
(
&
adapter
->
mutex
);
if
(
atomic_read
(
&
adapter
->
tx_fifo_stall
))
{
if
((
er32
(
TDT
)
==
er32
(
TDH
))
&&
(
er32
(
TDFT
)
==
er32
(
TDFH
))
&&
...
...
@@ -2393,10 +2372,10 @@ static void e1000_82547_tx_fifo_stall_task(struct work_struct *work)
atomic_set
(
&
adapter
->
tx_fifo_stall
,
0
);
netif_wake_queue
(
netdev
);
}
else
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
{
mod_timer
(
&
adapter
->
tx_fifo_stall_timer
,
jiffies
+
1
);
schedule_delayed_work
(
&
adapter
->
fifo_stall_task
,
1
);
}
}
rtnl_unlock
(
);
mutex_unlock
(
&
adapter
->
mutex
);
}
bool
e1000_has_link
(
struct
e1000_adapter
*
adapter
)
...
...
@@ -2437,17 +2416,23 @@ bool e1000_has_link(struct e1000_adapter *adapter)
}
/**
* e1000_watchdog -
Timer Call-back
* @
data: pointer to adapter cast into an unsigned long
* e1000_watchdog -
work function
* @
work: work struct contained inside adapter struct
**/
static
void
e1000_watchdog
(
unsigned
long
data
)
static
void
e1000_watchdog
(
struct
work_struct
*
work
)
{
struct
e1000_adapter
*
adapter
=
(
struct
e1000_adapter
*
)
data
;
struct
e1000_adapter
*
adapter
=
container_of
(
work
,
struct
e1000_adapter
,
watchdog_task
.
work
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
e1000_tx_ring
*
txdr
=
adapter
->
tx_ring
;
u32
link
,
tctl
;
if
(
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
return
;
mutex_lock
(
&
adapter
->
mutex
);
link
=
e1000_has_link
(
adapter
);
if
((
netif_carrier_ok
(
netdev
))
&&
link
)
goto
link_up
;
...
...
@@ -2493,8 +2478,8 @@ static void e1000_watchdog(unsigned long data)
netif_carrier_on
(
netdev
);
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
mod_timer
(
&
adapter
->
phy_info_timer
,
round_jiffies
(
jiffies
+
2
*
HZ
)
);
schedule_delayed_work
(
&
adapter
->
phy_info_task
,
2
*
HZ
);
adapter
->
smartspeed
=
0
;
}
}
else
{
...
...
@@ -2506,8 +2491,8 @@ static void e1000_watchdog(unsigned long data)
netif_carrier_off
(
netdev
);
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
mod_timer
(
&
adapter
->
phy_info_timer
,
round_jiffies
(
jiffies
+
2
*
HZ
)
);
schedule_delayed_work
(
&
adapter
->
phy_info_task
,
2
*
HZ
);
}
e1000_smartspeed
(
adapter
);
...
...
@@ -2536,8 +2521,8 @@ static void e1000_watchdog(unsigned long data)
* (Do the reset outside of interrupt context). */
adapter
->
tx_timeout_count
++
;
schedule_work
(
&
adapter
->
reset_task
);
/*
return
immediately since reset is imminent */
return
;
/*
exit
immediately since reset is imminent */
goto
unlock
;
}
}
...
...
@@ -2563,10 +2548,12 @@ static void e1000_watchdog(unsigned long data)
/* Force detection of hung controller every watchdog period */
adapter
->
detect_tx_hung
=
true
;
/* Res
et the timer
*/
/* Res
chedule the task
*/
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
mod_timer
(
&
adapter
->
watchdog_timer
,
round_jiffies
(
jiffies
+
2
*
HZ
));
schedule_delayed_work
(
&
adapter
->
watchdog_task
,
2
*
HZ
);
unlock:
mutex_unlock
(
&
adapter
->
mutex
);
}
enum
latency_range
{
...
...
@@ -3206,14 +3193,12 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
if
(
unlikely
(
e1000_maybe_stop_tx
(
netdev
,
tx_ring
,
count
+
2
)))
return
NETDEV_TX_BUSY
;
if
(
unlikely
(
hw
->
mac_type
==
e1000_82547
))
{
if
(
unlikely
(
e1000_82547_fifo_workaround
(
adapter
,
skb
)))
{
netif_stop_queue
(
netdev
);
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
mod_timer
(
&
adapter
->
tx_fifo_stall_timer
,
jiffies
+
1
);
return
NETDEV_TX_BUSY
;
}
if
(
unlikely
((
hw
->
mac_type
==
e1000_82547
)
&&
(
e1000_82547_fifo_workaround
(
adapter
,
skb
))))
{
netif_stop_queue
(
netdev
);
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
schedule_delayed_work
(
&
adapter
->
fifo_stall_task
,
1
);
return
NETDEV_TX_BUSY
;
}
if
(
vlan_tx_tag_present
(
skb
))
{
...
...
@@ -3275,6 +3260,8 @@ static void e1000_reset_task(struct work_struct *work)
struct
e1000_adapter
*
adapter
=
container_of
(
work
,
struct
e1000_adapter
,
reset_task
);
if
(
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
return
;
e1000_reinit_safe
(
adapter
);
}
...
...
@@ -3283,7 +3270,7 @@ static void e1000_reset_task(struct work_struct *work)
* @netdev: network interface device structure
*
* Returns the address of the device statistics structure.
* The statistics are actually updated from the
timer callback
.
* The statistics are actually updated from the
watchdog
.
**/
static
struct
net_device_stats
*
e1000_get_stats
(
struct
net_device
*
netdev
)
...
...
@@ -3551,7 +3538,7 @@ static irqreturn_t e1000_intr(int irq, void *data)
hw
->
get_link_status
=
1
;
/* guard against interrupt when we're going down */
if
(
!
test_bit
(
__E1000_DOWN
,
&
adapter
->
flags
))
mod_timer
(
&
adapter
->
watchdog_timer
,
jiffies
+
1
);
schedule_delayed_work
(
&
adapter
->
watchdog_task
,
1
);
}
/* disable interrupts, without the synchronize_irq bit */
...
...
@@ -4729,6 +4716,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
netif_device_detach
(
netdev
);
mutex_lock
(
&
adapter
->
mutex
);
if
(
netif_running
(
netdev
))
{
WARN_ON
(
test_bit
(
__E1000_RESETTING
,
&
adapter
->
flags
));
e1000_down
(
adapter
);
...
...
@@ -4736,8 +4725,10 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
#ifdef CONFIG_PM
retval
=
pci_save_state
(
pdev
);
if
(
retval
)
if
(
retval
)
{
mutex_unlock
(
&
adapter
->
mutex
);
return
retval
;
}
#endif
status
=
er32
(
STATUS
);
...
...
@@ -4792,6 +4783,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
if
(
netif_running
(
netdev
))
e1000_free_irq
(
adapter
);
mutex_unlock
(
&
adapter
->
mutex
);
pci_disable_device
(
pdev
);
return
0
;
...
...
drivers/net/ethernet/intel/e1000e/ich8lan.c
浏览文件 @
d5b1d8cd
...
...
@@ -1578,7 +1578,7 @@ s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable)
ret_val
=
e1e_wphy
(
hw
,
PHY_REG
(
776
,
20
),
data
);
if
(
ret_val
)
goto
out
;
ret_val
=
e1e_wphy
(
hw
,
PHY_REG
(
776
,
23
),
0xF
E
00
);
ret_val
=
e1e_wphy
(
hw
,
PHY_REG
(
776
,
23
),
0xF
1
00
);
if
(
ret_val
)
goto
out
;
e1e_rphy
(
hw
,
HV_PM_CTRL
,
&
data
);
...
...
drivers/net/ethernet/intel/igb/e1000_82575.h
浏览文件 @
d5b1d8cd
...
...
@@ -130,7 +130,9 @@ union e1000_adv_tx_desc {
#define E1000_ADVTXD_MAC_TSTAMP 0x00080000
/* IEEE1588 Timestamp packet */
#define E1000_ADVTXD_DTYP_CTXT 0x00200000
/* Advanced Context Descriptor */
#define E1000_ADVTXD_DTYP_DATA 0x00300000
/* Advanced Data Descriptor */
#define E1000_ADVTXD_DCMD_EOP 0x01000000
/* End of Packet */
#define E1000_ADVTXD_DCMD_IFCS 0x02000000
/* Insert FCS (Ethernet CRC) */
#define E1000_ADVTXD_DCMD_RS 0x08000000
/* Report Status */
#define E1000_ADVTXD_DCMD_DEXT 0x20000000
/* Descriptor extension (1=Adv) */
#define E1000_ADVTXD_DCMD_VLE 0x40000000
/* VLAN pkt enable */
#define E1000_ADVTXD_DCMD_TSE 0x80000000
/* TCP Seg enable */
...
...
drivers/net/ethernet/intel/igb/igb.h
浏览文件 @
d5b1d8cd
...
...
@@ -47,6 +47,7 @@ struct igb_adapter;
/* TX/RX descriptor defines */
#define IGB_DEFAULT_TXD 256
#define IGB_DEFAULT_TX_WORK 128
#define IGB_MIN_TXD 80
#define IGB_MAX_TXD 4096
...
...
@@ -129,29 +130,33 @@ struct vf_data_storage {
#define IGB_MNG_VLAN_NONE -1
#define IGB_TX_FLAGS_CSUM 0x00000001
#define IGB_TX_FLAGS_VLAN 0x00000002
#define IGB_TX_FLAGS_TSO 0x00000004
#define IGB_TX_FLAGS_IPV4 0x00000008
#define IGB_TX_FLAGS_TSTAMP 0x00000010
#define IGB_TX_FLAGS_VLAN_MASK 0xffff0000
#define IGB_TX_FLAGS_VLAN_SHIFT 16
/* wrapper around a pointer to a socket buffer,
* so a DMA handle can be stored along with the buffer */
struct
igb_buffer
{
struct
igb_tx_buffer
{
union
e1000_adv_tx_desc
*
next_to_watch
;
unsigned
long
time_stamp
;
struct
sk_buff
*
skb
;
unsigned
int
bytecount
;
u16
gso_segs
;
dma_addr_t
dma
;
union
{
/* TX */
struct
{
unsigned
long
time_stamp
;
u16
length
;
u16
next_to_watch
;
unsigned
int
bytecount
;
u16
gso_segs
;
u8
tx_flags
;
u8
mapped_as_page
;
};
/* RX */
struct
{
struct
page
*
page
;
dma_addr_t
page_dma
;
u16
page_offset
;
};
};
u32
length
;
u32
tx_flags
;
};
struct
igb_rx_buffer
{
struct
sk_buff
*
skb
;
dma_addr_t
dma
;
struct
page
*
page
;
dma_addr_t
page_dma
;
u32
page_offset
;
};
struct
igb_tx_queue_stats
{
...
...
@@ -177,6 +182,7 @@ struct igb_q_vector {
u32
eims_value
;
u16
cpu
;
u16
tx_work_limit
;
u16
itr_val
;
u8
set_itr
;
...
...
@@ -189,7 +195,10 @@ struct igb_ring {
struct
igb_q_vector
*
q_vector
;
/* backlink to q_vector */
struct
net_device
*
netdev
;
/* back pointer to net_device */
struct
device
*
dev
;
/* device pointer for dma mapping */
struct
igb_buffer
*
buffer_info
;
/* array of buffer info structs */
union
{
/* array of buffer info structs */
struct
igb_tx_buffer
*
tx_buffer_info
;
struct
igb_rx_buffer
*
rx_buffer_info
;
};
void
*
desc
;
/* descriptor ring memory */
unsigned
long
flags
;
/* ring specific flags */
void
__iomem
*
tail
;
/* pointer to ring tail register */
...
...
@@ -229,7 +238,7 @@ struct igb_ring {
#define IGB_RING_FLAG_TX_CTX_IDX 0x00000001
/* HW requires context index */
#define IGB_
ADVTXD_DCMD (E1000_TXD_CMD_EOP | E1000_TXD_
CMD_RS)
#define IGB_
TXD_DCMD (E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_D
CMD_RS)
#define IGB_RX_DESC(R, i) \
(&(((union e1000_adv_rx_desc *)((R)->desc))[i]))
...
...
@@ -266,6 +275,7 @@ struct igb_adapter {
u16
rx_itr
;
/* TX */
u16
tx_work_limit
;
u32
tx_timeout_count
;
int
num_tx_queues
;
struct
igb_ring
*
tx_ring
[
16
];
...
...
@@ -374,7 +384,7 @@ extern void igb_setup_tctl(struct igb_adapter *);
extern
void
igb_setup_rctl
(
struct
igb_adapter
*
);
extern
netdev_tx_t
igb_xmit_frame_ring
(
struct
sk_buff
*
,
struct
igb_ring
*
);
extern
void
igb_unmap_and_free_tx_resource
(
struct
igb_ring
*
,
struct
igb_buffer
*
);
struct
igb_
tx_
buffer
*
);
extern
void
igb_alloc_rx_buffers
(
struct
igb_ring
*
,
u16
);
extern
void
igb_update_stats
(
struct
igb_adapter
*
,
struct
rtnl_link_stats64
*
);
extern
bool
igb_has_link
(
struct
igb_adapter
*
adapter
);
...
...
drivers/net/ethernet/intel/igb/igb_ethtool.c
浏览文件 @
d5b1d8cd
...
...
@@ -1579,7 +1579,8 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring,
unsigned
int
size
)
{
union
e1000_adv_rx_desc
*
rx_desc
;
struct
igb_buffer
*
buffer_info
;
struct
igb_rx_buffer
*
rx_buffer_info
;
struct
igb_tx_buffer
*
tx_buffer_info
;
int
rx_ntc
,
tx_ntc
,
count
=
0
;
u32
staterr
;
...
...
@@ -1591,22 +1592,22 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring,
while
(
staterr
&
E1000_RXD_STAT_DD
)
{
/* check rx buffer */
buffer_info
=
&
rx_ring
->
buffer_info
[
rx_ntc
];
rx_buffer_info
=
&
rx_ring
->
rx_
buffer_info
[
rx_ntc
];
/* unmap rx buffer, will be remapped by alloc_rx_buffers */
dma_unmap_single
(
rx_ring
->
dev
,
buffer_info
->
dma
,
rx_
buffer_info
->
dma
,
IGB_RX_HDR_LEN
,
DMA_FROM_DEVICE
);
buffer_info
->
dma
=
0
;
rx_
buffer_info
->
dma
=
0
;
/* verify contents of skb */
if
(
!
igb_check_lbtest_frame
(
buffer_info
->
skb
,
size
))
if
(
!
igb_check_lbtest_frame
(
rx_
buffer_info
->
skb
,
size
))
count
++
;
/* unmap buffer on tx side */
buffer_info
=
&
tx_ring
->
buffer_info
[
tx_ntc
];
igb_unmap_and_free_tx_resource
(
tx_ring
,
buffer_info
);
tx_buffer_info
=
&
tx_ring
->
tx_
buffer_info
[
tx_ntc
];
igb_unmap_and_free_tx_resource
(
tx_ring
,
tx_
buffer_info
);
/* increment rx/tx next to clean counters */
rx_ntc
++
;
...
...
@@ -2011,6 +2012,7 @@ static int igb_set_coalesce(struct net_device *netdev,
for
(
i
=
0
;
i
<
adapter
->
num_q_vectors
;
i
++
)
{
struct
igb_q_vector
*
q_vector
=
adapter
->
q_vector
[
i
];
q_vector
->
tx_work_limit
=
adapter
->
tx_work_limit
;
if
(
q_vector
->
rx_ring
)
q_vector
->
itr_val
=
adapter
->
rx_itr_setting
;
else
...
...
drivers/net/ethernet/intel/igb/igb_main.c
浏览文件 @
d5b1d8cd
此差异已折叠。
点击以展开。
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
浏览文件 @
d5b1d8cd
...
...
@@ -56,8 +56,8 @@ char ixgbe_driver_name[] = "ixgbe";
static
const
char
ixgbe_driver_string
[]
=
"Intel(R) 10 Gigabit PCI Express Network Driver"
;
#define MAJ 3
#define MIN
4
#define BUILD
8
#define MIN
6
#define BUILD
7
#define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \
__stringify(BUILD) "-k"
const
char
ixgbe_driver_version
[]
=
DRV_VERSION
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录