Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
bdad69b2
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 1 年 前同步成功
通知
152
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
bdad69b2
编写于
5月 23, 2006
作者:
J
Jeff Garzik
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'e1000-7.0.38-k4' of
git://lost.foo-projects.org/~ahkok/git/netdev-2.6
into upstream
上级
9528454f
440c052d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
104 addition
and
135 deletion
+104
-135
drivers/net/e1000/Makefile
drivers/net/e1000/Makefile
+1
-1
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_ethtool.c
+22
-22
drivers/net/e1000/e1000_hw.c
drivers/net/e1000/e1000_hw.c
+56
-56
drivers/net/e1000/e1000_hw.h
drivers/net/e1000/e1000_hw.h
+2
-2
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_main.c
+23
-54
未找到文件。
drivers/net/e1000/Makefile
浏览文件 @
bdad69b2
################################################################################
#
#
# Copyright(c) 1999 - 200
3
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
...
...
drivers/net/e1000/e1000_ethtool.c
浏览文件 @
bdad69b2
...
...
@@ -865,15 +865,15 @@ static int
e1000_intr_test
(
struct
e1000_adapter
*
adapter
,
uint64_t
*
data
)
{
struct
net_device
*
netdev
=
adapter
->
netdev
;
uint32_t
mask
,
i
=
0
,
shared_int
=
TRUE
;
uint32_t
irq
=
adapter
->
pdev
->
irq
;
uint32_t
mask
,
i
=
0
,
shared_int
=
TRUE
;
uint32_t
irq
=
adapter
->
pdev
->
irq
;
*
data
=
0
;
/* Hook up test interrupt handler just for this test */
if
(
!
request_irq
(
irq
,
&
e1000_test_intr
,
0
,
netdev
->
name
,
netdev
))
{
shared_int
=
FALSE
;
}
else
if
(
request_irq
(
irq
,
&
e1000_test_intr
,
SA_SHIRQ
,
if
(
!
request_irq
(
irq
,
&
e1000_test_intr
,
0
,
netdev
->
name
,
netdev
))
{
shared_int
=
FALSE
;
}
else
if
(
request_irq
(
irq
,
&
e1000_test_intr
,
SA_SHIRQ
,
netdev
->
name
,
netdev
)){
*
data
=
1
;
return
-
1
;
...
...
@@ -889,22 +889,22 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
/* Interrupt to test */
mask
=
1
<<
i
;
if
(
!
shared_int
)
{
/* Disable the interrupt to be reported in
* the cause register and then force the same
* interrupt and see if one gets posted. If
* an interrupt was posted to the bus, the
* test failed.
*/
adapter
->
test_icr
=
0
;
E1000_WRITE_REG
(
&
adapter
->
hw
,
IMC
,
mask
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
ICS
,
mask
);
msec_delay
(
10
);
if
(
adapter
->
test_icr
&
mask
)
{
*
data
=
3
;
break
;
}
if
(
!
shared_int
)
{
/* Disable the interrupt to be reported in
* the cause register and then force the same
* interrupt and see if one gets posted. If
* an interrupt was posted to the bus, the
* test failed.
*/
adapter
->
test_icr
=
0
;
E1000_WRITE_REG
(
&
adapter
->
hw
,
IMC
,
mask
);
E1000_WRITE_REG
(
&
adapter
->
hw
,
ICS
,
mask
);
msec_delay
(
10
);
if
(
adapter
->
test_icr
&
mask
)
{
*
data
=
3
;
break
;
}
}
/* Enable the interrupt to be reported in
...
...
@@ -923,7 +923,7 @@ e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
break
;
}
if
(
!
shared_int
)
{
if
(
!
shared_int
)
{
/* Disable the other interrupts to be reported in
* the cause register and then force the other
* interrupts and see if any get posted. If
...
...
drivers/net/e1000/e1000_hw.c
浏览文件 @
bdad69b2
...
...
@@ -765,7 +765,7 @@ e1000_init_hw(struct e1000_hw *hw)
}
if
(
hw
->
mac_type
==
e1000_82573
)
{
e1000_enable_tx_pkt_filtering
(
hw
);
e1000_enable_tx_pkt_filtering
(
hw
);
}
switch
(
hw
->
mac_type
)
{
...
...
@@ -861,7 +861,7 @@ e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
if
(
eeprom_data
!=
EEPROM_RESERVED_WORD
)
{
/* Adjust SERDES output amplitude only. */
eeprom_data
&=
EEPROM_SERDES_AMPLITUDE_MASK
;
eeprom_data
&=
EEPROM_SERDES_AMPLITUDE_MASK
;
ret_val
=
e1000_write_phy_reg
(
hw
,
M88E1000_PHY_EXT_CTRL
,
eeprom_data
);
if
(
ret_val
)
return
ret_val
;
...
...
@@ -1228,7 +1228,7 @@ e1000_copper_link_igp_setup(struct e1000_hw *hw)
if
(
hw
->
phy_reset_disable
)
return
E1000_SUCCESS
;
ret_val
=
e1000_phy_reset
(
hw
);
if
(
ret_val
)
{
DEBUGOUT
(
"Error Resetting the PHY
\n
"
);
...
...
@@ -1370,7 +1370,7 @@ e1000_copper_link_ggp_setup(struct e1000_hw *hw)
DEBUGFUNC
(
"e1000_copper_link_ggp_setup"
);
if
(
!
hw
->
phy_reset_disable
)
{
/* Enable CRS on TX for half-duplex operation. */
ret_val
=
e1000_read_phy_reg
(
hw
,
GG82563_PHY_MAC_SPEC_CTRL
,
&
phy_data
);
...
...
@@ -1519,7 +1519,7 @@ e1000_copper_link_mgp_setup(struct e1000_hw *hw)
if
(
hw
->
phy_reset_disable
)
return
E1000_SUCCESS
;
/* Enable CRS on TX. This must be set for half-duplex operation. */
ret_val
=
e1000_read_phy_reg
(
hw
,
M88E1000_PHY_SPEC_CTRL
,
&
phy_data
);
if
(
ret_val
)
...
...
@@ -1665,7 +1665,7 @@ e1000_copper_link_autoneg(struct e1000_hw *hw)
* collision distance in the Transmit Control Register.
* 2) Set up flow control on the MAC to that established with
* the link partner.
* 3) Config DSP to improve Gigabit link quality for some PHY revisions.
* 3) Config DSP to improve Gigabit link quality for some PHY revisions.
*
* hw - Struct containing variables accessed by shared code
******************************************************************************/
...
...
@@ -1674,7 +1674,7 @@ e1000_copper_link_postconfig(struct e1000_hw *hw)
{
int32_t
ret_val
;
DEBUGFUNC
(
"e1000_copper_link_postconfig"
);
if
(
hw
->
mac_type
>=
e1000_82544
)
{
e1000_config_collision_dist
(
hw
);
}
else
{
...
...
@@ -1698,7 +1698,7 @@ e1000_copper_link_postconfig(struct e1000_hw *hw)
return
ret_val
;
}
}
return
E1000_SUCCESS
;
}
...
...
@@ -1754,11 +1754,11 @@ e1000_setup_copper_link(struct e1000_hw *hw)
}
if
(
hw
->
autoneg
)
{
/* Setup autoneg and flow control advertisement
* and perform autonegotiation */
/* Setup autoneg and flow control advertisement
* and perform autonegotiation */
ret_val
=
e1000_copper_link_autoneg
(
hw
);
if
(
ret_val
)
return
ret_val
;
return
ret_val
;
}
else
{
/* PHY will be set to 10H, 10F, 100H,or 100F
* depending on value from forced_speed_duplex. */
...
...
@@ -1786,7 +1786,7 @@ e1000_setup_copper_link(struct e1000_hw *hw)
ret_val
=
e1000_copper_link_postconfig
(
hw
);
if
(
ret_val
)
return
ret_val
;
DEBUGOUT
(
"Valid link established!!!
\n
"
);
return
E1000_SUCCESS
;
}
...
...
@@ -1984,7 +1984,7 @@ e1000_phy_setup_autoneg(struct e1000_hw *hw)
DEBUGOUT1
(
"Auto-Neg Advertising %x
\n
"
,
mii_autoneg_adv_reg
);
ret_val
=
e1000_write_phy_reg
(
hw
,
PHY_1000T_CTRL
,
mii_1000t_ctrl_reg
);
ret_val
=
e1000_write_phy_reg
(
hw
,
PHY_1000T_CTRL
,
mii_1000t_ctrl_reg
);
if
(
ret_val
)
return
ret_val
;
...
...
@@ -2273,7 +2273,7 @@ e1000_config_mac_to_phy(struct e1000_hw *hw)
DEBUGFUNC
(
"e1000_config_mac_to_phy"
);
/* 82544 or newer MAC, Auto Speed Detection takes care of
/* 82544 or newer MAC, Auto Speed Detection takes care of
* MAC speed/duplex configuration.*/
if
(
hw
->
mac_type
>=
e1000_82544
)
return
E1000_SUCCESS
;
...
...
@@ -2292,9 +2292,9 @@ e1000_config_mac_to_phy(struct e1000_hw *hw)
if
(
ret_val
)
return
ret_val
;
if
(
phy_data
&
M88E1000_PSSR_DPLX
)
if
(
phy_data
&
M88E1000_PSSR_DPLX
)
ctrl
|=
E1000_CTRL_FD
;
else
else
ctrl
&=
~
E1000_CTRL_FD
;
e1000_config_collision_dist
(
hw
);
...
...
@@ -2493,10 +2493,10 @@ e1000_config_fc_after_link_up(struct e1000_hw *hw)
*/
if
(
hw
->
original_fc
==
e1000_fc_full
)
{
hw
->
fc
=
e1000_fc_full
;
DEBUGOUT
(
"Flow Control = FULL.
\
r\
n
"
);
DEBUGOUT
(
"Flow Control = FULL.
\n
"
);
}
else
{
hw
->
fc
=
e1000_fc_rx_pause
;
DEBUGOUT
(
"Flow Control = RX PAUSE frames only.
\
r\
n
"
);
DEBUGOUT
(
"Flow Control = RX PAUSE frames only.
\n
"
);
}
}
/* For receiving PAUSE frames ONLY.
...
...
@@ -2512,7 +2512,7 @@ e1000_config_fc_after_link_up(struct e1000_hw *hw)
(
mii_nway_lp_ability_reg
&
NWAY_LPAR_PAUSE
)
&&
(
mii_nway_lp_ability_reg
&
NWAY_LPAR_ASM_DIR
))
{
hw
->
fc
=
e1000_fc_tx_pause
;
DEBUGOUT
(
"Flow Control = TX PAUSE frames only.
\
r\
n
"
);
DEBUGOUT
(
"Flow Control = TX PAUSE frames only.
\n
"
);
}
/* For transmitting PAUSE frames ONLY.
*
...
...
@@ -2527,7 +2527,7 @@ e1000_config_fc_after_link_up(struct e1000_hw *hw)
!
(
mii_nway_lp_ability_reg
&
NWAY_LPAR_PAUSE
)
&&
(
mii_nway_lp_ability_reg
&
NWAY_LPAR_ASM_DIR
))
{
hw
->
fc
=
e1000_fc_rx_pause
;
DEBUGOUT
(
"Flow Control = RX PAUSE frames only.
\
r\
n
"
);
DEBUGOUT
(
"Flow Control = RX PAUSE frames only.
\n
"
);
}
/* Per the IEEE spec, at this point flow control should be
* disabled. However, we want to consider that we could
...
...
@@ -2553,10 +2553,10 @@ e1000_config_fc_after_link_up(struct e1000_hw *hw)
hw
->
original_fc
==
e1000_fc_tx_pause
)
||
hw
->
fc_strict_ieee
)
{
hw
->
fc
=
e1000_fc_none
;
DEBUGOUT
(
"Flow Control = NONE.
\
r\
n
"
);
DEBUGOUT
(
"Flow Control = NONE.
\n
"
);
}
else
{
hw
->
fc
=
e1000_fc_rx_pause
;
DEBUGOUT
(
"Flow Control = RX PAUSE frames only.
\
r\
n
"
);
DEBUGOUT
(
"Flow Control = RX PAUSE frames only.
\n
"
);
}
/* Now we need to do one last check... If we auto-
...
...
@@ -2581,7 +2581,7 @@ e1000_config_fc_after_link_up(struct e1000_hw *hw)
return
ret_val
;
}
}
else
{
DEBUGOUT
(
"Copper PHY and Auto Neg has not completed.
\
r\
n
"
);
DEBUGOUT
(
"Copper PHY and Auto Neg has not completed.
\n
"
);
}
}
return
E1000_SUCCESS
;
...
...
@@ -2764,7 +2764,7 @@ e1000_check_for_link(struct e1000_hw *hw)
hw
->
autoneg_failed
=
1
;
return
0
;
}
DEBUGOUT
(
"NOT RXing /C/, disable AutoNeg and force link.
\
r\
n
"
);
DEBUGOUT
(
"NOT RXing /C/, disable AutoNeg and force link.
\n
"
);
/* Disable auto-negotiation in the TXCW register */
E1000_WRITE_REG
(
hw
,
TXCW
,
(
hw
->
txcw
&
~
E1000_TXCW_ANE
));
...
...
@@ -2789,7 +2789,7 @@ e1000_check_for_link(struct e1000_hw *hw)
else
if
(((
hw
->
media_type
==
e1000_media_type_fiber
)
||
(
hw
->
media_type
==
e1000_media_type_internal_serdes
))
&&
(
ctrl
&
E1000_CTRL_SLU
)
&&
(
rxcw
&
E1000_RXCW_C
))
{
DEBUGOUT
(
"RXing /C/, enable AutoNeg and stop forcing link.
\
r\
n
"
);
DEBUGOUT
(
"RXing /C/, enable AutoNeg and stop forcing link.
\n
"
);
E1000_WRITE_REG
(
hw
,
TXCW
,
hw
->
txcw
);
E1000_WRITE_REG
(
hw
,
CTRL
,
(
ctrl
&
~
E1000_CTRL_SLU
));
...
...
@@ -2852,13 +2852,13 @@ e1000_get_speed_and_duplex(struct e1000_hw *hw,
if
(
status
&
E1000_STATUS_FD
)
{
*
duplex
=
FULL_DUPLEX
;
DEBUGOUT
(
"Full Duplex
\
r\
n
"
);
DEBUGOUT
(
"Full Duplex
\n
"
);
}
else
{
*
duplex
=
HALF_DUPLEX
;
DEBUGOUT
(
" Half Duplex
\
r\
n
"
);
DEBUGOUT
(
" Half Duplex
\n
"
);
}
}
else
{
DEBUGOUT
(
"1000 Mbs, Full Duplex
\
r\
n
"
);
DEBUGOUT
(
"1000 Mbs, Full Duplex
\n
"
);
*
speed
=
SPEED_1000
;
*
duplex
=
FULL_DUPLEX
;
}
...
...
@@ -2884,7 +2884,7 @@ e1000_get_speed_and_duplex(struct e1000_hw *hw,
}
}
if
((
hw
->
mac_type
==
e1000_80003es2lan
)
&&
if
((
hw
->
mac_type
==
e1000_80003es2lan
)
&&
(
hw
->
media_type
==
e1000_media_type_copper
))
{
if
(
*
speed
==
SPEED_1000
)
ret_val
=
e1000_configure_kmrn_for_1000
(
hw
);
...
...
@@ -3160,7 +3160,7 @@ e1000_read_phy_reg(struct e1000_hw *hw,
if
(
e1000_swfw_sync_acquire
(
hw
,
swfw
))
return
-
E1000_ERR_SWFW_SYNC
;
if
((
hw
->
phy_type
==
e1000_phy_igp
||
if
((
hw
->
phy_type
==
e1000_phy_igp
||
hw
->
phy_type
==
e1000_phy_igp_2
)
&&
(
reg_addr
>
MAX_PHY_MULTI_PAGE_REG
))
{
ret_val
=
e1000_write_phy_reg_ex
(
hw
,
IGP01E1000_PHY_PAGE_SELECT
,
...
...
@@ -3299,7 +3299,7 @@ e1000_write_phy_reg(struct e1000_hw *hw,
if
(
e1000_swfw_sync_acquire
(
hw
,
swfw
))
return
-
E1000_ERR_SWFW_SYNC
;
if
((
hw
->
phy_type
==
e1000_phy_igp
||
if
((
hw
->
phy_type
==
e1000_phy_igp
||
hw
->
phy_type
==
e1000_phy_igp_2
)
&&
(
reg_addr
>
MAX_PHY_MULTI_PAGE_REG
))
{
ret_val
=
e1000_write_phy_reg_ex
(
hw
,
IGP01E1000_PHY_PAGE_SELECT
,
...
...
@@ -3497,22 +3497,22 @@ e1000_phy_hw_reset(struct e1000_hw *hw)
}
/* Read the device control register and assert the E1000_CTRL_PHY_RST
* bit. Then, take it out of reset.
* For pre-e1000_82571 hardware, we delay for 10ms between the assert
* For pre-e1000_82571 hardware, we delay for 10ms between the assert
* and deassert. For e1000_82571 hardware and later, we instead delay
* for 50us between and 10ms after the deassertion.
*/
ctrl
=
E1000_READ_REG
(
hw
,
CTRL
);
E1000_WRITE_REG
(
hw
,
CTRL
,
ctrl
|
E1000_CTRL_PHY_RST
);
E1000_WRITE_FLUSH
(
hw
);
if
(
hw
->
mac_type
<
e1000_82571
)
if
(
hw
->
mac_type
<
e1000_82571
)
msec_delay
(
10
);
else
udelay
(
100
);
E1000_WRITE_REG
(
hw
,
CTRL
,
ctrl
);
E1000_WRITE_FLUSH
(
hw
);
if
(
hw
->
mac_type
>=
e1000_82571
)
msec_delay
(
10
);
e1000_swfw_sync_release
(
hw
,
swfw
);
...
...
@@ -3816,7 +3816,7 @@ e1000_phy_m88_get_info(struct e1000_hw *hw,
/* Check polarity status */
ret_val
=
e1000_check_polarity
(
hw
,
&
polarity
);
if
(
ret_val
)
return
ret_val
;
return
ret_val
;
phy_info
->
cable_polarity
=
polarity
;
ret_val
=
e1000_read_phy_reg
(
hw
,
M88E1000_PHY_SPEC_STATUS
,
&
phy_data
);
...
...
@@ -4541,14 +4541,14 @@ e1000_read_eeprom_eerd(struct e1000_hw *hw,
E1000_WRITE_REG
(
hw
,
EERD
,
eerd
);
error
=
e1000_poll_eerd_eewr_done
(
hw
,
E1000_EEPROM_POLL_READ
);
if
(
error
)
{
break
;
}
data
[
i
]
=
(
E1000_READ_REG
(
hw
,
EERD
)
>>
E1000_EEPROM_RW_REG_DATA
);
}
return
error
;
}
...
...
@@ -4574,24 +4574,24 @@ e1000_write_eeprom_eewr(struct e1000_hw *hw,
return
-
E1000_ERR_SWFW_SYNC
;
for
(
i
=
0
;
i
<
words
;
i
++
)
{
register_value
=
(
data
[
i
]
<<
E1000_EEPROM_RW_REG_DATA
)
|
((
offset
+
i
)
<<
E1000_EEPROM_RW_ADDR_SHIFT
)
|
register_value
=
(
data
[
i
]
<<
E1000_EEPROM_RW_REG_DATA
)
|
((
offset
+
i
)
<<
E1000_EEPROM_RW_ADDR_SHIFT
)
|
E1000_EEPROM_RW_REG_START
;
error
=
e1000_poll_eerd_eewr_done
(
hw
,
E1000_EEPROM_POLL_WRITE
);
if
(
error
)
{
break
;
}
}
E1000_WRITE_REG
(
hw
,
EEWR
,
register_value
);
error
=
e1000_poll_eerd_eewr_done
(
hw
,
E1000_EEPROM_POLL_WRITE
);
if
(
error
)
{
break
;
}
}
}
e1000_swfw_sync_release
(
hw
,
E1000_SWFW_EEP_SM
);
return
error
;
}
...
...
@@ -4611,7 +4611,7 @@ e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int eerd)
for
(
i
=
0
;
i
<
attempts
;
i
++
)
{
if
(
eerd
==
E1000_EEPROM_POLL_READ
)
reg
=
E1000_READ_REG
(
hw
,
EERD
);
else
else
reg
=
E1000_READ_REG
(
hw
,
EEWR
);
if
(
reg
&
E1000_EEPROM_RW_REG_DONE
)
{
...
...
@@ -5136,7 +5136,7 @@ e1000_mc_addr_list_update(struct e1000_hw *hw,
uint32_t i;
uint32_t num_rar_entry;
uint32_t num_mta_entry;
DEBUGFUNC("e1000_mc_addr_list_update");
/* Set the new number of MC addresses that we are being requested to use. */
...
...
@@ -6241,7 +6241,7 @@ e1000_check_polarity(struct e1000_hw *hw,
* 1 - Downshift ocured.
*
* returns: - E1000_ERR_XXX
* E1000_SUCCESS
* E1000_SUCCESS
*
* For phy's older then IGP, this function reads the Downshift bit in the Phy
* Specific Status register. For IGP phy's, it reads the Downgrade bit in the
...
...
@@ -6256,7 +6256,7 @@ e1000_check_downshift(struct e1000_hw *hw)
DEBUGFUNC
(
"e1000_check_downshift"
);
if
(
hw
->
phy_type
==
e1000_phy_igp
||
if
(
hw
->
phy_type
==
e1000_phy_igp
||
hw
->
phy_type
==
e1000_phy_igp_2
)
{
ret_val
=
e1000_read_phy_reg
(
hw
,
IGP01E1000_PHY_LINK_HEALTH
,
&
phy_data
);
...
...
@@ -6685,8 +6685,8 @@ e1000_set_d0_lplu_state(struct e1000_hw *hw,
}
else
{
phy_data
|=
IGP02E1000_PM_D0_LPLU
;
phy_data
|=
IGP02E1000_PM_D0_LPLU
;
ret_val
=
e1000_write_phy_reg
(
hw
,
IGP02E1000_PHY_POWER_MGMT
,
phy_data
);
if
(
ret_val
)
return
ret_val
;
...
...
@@ -6778,7 +6778,7 @@ int32_t
e1000_host_if_read_cookie
(
struct
e1000_hw
*
hw
,
uint8_t
*
buffer
)
{
uint8_t
i
;
uint32_t
offset
=
E1000_MNG_DHCP_COOKIE_OFFSET
;
uint32_t
offset
=
E1000_MNG_DHCP_COOKIE_OFFSET
;
uint8_t
length
=
E1000_MNG_DHCP_COOKIE_LENGTH
;
length
=
(
length
>>
2
);
...
...
@@ -6797,7 +6797,7 @@ e1000_host_if_read_cookie(struct e1000_hw * hw, uint8_t *buffer)
* and also checks whether the previous command is completed.
* It busy waits in case of previous command is not completed.
*
* returns: - E1000_ERR_HOST_INTERFACE_COMMAND in case if is not ready or
* returns: - E1000_ERR_HOST_INTERFACE_COMMAND in case if is not ready or
* timeout
* - E1000_SUCCESS for success.
****************************************************************************/
...
...
@@ -6821,7 +6821,7 @@ e1000_mng_enable_host_if(struct e1000_hw * hw)
msec_delay_irq
(
1
);
}
if
(
i
==
E1000_MNG_DHCP_COMMAND_TIMEOUT
)
{
if
(
i
==
E1000_MNG_DHCP_COMMAND_TIMEOUT
)
{
DEBUGOUT
(
"Previous command timeout failed .
\n
"
);
return
-
E1000_ERR_HOST_INTERFACE_COMMAND
;
}
...
...
drivers/net/e1000/e1000_hw.h
浏览文件 @
bdad69b2
...
...
@@ -375,7 +375,7 @@ struct e1000_host_mng_dhcp_cookie{
};
#endif
int32_t
e1000_mng_write_dhcp_info
(
struct
e1000_hw
*
hw
,
uint8_t
*
buffer
,
int32_t
e1000_mng_write_dhcp_info
(
struct
e1000_hw
*
hw
,
uint8_t
*
buffer
,
uint16_t
length
);
boolean_t
e1000_check_mng_mode
(
struct
e1000_hw
*
hw
);
boolean_t
e1000_enable_tx_pkt_filtering
(
struct
e1000_hw
*
hw
);
...
...
@@ -1802,7 +1802,7 @@ struct e1000_hw {
* value2 = [0..64512], default=4096
* value3 = [0..64512], default=0
*/
#define E1000_PSRCTL_BSIZE0_MASK 0x0000007F
#define E1000_PSRCTL_BSIZE1_MASK 0x00003F00
#define E1000_PSRCTL_BSIZE2_MASK 0x003F0000
...
...
drivers/net/e1000/e1000_main.c
浏览文件 @
bdad69b2
...
...
@@ -29,45 +29,6 @@
#include "e1000.h"
/* Change Log
* 7.0.33 3-Feb-2006
* o Added another fix for the pass false carrier bit
* 7.0.32 24-Jan-2006
* o Need to rebuild with noew version number for the pass false carrier
* fix in e1000_hw.c
* 7.0.30 18-Jan-2006
* o fixup for tso workaround to disable it for pci-x
* o fix mem leak on 82542
* o fixes for 10 Mb/s connections and incorrect stats
* 7.0.28 01/06/2006
* o hardware workaround to only set "speed mode" bit for 1G link.
* 7.0.26 12/23/2005
* o wake on lan support modified for device ID 10B5
* o fix dhcp + vlan issue not making it to the iAMT firmware
* 7.0.24 12/9/2005
* o New hardware support for the Gigabit NIC embedded in the south bridge
* o Fixes to the recycling logic (skb->tail) from IBM LTC
* 6.3.9 12/16/2005
* o incorporate fix for recycled skbs from IBM LTC
* 6.3.7 11/18/2005
* o Honor eeprom setting for enabling/disabling Wake On Lan
* 6.3.5 11/17/2005
* o Fix memory leak in rx ring handling for PCI Express adapters
* 6.3.4 11/8/05
* o Patch from Jesper Juhl to remove redundant NULL checks for kfree
* 6.3.2 9/20/05
* o Render logic that sets/resets DRV_LOAD as inline functions to
* avoid code replication. If f/w is AMT then set DRV_LOAD only when
* network interface is open.
* o Handle DRV_LOAD set/reset in cases where AMT uses VLANs.
* o Adjust PBA partioning for Jumbo frames using MTU size and not
* rx_buffer_len
* 6.3.1 9/19/05
* o Use adapter->tx_timeout_factor in Tx Hung Detect logic
* (e1000_clean_tx_irq)
* o Support for 8086:10B5 device (Quad Port)
*/
char
e1000_driver_name
[]
=
"e1000"
;
static
char
e1000_driver_string
[]
=
"Intel(R) PRO/1000 Network Driver"
;
#ifndef CONFIG_E1000_NAPI
...
...
@@ -75,7 +36,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
#else
#define DRIVERNAPI "-NAPI"
#endif
#define DRV_VERSION "7.0.38-k
2
"DRIVERNAPI
#define DRV_VERSION "7.0.38-k
4
"DRIVERNAPI
char
e1000_driver_version
[]
=
DRV_VERSION
;
static
char
e1000_copyright
[]
=
"Copyright (c) 1999-2006 Intel Corporation."
;
...
...
@@ -221,6 +182,7 @@ static void e1000_restore_vlan(struct e1000_adapter *adapter);
static
int
e1000_suspend
(
struct
pci_dev
*
pdev
,
pm_message_t
state
);
static
int
e1000_resume
(
struct
pci_dev
*
pdev
);
#endif
static
void
e1000_shutdown
(
struct
pci_dev
*
pdev
);
#ifdef CONFIG_NET_POLL_CONTROLLER
/* for netdump / net console */
...
...
@@ -236,8 +198,9 @@ static struct pci_driver e1000_driver = {
/* Power Managment Hooks */
#ifdef CONFIG_PM
.
suspend
=
e1000_suspend
,
.
resume
=
e1000_resume
.
resume
=
e1000_resume
,
#endif
.
shutdown
=
e1000_shutdown
};
MODULE_AUTHOR
(
"Intel Corporation, <linux.nics@intel.com>"
);
...
...
@@ -347,7 +310,7 @@ e1000_update_mng_vlan(struct e1000_adapter *adapter)
* For ASF and Pass Through versions of f/w this means that the
* driver is no longer loaded. For AMT version (only with 82573) i
* of the f/w this means that the netowrk i/f is closed.
*
*
**/
static
void
...
...
@@ -379,10 +342,10 @@ e1000_release_hw_control(struct e1000_adapter *adapter)
* @adapter: address of board private structure
*
* e1000_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit.
* For ASF and Pass Through versions of f/w this means that
* the driver is loaded. For AMT version (only with 82573)
* For ASF and Pass Through versions of f/w this means that
* the driver is loaded. For AMT version (only with 82573)
* of the f/w this means that the netowrk i/f is open.
*
*
**/
static
void
...
...
@@ -712,8 +675,8 @@ e1000_probe(struct pci_dev *pdev,
DPRINTK
(
PROBE
,
INFO
,
"PHY reset is blocked due to SOL/IDER session.
\n
"
);
/* if ksp3, indicate if it's port a being setup */
if
(
pdev
->
device
==
E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3
&&
e1000_ksp3_port_a
==
0
)
if
(
pdev
->
device
==
E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3
&&
e1000_ksp3_port_a
==
0
)
adapter
->
ksp3_port_a
=
1
;
e1000_ksp3_port_a
++
;
/* Reset for multiple KP3 adapters */
...
...
@@ -741,9 +704,9 @@ e1000_probe(struct pci_dev *pdev,
if
(
pci_using_dac
)
netdev
->
features
|=
NETIF_F_HIGHDMA
;
/* hard_start_xmit is safe against parallel locking */
netdev
->
features
|=
NETIF_F_LLTX
;
/* hard_start_xmit is safe against parallel locking */
netdev
->
features
|=
NETIF_F_LLTX
;
adapter
->
en_mng_pt
=
e1000_enable_mng_pass_thru
(
&
adapter
->
hw
);
/* before reading the EEPROM, reset the controller to
...
...
@@ -2771,7 +2734,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
unsigned
int
nr_frags
=
0
;
unsigned
int
mss
=
0
;
int
count
=
0
;
int
tso
;
int
tso
;
unsigned
int
f
;
len
-=
skb
->
data_len
;
...
...
@@ -2784,7 +2747,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
#ifdef NETIF_F_TSO
mss
=
skb_shinfo
(
skb
)
->
tso_size
;
/* The controller does a simple calculation to
/* The controller does a simple calculation to
* make sure there is enough room in the FIFO before
* initiating the DMA for each buffer. The calc is:
* 4 = ceil(buffer len/mss). To make sure we don't
...
...
@@ -2807,7 +2770,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
case
e1000_82573
:
pull_size
=
min
((
unsigned
int
)
4
,
skb
->
data_len
);
if
(
!
__pskb_pull_tail
(
skb
,
pull_size
))
{
printk
(
KERN_ERR
printk
(
KERN_ERR
"__pskb_pull_tail failed.
\n
"
);
dev_kfree_skb_any
(
skb
);
return
NETDEV_TX_OK
;
...
...
@@ -3753,7 +3716,7 @@ e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
* throughput, so unsplit small packets and save the alloc/put*/
if
(
l1
&&
((
length
+
l1
)
<=
adapter
->
rx_ps_bsize0
))
{
u8
*
vaddr
;
/* there is no documentation about how to call
/* there is no documentation about how to call
* kmap_atomic, so we can't hold the mapping
* very long */
pci_dma_sync_single_for_cpu
(
pdev
,
...
...
@@ -4605,6 +4568,12 @@ e1000_resume(struct pci_dev *pdev)
return
0
;
}
#endif
static
void
e1000_shutdown
(
struct
pci_dev
*
pdev
)
{
e1000_suspend
(
pdev
,
PMSG_SUSPEND
);
}
#ifdef CONFIG_NET_POLL_CONTROLLER
/*
* Polling 'interrupt' - used by things like netconsole to send skbs
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录