Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
a45d49d1
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a45d49d1
编写于
3月 03, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-next-2.6
上级
e066008b
a52055e0
变更
27
展开全部
隐藏空白更改
内联
并排
Showing
27 changed file
with
547 addition
and
447 deletion
+547
-447
drivers/net/igb/igb_ethtool.c
drivers/net/igb/igb_ethtool.c
+8
-5
drivers/net/igb/igb_main.c
drivers/net/igb/igb_main.c
+6
-1
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe.h
+1
-1
drivers/net/ixgbe/ixgbe_82598.c
drivers/net/ixgbe/ixgbe_82598.c
+40
-23
drivers/net/ixgbe/ixgbe_82599.c
drivers/net/ixgbe/ixgbe_82599.c
+73
-31
drivers/net/ixgbe/ixgbe_common.c
drivers/net/ixgbe/ixgbe_common.c
+173
-265
drivers/net/ixgbe/ixgbe_common.h
drivers/net/ixgbe/ixgbe_common.h
+1
-3
drivers/net/ixgbe/ixgbe_dcb.c
drivers/net/ixgbe/ixgbe_dcb.c
+1
-1
drivers/net/ixgbe/ixgbe_dcb.h
drivers/net/ixgbe/ixgbe_dcb.h
+1
-1
drivers/net/ixgbe/ixgbe_dcb_82598.c
drivers/net/ixgbe/ixgbe_dcb_82598.c
+1
-1
drivers/net/ixgbe/ixgbe_dcb_82598.h
drivers/net/ixgbe/ixgbe_dcb_82598.h
+1
-1
drivers/net/ixgbe/ixgbe_dcb_82599.c
drivers/net/ixgbe/ixgbe_dcb_82599.c
+1
-1
drivers/net/ixgbe/ixgbe_dcb_82599.h
drivers/net/ixgbe/ixgbe_dcb_82599.h
+1
-1
drivers/net/ixgbe/ixgbe_dcb_nl.c
drivers/net/ixgbe/ixgbe_dcb_nl.c
+1
-1
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_ethtool.c
+1
-1
drivers/net/ixgbe/ixgbe_fcoe.c
drivers/net/ixgbe/ixgbe_fcoe.c
+1
-1
drivers/net/ixgbe/ixgbe_fcoe.h
drivers/net/ixgbe/ixgbe_fcoe.h
+1
-1
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+9
-3
drivers/net/ixgbe/ixgbe_mbx.c
drivers/net/ixgbe/ixgbe_mbx.c
+1
-1
drivers/net/ixgbe/ixgbe_mbx.h
drivers/net/ixgbe/ixgbe_mbx.h
+1
-1
drivers/net/ixgbe/ixgbe_phy.c
drivers/net/ixgbe/ixgbe_phy.c
+174
-64
drivers/net/ixgbe/ixgbe_phy.h
drivers/net/ixgbe/ixgbe_phy.h
+1
-1
drivers/net/ixgbe/ixgbe_sriov.c
drivers/net/ixgbe/ixgbe_sriov.c
+1
-1
drivers/net/ixgbe/ixgbe_sriov.h
drivers/net/ixgbe/ixgbe_sriov.h
+1
-1
drivers/net/ixgbe/ixgbe_type.h
drivers/net/ixgbe/ixgbe_type.h
+23
-17
drivers/net/ixgbe/ixgbe_x540.c
drivers/net/ixgbe/ixgbe_x540.c
+22
-12
drivers/net/ixgbevf/ixgbevf_main.c
drivers/net/ixgbevf/ixgbevf_main.c
+2
-7
未找到文件。
drivers/net/igb/igb_ethtool.c
浏览文件 @
a45d49d1
...
...
@@ -727,8 +727,9 @@ static void igb_get_drvinfo(struct net_device *netdev,
char
firmware_version
[
32
];
u16
eeprom_data
;
strncpy
(
drvinfo
->
driver
,
igb_driver_name
,
32
);
strncpy
(
drvinfo
->
version
,
igb_driver_version
,
32
);
strncpy
(
drvinfo
->
driver
,
igb_driver_name
,
sizeof
(
drvinfo
->
driver
)
-
1
);
strncpy
(
drvinfo
->
version
,
igb_driver_version
,
sizeof
(
drvinfo
->
version
)
-
1
);
/* EEPROM image version # is reported as firmware version # for
* 82575 controllers */
...
...
@@ -738,8 +739,10 @@ static void igb_get_drvinfo(struct net_device *netdev,
(
eeprom_data
&
0x0FF0
)
>>
4
,
eeprom_data
&
0x000F
);
strncpy
(
drvinfo
->
fw_version
,
firmware_version
,
32
);
strncpy
(
drvinfo
->
bus_info
,
pci_name
(
adapter
->
pdev
),
32
);
strncpy
(
drvinfo
->
fw_version
,
firmware_version
,
sizeof
(
drvinfo
->
fw_version
)
-
1
);
strncpy
(
drvinfo
->
bus_info
,
pci_name
(
adapter
->
pdev
),
sizeof
(
drvinfo
->
bus_info
)
-
1
);
drvinfo
->
n_stats
=
IGB_STATS_LEN
;
drvinfo
->
testinfo_len
=
IGB_TEST_LEN
;
drvinfo
->
regdump_len
=
igb_get_regs_len
(
netdev
);
...
...
@@ -1070,7 +1073,7 @@ static bool reg_pattern_test(struct igb_adapter *adapter, u64 *data,
{
0x5A5A5A5A
,
0xA5A5A5A5
,
0x00000000
,
0xFFFFFFFF
};
for
(
pat
=
0
;
pat
<
ARRAY_SIZE
(
_test
);
pat
++
)
{
wr32
(
reg
,
(
_test
[
pat
]
&
write
));
val
=
rd32
(
reg
);
val
=
rd32
(
reg
)
&
mask
;
if
(
val
!=
(
_test
[
pat
]
&
write
&
mask
))
{
dev_err
(
&
adapter
->
pdev
->
dev
,
"pattern test reg %04X "
"failed: got 0x%08X expected 0x%08X
\n
"
,
...
...
drivers/net/igb/igb_main.c
浏览文件 @
a45d49d1
...
...
@@ -2291,7 +2291,12 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
switch
(
hw
->
mac
.
type
)
{
case
e1000_82576
:
case
e1000_i350
:
adapter
->
vfs_allocated_count
=
(
max_vfs
>
7
)
?
7
:
max_vfs
;
if
(
max_vfs
>
7
)
{
dev_warn
(
&
pdev
->
dev
,
"Maximum of 7 VFs per PF, using max
\n
"
);
adapter
->
vfs_allocated_count
=
7
;
}
else
adapter
->
vfs_allocated_count
=
max_vfs
;
break
;
default:
break
;
...
...
drivers/net/ixgbe/ixgbe.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_82598.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -627,7 +627,6 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
return
0
;
}
/**
* ixgbe_setup_mac_link_82598 - Set MAC link speed
* @hw: pointer to hardware structure
...
...
@@ -698,7 +697,6 @@ static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
/* Setup the PHY according to input speed */
status
=
hw
->
phy
.
ops
.
setup_link_speed
(
hw
,
speed
,
autoneg
,
autoneg_wait_to_complete
);
/* Set up MAC */
ixgbe_start_mac_link_82598
(
hw
,
autoneg_wait_to_complete
);
...
...
@@ -770,7 +768,6 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
else
if
(
phy_status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
no_phy_reset
;
hw
->
phy
.
ops
.
reset
(
hw
);
}
...
...
@@ -779,12 +776,9 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
* Prevent the PCI-E bus from from hanging by disabling PCI-E master
* access and verify no pending requests before reset
*/
status
=
ixgbe_disable_pcie_master
(
hw
);
if
(
status
!=
0
)
{
status
=
IXGBE_ERR_MASTER_REQUESTS_PENDING
;
hw_dbg
(
hw
,
"PCI-E Master disable polling has failed.
\n
"
);
}
ixgbe_disable_pcie_master
(
hw
);
mac_reset_top:
/*
* Issue global reset to the MAC. This needs to be a SW reset.
* If link reset is used, it might reset the MAC when mng is using it
...
...
@@ -805,6 +799,19 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
hw_dbg
(
hw
,
"Reset polling failed to complete.
\n
"
);
}
/*
* Double resets are required for recovery from certain error
* conditions. Between resets, it is necessary to stall to allow time
* for any pending HW events to complete. We use 1usec since that is
* what is needed for ixgbe_disable_pcie_master(). The second reset
* then clears out any effects of those events.
*/
if
(
hw
->
mac
.
flags
&
IXGBE_FLAGS_DOUBLE_RESET_REQUIRED
)
{
hw
->
mac
.
flags
&=
~
IXGBE_FLAGS_DOUBLE_RESET_REQUIRED
;
udelay
(
1
);
goto
mac_reset_top
;
}
msleep
(
50
);
gheccr
=
IXGBE_READ_REG
(
hw
,
IXGBE_GHECCR
);
...
...
@@ -824,15 +831,15 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
IXGBE_WRITE_REG
(
hw
,
IXGBE_AUTOC
,
hw
->
mac
.
orig_autoc
);
}
/* Store the permanent mac address */
hw
->
mac
.
ops
.
get_mac_addr
(
hw
,
hw
->
mac
.
perm_addr
);
/*
* Store MAC address from RAR0, clear receive address registers, and
* clear the multicast table
*/
hw
->
mac
.
ops
.
init_rx_addrs
(
hw
);
/* Store the permanent mac address */
hw
->
mac
.
ops
.
get_mac_addr
(
hw
,
hw
->
mac
.
perm_addr
);
reset_hw_out:
if
(
phy_status
)
status
=
phy_status
;
...
...
@@ -849,6 +856,13 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
static
s32
ixgbe_set_vmdq_82598
(
struct
ixgbe_hw
*
hw
,
u32
rar
,
u32
vmdq
)
{
u32
rar_high
;
u32
rar_entries
=
hw
->
mac
.
num_rar_entries
;
/* Make sure we are using a valid rar index range */
if
(
rar
>=
rar_entries
)
{
hw_dbg
(
hw
,
"RAR index %d is out of range.
\n
"
,
rar
);
return
IXGBE_ERR_INVALID_ARGUMENT
;
}
rar_high
=
IXGBE_READ_REG
(
hw
,
IXGBE_RAH
(
rar
));
rar_high
&=
~
IXGBE_RAH_VIND_MASK
;
...
...
@@ -868,14 +882,17 @@ static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
u32
rar_high
;
u32
rar_entries
=
hw
->
mac
.
num_rar_entries
;
if
(
rar
<
rar_entries
)
{
rar_high
=
IXGBE_READ_REG
(
hw
,
IXGBE_RAH
(
rar
));
if
(
rar_high
&
IXGBE_RAH_VIND_MASK
)
{
rar_high
&=
~
IXGBE_RAH_VIND_MASK
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RAH
(
rar
),
rar_high
);
}
}
else
{
/* Make sure we are using a valid rar index range */
if
(
rar
>=
rar_entries
)
{
hw_dbg
(
hw
,
"RAR index %d is out of range.
\n
"
,
rar
);
return
IXGBE_ERR_INVALID_ARGUMENT
;
}
rar_high
=
IXGBE_READ_REG
(
hw
,
IXGBE_RAH
(
rar
));
if
(
rar_high
&
IXGBE_RAH_VIND_MASK
)
{
rar_high
&=
~
IXGBE_RAH_VIND_MASK
;
IXGBE_WRITE_REG
(
hw
,
IXGBE_RAH
(
rar
),
rar_high
);
}
return
0
;
...
...
@@ -994,13 +1011,12 @@ static s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val)
}
/**
* ixgbe_read_i2c_eeprom_82598 - Read 8 bit EEPROM word of an SFP+ module
* over I2C interface through an intermediate phy.
* ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
* @hw: pointer to hardware structure
* @byte_offset: EEPROM byte offset to read
* @eeprom_data: value read
*
* Performs byte read operation to SFP module's EEPROM over I2C interface.
* Performs
8
byte read operation to SFP module's EEPROM over I2C interface.
**/
static
s32
ixgbe_read_i2c_eeprom_82598
(
struct
ixgbe_hw
*
hw
,
u8
byte_offset
,
u8
*
eeprom_data
)
...
...
@@ -1179,13 +1195,14 @@ static struct ixgbe_mac_operations mac_ops_82598 = {
.
set_vmdq
=
&
ixgbe_set_vmdq_82598
,
.
clear_vmdq
=
&
ixgbe_clear_vmdq_82598
,
.
init_rx_addrs
=
&
ixgbe_init_rx_addrs_generic
,
.
update_uc_addr_list
=
&
ixgbe_update_uc_addr_list_generic
,
.
update_mc_addr_list
=
&
ixgbe_update_mc_addr_list_generic
,
.
enable_mc
=
&
ixgbe_enable_mc_generic
,
.
disable_mc
=
&
ixgbe_disable_mc_generic
,
.
clear_vfta
=
&
ixgbe_clear_vfta_82598
,
.
set_vfta
=
&
ixgbe_set_vfta_82598
,
.
fc_enable
=
&
ixgbe_fc_enable_82598
,
.
acquire_swfw_sync
=
&
ixgbe_acquire_swfw_sync
,
.
release_swfw_sync
=
&
ixgbe_release_swfw_sync
,
};
static
struct
ixgbe_eeprom_operations
eeprom_ops_82598
=
{
...
...
drivers/net/ixgbe/ixgbe_82599.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -112,7 +112,8 @@ static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
goto
setup_sfp_out
;
/* PHY config will finish before releasing the semaphore */
ret_val
=
ixgbe_acquire_swfw_sync
(
hw
,
IXGBE_GSSR_MAC_CSR_SM
);
ret_val
=
hw
->
mac
.
ops
.
acquire_swfw_sync
(
hw
,
IXGBE_GSSR_MAC_CSR_SM
);
if
(
ret_val
!=
0
)
{
ret_val
=
IXGBE_ERR_SWFW_SYNC
;
goto
setup_sfp_out
;
...
...
@@ -329,11 +330,14 @@ static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
enum
ixgbe_media_type
media_type
;
/* Detect if there is a copper PHY attached. */
if
(
hw
->
phy
.
type
==
ixgbe_phy_cu_unknown
||
hw
->
phy
.
type
==
ixgbe_phy_tn
||
hw
->
phy
.
type
==
ixgbe_phy_aq
)
{
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
;
}
switch
(
hw
->
device_id
)
{
...
...
@@ -354,6 +358,9 @@ static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
case
IXGBE_DEV_ID_82599_CX4
:
media_type
=
ixgbe_media_type_cx4
;
break
;
case
IXGBE_DEV_ID_82599_T3_LOM
:
media_type
=
ixgbe_media_type_copper
;
break
;
default:
media_type
=
ixgbe_media_type_unknown
;
break
;
...
...
@@ -411,14 +418,14 @@ static s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
return
status
;
}
/**
* ixgbe_disable_tx_laser_multispeed_fiber - Disable Tx laser
* @hw: pointer to hardware structure
*
* The base drivers may require better control over SFP+ module
* PHY states. This includes selectively shutting down the Tx
* laser on the PHY, effectively halting physical link.
**/
/**
* ixgbe_disable_tx_laser_multispeed_fiber - Disable Tx laser
* @hw: pointer to hardware structure
*
* The base drivers may require better control over SFP+ module
* PHY states. This includes selectively shutting down the Tx
* laser on the PHY, effectively halting physical link.
**/
static
void
ixgbe_disable_tx_laser_multispeed_fiber
(
struct
ixgbe_hw
*
hw
)
{
u32
esdp_reg
=
IXGBE_READ_REG
(
hw
,
IXGBE_ESDP
);
...
...
@@ -536,7 +543,6 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
* Section 73.10.2, we may have to wait up to 500ms if KR is
* attempted. 82599 uses the same timing for 10g SFI.
*/
for
(
i
=
0
;
i
<
5
;
i
++
)
{
/* Wait for the link partner to also set speed */
msleep
(
100
);
...
...
@@ -761,7 +767,6 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
else
orig_autoc
=
autoc
;
if
(
link_mode
==
IXGBE_AUTOC_LMS_KX4_KX_KR
||
link_mode
==
IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN
||
link_mode
==
IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII
)
{
...
...
@@ -898,12 +903,9 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
* Prevent the PCI-E bus from from hanging by disabling PCI-E master
* access and verify no pending requests before reset
*/
status
=
ixgbe_disable_pcie_master
(
hw
);
if
(
status
!=
0
)
{
status
=
IXGBE_ERR_MASTER_REQUESTS_PENDING
;
hw_dbg
(
hw
,
"PCI-E Master disable polling has failed.
\n
"
);
}
ixgbe_disable_pcie_master
(
hw
);
mac_reset_top:
/*
* Issue global reset to the MAC. This needs to be a SW reset.
* If link reset is used, it might reset the MAC when mng is using it
...
...
@@ -924,6 +926,19 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
hw_dbg
(
hw
,
"Reset polling failed to complete.
\n
"
);
}
/*
* Double resets are required for recovery from certain error
* conditions. Between resets, it is necessary to stall to allow time
* for any pending HW events to complete. We use 1usec since that is
* what is needed for ixgbe_disable_pcie_master(). The second reset
* then clears out any effects of those events.
*/
if
(
hw
->
mac
.
flags
&
IXGBE_FLAGS_DOUBLE_RESET_REQUIRED
)
{
hw
->
mac
.
flags
&=
~
IXGBE_FLAGS_DOUBLE_RESET_REQUIRED
;
udelay
(
1
);
goto
mac_reset_top
;
}
msleep
(
50
);
/*
...
...
@@ -951,6 +966,9 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
}
}
/* Store the permanent mac address */
hw
->
mac
.
ops
.
get_mac_addr
(
hw
,
hw
->
mac
.
perm_addr
);
/*
* Store MAC address from RAR0, clear receive address registers, and
* clear the multicast table. Also reset num_rar_entries to 128,
...
...
@@ -959,9 +977,6 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
hw
->
mac
.
num_rar_entries
=
128
;
hw
->
mac
.
ops
.
init_rx_addrs
(
hw
);
/* Store the permanent mac address */
hw
->
mac
.
ops
.
get_mac_addr
(
hw
,
hw
->
mac
.
perm_addr
);
/* Store the permanent SAN mac address */
hw
->
mac
.
ops
.
get_san_mac_addr
(
hw
,
hw
->
mac
.
san_addr
);
...
...
@@ -1733,13 +1748,34 @@ static s32 ixgbe_start_hw_82599(struct ixgbe_hw *hw)
* @hw: pointer to hardware structure
*
* Determines the physical layer module found on the current adapter.
* If PHY already detected, maintains current PHY type in hw struct,
* otherwise executes the PHY detection routine.
**/
s
tatic
s
32
ixgbe_identify_phy_82599
(
struct
ixgbe_hw
*
hw
)
s32
ixgbe_identify_phy_82599
(
struct
ixgbe_hw
*
hw
)
{
s32
status
=
IXGBE_ERR_PHY_ADDR_INVALID
;
/* Detect PHY if not unknown - returns success if already detected. */
status
=
ixgbe_identify_phy_generic
(
hw
);
if
(
status
!=
0
)
status
=
ixgbe_identify_sfp_module_generic
(
hw
);
if
(
status
!=
0
)
{
/* 82599 10GBASE-T requires an external PHY */
if
(
hw
->
mac
.
ops
.
get_media_type
(
hw
)
==
ixgbe_media_type_copper
)
goto
out
;
else
status
=
ixgbe_identify_sfp_module_generic
(
hw
);
}
/* Set PHY type none if no PHY detected */
if
(
hw
->
phy
.
type
==
ixgbe_phy_unknown
)
{
hw
->
phy
.
type
=
ixgbe_phy_none
;
status
=
0
;
}
/* Return error if SFP module has been detected but is not supported */
if
(
hw
->
phy
.
type
==
ixgbe_phy_sfp_unsupported
)
status
=
IXGBE_ERR_SFP_NOT_SUPPORTED
;
out:
return
status
;
}
...
...
@@ -1763,11 +1799,12 @@ static u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
hw
->
phy
.
ops
.
identify
(
hw
);
if
(
hw
->
phy
.
type
==
ixgbe_phy_tn
||
hw
->
phy
.
type
==
ixgbe_phy_aq
||
hw
->
phy
.
type
==
ixgbe_phy_cu_unknown
)
{
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
);
&
ext_ability
);
if
(
ext_ability
&
MDIO_PMA_EXTABLE_10GBT
)
physical_layer
|=
IXGBE_PHYSICAL_LAYER_10GBASE_T
;
if
(
ext_ability
&
MDIO_PMA_EXTABLE_1000BT
)
...
...
@@ -1775,6 +1812,8 @@ static u32 ixgbe_get_supported_physical_layer_82599(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
)
{
...
...
@@ -1886,6 +1925,7 @@ static s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval)
if
(
secrxreg
&
IXGBE_SECRXSTAT_SECRX_RDY
)
break
;
else
/* Use interrupt-safe sleep just in case */
udelay
(
10
);
}
...
...
@@ -1995,7 +2035,6 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
.
set_vmdq
=
&
ixgbe_set_vmdq_generic
,
.
clear_vmdq
=
&
ixgbe_clear_vmdq_generic
,
.
init_rx_addrs
=
&
ixgbe_init_rx_addrs_generic
,
.
update_uc_addr_list
=
&
ixgbe_update_uc_addr_list_generic
,
.
update_mc_addr_list
=
&
ixgbe_update_mc_addr_list_generic
,
.
enable_mc
=
&
ixgbe_enable_mc_generic
,
.
disable_mc
=
&
ixgbe_disable_mc_generic
,
...
...
@@ -2006,6 +2045,9 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
.
setup_sfp
=
&
ixgbe_setup_sfp_modules_82599
,
.
set_mac_anti_spoofing
=
&
ixgbe_set_mac_anti_spoofing
,
.
set_vlan_anti_spoofing
=
&
ixgbe_set_vlan_anti_spoofing
,
.
acquire_swfw_sync
=
&
ixgbe_acquire_swfw_sync
,
.
release_swfw_sync
=
&
ixgbe_release_swfw_sync
,
};
static
struct
ixgbe_eeprom_operations
eeprom_ops_82599
=
{
...
...
drivers/net/ixgbe/ixgbe_common.c
浏览文件 @
a45d49d1
此差异已折叠。
点击以展开。
drivers/net/ixgbe/ixgbe_common.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -63,8 +63,6 @@ s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index);
s32
ixgbe_init_rx_addrs_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_update_mc_addr_list_generic
(
struct
ixgbe_hw
*
hw
,
struct
net_device
*
netdev
);
s32
ixgbe_update_uc_addr_list_generic
(
struct
ixgbe_hw
*
hw
,
struct
net_device
*
netdev
);
s32
ixgbe_enable_mc_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_disable_mc_generic
(
struct
ixgbe_hw
*
hw
);
s32
ixgbe_enable_rx_dma_generic
(
struct
ixgbe_hw
*
hw
,
u32
regval
);
...
...
drivers/net/ixgbe/ixgbe_dcb.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_dcb.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_dcb_82598.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_dcb_82598.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_dcb_82599.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_dcb_82599.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_dcb_nl.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_ethtool.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_fcoe.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_fcoe.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -54,7 +54,8 @@ static const char ixgbe_driver_string[] =
#define DRV_VERSION "3.2.9-k2"
const
char
ixgbe_driver_version
[]
=
DRV_VERSION
;
static
char
ixgbe_copyright
[]
=
"Copyright (c) 1999-2010 Intel Corporation."
;
static
const
char
ixgbe_copyright
[]
=
"Copyright (c) 1999-2011 Intel Corporation."
;
static
const
struct
ixgbe_info
*
ixgbe_info_tbl
[]
=
{
[
board_82598
]
=
&
ixgbe_82598_info
,
...
...
@@ -2597,6 +2598,11 @@ static void ixgbe_free_irq(struct ixgbe_adapter *adapter)
i
--
;
for
(;
i
>=
0
;
i
--
)
{
/* free only the irqs that were actually requested */
if
(
!
adapter
->
q_vector
[
i
]
->
rxr_count
&&
!
adapter
->
q_vector
[
i
]
->
txr_count
)
continue
;
free_irq
(
adapter
->
msix_entries
[
i
].
vector
,
adapter
->
q_vector
[
i
]);
}
...
...
@@ -3884,7 +3890,7 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter)
* If we're not hot-pluggable SFP+, we just need to configure link
* and bring it up.
*/
if
(
hw
->
phy
.
type
==
ixgbe_phy_
unknown
)
if
(
hw
->
phy
.
type
==
ixgbe_phy_
none
)
schedule_work
(
&
adapter
->
sfp_config_module_task
);
/* enable transmits */
...
...
drivers/net/ixgbe/ixgbe_mbx.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_mbx.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_phy.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -138,17 +138,51 @@ static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
**/
s32
ixgbe_reset_phy_generic
(
struct
ixgbe_hw
*
hw
)
{
u32
i
;
u16
ctrl
=
0
;
s32
status
=
0
;
if
(
hw
->
phy
.
type
==
ixgbe_phy_unknown
)
status
=
ixgbe_identify_phy_generic
(
hw
);
if
(
status
!=
0
||
hw
->
phy
.
type
==
ixgbe_phy_none
)
goto
out
;
/* Don't reset PHY if it's shut down due to overtemp. */
if
(
!
hw
->
phy
.
reset_if_overtemp
&&
(
IXGBE_ERR_OVERTEMP
==
hw
->
phy
.
ops
.
check_overtemp
(
hw
)))
return
0
;
goto
out
;
/*
* Perform soft PHY reset to the PHY_XS.
* This will cause a soft reset to the PHY
*/
return
hw
->
phy
.
ops
.
write_reg
(
hw
,
MDIO_CTRL1
,
MDIO_MMD_PHYXS
,
MDIO_CTRL1_RESET
);
hw
->
phy
.
ops
.
write_reg
(
hw
,
MDIO_CTRL1
,
MDIO_MMD_PHYXS
,
MDIO_CTRL1_RESET
);
/*
* Poll for reset bit to self-clear indicating reset is complete.
* Some PHYs could take up to 3 seconds to complete and need about
* 1.7 usec delay after the reset is complete.
*/
for
(
i
=
0
;
i
<
30
;
i
++
)
{
msleep
(
100
);
hw
->
phy
.
ops
.
read_reg
(
hw
,
MDIO_CTRL1
,
MDIO_MMD_PHYXS
,
&
ctrl
);
if
(
!
(
ctrl
&
MDIO_CTRL1_RESET
))
{
udelay
(
2
);
break
;
}
}
if
(
ctrl
&
MDIO_CTRL1_RESET
)
{
status
=
IXGBE_ERR_RESET_FAILED
;
hw_dbg
(
hw
,
"PHY reset polling failed to complete.
\n
"
);
}
out:
return
status
;
}
/**
...
...
@@ -171,7 +205,7 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
else
gssr
=
IXGBE_GSSR_PHY0_SM
;
if
(
ixgbe_
acquire_swfw_sync
(
hw
,
gssr
)
!=
0
)
if
(
hw
->
mac
.
ops
.
acquire_swfw_sync
(
hw
,
gssr
)
!=
0
)
status
=
IXGBE_ERR_SWFW_SYNC
;
if
(
status
==
0
)
{
...
...
@@ -243,7 +277,7 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
}
}
ixgbe_
release_swfw_sync
(
hw
,
gssr
);
hw
->
mac
.
ops
.
release_swfw_sync
(
hw
,
gssr
);
}
return
status
;
...
...
@@ -269,7 +303,7 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
else
gssr
=
IXGBE_GSSR_PHY0_SM
;
if
(
ixgbe_
acquire_swfw_sync
(
hw
,
gssr
)
!=
0
)
if
(
hw
->
mac
.
ops
.
acquire_swfw_sync
(
hw
,
gssr
)
!=
0
)
status
=
IXGBE_ERR_SWFW_SYNC
;
if
(
status
==
0
)
{
...
...
@@ -336,7 +370,7 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
}
}
ixgbe_
release_swfw_sync
(
hw
,
gssr
);
hw
->
mac
.
ops
.
release_swfw_sync
(
hw
,
gssr
);
}
return
status
;
...
...
@@ -556,11 +590,10 @@ s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
}
/**
* ixgbe_identify_sfp_module_generic - Identifies SFP module and assigns
* the PHY type.
* ixgbe_identify_sfp_module_generic - Identifies SFP modules
* @hw: pointer to hardware structure
*
* Searches for and i
ndentifies the SFP module. Assing
s appropriate PHY type.
* Searches for and i
dentifies the SFP module and assign
s appropriate PHY type.
**/
s32
ixgbe_identify_sfp_module_generic
(
struct
ixgbe_hw
*
hw
)
{
...
...
@@ -581,41 +614,62 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
goto
out
;
}
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_IDENTIFIER
,
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_IDENTIFIER
,
&
identifier
);
if
(
status
==
IXGBE_ERR_SFP_NOT_PRESENT
||
status
==
IXGBE_ERR_I2C
)
{
status
=
IXGBE_ERR_SFP_NOT_PRESENT
;
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_not_present
;
if
(
hw
->
phy
.
type
!=
ixgbe_phy_nl
)
{
hw
->
phy
.
id
=
0
;
hw
->
phy
.
type
=
ixgbe_phy_unknown
;
}
goto
out
;
}
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
if
(
identifier
==
IXGBE_SFF_IDENTIFIER_SFP
)
{
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_1GBE_COMP_CODES
,
&
comp_codes_1g
);
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_10GBE_COMP_CODES
,
&
comp_codes_10g
);
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_CABLE_TECHNOLOGY
,
&
cable_tech
);
/* ID Module
* =========
* 0 SFP_DA_CU
* 1 SFP_SR
* 2 SFP_LR
* 3 SFP_DA_CORE0 - 82599-specific
* 4 SFP_DA_CORE1 - 82599-specific
* 5 SFP_SR/LR_CORE0 - 82599-specific
* 6 SFP_SR/LR_CORE1 - 82599-specific
* 7 SFP_act_lmt_DA_CORE0 - 82599-specific
* 8 SFP_act_lmt_DA_CORE1 - 82599-specific
* 9 SFP_1g_cu_CORE0 - 82599-specific
* 10 SFP_1g_cu_CORE1 - 82599-specific
*/
/* LAN ID is needed for sfp_type determination */
hw
->
mac
.
ops
.
set_lan_id
(
hw
);
if
(
identifier
!=
IXGBE_SFF_IDENTIFIER_SFP
)
{
hw
->
phy
.
type
=
ixgbe_phy_sfp_unsupported
;
status
=
IXGBE_ERR_SFP_NOT_SUPPORTED
;
}
else
{
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_1GBE_COMP_CODES
,
&
comp_codes_1g
);
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_10GBE_COMP_CODES
,
&
comp_codes_10g
);
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_CABLE_TECHNOLOGY
,
&
cable_tech
);
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
/* ID Module
* =========
* 0 SFP_DA_CU
* 1 SFP_SR
* 2 SFP_LR
* 3 SFP_DA_CORE0 - 82599-specific
* 4 SFP_DA_CORE1 - 82599-specific
* 5 SFP_SR/LR_CORE0 - 82599-specific
* 6 SFP_SR/LR_CORE1 - 82599-specific
* 7 SFP_act_lmt_DA_CORE0 - 82599-specific
* 8 SFP_act_lmt_DA_CORE1 - 82599-specific
* 9 SFP_1g_cu_CORE0 - 82599-specific
* 10 SFP_1g_cu_CORE1 - 82599-specific
*/
if
(
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
{
if
(
cable_tech
&
IXGBE_SFF_DA_PASSIVE_CABLE
)
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_da_cu
;
...
...
@@ -647,31 +701,27 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
ixgbe_sfp_type_da_act_lmt_core1
;
}
else
{
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_unknown
;
ixgbe_sfp_type_unknown
;
}
}
else
if
(
comp_codes_10g
&
IXGBE_SFF_10GBASESR_CAPABLE
)
}
else
if
(
comp_codes_10g
&
(
IXGBE_SFF_10GBASESR_CAPABLE
|
IXGBE_SFF_10GBASELR_CAPABLE
))
{
if
(
hw
->
bus
.
lan_id
==
0
)
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_srlr_core0
;
else
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_srlr_core1
;
else
if
(
comp_codes_10g
&
IXGBE_SFF_10GBASELR_CAPABLE
)
if
(
hw
->
bus
.
lan_id
==
0
)
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_srlr_core0
;
else
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_srlr_core1
;
else
if
(
comp_codes_1g
&
IXGBE_SFF_1GBASET_CAPABLE
)
}
else
if
(
comp_codes_1g
&
IXGBE_SFF_1GBASET_CAPABLE
)
{
if
(
hw
->
bus
.
lan_id
==
0
)
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_1g_cu_core0
;
else
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_1g_cu_core1
;
else
}
else
{
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_unknown
;
}
}
if
(
hw
->
phy
.
sfp_type
!=
stored_sfp_type
)
...
...
@@ -688,16 +738,33 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
/* Determine PHY vendor */
if
(
hw
->
phy
.
type
!=
ixgbe_phy_nl
)
{
hw
->
phy
.
id
=
identifier
;
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_VENDOR_OUI_BYTE0
,
&
oui_bytes
[
0
]);
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_VENDOR_OUI_BYTE1
,
&
oui_bytes
[
1
]);
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
status
=
hw
->
phy
.
ops
.
read_i2c_eeprom
(
hw
,
IXGBE_SFF_VENDOR_OUI_BYTE2
,
&
oui_bytes
[
2
]);
if
(
status
==
IXGBE_ERR_SWFW_SYNC
||
status
==
IXGBE_ERR_I2C
||
status
==
IXGBE_ERR_SFP_NOT_PRESENT
)
goto
err_read_i2c_eeprom
;
vendor_oui
=
((
oui_bytes
[
0
]
<<
IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT
)
|
(
oui_bytes
[
1
]
<<
IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT
)
|
...
...
@@ -707,7 +774,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
case
IXGBE_SFF_VENDOR_OUI_TYCO
:
if
(
cable_tech
&
IXGBE_SFF_DA_PASSIVE_CABLE
)
hw
->
phy
.
type
=
ixgbe_phy_sfp_passive_tyco
;
ixgbe_phy_sfp_passive_tyco
;
break
;
case
IXGBE_SFF_VENDOR_OUI_FTL
:
if
(
cable_tech
&
IXGBE_SFF_DA_ACTIVE_CABLE
)
...
...
@@ -724,7 +791,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
default:
if
(
cable_tech
&
IXGBE_SFF_DA_PASSIVE_CABLE
)
hw
->
phy
.
type
=
ixgbe_phy_sfp_passive_unknown
;
ixgbe_phy_sfp_passive_unknown
;
else
if
(
cable_tech
&
IXGBE_SFF_DA_ACTIVE_CABLE
)
hw
->
phy
.
type
=
ixgbe_phy_sfp_active_unknown
;
...
...
@@ -734,7 +801,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
}
}
/* All
passive DA cables are supported
*/
/* All
ow any DA cable vendor
*/
if
(
cable_tech
&
(
IXGBE_SFF_DA_PASSIVE_CABLE
|
IXGBE_SFF_DA_ACTIVE_CABLE
))
{
status
=
0
;
...
...
@@ -776,15 +843,24 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
out:
return
status
;
err_read_i2c_eeprom:
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_not_present
;
if
(
hw
->
phy
.
type
!=
ixgbe_phy_nl
)
{
hw
->
phy
.
id
=
0
;
hw
->
phy
.
type
=
ixgbe_phy_unknown
;
}
return
IXGBE_ERR_SFP_NOT_PRESENT
;
}
/**
* ixgbe_get_sfp_init_sequence_offsets - Checks the MAC's EEPROM to see
* if it supports a given SFP+ module type, if so it returns the offsets to the
* phy init sequence block.
* ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
* @hw: pointer to hardware structure
* @list_offset: offset to the SFP ID list
* @data_offset: offset to the SFP data block
*
* Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
* so it returns the offsets to the phy init sequence block.
**/
s32
ixgbe_get_sfp_init_sequence_offsets
(
struct
ixgbe_hw
*
hw
,
u16
*
list_offset
,
...
...
@@ -899,11 +975,22 @@ s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
u8
dev_addr
,
u8
*
data
)
{
s32
status
=
0
;
u32
max_retry
=
1
;
u32
max_retry
=
1
0
;
u32
retry
=
0
;
u16
swfw_mask
=
0
;
bool
nack
=
1
;
if
(
IXGBE_READ_REG
(
hw
,
IXGBE_STATUS
)
&
IXGBE_STATUS_LAN_ID_1
)
swfw_mask
=
IXGBE_GSSR_PHY1_SM
;
else
swfw_mask
=
IXGBE_GSSR_PHY0_SM
;
do
{
if
(
ixgbe_acquire_swfw_sync
(
hw
,
swfw_mask
)
!=
0
)
{
status
=
IXGBE_ERR_SWFW_SYNC
;
goto
read_byte_out
;
}
ixgbe_i2c_start
(
hw
);
/* Device Address and write indication */
...
...
@@ -946,6 +1033,8 @@ s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
break
;
fail:
ixgbe_release_swfw_sync
(
hw
,
swfw_mask
);
msleep
(
100
);
ixgbe_i2c_bus_clear
(
hw
);
retry
++
;
if
(
retry
<
max_retry
)
...
...
@@ -955,6 +1044,9 @@ s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
}
while
(
retry
<
max_retry
);
ixgbe_release_swfw_sync
(
hw
,
swfw_mask
);
read_byte_out:
return
status
;
}
...
...
@@ -973,6 +1065,17 @@ s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
s32
status
=
0
;
u32
max_retry
=
1
;
u32
retry
=
0
;
u16
swfw_mask
=
0
;
if
(
IXGBE_READ_REG
(
hw
,
IXGBE_STATUS
)
&
IXGBE_STATUS_LAN_ID_1
)
swfw_mask
=
IXGBE_GSSR_PHY1_SM
;
else
swfw_mask
=
IXGBE_GSSR_PHY0_SM
;
if
(
ixgbe_acquire_swfw_sync
(
hw
,
swfw_mask
)
!=
0
)
{
status
=
IXGBE_ERR_SWFW_SYNC
;
goto
write_byte_out
;
}
do
{
ixgbe_i2c_start
(
hw
);
...
...
@@ -1013,6 +1116,9 @@ s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
hw_dbg
(
hw
,
"I2C byte write error.
\n
"
);
}
while
(
retry
<
max_retry
);
ixgbe_release_swfw_sync
(
hw
,
swfw_mask
);
write_byte_out:
return
status
;
}
...
...
@@ -1331,6 +1437,8 @@ static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
u32
i2cctl
=
IXGBE_READ_REG
(
hw
,
IXGBE_I2CCTL
);
u32
i
;
ixgbe_i2c_start
(
hw
);
ixgbe_set_i2c_data
(
hw
,
&
i2cctl
,
1
);
for
(
i
=
0
;
i
<
9
;
i
++
)
{
...
...
@@ -1345,6 +1453,8 @@ static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
udelay
(
IXGBE_I2C_T_LOW
);
}
ixgbe_i2c_start
(
hw
);
/* Put the i2c bus back to default state */
ixgbe_i2c_stop
(
hw
);
}
...
...
drivers/net/ixgbe/ixgbe_phy.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_sriov.c
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_sriov.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
drivers/net/ixgbe/ixgbe_type.h
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -91,7 +91,7 @@
/* General Receive Control */
#define IXGBE_GRC_MNG 0x00000001
/* Manageability Enable */
#define IXGBE_GRC_APME 0x00000002
/* A
dvanced Power Management Enable
*/
#define IXGBE_GRC_APME 0x00000002
/* A
PM enabled in EEPROM
*/
#define IXGBE_VPDDIAG0 0x10204
#define IXGBE_VPDDIAG1 0x10208
...
...
@@ -342,7 +342,7 @@
/* Wake Up Control */
#define IXGBE_WUC_PME_EN 0x00000002
/* PME Enable */
#define IXGBE_WUC_PME_STATUS 0x00000004
/* PME Status */
#define IXGBE_WUC_
ADVD3WUC 0x00000010
/* D3Cold wake up cap. enable
*/
#define IXGBE_WUC_
WKEN 0x00000010
/* Enable PE_WAKE_N pin assertion
*/
/* Wake Up Filter Control */
#define IXGBE_WUFC_LNKC 0x00000001
/* Link Status Change Wakeup Enable */
...
...
@@ -1614,6 +1614,8 @@
#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN 0x1
/* Alt. WWN base exists */
/* PCI Bus Info */
#define IXGBE_PCI_DEVICE_STATUS 0xAA
#define IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING 0x0020
#define IXGBE_PCI_LINK_STATUS 0xB2
#define IXGBE_PCI_DEVICE_CONTROL2 0xC8
#define IXGBE_PCI_LINK_WIDTH 0x3F0
...
...
@@ -2242,6 +2244,7 @@ enum ixgbe_mac_type {
enum
ixgbe_phy_type
{
ixgbe_phy_unknown
=
0
,
ixgbe_phy_none
,
ixgbe_phy_tn
,
ixgbe_phy_aq
,
ixgbe_phy_cu_unknown
,
...
...
@@ -2330,32 +2333,31 @@ enum ixgbe_bus_type {
/* PCI bus speeds */
enum
ixgbe_bus_speed
{
ixgbe_bus_speed_unknown
=
0
,
ixgbe_bus_speed_33
,
ixgbe_bus_speed_66
,
ixgbe_bus_speed_100
,
ixgbe_bus_speed_120
,
ixgbe_bus_speed_133
,
ixgbe_bus_speed_2500
,
ixgbe_bus_speed_5000
,
ixgbe_bus_speed_33
=
33
,
ixgbe_bus_speed_66
=
66
,
ixgbe_bus_speed_100
=
100
,
ixgbe_bus_speed_120
=
120
,
ixgbe_bus_speed_133
=
133
,
ixgbe_bus_speed_2500
=
2500
,
ixgbe_bus_speed_5000
=
5000
,
ixgbe_bus_speed_reserved
};
/* PCI bus widths */
enum
ixgbe_bus_width
{
ixgbe_bus_width_unknown
=
0
,
ixgbe_bus_width_pcie_x1
,
ixgbe_bus_width_pcie_x2
,
ixgbe_bus_width_pcie_x1
=
1
,
ixgbe_bus_width_pcie_x2
=
2
,
ixgbe_bus_width_pcie_x4
=
4
,
ixgbe_bus_width_pcie_x8
=
8
,
ixgbe_bus_width_32
,
ixgbe_bus_width_64
,
ixgbe_bus_width_32
=
32
,
ixgbe_bus_width_64
=
64
,
ixgbe_bus_width_reserved
};
struct
ixgbe_addr_filter_info
{
u32
num_mc_addrs
;
u32
rar_used_count
;
u32
mc_addr_in_rar_count
;
u32
mta_in_use
;
u32
overflow_promisc
;
bool
uc_set_promisc
;
...
...
@@ -2493,6 +2495,8 @@ struct ixgbe_mac_operations {
s32
(
*
write_analog_reg8
)(
struct
ixgbe_hw
*
,
u32
,
u8
);
s32
(
*
setup_sfp
)(
struct
ixgbe_hw
*
);
s32
(
*
enable_rx_dma
)(
struct
ixgbe_hw
*
,
u32
);
s32
(
*
acquire_swfw_sync
)(
struct
ixgbe_hw
*
,
u16
);
void
(
*
release_swfw_sync
)(
struct
ixgbe_hw
*
,
u16
);
/* Link */
void
(
*
disable_tx_laser
)(
struct
ixgbe_hw
*
);
...
...
@@ -2515,7 +2519,6 @@ struct ixgbe_mac_operations {
s32
(
*
set_vmdq
)(
struct
ixgbe_hw
*
,
u32
,
u32
);
s32
(
*
clear_vmdq
)(
struct
ixgbe_hw
*
,
u32
,
u32
);
s32
(
*
init_rx_addrs
)(
struct
ixgbe_hw
*
);
s32
(
*
update_uc_addr_list
)(
struct
ixgbe_hw
*
,
struct
net_device
*
);
s32
(
*
update_mc_addr_list
)(
struct
ixgbe_hw
*
,
struct
net_device
*
);
s32
(
*
enable_mc
)(
struct
ixgbe_hw
*
);
s32
(
*
disable_mc
)(
struct
ixgbe_hw
*
);
...
...
@@ -2556,6 +2559,7 @@ struct ixgbe_eeprom_info {
u16
address_bits
;
};
#define IXGBE_FLAGS_DOUBLE_RESET_REQUIRED 0x01
struct
ixgbe_mac_info
{
struct
ixgbe_mac_operations
ops
;
enum
ixgbe_mac_type
type
;
...
...
@@ -2566,6 +2570,8 @@ struct ixgbe_mac_info {
u16
wwnn_prefix
;
/* prefix for World Wide Port Name (WWPN) */
u16
wwpn_prefix
;
#define IXGBE_MAX_MTA 128
u32
mta_shadow
[
IXGBE_MAX_MTA
];
s32
mc_filter_type
;
u32
mcft_size
;
u32
vft_size
;
...
...
@@ -2578,6 +2584,7 @@ struct ixgbe_mac_info {
u32
orig_autoc2
;
bool
orig_link_settings_stored
;
bool
autotry_restart
;
u8
flags
;
};
struct
ixgbe_phy_info
{
...
...
@@ -2684,7 +2691,6 @@ struct ixgbe_info {
#define IXGBE_ERR_EEPROM_VERSION -24
#define IXGBE_ERR_NO_SPACE -25
#define IXGBE_ERR_OVERTEMP -26
#define IXGBE_ERR_RAR_INDEX -27
#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
浏览文件 @
a45d49d1
/*******************************************************************************
Intel 10 Gigabit PCI Express Linux driver
Copyright(c) 1999 - 201
0
Intel Corporation.
Copyright(c) 1999 - 201
1
Intel Corporation.
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
...
...
@@ -31,7 +31,6 @@
#include "ixgbe.h"
#include "ixgbe_phy.h"
//#include "ixgbe_mbx.h"
#define IXGBE_X540_MAX_TX_QUEUES 128
#define IXGBE_X540_MAX_RX_QUEUES 128
...
...
@@ -110,12 +109,9 @@ static s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw)
* Prevent the PCI-E bus from from hanging by disabling PCI-E master
* access and verify no pending requests before reset
*/
status
=
ixgbe_disable_pcie_master
(
hw
);
if
(
status
!=
0
)
{
status
=
IXGBE_ERR_MASTER_REQUESTS_PENDING
;
hw_dbg
(
hw
,
"PCI-E Master disable polling has failed.
\n
"
);
}
ixgbe_disable_pcie_master
(
hw
);
mac_reset_top:
/*
* Issue global reset to the MAC. Needs to be SW reset if link is up.
* If link reset is used when link is up, it might reset the PHY when
...
...
@@ -148,6 +144,19 @@ static s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw)
hw_dbg
(
hw
,
"Reset polling failed to complete.
\n
"
);
}
/*
* Double resets are required for recovery from certain error
* conditions. Between resets, it is necessary to stall to allow time
* for any pending HW events to complete. We use 1usec since that is
* what is needed for ixgbe_disable_pcie_master(). The second reset
* then clears out any effects of those events.
*/
if
(
hw
->
mac
.
flags
&
IXGBE_FLAGS_DOUBLE_RESET_REQUIRED
)
{
hw
->
mac
.
flags
&=
~
IXGBE_FLAGS_DOUBLE_RESET_REQUIRED
;
udelay
(
1
);
goto
mac_reset_top
;
}
/* Clear PF Reset Done bit so PF/VF Mail Ops can work */
ctrl_ext
=
IXGBE_READ_REG
(
hw
,
IXGBE_CTRL_EXT
);
ctrl_ext
|=
IXGBE_CTRL_EXT_PFRSTD
;
...
...
@@ -191,7 +200,7 @@ static s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw)
* clear the multicast table. Also reset num_rar_entries to 128,
* since we modify this value when programming the SAN MAC address.
*/
hw
->
mac
.
num_rar_entries
=
128
;
hw
->
mac
.
num_rar_entries
=
IXGBE_X540_MAX_TX_QUEUES
;
hw
->
mac
.
ops
.
init_rx_addrs
(
hw
);
/* Store the permanent mac address */
...
...
@@ -278,7 +287,7 @@ static s32 ixgbe_read_eerd_X540(struct ixgbe_hw *hw, u16 offset, u16 *data)
{
s32
status
;
if
(
ixgbe_acquire_swfw_sync_X540
(
hw
,
IXGBE_GSSR_EEP_SM
)
==
0
)
if
(
hw
->
mac
.
ops
.
acquire_swfw_sync
(
hw
,
IXGBE_GSSR_EEP_SM
)
==
0
)
status
=
ixgbe_read_eerd_generic
(
hw
,
offset
,
data
);
else
status
=
IXGBE_ERR_SWFW_SYNC
;
...
...
@@ -311,7 +320,7 @@ static s32 ixgbe_write_eewr_X540(struct ixgbe_hw *hw, u16 offset, u16 data)
(
data
<<
IXGBE_EEPROM_RW_REG_DATA
)
|
IXGBE_EEPROM_RW_REG_START
;
if
(
ixgbe_acquire_swfw_sync_X540
(
hw
,
IXGBE_GSSR_EEP_SM
)
==
0
)
{
if
(
hw
->
mac
.
ops
.
acquire_swfw_sync
(
hw
,
IXGBE_GSSR_EEP_SM
)
==
0
)
{
status
=
ixgbe_poll_eerd_eewr_done
(
hw
,
IXGBE_NVM_POLL_WRITE
);
if
(
status
!=
0
)
{
hw_dbg
(
hw
,
"Eeprom write EEWR timed out
\n
"
);
...
...
@@ -676,7 +685,6 @@ static struct ixgbe_mac_operations mac_ops_X540 = {
.
set_vmdq
=
&
ixgbe_set_vmdq_generic
,
.
clear_vmdq
=
&
ixgbe_clear_vmdq_generic
,
.
init_rx_addrs
=
&
ixgbe_init_rx_addrs_generic
,
.
update_uc_addr_list
=
&
ixgbe_update_uc_addr_list_generic
,
.
update_mc_addr_list
=
&
ixgbe_update_mc_addr_list_generic
,
.
enable_mc
=
&
ixgbe_enable_mc_generic
,
.
disable_mc
=
&
ixgbe_disable_mc_generic
,
...
...
@@ -687,6 +695,8 @@ static struct ixgbe_mac_operations mac_ops_X540 = {
.
setup_sfp
=
NULL
,
.
set_mac_anti_spoofing
=
&
ixgbe_set_mac_anti_spoofing
,
.
set_vlan_anti_spoofing
=
&
ixgbe_set_vlan_anti_spoofing
,
.
acquire_swfw_sync
=
&
ixgbe_acquire_swfw_sync_X540
,
.
release_swfw_sync
=
&
ixgbe_release_swfw_sync_X540
,
};
static
struct
ixgbe_eeprom_operations
eeprom_ops_X540
=
{
...
...
@@ -702,7 +712,7 @@ static struct ixgbe_phy_operations phy_ops_X540 = {
.
identify
=
&
ixgbe_identify_phy_generic
,
.
identify_sfp
=
&
ixgbe_identify_sfp_module_generic
,
.
init
=
NULL
,
.
reset
=
&
ixgbe_reset_phy_generic
,
.
reset
=
NULL
,
.
read_reg
=
&
ixgbe_read_phy_reg_generic
,
.
write_reg
=
&
ixgbe_write_phy_reg_generic
,
.
setup_link
=
&
ixgbe_setup_phy_link_generic
,
...
...
drivers/net/ixgbevf/ixgbevf_main.c
浏览文件 @
a45d49d1
...
...
@@ -178,8 +178,6 @@ static inline bool ixgbevf_check_tx_hang(struct ixgbevf_adapter *adapter,
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
&&
time_after
(
jiffies
,
tx_ring
->
tx_buffer_info
[
eop
].
time_stamp
+
HZ
))
{
/* detected Tx unit hang */
union
ixgbe_adv_tx_desc
*
tx_desc
;
tx_desc
=
IXGBE_TX_DESC_ADV
(
*
tx_ring
,
eop
);
printk
(
KERN_ERR
"Detected Tx Unit Hang
\n
"
" Tx Queue <%d>
\n
"
" TDH, TDT <%x>, <%x>
\n
"
...
...
@@ -334,7 +332,6 @@ static void ixgbevf_receive_skb(struct ixgbevf_q_vector *q_vector,
struct
ixgbevf_adapter
*
adapter
=
q_vector
->
adapter
;
bool
is_vlan
=
(
status
&
IXGBE_RXD_STAT_VP
);
u16
tag
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
int
ret
;
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_IN_NETPOLL
))
{
if
(
adapter
->
vlgrp
&&
is_vlan
)
...
...
@@ -345,9 +342,9 @@ static void ixgbevf_receive_skb(struct ixgbevf_q_vector *q_vector,
napi_gro_receive
(
&
q_vector
->
napi
,
skb
);
}
else
{
if
(
adapter
->
vlgrp
&&
is_vlan
)
ret
=
vlan_hwaccel_rx
(
skb
,
adapter
->
vlgrp
,
tag
);
vlan_hwaccel_rx
(
skb
,
adapter
->
vlgrp
,
tag
);
else
ret
=
netif_rx
(
skb
);
netif_rx
(
skb
);
}
}
...
...
@@ -3287,8 +3284,6 @@ static const struct net_device_ops ixgbe_netdev_ops = {
static
void
ixgbevf_assign_netdev_ops
(
struct
net_device
*
dev
)
{
struct
ixgbevf_adapter
*
adapter
;
adapter
=
netdev_priv
(
dev
);
dev
->
netdev_ops
=
&
ixgbe_netdev_ops
;
ixgbevf_set_ethtool_ops
(
dev
);
dev
->
watchdog_timeo
=
5
*
HZ
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录