Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
89c64d75
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看板
提交
89c64d75
编写于
5月 15, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/net-next-2.6
上级
4dc6ec26
4f6290cf
变更
13
展开全部
隐藏空白更改
内联
并排
Showing
13 changed file
with
793 addition
and
486 deletion
+793
-486
drivers/net/e1000e/lib.c
drivers/net/e1000e/lib.c
+2
-2
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe.h
+62
-48
drivers/net/ixgbe/ixgbe_82599.c
drivers/net/ixgbe/ixgbe_82599.c
+3
-0
drivers/net/ixgbe/ixgbe_common.c
drivers/net/ixgbe/ixgbe_common.c
+22
-0
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_ethtool.c
+1
-0
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+539
-433
drivers/net/ixgbe/ixgbe_mbx.h
drivers/net/ixgbe/ixgbe_mbx.h
+1
-0
drivers/net/ixgbe/ixgbe_sriov.c
drivers/net/ixgbe/ixgbe_sriov.c
+95
-3
drivers/net/ixgbe/ixgbe_type.h
drivers/net/ixgbe/ixgbe_type.h
+2
-0
drivers/net/ixgbevf/ixgbevf_main.c
drivers/net/ixgbevf/ixgbevf_main.c
+30
-0
drivers/net/ixgbevf/mbx.h
drivers/net/ixgbevf/mbx.h
+1
-0
drivers/net/ixgbevf/vf.c
drivers/net/ixgbevf/vf.c
+34
-0
drivers/net/ixgbevf/vf.h
drivers/net/ixgbevf/vf.h
+1
-0
未找到文件。
drivers/net/e1000e/lib.c
浏览文件 @
89c64d75
...
...
@@ -144,7 +144,7 @@ void e1000_write_vfta_generic(struct e1000_hw *hw, u32 offset, u32 value)
* @hw: pointer to the HW structure
* @rar_count: receive address registers
*
* Setup
s
the receive address registers by setting the base receive address
* Setup the receive address registers by setting the base receive address
* register to the devices MAC address and clearing all the other receive
* address registers to 0.
**/
...
...
@@ -1181,7 +1181,7 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
* of pause frames. In this case, we had to advertise
* FULL flow control because we could not advertise Rx
* ONLY. Hence, we must now check to see if we need to
* turn OFF
the TRANSMISSION of PAUSE frames.
* turn OFF the TRANSMISSION of PAUSE frames.
*/
if
(
hw
->
fc
.
requested_mode
==
e1000_fc_full
)
{
hw
->
fc
.
current_mode
=
e1000_fc_full
;
...
...
drivers/net/ixgbe/ixgbe.h
浏览文件 @
89c64d75
...
...
@@ -106,6 +106,7 @@
#define IXGBE_MAX_VF_FUNCTIONS 64
#define IXGBE_MAX_VFTA_ENTRIES 128
#define MAX_EMULATION_MAC_ADDRS 16
#define IXGBE_MAX_PF_MACVLANS 15
#define VMDQ_P(p) ((p) + adapter->num_vfs)
struct
vf_data_storage
{
...
...
@@ -121,6 +122,15 @@ struct vf_data_storage {
u16
tx_rate
;
};
struct
vf_macvlans
{
struct
list_head
l
;
int
vf
;
int
rar_entry
;
bool
free
;
bool
is_macvlan
;
u8
vf_macvlan
[
ETH_ALEN
];
};
/* wrapper around a pointer to a socket buffer,
* so a DMA handle can be stored along with the buffer */
struct
ixgbe_tx_buffer
{
...
...
@@ -331,10 +341,52 @@ struct ixgbe_q_vector {
/* board specific private data structure */
struct
ixgbe_adapter
{
struct
timer_list
watchdog_timer
;
unsigned
long
state
;
/* Some features need tri-state capability,
* thus the additional *_CAPABLE flags.
*/
u32
flags
;
#define IXGBE_FLAG_RX_CSUM_ENABLED (u32)(1)
#define IXGBE_FLAG_MSI_CAPABLE (u32)(1 << 1)
#define IXGBE_FLAG_MSI_ENABLED (u32)(1 << 2)
#define IXGBE_FLAG_MSIX_CAPABLE (u32)(1 << 3)
#define IXGBE_FLAG_MSIX_ENABLED (u32)(1 << 4)
#define IXGBE_FLAG_RX_1BUF_CAPABLE (u32)(1 << 6)
#define IXGBE_FLAG_RX_PS_CAPABLE (u32)(1 << 7)
#define IXGBE_FLAG_RX_PS_ENABLED (u32)(1 << 8)
#define IXGBE_FLAG_IN_NETPOLL (u32)(1 << 9)
#define IXGBE_FLAG_DCA_ENABLED (u32)(1 << 10)
#define IXGBE_FLAG_DCA_CAPABLE (u32)(1 << 11)
#define IXGBE_FLAG_IMIR_ENABLED (u32)(1 << 12)
#define IXGBE_FLAG_MQ_CAPABLE (u32)(1 << 13)
#define IXGBE_FLAG_DCB_ENABLED (u32)(1 << 14)
#define IXGBE_FLAG_RSS_ENABLED (u32)(1 << 16)
#define IXGBE_FLAG_RSS_CAPABLE (u32)(1 << 17)
#define IXGBE_FLAG_VMDQ_CAPABLE (u32)(1 << 18)
#define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19)
#define IXGBE_FLAG_FAN_FAIL_CAPABLE (u32)(1 << 20)
#define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22)
#define IXGBE_FLAG_NEED_LINK_CONFIG (u32)(1 << 23)
#define IXGBE_FLAG_FDIR_HASH_CAPABLE (u32)(1 << 24)
#define IXGBE_FLAG_FDIR_PERFECT_CAPABLE (u32)(1 << 25)
#define IXGBE_FLAG_FCOE_CAPABLE (u32)(1 << 26)
#define IXGBE_FLAG_FCOE_ENABLED (u32)(1 << 27)
#define IXGBE_FLAG_SRIOV_CAPABLE (u32)(1 << 28)
#define IXGBE_FLAG_SRIOV_ENABLED (u32)(1 << 29)
u32
flags2
;
#define IXGBE_FLAG2_RSC_CAPABLE (u32)(1)
#define IXGBE_FLAG2_RSC_ENABLED (u32)(1 << 1)
#define IXGBE_FLAG2_TEMP_SENSOR_CAPABLE (u32)(1 << 2)
#define IXGBE_FLAG2_TEMP_SENSOR_EVENT (u32)(1 << 3)
#define IXGBE_FLAG2_SEARCH_FOR_SFP (u32)(1 << 4)
#define IXGBE_FLAG2_SFP_NEEDS_RESET (u32)(1 << 5)
#define IXGBE_FLAG2_RESET_REQUESTED (u32)(1 << 6)
#define IXGBE_FLAG2_FDIR_REQUIRES_REINIT (u32)(1 << 7)
unsigned
long
active_vlans
[
BITS_TO_LONGS
(
VLAN_N_VID
)];
u16
bd_number
;
struct
work_struct
reset_task
;
struct
ixgbe_q_vector
*
q_vector
[
MAX_MSIX_Q_VECTORS
];
/* DCB parameters */
...
...
@@ -377,43 +429,6 @@ struct ixgbe_adapter {
u32
alloc_rx_page_failed
;
u32
alloc_rx_buff_failed
;
/* Some features need tri-state capability,
* thus the additional *_CAPABLE flags.
*/
u32
flags
;
#define IXGBE_FLAG_RX_CSUM_ENABLED (u32)(1)
#define IXGBE_FLAG_MSI_CAPABLE (u32)(1 << 1)
#define IXGBE_FLAG_MSI_ENABLED (u32)(1 << 2)
#define IXGBE_FLAG_MSIX_CAPABLE (u32)(1 << 3)
#define IXGBE_FLAG_MSIX_ENABLED (u32)(1 << 4)
#define IXGBE_FLAG_RX_1BUF_CAPABLE (u32)(1 << 6)
#define IXGBE_FLAG_RX_PS_CAPABLE (u32)(1 << 7)
#define IXGBE_FLAG_RX_PS_ENABLED (u32)(1 << 8)
#define IXGBE_FLAG_IN_NETPOLL (u32)(1 << 9)
#define IXGBE_FLAG_DCA_ENABLED (u32)(1 << 10)
#define IXGBE_FLAG_DCA_CAPABLE (u32)(1 << 11)
#define IXGBE_FLAG_IMIR_ENABLED (u32)(1 << 12)
#define IXGBE_FLAG_MQ_CAPABLE (u32)(1 << 13)
#define IXGBE_FLAG_DCB_ENABLED (u32)(1 << 14)
#define IXGBE_FLAG_RSS_ENABLED (u32)(1 << 16)
#define IXGBE_FLAG_RSS_CAPABLE (u32)(1 << 17)
#define IXGBE_FLAG_VMDQ_CAPABLE (u32)(1 << 18)
#define IXGBE_FLAG_VMDQ_ENABLED (u32)(1 << 19)
#define IXGBE_FLAG_FAN_FAIL_CAPABLE (u32)(1 << 20)
#define IXGBE_FLAG_NEED_LINK_UPDATE (u32)(1 << 22)
#define IXGBE_FLAG_IN_SFP_LINK_TASK (u32)(1 << 23)
#define IXGBE_FLAG_IN_SFP_MOD_TASK (u32)(1 << 24)
#define IXGBE_FLAG_FDIR_HASH_CAPABLE (u32)(1 << 25)
#define IXGBE_FLAG_FDIR_PERFECT_CAPABLE (u32)(1 << 26)
#define IXGBE_FLAG_FCOE_CAPABLE (u32)(1 << 27)
#define IXGBE_FLAG_FCOE_ENABLED (u32)(1 << 28)
#define IXGBE_FLAG_SRIOV_CAPABLE (u32)(1 << 29)
#define IXGBE_FLAG_SRIOV_ENABLED (u32)(1 << 30)
u32
flags2
;
#define IXGBE_FLAG2_RSC_CAPABLE (u32)(1)
#define IXGBE_FLAG2_RSC_ENABLED (u32)(1 << 1)
#define IXGBE_FLAG2_TEMP_SENSOR_CAPABLE (u32)(1 << 2)
/* default to trying for four seconds */
#define IXGBE_TRY_LINK_TIMEOUT (4 * HZ)
...
...
@@ -434,7 +449,6 @@ struct ixgbe_adapter {
u32
rx_eitr_param
;
u32
tx_eitr_param
;
unsigned
long
state
;
u64
tx_busy
;
unsigned
int
tx_ring_count
;
unsigned
int
rx_ring_count
;
...
...
@@ -443,15 +457,12 @@ struct ixgbe_adapter {
bool
link_up
;
unsigned
long
link_check_timeout
;
struct
work_struct
watchdog_task
;
struct
work_struct
sfp_task
;
struct
timer_list
sfp_timer
;
struct
work_struct
multispeed_fiber_task
;
struct
work_struct
sfp_config_module_task
;
struct
work_struct
service_task
;
struct
timer_list
service_timer
;
u32
fdir_pballoc
;
u32
atr_sample_rate
;
unsigned
long
fdir_overflow
;
/* number of times ATR was backed off */
spinlock_t
fdir_perfect_lock
;
struct
work_struct
fdir_reinit_task
;
#ifdef IXGBE_FCOE
struct
ixgbe_fcoe
fcoe
;
#endif
/* IXGBE_FCOE */
...
...
@@ -462,7 +473,6 @@ struct ixgbe_adapter {
int
node
;
u32
led_reg
;
struct
work_struct
check_overtemp_task
;
u32
interrupt_event
;
char
lsc_int_name
[
IFNAMSIZ
+
9
];
...
...
@@ -471,13 +481,17 @@ struct ixgbe_adapter {
unsigned
int
num_vfs
;
struct
vf_data_storage
*
vfinfo
;
int
vf_rate_link_speed
;
struct
vf_macvlans
vf_mvs
;
struct
vf_macvlans
*
mv_list
;
bool
antispoofing_enabled
;
};
enum
ixbge_state_t
{
__IXGBE_TESTING
,
__IXGBE_RESETTING
,
__IXGBE_DOWN
,
__IXGBE_SFP_MODULE_NOT_FOUND
__IXGBE_SERVICE_SCHED
,
__IXGBE_IN_SFP_INIT
,
};
struct
ixgbe_rsc_cb
{
...
...
drivers/net/ixgbe/ixgbe_82599.c
浏览文件 @
89c64d75
...
...
@@ -368,6 +368,9 @@ static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
case
IXGBE_DEV_ID_82599_T3_LOM
:
media_type
=
ixgbe_media_type_copper
;
break
;
case
IXGBE_DEV_ID_82599_LS
:
media_type
=
ixgbe_media_type_fiber_lco
;
break
;
default:
media_type
=
ixgbe_media_type_unknown
;
break
;
...
...
drivers/net/ixgbe/ixgbe_common.c
浏览文件 @
89c64d75
...
...
@@ -1189,6 +1189,28 @@ static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
udelay
(
50
);
}
if
(
i
==
timeout
)
{
hw_dbg
(
hw
,
"Driver can't access the Eeprom - SMBI Semaphore "
"not granted.
\n
"
);
/*
* this release is particularly important because our attempts
* above to get the semaphore may have succeeded, and if there
* was a timeout, we should unconditionally clear the semaphore
* bits to free the driver to make progress
*/
ixgbe_release_eeprom_semaphore
(
hw
);
udelay
(
50
);
/*
* one last try
* If the SMBI bit is 0 when we read it, then the bit will be
* set and we have the semaphore
*/
swsm
=
IXGBE_READ_REG
(
hw
,
IXGBE_SWSM
);
if
(
!
(
swsm
&
IXGBE_SWSM_SMBI
))
status
=
0
;
}
/* Now get the semaphore between SW/FW through the SWESMBI bit */
if
(
status
==
0
)
{
for
(
i
=
0
;
i
<
timeout
;
i
++
)
{
...
...
drivers/net/ixgbe/ixgbe_ethtool.c
浏览文件 @
89c64d75
...
...
@@ -84,6 +84,7 @@ static struct ixgbe_stats ixgbe_gstrings_stats[] = {
{
"hw_rsc_flushed"
,
IXGBE_STAT
(
rsc_total_flush
)},
{
"fdir_match"
,
IXGBE_STAT
(
stats
.
fdirmatch
)},
{
"fdir_miss"
,
IXGBE_STAT
(
stats
.
fdirmiss
)},
{
"fdir_overflow"
,
IXGBE_STAT
(
fdir_overflow
)},
{
"rx_fifo_errors"
,
IXGBE_NETDEV_STAT
(
rx_fifo_errors
)},
{
"rx_missed_errors"
,
IXGBE_NETDEV_STAT
(
rx_missed_errors
)},
{
"tx_aborted_errors"
,
IXGBE_NETDEV_STAT
(
tx_aborted_errors
)},
...
...
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
89c64d75
此差异已折叠。
点击以展开。
drivers/net/ixgbe/ixgbe_mbx.h
浏览文件 @
89c64d75
...
...
@@ -67,6 +67,7 @@
#define IXGBE_VF_SET_MULTICAST 0x03
/* VF requests PF to set MC addr */
#define IXGBE_VF_SET_VLAN 0x04
/* VF requests PF to set VLAN */
#define IXGBE_VF_SET_LPE 0x05
/* VF requests PF to set VMOLR.LPE */
#define IXGBE_VF_SET_MACVLAN 0x06
/* VF requests PF for unicast filter */
/* length of permanent address message returned from PF */
#define IXGBE_VF_PERMADDR_MSG_LEN 4
...
...
drivers/net/ixgbe/ixgbe_sriov.c
浏览文件 @
89c64d75
...
...
@@ -82,6 +82,21 @@ static int ixgbe_set_vf_multicasts(struct ixgbe_adapter *adapter,
return
0
;
}
static
void
ixgbe_restore_vf_macvlans
(
struct
ixgbe_adapter
*
adapter
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
list_head
*
pos
;
struct
vf_macvlans
*
entry
;
list_for_each
(
pos
,
&
adapter
->
vf_mvs
.
l
)
{
entry
=
list_entry
(
pos
,
struct
vf_macvlans
,
l
);
if
(
entry
->
free
==
false
)
hw
->
mac
.
ops
.
set_rar
(
hw
,
entry
->
rar_entry
,
entry
->
vf_macvlan
,
entry
->
vf
,
IXGBE_RAH_AV
);
}
}
void
ixgbe_restore_vf_multicasts
(
struct
ixgbe_adapter
*
adapter
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
...
...
@@ -102,6 +117,9 @@ void ixgbe_restore_vf_multicasts(struct ixgbe_adapter *adapter)
IXGBE_WRITE_REG
(
hw
,
IXGBE_MTA
(
vector_reg
),
mta_reg
);
}
}
/* Restore any VF macvlans */
ixgbe_restore_vf_macvlans
(
adapter
);
}
static
int
ixgbe_set_vf_vlan
(
struct
ixgbe_adapter
*
adapter
,
int
add
,
int
vid
,
...
...
@@ -200,6 +218,61 @@ static int ixgbe_set_vf_mac(struct ixgbe_adapter *adapter,
return
0
;
}
static
int
ixgbe_set_vf_macvlan
(
struct
ixgbe_adapter
*
adapter
,
int
vf
,
int
index
,
unsigned
char
*
mac_addr
)
{
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
struct
list_head
*
pos
;
struct
vf_macvlans
*
entry
;
if
(
index
<=
1
)
{
list_for_each
(
pos
,
&
adapter
->
vf_mvs
.
l
)
{
entry
=
list_entry
(
pos
,
struct
vf_macvlans
,
l
);
if
(
entry
->
vf
==
vf
)
{
entry
->
vf
=
-
1
;
entry
->
free
=
true
;
entry
->
is_macvlan
=
false
;
hw
->
mac
.
ops
.
clear_rar
(
hw
,
entry
->
rar_entry
);
}
}
}
/*
* If index was zero then we were asked to clear the uc list
* for the VF. We're done.
*/
if
(
!
index
)
return
0
;
entry
=
NULL
;
list_for_each
(
pos
,
&
adapter
->
vf_mvs
.
l
)
{
entry
=
list_entry
(
pos
,
struct
vf_macvlans
,
l
);
if
(
entry
->
free
)
break
;
}
/*
* If we traversed the entire list and didn't find a free entry
* then we're out of space on the RAR table. Also entry may
* be NULL because the original memory allocation for the list
* failed, which is not fatal but does mean we can't support
* VF requests for MACVLAN because we couldn't allocate
* memory for the list management required.
*/
if
(
!
entry
||
!
entry
->
free
)
return
-
ENOSPC
;
entry
->
free
=
false
;
entry
->
is_macvlan
=
true
;
entry
->
vf
=
vf
;
memcpy
(
entry
->
vf_macvlan
,
mac_addr
,
ETH_ALEN
);
hw
->
mac
.
ops
.
set_rar
(
hw
,
entry
->
rar_entry
,
mac_addr
,
vf
,
IXGBE_RAH_AV
);
return
0
;
}
int
ixgbe_vf_configuration
(
struct
pci_dev
*
pdev
,
unsigned
int
event_mask
)
{
unsigned
char
vf_mac_addr
[
6
];
...
...
@@ -251,12 +324,12 @@ static inline void ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
static
int
ixgbe_rcv_msg_from_vf
(
struct
ixgbe_adapter
*
adapter
,
u32
vf
)
{
u32
mbx_size
=
IXGBE_VFMAILBOX_SIZE
;
u32
msgbuf
[
mbx_size
];
u32
msgbuf
[
IXGBE_VFMAILBOX_SIZE
];
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
s32
retval
;
int
entries
;
u16
*
hash_list
;
int
add
,
vid
;
int
add
,
vid
,
index
;
u8
*
new_mac
;
retval
=
ixgbe_read_mbx
(
hw
,
msgbuf
,
mbx_size
,
vf
);
...
...
@@ -345,6 +418,24 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
retval
=
ixgbe_set_vf_vlan
(
adapter
,
add
,
vid
,
vf
);
}
break
;
case
IXGBE_VF_SET_MACVLAN
:
index
=
(
msgbuf
[
0
]
&
IXGBE_VT_MSGINFO_MASK
)
>>
IXGBE_VT_MSGINFO_SHIFT
;
/*
* If the VF is allowed to set MAC filters then turn off
* anti-spoofing to avoid false positives. An index
* greater than 0 will indicate the VF is setting a
* macvlan MAC filter.
*/
if
(
index
>
0
&&
adapter
->
antispoofing_enabled
)
{
hw
->
mac
.
ops
.
set_mac_anti_spoofing
(
hw
,
false
,
adapter
->
num_vfs
);
hw
->
mac
.
ops
.
set_vlan_anti_spoofing
(
hw
,
false
,
vf
);
adapter
->
antispoofing_enabled
=
false
;
}
retval
=
ixgbe_set_vf_macvlan
(
adapter
,
vf
,
index
,
(
unsigned
char
*
)(
&
msgbuf
[
1
]));
break
;
default:
e_err
(
drv
,
"Unhandled Msg %8.8x
\n
"
,
msgbuf
[
0
]);
retval
=
IXGBE_ERR_MBX
;
...
...
@@ -452,7 +543,8 @@ int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
goto
out
;
ixgbe_set_vmvir
(
adapter
,
vlan
|
(
qos
<<
VLAN_PRIO_SHIFT
),
vf
);
ixgbe_set_vmolr
(
hw
,
vf
,
false
);
hw
->
mac
.
ops
.
set_vlan_anti_spoofing
(
hw
,
true
,
vf
);
if
(
adapter
->
antispoofing_enabled
)
hw
->
mac
.
ops
.
set_vlan_anti_spoofing
(
hw
,
true
,
vf
);
adapter
->
vfinfo
[
vf
].
pf_vlan
=
vlan
;
adapter
->
vfinfo
[
vf
].
pf_qos
=
qos
;
dev_info
(
&
adapter
->
pdev
->
dev
,
...
...
drivers/net/ixgbe/ixgbe_type.h
浏览文件 @
89c64d75
...
...
@@ -62,6 +62,7 @@
#define IXGBE_DEV_ID_82599_XAUI_LOM 0x10FC
#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE 0x10F8
#define IXGBE_SUBDEV_ID_82599_KX4_KR_MEZZ 0x000C
#define IXGBE_DEV_ID_82599_LS 0x154F
#define IXGBE_DEV_ID_X540T 0x1528
/* General Registers */
...
...
@@ -2395,6 +2396,7 @@ enum ixgbe_sfp_type {
enum
ixgbe_media_type
{
ixgbe_media_type_unknown
=
0
,
ixgbe_media_type_fiber
,
ixgbe_media_type_fiber_lco
,
ixgbe_media_type_copper
,
ixgbe_media_type_backplane
,
ixgbe_media_type_cx4
,
...
...
drivers/net/ixgbevf/ixgbevf_main.c
浏览文件 @
89c64d75
...
...
@@ -1460,6 +1460,34 @@ static void ixgbevf_restore_vlan(struct ixgbevf_adapter *adapter)
}
}
static
int
ixgbevf_write_uc_addr_list
(
struct
net_device
*
netdev
)
{
struct
ixgbevf_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
ixgbe_hw
*
hw
=
&
adapter
->
hw
;
int
count
=
0
;
if
((
netdev_uc_count
(
netdev
))
>
10
)
{
printk
(
KERN_ERR
"Too many unicast filters - No Space
\n
"
);
return
-
ENOSPC
;
}
if
(
!
netdev_uc_empty
(
netdev
))
{
struct
netdev_hw_addr
*
ha
;
netdev_for_each_uc_addr
(
ha
,
netdev
)
{
hw
->
mac
.
ops
.
set_uc_addr
(
hw
,
++
count
,
ha
->
addr
);
udelay
(
200
);
}
}
else
{
/*
* If the list is empty then send message to PF driver to
* clear all macvlans on this VF.
*/
hw
->
mac
.
ops
.
set_uc_addr
(
hw
,
0
,
NULL
);
}
return
count
;
}
/**
* ixgbevf_set_rx_mode - Multicast set
* @netdev: network interface device structure
...
...
@@ -1476,6 +1504,8 @@ static void ixgbevf_set_rx_mode(struct net_device *netdev)
/* reprogram multicast list */
if
(
hw
->
mac
.
ops
.
update_mc_addr_list
)
hw
->
mac
.
ops
.
update_mc_addr_list
(
hw
,
netdev
);
ixgbevf_write_uc_addr_list
(
netdev
);
}
static
void
ixgbevf_napi_enable_all
(
struct
ixgbevf_adapter
*
adapter
)
...
...
drivers/net/ixgbevf/mbx.h
浏览文件 @
89c64d75
...
...
@@ -81,6 +81,7 @@
#define IXGBE_VF_SET_MULTICAST 0x03
/* VF requests PF to set MC addr */
#define IXGBE_VF_SET_VLAN 0x04
/* VF requests PF to set VLAN */
#define IXGBE_VF_SET_LPE 0x05
/* VF requests PF to set VMOLR.LPE */
#define IXGBE_VF_SET_MACVLAN 0x06
/* VF requests PF for unicast filter */
/* length of permanent address message returned from PF */
#define IXGBE_VF_PERMADDR_MSG_LEN 4
...
...
drivers/net/ixgbevf/vf.c
浏览文件 @
89c64d75
...
...
@@ -216,6 +216,39 @@ static s32 ixgbevf_get_mac_addr_vf(struct ixgbe_hw *hw, u8 *mac_addr)
return
0
;
}
static
s32
ixgbevf_set_uc_addr_vf
(
struct
ixgbe_hw
*
hw
,
u32
index
,
u8
*
addr
)
{
struct
ixgbe_mbx_info
*
mbx
=
&
hw
->
mbx
;
u32
msgbuf
[
3
];
u8
*
msg_addr
=
(
u8
*
)(
&
msgbuf
[
1
]);
s32
ret_val
;
memset
(
msgbuf
,
0
,
sizeof
(
msgbuf
));
/*
* If index is one then this is the start of a new list and needs
* indication to the PF so it can do it's own list management.
* If it is zero then that tells the PF to just clear all of
* this VF's macvlans and there is no new list.
*/
msgbuf
[
0
]
|=
index
<<
IXGBE_VT_MSGINFO_SHIFT
;
msgbuf
[
0
]
|=
IXGBE_VF_SET_MACVLAN
;
if
(
addr
)
memcpy
(
msg_addr
,
addr
,
6
);
ret_val
=
mbx
->
ops
.
write_posted
(
hw
,
msgbuf
,
3
);
if
(
!
ret_val
)
ret_val
=
mbx
->
ops
.
read_posted
(
hw
,
msgbuf
,
3
);
msgbuf
[
0
]
&=
~
IXGBE_VT_MSGTYPE_CTS
;
if
(
!
ret_val
)
if
(
msgbuf
[
0
]
==
(
IXGBE_VF_SET_MACVLAN
|
IXGBE_VT_MSGTYPE_NACK
))
ret_val
=
-
ENOMEM
;
return
ret_val
;
}
/**
* ixgbevf_set_rar_vf - set device MAC address
* @hw: pointer to hardware structure
...
...
@@ -378,6 +411,7 @@ static struct ixgbe_mac_operations ixgbevf_mac_ops = {
.
check_link
=
ixgbevf_check_mac_link_vf
,
.
set_rar
=
ixgbevf_set_rar_vf
,
.
update_mc_addr_list
=
ixgbevf_update_mc_addr_list_vf
,
.
set_uc_addr
=
ixgbevf_set_uc_addr_vf
,
.
set_vfta
=
ixgbevf_set_vfta_vf
,
};
...
...
drivers/net/ixgbevf/vf.h
浏览文件 @
89c64d75
...
...
@@ -62,6 +62,7 @@ struct ixgbe_mac_operations {
/* RAR, Multicast, VLAN */
s32
(
*
set_rar
)(
struct
ixgbe_hw
*
,
u32
,
u8
*
,
u32
);
s32
(
*
set_uc_addr
)(
struct
ixgbe_hw
*
,
u32
,
u8
*
);
s32
(
*
init_rx_addrs
)(
struct
ixgbe_hw
*
);
s32
(
*
update_mc_addr_list
)(
struct
ixgbe_hw
*
,
struct
net_device
*
);
s32
(
*
enable_mc
)(
struct
ixgbe_hw
*
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录