Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
bf745e88
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
bf745e88
编写于
3月 08, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-next-2.6
上级
a7ac8fc1
2b642ca5
变更
21
展开全部
显示空白变更内容
内联
并排
Showing
21 changed file
with
608 addition
and
320 deletion
+608
-320
drivers/net/Kconfig
drivers/net/Kconfig
+1
-0
drivers/net/igb/e1000_defines.h
drivers/net/igb/e1000_defines.h
+1
-0
drivers/net/igb/e1000_hw.h
drivers/net/igb/e1000_hw.h
+4
-0
drivers/net/igb/e1000_regs.h
drivers/net/igb/e1000_regs.h
+7
-0
drivers/net/igb/igb_ethtool.c
drivers/net/igb/igb_ethtool.c
+8
-1
drivers/net/igb/igb_main.c
drivers/net/igb/igb_main.c
+9
-0
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe.h
+2
-0
drivers/net/ixgbe/ixgbe_82598.c
drivers/net/ixgbe/ixgbe_82598.c
+28
-10
drivers/net/ixgbe/ixgbe_82599.c
drivers/net/ixgbe/ixgbe_82599.c
+74
-50
drivers/net/ixgbe/ixgbe_common.c
drivers/net/ixgbe/ixgbe_common.c
+304
-205
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_ethtool.c
+20
-21
drivers/net/ixgbe/ixgbe_fcoe.c
drivers/net/ixgbe/ixgbe_fcoe.c
+74
-12
drivers/net/ixgbe/ixgbe_fcoe.h
drivers/net/ixgbe/ixgbe_fcoe.h
+4
-0
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+3
-1
drivers/net/ixgbe/ixgbe_mbx.c
drivers/net/ixgbe/ixgbe_mbx.c
+12
-15
drivers/net/ixgbe/ixgbe_phy.c
drivers/net/ixgbe/ixgbe_phy.c
+19
-2
drivers/net/ixgbe/ixgbe_phy.h
drivers/net/ixgbe/ixgbe_phy.h
+4
-0
drivers/net/ixgbe/ixgbe_type.h
drivers/net/ixgbe/ixgbe_type.h
+10
-0
drivers/net/ixgbe/ixgbe_x540.c
drivers/net/ixgbe/ixgbe_x540.c
+6
-3
include/linux/netdevice.h
include/linux/netdevice.h
+4
-0
net/8021q/vlan_dev.c
net/8021q/vlan_dev.c
+14
-0
未找到文件。
drivers/net/Kconfig
浏览文件 @
bf745e88
...
...
@@ -2109,6 +2109,7 @@ config E1000
config E1000E
tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
depends on PCI && (!SPARC32 || BROKEN)
select CRC32
---help---
This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
ethernet family of adapters. For PCI or PCI-X e1000 adapters,
...
...
drivers/net/igb/e1000_defines.h
浏览文件 @
bf745e88
...
...
@@ -110,6 +110,7 @@
/* Management Control */
#define E1000_MANC_SMBUS_EN 0x00000001
/* SMBus Enabled - RO */
#define E1000_MANC_ASF_EN 0x00000002
/* ASF Enabled - RO */
#define E1000_MANC_EN_BMC2OS 0x10000000
/* OSBMC is Enabled or not */
/* Enable Neighbor Discovery Filtering */
#define E1000_MANC_RCV_TCO_EN 0x00020000
/* Receive TCO Packets Enabled */
#define E1000_MANC_BLK_PHY_RST_ON_IDE 0x00040000
/* Block phy resets */
...
...
drivers/net/igb/e1000_hw.h
浏览文件 @
bf745e88
...
...
@@ -248,6 +248,10 @@ struct e1000_hw_stats {
u64
scvpc
;
u64
hrmpc
;
u64
doosync
;
u64
o2bgptc
;
u64
o2bspc
;
u64
b2ospc
;
u64
b2ogprc
;
};
struct
e1000_phy_stats
{
...
...
drivers/net/igb/e1000_regs.h
浏览文件 @
bf745e88
...
...
@@ -328,4 +328,11 @@
/* DMA Coalescing registers */
#define E1000_PCIEMISC 0x05BB8
/* PCIE misc config register */
/* OS2BMC Registers */
#define E1000_B2OSPC 0x08FE0
/* BMC2OS packets sent by BMC */
#define E1000_B2OGPRC 0x04158
/* BMC2OS packets received by host */
#define E1000_O2BGPTC 0x08FE4
/* OS2BMC packets received by BMC */
#define E1000_O2BSPC 0x0415C
/* OS2BMC packets transmitted by host */
#endif
drivers/net/igb/igb_ethtool.c
浏览文件 @
bf745e88
...
...
@@ -86,6 +86,10 @@ static const struct igb_stats igb_gstrings_stats[] = {
IGB_STAT
(
"tx_smbus"
,
stats
.
mgptc
),
IGB_STAT
(
"rx_smbus"
,
stats
.
mgprc
),
IGB_STAT
(
"dropped_smbus"
,
stats
.
mgpdc
),
IGB_STAT
(
"os2bmc_rx_by_bmc"
,
stats
.
o2bgptc
),
IGB_STAT
(
"os2bmc_tx_by_bmc"
,
stats
.
b2ospc
),
IGB_STAT
(
"os2bmc_tx_by_host"
,
stats
.
o2bspc
),
IGB_STAT
(
"os2bmc_rx_by_host"
,
stats
.
b2ogprc
),
};
#define IGB_NETDEV_STAT(_net_stat) { \
...
...
@@ -603,7 +607,10 @@ static void igb_get_regs(struct net_device *netdev,
regs_buff
[
548
]
=
rd32
(
E1000_TDFT
);
regs_buff
[
549
]
=
rd32
(
E1000_TDFHS
);
regs_buff
[
550
]
=
rd32
(
E1000_TDFPC
);
regs_buff
[
551
]
=
adapter
->
stats
.
o2bgptc
;
regs_buff
[
552
]
=
adapter
->
stats
.
b2ospc
;
regs_buff
[
553
]
=
adapter
->
stats
.
o2bspc
;
regs_buff
[
554
]
=
adapter
->
stats
.
b2ogprc
;
}
static
int
igb_get_eeprom_len
(
struct
net_device
*
netdev
)
...
...
drivers/net/igb/igb_main.c
浏览文件 @
bf745e88
...
...
@@ -4560,6 +4560,15 @@ void igb_update_stats(struct igb_adapter *adapter,
adapter
->
stats
.
mgptc
+=
rd32
(
E1000_MGTPTC
);
adapter
->
stats
.
mgprc
+=
rd32
(
E1000_MGTPRC
);
adapter
->
stats
.
mgpdc
+=
rd32
(
E1000_MGTPDC
);
/* OS2BMC Stats */
reg
=
rd32
(
E1000_MANC
);
if
(
reg
&
E1000_MANC_EN_BMC2OS
)
{
adapter
->
stats
.
o2bgptc
+=
rd32
(
E1000_O2BGPTC
);
adapter
->
stats
.
o2bspc
+=
rd32
(
E1000_O2BSPC
);
adapter
->
stats
.
b2ospc
+=
rd32
(
E1000_B2OSPC
);
adapter
->
stats
.
b2ogprc
+=
rd32
(
E1000_B2OGPRC
);
}
}
static
irqreturn_t
igb_msix_other
(
int
irq
,
void
*
data
)
...
...
drivers/net/ixgbe/ixgbe.h
浏览文件 @
bf745e88
...
...
@@ -552,6 +552,8 @@ extern int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
struct
sk_buff
*
skb
);
extern
int
ixgbe_fcoe_ddp_get
(
struct
net_device
*
netdev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
);
extern
int
ixgbe_fcoe_ddp_target
(
struct
net_device
*
netdev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
);
extern
int
ixgbe_fcoe_ddp_put
(
struct
net_device
*
netdev
,
u16
xid
);
extern
int
ixgbe_fcoe_enable
(
struct
net_device
*
netdev
);
extern
int
ixgbe_fcoe_disable
(
struct
net_device
*
netdev
);
...
...
drivers/net/ixgbe/ixgbe_82598.c
浏览文件 @
bf745e88
...
...
@@ -280,10 +280,22 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
{
enum
ixgbe_media_type
media_type
;
/* Detect if there is a copper PHY attached. */
switch
(
hw
->
phy
.
type
)
{
case
ixgbe_phy_cu_unknown
:
case
ixgbe_phy_tn
:
case
ixgbe_phy_aq
:
media_type
=
ixgbe_media_type_copper
;
goto
out
;
default:
break
;
}
/* Media type for I82598 is based on device ID */
switch
(
hw
->
device_id
)
{
case
IXGBE_DEV_ID_82598
:
case
IXGBE_DEV_ID_82598_BX
:
/* Default device ID is mezzanine card KX/KX4 */
media_type
=
ixgbe_media_type_backplane
;
break
;
case
IXGBE_DEV_ID_82598AF_DUAL_PORT
:
...
...
@@ -306,7 +318,7 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
media_type
=
ixgbe_media_type_unknown
;
break
;
}
out:
return
media_type
;
}
...
...
@@ -354,7 +366,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
/* Negotiate the fc mode to use */
ret_val
=
ixgbe_fc_autoneg
(
hw
);
if
(
ret_val
)
if
(
ret_val
==
IXGBE_ERR_FLOW_CONTROL
)
goto
out
;
/* Disable any previous flow control settings */
...
...
@@ -372,10 +384,10 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
* 2: Tx flow control is enabled (we can send pause frames but
* we do not support receiving pause frames).
* 3: Both Rx and Tx flow control (symmetric) are enabled.
* other: Invalid.
#ifdef CONFIG_DCB
* 4: Priority Flow Control is enabled.
#endif
* other: Invalid.
*/
switch
(
hw
->
fc
.
current_mode
)
{
case
ixgbe_fc_none
:
...
...
@@ -432,9 +444,10 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
reg
=
(
rx_pba_size
-
hw
->
fc
.
low_water
)
<<
6
;
if
(
hw
->
fc
.
send_xon
)
reg
|=
IXGBE_FCRTL_XONE
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTL
(
packetbuf_num
),
reg
);
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
10
;
reg
=
(
rx_pba_size
-
hw
->
fc
.
high_water
)
<<
6
;
reg
|=
IXGBE_FCRTH_FCEN
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRTH
(
packetbuf_num
),
reg
);
...
...
@@ -632,7 +645,7 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
* @hw: pointer to hardware structure
* @speed: new link speed
* @autoneg: true if auto-negotiation enabled
* @autoneg_wait_to_complete: true
if waiting is needed to complete
* @autoneg_wait_to_complete: true
when waiting for completion is needed
*
* Set the link speed in the AUTOC register and restarts link.
**/
...
...
@@ -671,7 +684,8 @@ static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
* ixgbe_hw This will write the AUTOC register based on the new
* stored values
*/
status
=
ixgbe_start_mac_link_82598
(
hw
,
autoneg_wait_to_complete
);
status
=
ixgbe_start_mac_link_82598
(
hw
,
autoneg_wait_to_complete
);
}
return
status
;
...
...
@@ -1090,10 +1104,12 @@ static u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
/* Copper PHY must be checked before AUTOC LMS to determine correct
* physical layer because 10GBase-T PHYs use LMS = KX4/KX */
if
(
hw
->
phy
.
type
==
ixgbe_phy_tn
||
hw
->
phy
.
type
==
ixgbe_phy_cu_unknown
)
{
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_PMA_EXTABLE
,
MDIO_MMD_PMAPMD
,
&
ext_ability
);
switch
(
hw
->
phy
.
type
)
{
case
ixgbe_phy_tn
:
case
ixgbe_phy_aq
:
case
ixgbe_phy_cu_unknown
:
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_PMA_EXTABLE
,
MDIO_MMD_PMAPMD
,
&
ext_ability
);
if
(
ext_ability
&
MDIO_PMA_EXTABLE_10GBT
)
physical_layer
|=
IXGBE_PHYSICAL_LAYER_10GBASE_T
;
if
(
ext_ability
&
MDIO_PMA_EXTABLE_1000BT
)
...
...
@@ -1101,6 +1117,8 @@ static u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
if
(
ext_ability
&
MDIO_PMA_EXTABLE_100BTX
)
physical_layer
|=
IXGBE_PHYSICAL_LAYER_100BASE_TX
;
goto
out
;
default:
break
;
}
switch
(
autoc
&
IXGBE_AUTOC_LMS_MASK
)
{
...
...
drivers/net/ixgbe/ixgbe_82599.c
浏览文件 @
bf745e88
...
...
@@ -470,8 +470,6 @@ static void ixgbe_enable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
**/
static
void
ixgbe_flap_tx_laser_multispeed_fiber
(
struct
ixgbe_hw
*
hw
)
{
hw_dbg
(
hw
,
"ixgbe_flap_tx_laser_multispeed_fiber
\n
"
);
if
(
hw
->
mac
.
autotry_restart
)
{
ixgbe_disable_tx_laser_multispeed_fiber
(
hw
);
ixgbe_enable_tx_laser_multispeed_fiber
(
hw
);
...
...
@@ -494,17 +492,21 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
bool
autoneg_wait_to_complete
)
{
s32
status
=
0
;
ixgbe_link_speed
phy_link_speed
;
ixgbe_link_speed
link_speed
=
IXGBE_LINK_SPEED_UNKNOWN
;
ixgbe_link_speed
highest_link_speed
=
IXGBE_LINK_SPEED_UNKNOWN
;
u32
speedcnt
=
0
;
u32
esdp_reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_ESDP
);
u32
i
=
0
;
bool
link_up
=
false
;
bool
negotiation
;
int
i
;
/* Mask off requested but non-supported speeds */
hw
->
mac
.
ops
.
get_link_capabilities
(
hw
,
&
phy_link_speed
,
&
negotiation
);
speed
&=
phy_link_speed
;
status
=
hw
->
mac
.
ops
.
get_link_capabilities
(
hw
,
&
link_speed
,
&
negotiation
);
if
(
status
!=
0
)
return
status
;
speed
&=
link_speed
;
/*
* Try each speed one by one, highest priority first. We do this in
...
...
@@ -515,9 +517,12 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
highest_link_speed
=
IXGBE_LINK_SPEED_10GB_FULL
;
/* If we already have link at this speed, just jump out */
hw
->
mac
.
ops
.
check_link
(
hw
,
&
phy_link_speed
,
&
link_up
,
false
);
status
=
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
status
!=
0
)
return
status
;
if
((
phy_
link_speed
==
IXGBE_LINK_SPEED_10GB_FULL
)
&&
link_up
)
if
((
link_speed
==
IXGBE_LINK_SPEED_10GB_FULL
)
&&
link_up
)
goto
out
;
/* Set the module link speed */
...
...
@@ -548,8 +553,11 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
msleep
(
100
);
/* If we have link, just jump out */
hw
->
mac
.
ops
.
check_link
(
hw
,
&
phy_
link_speed
,
status
=
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
status
!=
0
)
return
status
;
if
(
link_up
)
goto
out
;
}
...
...
@@ -561,9 +569,12 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
highest_link_speed
=
IXGBE_LINK_SPEED_1GB_FULL
;
/* If we already have link at this speed, just jump out */
hw
->
mac
.
ops
.
check_link
(
hw
,
&
phy_link_speed
,
&
link_up
,
false
);
status
=
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
status
!=
0
)
return
status
;
if
((
phy_
link_speed
==
IXGBE_LINK_SPEED_1GB_FULL
)
&&
link_up
)
if
((
link_speed
==
IXGBE_LINK_SPEED_1GB_FULL
)
&&
link_up
)
goto
out
;
/* Set the module link speed */
...
...
@@ -589,7 +600,11 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
msleep
(
100
);
/* If we have link, just jump out */
hw
->
mac
.
ops
.
check_link
(
hw
,
&
phy_link_speed
,
&
link_up
,
false
);
status
=
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
status
!=
0
)
return
status
;
if
(
link_up
)
goto
out
;
}
...
...
@@ -632,13 +647,10 @@ static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
bool
autoneg_wait_to_complete
)
{
s32
status
=
0
;
ixgbe_link_speed
link_speed
;
ixgbe_link_speed
link_speed
=
IXGBE_LINK_SPEED_UNKNOWN
;
s32
i
,
j
;
bool
link_up
=
false
;
u32
autoc_reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_AUTOC
);
struct
ixgbe_adapter
*
adapter
=
hw
->
back
;
hw_dbg
(
hw
,
"ixgbe_setup_mac_link_smartspeed.
\n
"
);
/* Set autoneg_advertised value based on input link speed */
hw
->
phy
.
autoneg_advertised
=
0
;
...
...
@@ -664,7 +676,7 @@ static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
for
(
j
=
0
;
j
<
IXGBE_SMARTSPEED_MAX_RETRIES
;
j
++
)
{
status
=
ixgbe_setup_mac_link_82599
(
hw
,
speed
,
autoneg
,
autoneg_wait_to_complete
);
if
(
status
)
if
(
status
!=
0
)
goto
out
;
/*
...
...
@@ -677,8 +689,11 @@ static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
mdelay
(
100
);
/* If we have link, just jump out */
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
status
=
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
status
!=
0
)
goto
out
;
if
(
link_up
)
goto
out
;
}
...
...
@@ -696,7 +711,7 @@ static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
hw
->
phy
.
smart_speed_active
=
true
;
status
=
ixgbe_setup_mac_link_82599
(
hw
,
speed
,
autoneg
,
autoneg_wait_to_complete
);
if
(
status
)
if
(
status
!=
0
)
goto
out
;
/*
...
...
@@ -709,8 +724,11 @@ static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
mdelay
(
100
);
/* If we have link, just jump out */
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
status
=
hw
->
mac
.
ops
.
check_link
(
hw
,
&
link_speed
,
&
link_up
,
false
);
if
(
status
!=
0
)
goto
out
;
if
(
link_up
)
goto
out
;
}
...
...
@@ -722,7 +740,7 @@ static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
out:
if
(
link_up
&&
(
link_speed
==
IXGBE_LINK_SPEED_1GB_FULL
))
e_info
(
hw
,
"Smartspeed has downgraded the link speed from "
hw_dbg
(
hw
,
"Smartspeed has downgraded the link speed from "
"the maximum advertised
\n
"
);
return
status
;
}
...
...
@@ -754,6 +772,9 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
/* Check to see if speed passed in is supported. */
hw
->
mac
.
ops
.
get_link_capabilities
(
hw
,
&
link_capabilities
,
&
autoneg
);
if
(
status
!=
0
)
goto
out
;
speed
&=
link_capabilities
;
if
(
speed
==
IXGBE_LINK_SPEED_UNKNOWN
)
{
...
...
@@ -883,7 +904,7 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
/* PHY ops must be identified and initialized prior to reset */
/* I
nit PHY and function pointers, perform SFP setup
*/
/* I
dentify PHY and related function pointers
*/
status
=
hw
->
phy
.
ops
.
init
(
hw
);
if
(
status
==
IXGBE_ERR_SFP_NOT_SUPPORTED
)
...
...
@@ -895,6 +916,9 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
hw
->
phy
.
sfp_setup_needed
=
false
;
}
if
(
status
==
IXGBE_ERR_SFP_NOT_SUPPORTED
)
goto
reset_hw_out
;
/* Reset PHY */
if
(
hw
->
phy
.
reset_disable
==
false
&&
hw
->
phy
.
ops
.
reset
!=
NULL
)
hw
->
phy
.
ops
.
reset
(
hw
);
...
...
drivers/net/ixgbe/ixgbe_common.c
浏览文件 @
bf745e88
此差异已折叠。
点击以展开。
drivers/net/ixgbe/ixgbe_ethtool.c
浏览文件 @
bf745e88
...
...
@@ -161,29 +161,25 @@ static int ixgbe_get_settings(struct net_device *netdev,
}
ecmd
->
advertising
=
ADVERTISED_Autoneg
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_100_FULL
)
if
(
hw
->
phy
.
autoneg_advertised
)
{
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_100_FULL
)
ecmd
->
advertising
|=
ADVERTISED_100baseT_Full
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_10GB_FULL
)
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_10GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_10000baseT_Full
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_1GB_FULL
)
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_1GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_1000baseT_Full
;
}
else
{
/*
* It's possible that phy.autoneg_advertised may not be
* set yet. If so display what the default would be -
* both 1G and 10G supported.
* Default advertised modes in case
* phy.autoneg_advertised isn't set.
*/
if
(
!
(
ecmd
->
advertising
&
(
ADVERTISED_1000baseT_Full
|
ADVERTISED_10000baseT_Full
)))
ecmd
->
advertising
|=
(
ADVERTISED_10000baseT_Full
|
ADVERTISED_1000baseT_Full
);
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_X540
:
if
(
!
(
ecmd
->
advertising
&
ADVERTISED_100baseT_Full
))
ecmd
->
advertising
|=
(
ADVERTISED_100baseT_Full
);
break
;
default:
break
;
if
(
hw
->
mac
.
type
==
ixgbe_mac_X540
)
ecmd
->
advertising
|=
ADVERTISED_100baseT_Full
;
}
if
(
hw
->
phy
.
media_type
==
ixgbe_media_type_copper
)
{
...
...
@@ -336,6 +332,9 @@ static int ixgbe_set_settings(struct net_device *netdev,
if
(
ecmd
->
advertising
&
ADVERTISED_1000baseT_Full
)
advertised
|=
IXGBE_LINK_SPEED_1GB_FULL
;
if
(
ecmd
->
advertising
&
ADVERTISED_100baseT_Full
)
advertised
|=
IXGBE_LINK_SPEED_100_FULL
;
if
(
old
==
advertised
)
return
err
;
/* this sets the link speed and restarts auto-neg */
...
...
drivers/net/ixgbe/ixgbe_fcoe.c
浏览文件 @
bf745e88
...
...
@@ -135,22 +135,19 @@ int ixgbe_fcoe_ddp_put(struct net_device *netdev, u16 xid)
return
len
;
}
/**
* ixgbe_fcoe_ddp_
get
- called to set up ddp context
* ixgbe_fcoe_ddp_
setup
- called to set up ddp context
* @netdev: the corresponding net_device
* @xid: the exchange id requesting ddp
* @sgl: the scatter-gather list for this request
* @sgc: the number of scatter-gather items
*
* This is the implementation of net_device_ops.ndo_fcoe_ddp_setup
* and is expected to be called from ULD, e.g., FCP layer of libfc
* to set up ddp for the corresponding xid of the given sglist for
* the corresponding I/O.
*
* Returns : 1 for success and 0 for no ddp
*/
int
ixgbe_fcoe_ddp_get
(
struct
net_device
*
netdev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
)
static
int
ixgbe_fcoe_ddp_setup
(
struct
net_device
*
netdev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
,
int
target_mode
)
{
struct
ixgbe_adapter
*
adapter
;
struct
ixgbe_hw
*
hw
;
...
...
@@ -164,7 +161,7 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
unsigned
int
lastsize
;
unsigned
int
thisoff
=
0
;
unsigned
int
thislen
=
0
;
u32
fcbuff
,
fcdmarw
,
fcfltrw
;
u32
fcbuff
,
fcdmarw
,
fcfltrw
,
fcrxctl
;
dma_addr_t
addr
=
0
;
if
(
!
netdev
||
!
sgl
)
...
...
@@ -275,6 +272,9 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
fcbuff
=
(
IXGBE_FCBUFF_4KB
<<
IXGBE_FCBUFF_BUFFSIZE_SHIFT
);
fcbuff
|=
((
j
&
0xff
)
<<
IXGBE_FCBUFF_BUFFCNT_SHIFT
);
fcbuff
|=
(
firstoff
<<
IXGBE_FCBUFF_OFFSET_SHIFT
);
/* Set WRCONTX bit to allow DDP for target */
if
(
target_mode
)
fcbuff
|=
(
IXGBE_FCBUFF_WRCONTX
);
fcbuff
|=
(
IXGBE_FCBUFF_VALID
);
fcdmarw
=
xid
;
...
...
@@ -287,6 +287,16 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
/* program DMA context */
hw
=
&
adapter
->
hw
;
spin_lock_bh
(
&
fcoe
->
lock
);
/* turn on last frame indication for target mode as FCP_RSPtarget is
* supposed to send FCP_RSP when it is done. */
if
(
target_mode
&&
!
test_bit
(
__IXGBE_FCOE_TARGET
,
&
fcoe
->
mode
))
{
set_bit
(
__IXGBE_FCOE_TARGET
,
&
fcoe
->
mode
);
fcrxctl
=
IXGBE_READ_REG
(
hw
,
IXGBE_FCRXCTRL
);
fcrxctl
|=
IXGBE_FCRXCTRL_LASTSEQH
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCRXCTRL
,
fcrxctl
);
}
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCPTRL
,
ddp
->
udp
&
DMA_BIT_MASK
(
32
));
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCPTRH
,
(
u64
)
ddp
->
udp
>>
32
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCBUFF
,
fcbuff
);
...
...
@@ -295,6 +305,7 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCPARAM
,
0
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCFLT
,
IXGBE_FCFLT_VALID
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_FCFLTRW
,
fcfltrw
);
spin_unlock_bh
(
&
fcoe
->
lock
);
return
1
;
...
...
@@ -308,6 +319,47 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
return
0
;
}
/**
* ixgbe_fcoe_ddp_get - called to set up ddp context in initiator mode
* @netdev: the corresponding net_device
* @xid: the exchange id requesting ddp
* @sgl: the scatter-gather list for this request
* @sgc: the number of scatter-gather items
*
* This is the implementation of net_device_ops.ndo_fcoe_ddp_setup
* and is expected to be called from ULD, e.g., FCP layer of libfc
* to set up ddp for the corresponding xid of the given sglist for
* the corresponding I/O.
*
* Returns : 1 for success and 0 for no ddp
*/
int
ixgbe_fcoe_ddp_get
(
struct
net_device
*
netdev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
)
{
return
ixgbe_fcoe_ddp_setup
(
netdev
,
xid
,
sgl
,
sgc
,
0
);
}
/**
* ixgbe_fcoe_ddp_target - called to set up ddp context in target mode
* @netdev: the corresponding net_device
* @xid: the exchange id requesting ddp
* @sgl: the scatter-gather list for this request
* @sgc: the number of scatter-gather items
*
* This is the implementation of net_device_ops.ndo_fcoe_ddp_target
* and is expected to be called from ULD, e.g., FCP layer of libfc
* to set up ddp for the corresponding xid of the given sglist for
* the corresponding I/O. The DDP in target mode is a write I/O request
* from the initiator.
*
* Returns : 1 for success and 0 for no ddp
*/
int
ixgbe_fcoe_ddp_target
(
struct
net_device
*
netdev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
)
{
return
ixgbe_fcoe_ddp_setup
(
netdev
,
xid
,
sgl
,
sgc
,
1
);
}
/**
* ixgbe_fcoe_ddp - check ddp status and mark it done
* @adapter: ixgbe adapter
...
...
@@ -331,6 +383,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
struct
ixgbe_fcoe
*
fcoe
;
struct
ixgbe_fcoe_ddp
*
ddp
;
struct
fc_frame_header
*
fh
;
struct
fcoe_crc_eof
*
crc
;
if
(
!
ixgbe_rx_is_fcoe
(
rx_desc
))
goto
ddp_out
;
...
...
@@ -384,7 +437,18 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
else
if
(
ddp
->
len
)
rc
=
ddp
->
len
;
}
/* In target mode, check the last data frame of the sequence.
* For DDP in target mode, data is already DDPed but the header
* indication of the last data frame ould allow is to tell if we
* got all the data and the ULP can send FCP_RSP back, as this is
* not a full fcoe frame, we fill the trailer here so it won't be
* dropped by the ULP stack.
*/
if
((
fh
->
fh_r_ctl
==
FC_RCTL_DD_SOL_DATA
)
&&
(
fctl
&
FC_FC_END_SEQ
))
{
crc
=
(
struct
fcoe_crc_eof
*
)
skb_put
(
skb
,
sizeof
(
*
crc
));
crc
->
fcoe_eof
=
FC_EOF_T
;
}
ddp_out:
return
rc
;
}
...
...
@@ -840,5 +904,3 @@ int ixgbe_fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type)
}
return
rc
;
}
drivers/net/ixgbe/ixgbe_fcoe.h
浏览文件 @
bf745e88
...
...
@@ -52,6 +52,9 @@
/* fcerr */
#define IXGBE_FCERR_BADCRC 0x00100000
/* FCoE DDP for target mode */
#define __IXGBE_FCOE_TARGET 1
struct
ixgbe_fcoe_ddp
{
int
len
;
u32
err
;
...
...
@@ -66,6 +69,7 @@ struct ixgbe_fcoe {
u8
tc
;
u8
up
;
#endif
unsigned
long
mode
;
atomic_t
refcnt
;
spinlock_t
lock
;
struct
pci_pool
*
pool
;
...
...
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
bf745e88
...
...
@@ -3775,7 +3775,8 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)
if
(
ret
)
goto
link_cfg_out
;
if
(
hw
->
mac
.
ops
.
get_link_capabilities
)
autoneg
=
hw
->
phy
.
autoneg_advertised
;
if
((
!
autoneg
)
&&
(
hw
->
mac
.
ops
.
get_link_capabilities
))
ret
=
hw
->
mac
.
ops
.
get_link_capabilities
(
hw
,
&
autoneg
,
&
negotiation
);
if
(
ret
)
...
...
@@ -7019,6 +7020,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {
#endif
#ifdef IXGBE_FCOE
.
ndo_fcoe_ddp_setup
=
ixgbe_fcoe_ddp_get
,
.
ndo_fcoe_ddp_target
=
ixgbe_fcoe_ddp_target
,
.
ndo_fcoe_ddp_done
=
ixgbe_fcoe_ddp_put
,
.
ndo_fcoe_enable
=
ixgbe_fcoe_enable
,
.
ndo_fcoe_disable
=
ixgbe_fcoe_disable
,
...
...
drivers/net/ixgbe/ixgbe_mbx.c
浏览文件 @
bf745e88
...
...
@@ -448,23 +448,20 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)
{
struct
ixgbe_mbx_info
*
mbx
=
&
hw
->
mbx
;
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_82599EB
:
case
ixgbe_mac_X540
:
mbx
->
timeout
=
0
;
mbx
->
usec_delay
=
0
;
if
(
hw
->
mac
.
type
!=
ixgbe_mac_82599EB
&&
hw
->
mac
.
type
!=
ixgbe_mac_X540
)
return
;
mbx
->
size
=
IXGBE_VFMAILBOX_SIZE
;
mbx
->
timeout
=
0
;
mbx
->
udelay
=
0
;
mbx
->
stats
.
msgs_tx
=
0
;
mbx
->
stats
.
msgs_rx
=
0
;
mbx
->
stats
.
reqs
=
0
;
mbx
->
stats
.
acks
=
0
;
mbx
->
stats
.
rsts
=
0
;
break
;
default:
break
;
}
mbx
->
size
=
IXGBE_VFMAILBOX_SIZE
;
}
#endif
/* CONFIG_PCI_IOV */
...
...
drivers/net/ixgbe/ixgbe_phy.c
浏览文件 @
bf745e88
...
...
@@ -57,6 +57,7 @@ s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
{
s32
status
=
IXGBE_ERR_PHY_ADDR_INVALID
;
u32
phy_addr
;
u16
ext_ability
=
0
;
if
(
hw
->
phy
.
type
==
ixgbe_phy_unknown
)
{
for
(
phy_addr
=
0
;
phy_addr
<
IXGBE_MAX_PHY_ADDR
;
phy_addr
++
)
{
...
...
@@ -65,11 +66,28 @@ s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
ixgbe_get_phy_id
(
hw
);
hw
->
phy
.
type
=
ixgbe_get_phy_type_from_id
(
hw
->
phy
.
id
);
if
(
hw
->
phy
.
type
==
ixgbe_phy_unknown
)
{
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_PMA_EXTABLE
,
MDIO_MMD_PMAPMD
,
&
ext_ability
);
if
(
ext_ability
&
(
MDIO_PMA_EXTABLE_10GBT
|
MDIO_PMA_EXTABLE_1000BT
))
hw
->
phy
.
type
=
ixgbe_phy_cu_unknown
;
else
hw
->
phy
.
type
=
ixgbe_phy_generic
;
}
status
=
0
;
break
;
}
}
/* clear value if nothing found */
if
(
status
!=
0
)
hw
->
phy
.
mdio
.
prtad
=
0
;
}
else
{
status
=
0
;
...
...
@@ -823,7 +841,6 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
goto
out
;
}
/* This is guaranteed to be 82599, no need to check for NULL */
hw
->
mac
.
ops
.
get_device_caps
(
hw
,
&
enforce_sfp
);
if
(
!
(
enforce_sfp
&
IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP
)
&&
!
((
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core0
)
||
...
...
drivers/net/ixgbe/ixgbe_phy.h
浏览文件 @
bf745e88
...
...
@@ -58,6 +58,10 @@
#define IXGBE_I2C_EEPROM_STATUS_FAIL 0x2
#define IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS 0x3
/* Flow control defines */
#define IXGBE_TAF_SYM_PAUSE 0x400
#define IXGBE_TAF_ASM_PAUSE 0x800
/* Bit-shift macros */
#define IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT 24
#define IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT 16
...
...
drivers/net/ixgbe/ixgbe_type.h
浏览文件 @
bf745e88
...
...
@@ -659,6 +659,8 @@
#define IXGBE_QPTC(_i) (0x06030 + ((_i) * 0x40))
/* 16 of these */
#define IXGBE_QBRC(_i) (0x01034 + ((_i) * 0x40))
/* 16 of these */
#define IXGBE_QBTC(_i) (0x06034 + ((_i) * 0x40))
/* 16 of these */
#define IXGBE_QBRC_L(_i) (0x01034 + ((_i) * 0x40))
/* 16 of these */
#define IXGBE_QBRC_H(_i) (0x01038 + ((_i) * 0x40))
/* 16 of these */
#define IXGBE_QPRDC(_i) (0x01430 + ((_i) * 0x40))
/* 16 of these */
#define IXGBE_QBTC_L(_i) (0x08700 + ((_i) * 0x8))
/* 16 of these */
#define IXGBE_QBTC_H(_i) (0x08704 + ((_i) * 0x8))
/* 16 of these */
...
...
@@ -669,6 +671,11 @@
#define IXGBE_FCOEDWRC 0x0242C
/* Number of FCoE DWords Received */
#define IXGBE_FCOEPTC 0x08784
/* Number of FCoE Packets Transmitted */
#define IXGBE_FCOEDWTC 0x08788
/* Number of FCoE DWords Transmitted */
#define IXGBE_PCRC8ECL 0x0E810
#define IXGBE_PCRC8ECH 0x0E811
#define IXGBE_PCRC8ECH_MASK 0x1F
#define IXGBE_LDPCECL 0x0E820
#define IXGBE_LDPCECH 0x0E821
/* Management */
#define IXGBE_MAVTV(_i) (0x05010 + ((_i) * 4))
/* 8 of these (0-7) */
...
...
@@ -2691,6 +2698,9 @@ struct ixgbe_info {
#define IXGBE_ERR_EEPROM_VERSION -24
#define IXGBE_ERR_NO_SPACE -25
#define IXGBE_ERR_OVERTEMP -26
#define IXGBE_ERR_FC_NOT_NEGOTIATED -27
#define IXGBE_ERR_FC_NOT_SUPPORTED -28
#define IXGBE_ERR_FLOW_CONTROL -29
#define IXGBE_ERR_SFP_SETUP_NOT_COMPLETE -30
#define IXGBE_ERR_PBA_SECTION -31
#define IXGBE_ERR_INVALID_ARGUMENT -32
...
...
drivers/net/ixgbe/ixgbe_x540.c
浏览文件 @
bf745e88
...
...
@@ -253,6 +253,9 @@ static u32 ixgbe_get_supported_physical_layer_X540(struct ixgbe_hw *hw)
/**
* ixgbe_init_eeprom_params_X540 - Initialize EEPROM params
* @hw: pointer to hardware structure
*
* Initializes the EEPROM parameters ixgbe_eeprom_info within the
* ixgbe_hw struct in order to set up EEPROM access.
**/
static
s32
ixgbe_init_eeprom_params_X540
(
struct
ixgbe_hw
*
hw
)
{
...
...
include/linux/netdevice.h
浏览文件 @
bf745e88
...
...
@@ -871,6 +871,10 @@ struct net_device_ops {
unsigned
int
sgc
);
int
(
*
ndo_fcoe_ddp_done
)(
struct
net_device
*
dev
,
u16
xid
);
int
(
*
ndo_fcoe_ddp_target
)(
struct
net_device
*
dev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
);
#define NETDEV_FCOE_WWNN 0
#define NETDEV_FCOE_WWPN 1
int
(
*
ndo_fcoe_get_wwn
)(
struct
net_device
*
dev
,
...
...
net/8021q/vlan_dev.c
浏览文件 @
bf745e88
...
...
@@ -625,6 +625,19 @@ static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
rc
=
ops
->
ndo_fcoe_get_wwn
(
real_dev
,
wwn
,
type
);
return
rc
;
}
static
int
vlan_dev_fcoe_ddp_target
(
struct
net_device
*
dev
,
u16
xid
,
struct
scatterlist
*
sgl
,
unsigned
int
sgc
)
{
struct
net_device
*
real_dev
=
vlan_dev_info
(
dev
)
->
real_dev
;
const
struct
net_device_ops
*
ops
=
real_dev
->
netdev_ops
;
int
rc
=
0
;
if
(
ops
->
ndo_fcoe_ddp_target
)
rc
=
ops
->
ndo_fcoe_ddp_target
(
real_dev
,
xid
,
sgl
,
sgc
);
return
rc
;
}
#endif
static
void
vlan_dev_change_rx_flags
(
struct
net_device
*
dev
,
int
change
)
...
...
@@ -858,6 +871,7 @@ static const struct net_device_ops vlan_netdev_ops = {
.
ndo_fcoe_enable
=
vlan_dev_fcoe_enable
,
.
ndo_fcoe_disable
=
vlan_dev_fcoe_disable
,
.
ndo_fcoe_get_wwn
=
vlan_dev_fcoe_get_wwn
,
.
ndo_fcoe_ddp_target
=
vlan_dev_fcoe_ddp_target
,
#endif
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录