Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
1c11a0a1
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
1c11a0a1
编写于
12年前
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
上级
da557374
db018963
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
291 addition
and
143 deletion
+291
-143
drivers/net/ethernet/intel/e1000/e1000_main.c
drivers/net/ethernet/intel/e1000/e1000_main.c
+6
-6
drivers/net/ethernet/intel/igb/e1000_regs.h
drivers/net/ethernet/intel/igb/e1000_regs.h
+1
-0
drivers/net/ethernet/intel/igb/igb.h
drivers/net/ethernet/intel/igb/igb.h
+19
-6
drivers/net/ethernet/intel/igb/igb_ethtool.c
drivers/net/ethernet/intel/igb/igb_ethtool.c
+42
-10
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igb/igb_main.c
+126
-30
drivers/net/ethernet/intel/igb/igb_ptp.c
drivers/net/ethernet/intel/igb/igb_ptp.c
+11
-1
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
+3
-1
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+62
-85
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
+19
-4
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+2
-0
未找到文件。
drivers/net/ethernet/intel/e1000/e1000_main.c
浏览文件 @
1c11a0a1
...
...
@@ -1078,18 +1078,18 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
netdev
->
priv_flags
|=
IFF_SUPP_NOFCS
;
netdev
->
features
|=
netdev
->
hw_features
;
netdev
->
hw_features
|=
NETIF_F_RXCSUM
;
netdev
->
hw_features
|=
NETIF_F_RXALL
;
netdev
->
hw_features
|=
NETIF_F_RXFCS
;
netdev
->
hw_features
|=
(
NETIF_F_RXCSUM
|
NETIF_F_RXALL
|
NETIF_F_RXFCS
)
;
if
(
pci_using_dac
)
{
netdev
->
features
|=
NETIF_F_HIGHDMA
;
netdev
->
vlan_features
|=
NETIF_F_HIGHDMA
;
}
netdev
->
vlan_features
|=
NETIF_F_TSO
;
netdev
->
vlan_features
|=
NETIF_F_HW_CSUM
;
netdev
->
vlan_features
|=
NETIF_F_SG
;
netdev
->
vlan_features
|=
(
NETIF_F_TSO
|
NETIF_F_HW_CSUM
|
NETIF_F_SG
)
;
netdev
->
priv_flags
|=
IFF_UNICAST_FLT
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/igb/e1000_regs.h
浏览文件 @
1c11a0a1
...
...
@@ -117,6 +117,7 @@
/* TX Rate Limit Registers */
#define E1000_RTTDQSEL 0x3604
/* Tx Desc Plane Queue Select - WO */
#define E1000_RTTBCNRM 0x3690
/* Tx BCN Rate-scheduler MMW */
#define E1000_RTTBCNRC 0x36B0
/* Tx BCN Rate-Scheduler Config - WO */
/* Split and Replication RX Control - RW */
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/igb/igb.h
浏览文件 @
1c11a0a1
...
...
@@ -65,19 +65,30 @@ struct igb_adapter;
#define MAX_Q_VECTORS 8
/* Transmit and receive queues */
#define IGB_MAX_RX_QUEUES ((adapter->vfs_allocated_count ? 2 : \
(hw->mac.type > e1000_82575 ? 8 : 4)))
#define IGB_MAX_RX_QUEUES_I210 4
#define IGB_MAX_RX_QUEUES 8
#define IGB_MAX_RX_QUEUES_82575 4
#define IGB_MAX_RX_QUEUES_I211 2
#define IGB_MAX_TX_QUEUES 16
#define IGB_MAX_TX_QUEUES_I210 4
#define IGB_MAX_TX_QUEUES_I211 2
#define IGB_MAX_TX_QUEUES 8
#define IGB_MAX_VF_MC_ENTRIES 30
#define IGB_MAX_VF_FUNCTIONS 8
#define IGB_MAX_VFTA_ENTRIES 128
#define IGB_82576_VF_DEV_ID 0x10CA
#define IGB_I350_VF_DEV_ID 0x1520
/* NVM version defines */
#define IGB_MAJOR_MASK 0xF000
#define IGB_MINOR_MASK 0x0FF0
#define IGB_BUILD_MASK 0x000F
#define IGB_COMB_VER_MASK 0x00FF
#define IGB_MAJOR_SHIFT 12
#define IGB_MINOR_SHIFT 4
#define IGB_COMB_VER_SHFT 8
#define IGB_NVM_VER_INVALID 0xFFFF
#define IGB_ETRACK_SHIFT 16
#define NVM_ETRACK_WORD 0x0042
#define NVM_COMB_VER_OFF 0x0083
#define NVM_COMB_VER_PTR 0x003d
struct
vf_data_storage
{
unsigned
char
vf_mac_addresses
[
ETH_ALEN
];
u16
vf_mc_hashes
[
IGB_MAX_VF_MC_ENTRIES
];
...
...
@@ -371,6 +382,7 @@ struct igb_adapter {
spinlock_t
tmreg_lock
;
struct
cyclecounter
cc
;
struct
timecounter
tc
;
char
fw_version
[
32
];
};
#define IGB_FLAG_HAS_MSI (1 << 0)
...
...
@@ -420,6 +432,7 @@ extern void igb_update_stats(struct igb_adapter *, struct rtnl_link_stats64 *);
extern
bool
igb_has_link
(
struct
igb_adapter
*
adapter
);
extern
void
igb_set_ethtool_ops
(
struct
net_device
*
);
extern
void
igb_power_up_link
(
struct
igb_adapter
*
);
extern
void
igb_set_fw_version
(
struct
igb_adapter
*
);
#ifdef CONFIG_IGB_PTP
extern
void
igb_ptp_init
(
struct
igb_adapter
*
adapter
);
extern
void
igb_ptp_remove
(
struct
igb_adapter
*
adapter
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/igb/igb_ethtool.c
浏览文件 @
1c11a0a1
...
...
@@ -710,6 +710,7 @@ static int igb_set_eeprom(struct net_device *netdev,
if
((
ret_val
==
0
)
&&
((
first_word
<=
NVM_CHECKSUM_REG
)))
hw
->
nvm
.
ops
.
update
(
hw
);
igb_set_fw_version
(
adapter
);
kfree
(
eeprom_buff
);
return
ret_val
;
}
...
...
@@ -718,20 +719,16 @@ static void igb_get_drvinfo(struct net_device *netdev,
struct
ethtool_drvinfo
*
drvinfo
)
{
struct
igb_adapter
*
adapter
=
netdev_priv
(
netdev
);
u16
eeprom_data
;
strlcpy
(
drvinfo
->
driver
,
igb_driver_name
,
sizeof
(
drvinfo
->
driver
));
strlcpy
(
drvinfo
->
version
,
igb_driver_version
,
sizeof
(
drvinfo
->
version
));
/* EEPROM image version # is reported as firmware version # for
* 82575 controllers */
adapter
->
hw
.
nvm
.
ops
.
read
(
&
adapter
->
hw
,
5
,
1
,
&
eeprom_data
);
snprintf
(
drvinfo
->
fw_version
,
sizeof
(
drvinfo
->
fw_version
),
"%d.%d-%d"
,
(
eeprom_data
&
0xF000
)
>>
12
,
(
eeprom_data
&
0x0FF0
)
>>
4
,
eeprom_data
&
0x000F
);
/*
* EEPROM image version # is reported as firmware version # for
* 82575 controllers
*/
strlcpy
(
drvinfo
->
fw_version
,
adapter
->
fw_version
,
sizeof
(
drvinfo
->
fw_version
));
strlcpy
(
drvinfo
->
bus_info
,
pci_name
(
adapter
->
pdev
),
sizeof
(
drvinfo
->
bus_info
));
drvinfo
->
n_stats
=
IGB_STATS_LEN
;
...
...
@@ -2271,6 +2268,38 @@ static void igb_ethtool_complete(struct net_device *netdev)
pm_runtime_put
(
&
adapter
->
pdev
->
dev
);
}
#ifdef CONFIG_IGB_PTP
static
int
igb_ethtool_get_ts_info
(
struct
net_device
*
dev
,
struct
ethtool_ts_info
*
info
)
{
struct
igb_adapter
*
adapter
=
netdev_priv
(
dev
);
info
->
so_timestamping
=
SOF_TIMESTAMPING_TX_HARDWARE
|
SOF_TIMESTAMPING_RX_HARDWARE
|
SOF_TIMESTAMPING_RAW_HARDWARE
;
if
(
adapter
->
ptp_clock
)
info
->
phc_index
=
ptp_clock_index
(
adapter
->
ptp_clock
);
else
info
->
phc_index
=
-
1
;
info
->
tx_types
=
(
1
<<
HWTSTAMP_TX_OFF
)
|
(
1
<<
HWTSTAMP_TX_ON
);
info
->
rx_filters
=
(
1
<<
HWTSTAMP_FILTER_NONE
)
|
(
1
<<
HWTSTAMP_FILTER_ALL
)
|
(
1
<<
HWTSTAMP_FILTER_SOME
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V1_L4_SYNC
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ
)
|
(
1
<<
HWTSTAMP_FILTER_PTP_V2_EVENT
);
return
0
;
}
#endif
static
const
struct
ethtool_ops
igb_ethtool_ops
=
{
.
get_settings
=
igb_get_settings
,
.
set_settings
=
igb_set_settings
,
...
...
@@ -2299,6 +2328,9 @@ static const struct ethtool_ops igb_ethtool_ops = {
.
set_coalesce
=
igb_set_coalesce
,
.
begin
=
igb_ethtool_begin
,
.
complete
=
igb_ethtool_complete
,
#ifdef CONFIG_IGB_PTP
.
get_ts_info
=
igb_ethtool_get_ts_info
,
#endif
};
void
igb_set_ethtool_ops
(
struct
net_device
*
netdev
)
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/igb/igb_main.c
浏览文件 @
1c11a0a1
...
...
@@ -59,9 +59,9 @@
#endif
#include "igb.h"
#define MAJ
3
#define MIN
4
#define BUILD
7
#define MAJ
4
#define MIN
0
#define BUILD
1
#define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \
__stringify(BUILD) "-k"
char
igb_driver_name
[]
=
"igb"
;
...
...
@@ -1048,11 +1048,6 @@ static int igb_set_interrupt_capability(struct igb_adapter *adapter)
if
(
!
(
adapter
->
flags
&
IGB_FLAG_QUEUE_PAIRS
))
numvecs
+=
adapter
->
num_tx_queues
;
/* i210 and i211 can only have 4 MSIX vectors for rx/tx queues. */
if
((
adapter
->
hw
.
mac
.
type
==
e1000_i210
)
||
(
adapter
->
hw
.
mac
.
type
==
e1000_i211
))
numvecs
=
4
;
/* store the number of vectors reserved for queues */
adapter
->
num_q_vectors
=
numvecs
;
...
...
@@ -1820,6 +1815,69 @@ static const struct net_device_ops igb_netdev_ops = {
.
ndo_set_features
=
igb_set_features
,
};
/**
* igb_set_fw_version - Configure version string for ethtool
* @adapter: adapter struct
*
**/
void
igb_set_fw_version
(
struct
igb_adapter
*
adapter
)
{
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
u16
eeprom_verh
,
eeprom_verl
,
comb_verh
,
comb_verl
,
comb_offset
;
u16
major
,
build
,
patch
,
fw_version
;
u32
etrack_id
;
hw
->
nvm
.
ops
.
read
(
hw
,
5
,
1
,
&
fw_version
);
if
(
adapter
->
hw
.
mac
.
type
!=
e1000_i211
)
{
hw
->
nvm
.
ops
.
read
(
hw
,
NVM_ETRACK_WORD
,
1
,
&
eeprom_verh
);
hw
->
nvm
.
ops
.
read
(
hw
,
(
NVM_ETRACK_WORD
+
1
),
1
,
&
eeprom_verl
);
etrack_id
=
(
eeprom_verh
<<
IGB_ETRACK_SHIFT
)
|
eeprom_verl
;
/* combo image version needs to be found */
hw
->
nvm
.
ops
.
read
(
hw
,
NVM_COMB_VER_PTR
,
1
,
&
comb_offset
);
if
((
comb_offset
!=
0x0
)
&&
(
comb_offset
!=
IGB_NVM_VER_INVALID
))
{
hw
->
nvm
.
ops
.
read
(
hw
,
(
NVM_COMB_VER_OFF
+
comb_offset
+
1
),
1
,
&
comb_verh
);
hw
->
nvm
.
ops
.
read
(
hw
,
(
NVM_COMB_VER_OFF
+
comb_offset
),
1
,
&
comb_verl
);
/* Only display Option Rom if it exists and is valid */
if
((
comb_verh
&&
comb_verl
)
&&
((
comb_verh
!=
IGB_NVM_VER_INVALID
)
&&
(
comb_verl
!=
IGB_NVM_VER_INVALID
)))
{
major
=
comb_verl
>>
IGB_COMB_VER_SHFT
;
build
=
(
comb_verl
<<
IGB_COMB_VER_SHFT
)
|
(
comb_verh
>>
IGB_COMB_VER_SHFT
);
patch
=
comb_verh
&
IGB_COMB_VER_MASK
;
snprintf
(
adapter
->
fw_version
,
sizeof
(
adapter
->
fw_version
),
"%d.%d%d, 0x%08x, %d.%d.%d"
,
(
fw_version
&
IGB_MAJOR_MASK
)
>>
IGB_MAJOR_SHIFT
,
(
fw_version
&
IGB_MINOR_MASK
)
>>
IGB_MINOR_SHIFT
,
(
fw_version
&
IGB_BUILD_MASK
),
etrack_id
,
major
,
build
,
patch
);
goto
out
;
}
}
snprintf
(
adapter
->
fw_version
,
sizeof
(
adapter
->
fw_version
),
"%d.%d%d, 0x%08x"
,
(
fw_version
&
IGB_MAJOR_MASK
)
>>
IGB_MAJOR_SHIFT
,
(
fw_version
&
IGB_MINOR_MASK
)
>>
IGB_MINOR_SHIFT
,
(
fw_version
&
IGB_BUILD_MASK
),
etrack_id
);
}
else
{
snprintf
(
adapter
->
fw_version
,
sizeof
(
adapter
->
fw_version
),
"%d.%d%d"
,
(
fw_version
&
IGB_MAJOR_MASK
)
>>
IGB_MAJOR_SHIFT
,
(
fw_version
&
IGB_MINOR_MASK
)
>>
IGB_MINOR_SHIFT
,
(
fw_version
&
IGB_BUILD_MASK
));
}
out:
return
;
}
/**
* igb_probe - Device Initialization Routine
* @pdev: PCI device information struct
...
...
@@ -2030,6 +2088,9 @@ static int __devinit igb_probe(struct pci_dev *pdev,
goto
err_eeprom
;
}
/* get firmware version for ethtool -i */
igb_set_fw_version
(
adapter
);
setup_timer
(
&
adapter
->
watchdog_timer
,
igb_watchdog
,
(
unsigned
long
)
adapter
);
setup_timer
(
&
adapter
->
phy_info_timer
,
igb_update_phy_info
,
...
...
@@ -2338,6 +2399,7 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
struct
net_device
*
netdev
=
adapter
->
netdev
;
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
u32
max_rss_queues
;
pci_read_config_word
(
pdev
,
PCI_COMMAND
,
&
hw
->
bus
.
pci_cmd_word
);
...
...
@@ -2370,40 +2432,69 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
}
else
adapter
->
vfs_allocated_count
=
max_vfs
;
break
;
case
e1000_i210
:
case
e1000_i211
:
adapter
->
vfs_allocated_count
=
0
;
break
;
default:
break
;
}
#endif
/* CONFIG_PCI_IOV */
/* Determine the maximum number of RSS queues supported. */
switch
(
hw
->
mac
.
type
)
{
case
e1000_i211
:
max_rss_queues
=
IGB_MAX_RX_QUEUES_I211
;
break
;
case
e1000_82575
:
case
e1000_i210
:
adapter
->
rss_queues
=
min_t
(
u32
,
IGB_MAX_RX_QUEUES_I210
,
num_online_cpus
());
max_rss_queues
=
IGB_MAX_RX_QUEUES_82575
;
break
;
case
e1000_i350
:
/* I350 cannot do RSS and SR-IOV at the same time */
if
(
!!
adapter
->
vfs_allocated_count
)
{
max_rss_queues
=
1
;
break
;
}
/* fall through */
case
e1000_82576
:
if
(
!!
adapter
->
vfs_allocated_count
)
{
max_rss_queues
=
2
;
break
;
}
/* fall through */
case
e1000_82580
:
default:
max_rss_queues
=
IGB_MAX_RX_QUEUES
;
break
;
}
adapter
->
rss_queues
=
min_t
(
u32
,
max_rss_queues
,
num_online_cpus
());
/* Determine if we need to pair queues. */
switch
(
hw
->
mac
.
type
)
{
case
e1000_82575
:
case
e1000_i211
:
adapter
->
rss_queues
=
min_t
(
u32
,
IGB_MAX_RX_QUEUES_I211
,
num_online_cpus
());
/* Device supports enough interrupts without queue pairing. */
break
;
case
e1000_82576
:
/*
* If VFs are going to be allocated with RSS queues then we
* should pair the queues in order to conserve interrupts due
* to limited supply.
*/
if
((
adapter
->
rss_queues
>
1
)
&&
(
adapter
->
vfs_allocated_count
>
6
))
adapter
->
flags
|=
IGB_FLAG_QUEUE_PAIRS
;
/* fall through */
case
e1000_82580
:
case
e1000_i350
:
case
e1000_i210
:
default:
adapter
->
rss_queues
=
min_t
(
u32
,
IGB_MAX_RX_QUEUES
,
num_online_cpus
());
/*
* If rss_queues > half of max_rss_queues, pair the queues in
* order to conserve interrupts due to limited supply.
*/
if
(
adapter
->
rss_queues
>
(
max_rss_queues
/
2
))
adapter
->
flags
|=
IGB_FLAG_QUEUE_PAIRS
;
break
;
}
/* i350 cannot do RSS and SR-IOV at the same time */
if
(
hw
->
mac
.
type
==
e1000_i350
&&
adapter
->
vfs_allocated_count
)
adapter
->
rss_queues
=
1
;
/*
* if rss_queues > 4 or vfs are going to be allocated with rss_queues
* then we should combine the queues into a queue pair in order to
* conserve interrupts due to limited supply
*/
if
((
adapter
->
rss_queues
>
4
)
||
((
adapter
->
rss_queues
>
1
)
&&
(
adapter
->
vfs_allocated_count
>
6
)))
adapter
->
flags
|=
IGB_FLAG_QUEUE_PAIRS
;
/* Setup and initialize a copy of the hw vlan table array */
adapter
->
shadow_vfta
=
kzalloc
(
sizeof
(
u32
)
*
...
...
@@ -6997,6 +7088,11 @@ static void igb_set_vf_rate_limit(struct e1000_hw *hw, int vf, int tx_rate,
}
wr32
(
E1000_RTTDQSEL
,
vf
);
/* vf X uses queue X */
/*
* Set global transmit compensation time to the MMW_SIZE in RTTBCNRM
* register. MMW_SIZE=0x014 if 9728-byte jumbo is supported.
*/
wr32
(
E1000_RTTBCNRM
,
0x14
);
wr32
(
E1000_RTTBCNRC
,
bcnrc_val
);
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/igb/igb_ptp.c
浏览文件 @
1c11a0a1
...
...
@@ -330,7 +330,17 @@ void igb_ptp_init(struct igb_adapter *adapter)
void
igb_ptp_remove
(
struct
igb_adapter
*
adapter
)
{
cancel_delayed_work_sync
(
&
adapter
->
overflow_work
);
switch
(
adapter
->
hw
.
mac
.
type
)
{
case
e1000_i211
:
case
e1000_i210
:
case
e1000_i350
:
case
e1000_82580
:
case
e1000_82576
:
cancel_delayed_work_sync
(
&
adapter
->
overflow_work
);
break
;
default:
return
;
}
if
(
adapter
->
ptp_clock
)
{
ptp_clock_unregister
(
adapter
->
ptp_clock
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
浏览文件 @
1c11a0a1
...
...
@@ -241,7 +241,9 @@ static s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
/* Determine 1G link capabilities off of SFP+ type */
if
(
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core0
||
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
)
{
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
||
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_sx_core0
||
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_sx_core1
)
{
*
speed
=
IXGBE_LINK_SPEED_1GB_FULL
;
*
negotiation
=
true
;
goto
out
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
浏览文件 @
1c11a0a1
...
...
@@ -154,100 +154,60 @@ static int ixgbe_get_settings(struct net_device *netdev,
{
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
ixgbe_link_speed
supported_link
;
u32
link_speed
=
0
;
bool
autoneg
;
bool
link_up
;
ecmd
->
supported
=
SUPPORTED_10000baseT_Full
;
ecmd
->
autoneg
=
AUTONEG_ENABLE
;
ecmd
->
transceiver
=
XCVR_EXTERNAL
;
if
((
hw
->
phy
.
media_type
==
ixgbe_media_type_copper
)
||
(
hw
->
phy
.
multispeed_fiber
))
{
ecmd
->
supported
|=
(
SUPPORTED_1000baseT_Full
|
SUPPORTED_Autoneg
);
switch
(
hw
->
mac
.
type
)
{
case
ixgbe_mac_X540
:
ecmd
->
supported
|=
SUPPORTED_100baseT_Full
;
break
;
default:
break
;
}
ecmd
->
advertising
=
ADVERTISED_Autoneg
;
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
)
ecmd
->
advertising
|=
ADVERTISED_10000baseT_Full
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_1GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_1000baseT_Full
;
}
else
{
/*
* Default advertised modes in case
* phy.autoneg_advertised isn't set.
*/
ecmd
->
advertising
|=
(
ADVERTISED_10000baseT_Full
|
ADVERTISED_1000baseT_Full
);
if
(
hw
->
mac
.
type
==
ixgbe_mac_X540
)
ecmd
->
advertising
|=
ADVERTISED_100baseT_Full
;
}
if
(
hw
->
phy
.
media_type
==
ixgbe_media_type_copper
)
{
ecmd
->
supported
|=
SUPPORTED_TP
;
ecmd
->
advertising
|=
ADVERTISED_TP
;
ecmd
->
port
=
PORT_TP
;
}
else
{
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_FIBRE
;
}
}
else
if
(
hw
->
phy
.
media_type
==
ixgbe_media_type_backplane
)
{
/* Set as FIBRE until SERDES defined in kernel */
if
(
hw
->
device_id
==
IXGBE_DEV_ID_82598_BX
)
{
ecmd
->
supported
=
(
SUPPORTED_1000baseT_Full
|
SUPPORTED_FIBRE
);
ecmd
->
advertising
=
(
ADVERTISED_1000baseT_Full
|
ADVERTISED_FIBRE
);
ecmd
->
port
=
PORT_FIBRE
;
ecmd
->
autoneg
=
AUTONEG_DISABLE
;
}
else
if
((
hw
->
device_id
==
IXGBE_DEV_ID_82599_COMBO_BACKPLANE
)
||
(
hw
->
device_id
==
IXGBE_DEV_ID_82599_KX4_MEZZ
))
{
ecmd
->
supported
|=
(
SUPPORTED_1000baseT_Full
|
SUPPORTED_Autoneg
|
SUPPORTED_FIBRE
);
ecmd
->
advertising
=
(
ADVERTISED_10000baseT_Full
|
ADVERTISED_1000baseT_Full
|
ADVERTISED_Autoneg
|
ADVERTISED_FIBRE
);
ecmd
->
port
=
PORT_FIBRE
;
}
else
{
ecmd
->
supported
|=
(
SUPPORTED_1000baseT_Full
|
SUPPORTED_FIBRE
);
ecmd
->
advertising
=
(
ADVERTISED_10000baseT_Full
|
ADVERTISED_1000baseT_Full
|
ADVERTISED_FIBRE
);
ecmd
->
port
=
PORT_FIBRE
;
}
hw
->
mac
.
ops
.
get_link_capabilities
(
hw
,
&
supported_link
,
&
autoneg
);
/* set the supported link speeds */
if
(
supported_link
&
IXGBE_LINK_SPEED_10GB_FULL
)
ecmd
->
supported
|=
SUPPORTED_10000baseT_Full
;
if
(
supported_link
&
IXGBE_LINK_SPEED_1GB_FULL
)
ecmd
->
supported
|=
SUPPORTED_1000baseT_Full
;
if
(
supported_link
&
IXGBE_LINK_SPEED_100_FULL
)
ecmd
->
supported
|=
SUPPORTED_100baseT_Full
;
/* set the advertised speeds */
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
)
ecmd
->
advertising
|=
ADVERTISED_10000baseT_Full
;
if
(
hw
->
phy
.
autoneg_advertised
&
IXGBE_LINK_SPEED_1GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_1000baseT_Full
;
}
else
{
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
=
(
ADVERTISED_10000baseT_Full
|
ADVERTISED_FIBRE
);
ecmd
->
port
=
PORT_FIBRE
;
ecmd
->
autoneg
=
AUTONEG_DISABLE
;
/* default modes in case phy.autoneg_advertised isn't set */
if
(
supported_link
&
IXGBE_LINK_SPEED_10GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_10000baseT_Full
;
if
(
supported_link
&
IXGBE_LINK_SPEED_1GB_FULL
)
ecmd
->
advertising
|=
ADVERTISED_1000baseT_Full
;
if
(
supported_link
&
IXGBE_LINK_SPEED_100_FULL
)
ecmd
->
advertising
|=
ADVERTISED_100baseT_Full
;
}
/* Get PHY type */
if
(
autoneg
)
{
ecmd
->
supported
|=
SUPPORTED_Autoneg
;
ecmd
->
advertising
|=
ADVERTISED_Autoneg
;
ecmd
->
autoneg
=
AUTONEG_ENABLE
;
}
else
ecmd
->
autoneg
=
AUTONEG_DISABLE
;
ecmd
->
transceiver
=
XCVR_EXTERNAL
;
/* Determine the remaining settings based on the PHY type. */
switch
(
adapter
->
hw
.
phy
.
type
)
{
case
ixgbe_phy_tn
:
case
ixgbe_phy_aq
:
case
ixgbe_phy_cu_unknown
:
/* Copper 10G-BASET */
ecmd
->
supported
|=
SUPPORTED_TP
;
ecmd
->
advertising
|=
ADVERTISED_TP
;
ecmd
->
port
=
PORT_TP
;
break
;
case
ixgbe_phy_qt
:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_FIBRE
;
break
;
case
ixgbe_phy_nl
:
...
...
@@ -257,42 +217,59 @@ static int ixgbe_get_settings(struct net_device *netdev,
case
ixgbe_phy_sfp_avago
:
case
ixgbe_phy_sfp_intel
:
case
ixgbe_phy_sfp_unknown
:
switch
(
adapter
->
hw
.
phy
.
sfp_type
)
{
/* SFP+ devices, further checking needed */
switch
(
adapter
->
hw
.
phy
.
sfp_type
)
{
case
ixgbe_sfp_type_da_cu
:
case
ixgbe_sfp_type_da_cu_core0
:
case
ixgbe_sfp_type_da_cu_core1
:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_DA
;
break
;
case
ixgbe_sfp_type_sr
:
case
ixgbe_sfp_type_lr
:
case
ixgbe_sfp_type_srlr_core0
:
case
ixgbe_sfp_type_srlr_core1
:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_FIBRE
;
break
;
case
ixgbe_sfp_type_not_present
:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_NONE
;
break
;
case
ixgbe_sfp_type_1g_cu_core0
:
case
ixgbe_sfp_type_1g_cu_core1
:
ecmd
->
supported
|=
SUPPORTED_TP
;
ecmd
->
advertising
|=
ADVERTISED_TP
;
ecmd
->
port
=
PORT_TP
;
ecmd
->
supported
=
SUPPORTED_TP
;
ecmd
->
advertising
=
(
ADVERTISED_1000baseT_Full
|
ADVERTISED_TP
);
break
;
case
ixgbe_sfp_type_1g_sx_core0
:
case
ixgbe_sfp_type_1g_sx_core1
:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_FIBRE
;
break
;
case
ixgbe_sfp_type_unknown
:
default:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_OTHER
;
break
;
}
break
;
case
ixgbe_phy_xaui
:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_NONE
;
break
;
case
ixgbe_phy_unknown
:
case
ixgbe_phy_generic
:
case
ixgbe_phy_sfp_unsupported
:
default:
ecmd
->
supported
|=
SUPPORTED_FIBRE
;
ecmd
->
advertising
|=
ADVERTISED_FIBRE
;
ecmd
->
port
=
PORT_OTHER
;
break
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
浏览文件 @
1c11a0a1
...
...
@@ -907,6 +907,8 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
* 8 SFP_act_lmt_DA_CORE1 - 82599-specific
* 9 SFP_1g_cu_CORE0 - 82599-specific
* 10 SFP_1g_cu_CORE1 - 82599-specific
* 11 SFP_1g_sx_CORE0 - 82599-specific
* 12 SFP_1g_sx_CORE1 - 82599-specific
*/
if
(
hw
->
mac
.
type
==
ixgbe_mac_82598EB
)
{
if
(
cable_tech
&
IXGBE_SFF_DA_PASSIVE_CABLE
)
...
...
@@ -957,6 +959,13 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
else
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_1g_cu_core1
;
}
else
if
(
comp_codes_1g
&
IXGBE_SFF_1GBASESX_CAPABLE
)
{
if
(
hw
->
bus
.
lan_id
==
0
)
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_1g_sx_core0
;
else
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_1g_sx_core1
;
}
else
{
hw
->
phy
.
sfp_type
=
ixgbe_sfp_type_unknown
;
}
...
...
@@ -1049,7 +1058,9 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
/* Verify supported 1G SFP modules */
if
(
comp_codes_10g
==
0
&&
!
(
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
||
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core0
))
{
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core0
||
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_sx_core0
||
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_sx_core1
))
{
hw
->
phy
.
type
=
ixgbe_phy_sfp_unsupported
;
status
=
IXGBE_ERR_SFP_NOT_SUPPORTED
;
goto
out
;
...
...
@@ -1064,7 +1075,9 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
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
)
||
(
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
)))
{
(
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
)
||
(
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_sx_core0
)
||
(
hw
->
phy
.
sfp_type
==
ixgbe_sfp_type_1g_sx_core1
)))
{
/* Make sure we're a supported PHY type */
if
(
hw
->
phy
.
type
==
ixgbe_phy_sfp_intel
)
{
status
=
0
;
...
...
@@ -1128,10 +1141,12 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
* SR modules
*/
if
(
sfp_type
==
ixgbe_sfp_type_da_act_lmt_core0
||
sfp_type
==
ixgbe_sfp_type_1g_cu_core0
)
sfp_type
==
ixgbe_sfp_type_1g_cu_core0
||
sfp_type
==
ixgbe_sfp_type_1g_sx_core0
)
sfp_type
=
ixgbe_sfp_type_srlr_core0
;
else
if
(
sfp_type
==
ixgbe_sfp_type_da_act_lmt_core1
||
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
)
sfp_type
==
ixgbe_sfp_type_1g_cu_core1
||
sfp_type
==
ixgbe_sfp_type_1g_sx_core1
)
sfp_type
=
ixgbe_sfp_type_srlr_core1
;
/* Read offset to PHY init contents */
...
...
This diff is collapsed.
Click to expand it.
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
浏览文件 @
1c11a0a1
...
...
@@ -2604,6 +2604,8 @@ enum ixgbe_sfp_type {
ixgbe_sfp_type_da_act_lmt_core1
=
8
,
ixgbe_sfp_type_1g_cu_core0
=
9
,
ixgbe_sfp_type_1g_cu_core1
=
10
,
ixgbe_sfp_type_1g_sx_core0
=
11
,
ixgbe_sfp_type_1g_sx_core1
=
12
,
ixgbe_sfp_type_not_present
=
0xFFFE
,
ixgbe_sfp_type_unknown
=
0xFFFF
};
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部