Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
_Walt
cloud-kernel
提交
9836f408
cloud-kernel
项目概览
_Walt
/
cloud-kernel
与 Fork 源项目一致
Fork自
openanolis / cloud-kernel
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9836f408
编写于
3月 01, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-davem' of
git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc-next-2.6
上级
e364a341
6d84b986
变更
30
隐藏空白更改
内联
并排
Showing
30 changed file
with
150 addition
and
220 deletion
+150
-220
drivers/net/sfc/efx.c
drivers/net/sfc/efx.c
+1
-1
drivers/net/sfc/efx.h
drivers/net/sfc/efx.h
+1
-1
drivers/net/sfc/ethtool.c
drivers/net/sfc/ethtool.c
+23
-4
drivers/net/sfc/falcon.c
drivers/net/sfc/falcon.c
+6
-16
drivers/net/sfc/falcon_boards.c
drivers/net/sfc/falcon_boards.c
+1
-1
drivers/net/sfc/falcon_xmac.c
drivers/net/sfc/falcon_xmac.c
+1
-1
drivers/net/sfc/io.h
drivers/net/sfc/io.h
+1
-1
drivers/net/sfc/mcdi.c
drivers/net/sfc/mcdi.c
+7
-16
drivers/net/sfc/mcdi.h
drivers/net/sfc/mcdi.h
+2
-2
drivers/net/sfc/mcdi_mac.c
drivers/net/sfc/mcdi_mac.c
+1
-1
drivers/net/sfc/mcdi_pcol.h
drivers/net/sfc/mcdi_pcol.h
+1
-1
drivers/net/sfc/mcdi_phy.c
drivers/net/sfc/mcdi_phy.c
+1
-1
drivers/net/sfc/mdio_10g.c
drivers/net/sfc/mdio_10g.c
+6
-28
drivers/net/sfc/mdio_10g.h
drivers/net/sfc/mdio_10g.h
+2
-3
drivers/net/sfc/mtd.c
drivers/net/sfc/mtd.c
+1
-1
drivers/net/sfc/net_driver.h
drivers/net/sfc/net_driver.h
+8
-6
drivers/net/sfc/nic.c
drivers/net/sfc/nic.c
+1
-21
drivers/net/sfc/nic.h
drivers/net/sfc/nic.h
+1
-8
drivers/net/sfc/phy.h
drivers/net/sfc/phy.h
+1
-1
drivers/net/sfc/qt202x_phy.c
drivers/net/sfc/qt202x_phy.c
+1
-1
drivers/net/sfc/regs.h
drivers/net/sfc/regs.h
+1
-1
drivers/net/sfc/rx.c
drivers/net/sfc/rx.c
+72
-72
drivers/net/sfc/selftest.c
drivers/net/sfc/selftest.c
+1
-1
drivers/net/sfc/selftest.h
drivers/net/sfc/selftest.h
+1
-1
drivers/net/sfc/siena.c
drivers/net/sfc/siena.c
+1
-23
drivers/net/sfc/spi.h
drivers/net/sfc/spi.h
+1
-1
drivers/net/sfc/tenxpress.c
drivers/net/sfc/tenxpress.c
+2
-2
drivers/net/sfc/tx.c
drivers/net/sfc/tx.c
+1
-1
drivers/net/sfc/txc43128_phy.c
drivers/net/sfc/txc43128_phy.c
+2
-2
drivers/net/sfc/workarounds.h
drivers/net/sfc/workarounds.h
+1
-1
未找到文件。
drivers/net/sfc/efx.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2005-20
09
Solarflare Communications Inc.
* Copyright 2005-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/efx.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/ethtool.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -28,7 +28,8 @@ struct efx_ethtool_stat {
enum
{
EFX_ETHTOOL_STAT_SOURCE_mac_stats
,
EFX_ETHTOOL_STAT_SOURCE_nic
,
EFX_ETHTOOL_STAT_SOURCE_channel
EFX_ETHTOOL_STAT_SOURCE_channel
,
EFX_ETHTOOL_STAT_SOURCE_tx_queue
}
source
;
unsigned
offset
;
u64
(
*
get_stat
)
(
void
*
field
);
/* Reader function */
...
...
@@ -86,6 +87,10 @@ static u64 efx_get_atomic_stat(void *field)
EFX_ETHTOOL_STAT(field, channel, n_##field, \
unsigned int, efx_get_uint_stat)
#define EFX_ETHTOOL_UINT_TXQ_STAT(field) \
EFX_ETHTOOL_STAT(tx_##field, tx_queue, field, \
unsigned int, efx_get_uint_stat)
static
struct
efx_ethtool_stat
efx_ethtool_stats
[]
=
{
EFX_ETHTOOL_U64_MAC_STAT
(
tx_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
tx_good_bytes
),
...
...
@@ -116,6 +121,10 @@ static struct efx_ethtool_stat efx_ethtool_stats[] = {
EFX_ETHTOOL_ULONG_MAC_STAT
(
tx_non_tcpudp
),
EFX_ETHTOOL_ULONG_MAC_STAT
(
tx_mac_src_error
),
EFX_ETHTOOL_ULONG_MAC_STAT
(
tx_ip_src_error
),
EFX_ETHTOOL_UINT_TXQ_STAT
(
tso_bursts
),
EFX_ETHTOOL_UINT_TXQ_STAT
(
tso_long_headers
),
EFX_ETHTOOL_UINT_TXQ_STAT
(
tso_packets
),
EFX_ETHTOOL_UINT_TXQ_STAT
(
pushes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_good_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_bad_bytes
),
...
...
@@ -237,8 +246,8 @@ static void efx_ethtool_get_drvinfo(struct net_device *net_dev,
strlcpy
(
info
->
driver
,
KBUILD_MODNAME
,
sizeof
(
info
->
driver
));
strlcpy
(
info
->
version
,
EFX_DRIVER_VERSION
,
sizeof
(
info
->
version
));
if
(
efx_nic_rev
(
efx
)
>=
EFX_REV_SIENA_A0
)
siena
_print_fwver
(
efx
,
info
->
fw_version
,
sizeof
(
info
->
fw_version
));
efx_mcdi
_print_fwver
(
efx
,
info
->
fw_version
,
sizeof
(
info
->
fw_version
));
strlcpy
(
info
->
bus_info
,
pci_name
(
efx
->
pci_dev
),
sizeof
(
info
->
bus_info
));
}
...
...
@@ -470,6 +479,7 @@ static void efx_ethtool_get_stats(struct net_device *net_dev,
struct
efx_mac_stats
*
mac_stats
=
&
efx
->
mac_stats
;
struct
efx_ethtool_stat
*
stat
;
struct
efx_channel
*
channel
;
struct
efx_tx_queue
*
tx_queue
;
struct
rtnl_link_stats64
temp
;
int
i
;
...
...
@@ -495,6 +505,15 @@ static void efx_ethtool_get_stats(struct net_device *net_dev,
data
[
i
]
+=
stat
->
get_stat
((
void
*
)
channel
+
stat
->
offset
);
break
;
case
EFX_ETHTOOL_STAT_SOURCE_tx_queue
:
data
[
i
]
=
0
;
efx_for_each_channel
(
channel
,
efx
)
{
efx_for_each_channel_tx_queue
(
tx_queue
,
channel
)
data
[
i
]
+=
stat
->
get_stat
((
void
*
)
tx_queue
+
stat
->
offset
);
}
break
;
}
}
}
...
...
drivers/net/sfc/falcon.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -1478,36 +1478,26 @@ static void falcon_init_rx_cfg(struct efx_nic *efx)
/* RX control FIFO thresholds (32 entries) */
const
unsigned
ctrl_xon_thr
=
20
;
const
unsigned
ctrl_xoff_thr
=
25
;
/* RX data FIFO thresholds (256-byte units; size varies) */
int
data_xon_thr
=
efx_nic_rx_xon_thresh
>>
8
;
int
data_xoff_thr
=
efx_nic_rx_xoff_thresh
>>
8
;
efx_oword_t
reg
;
efx_reado
(
efx
,
&
reg
,
FR_AZ_RX_CFG
);
if
(
efx_nic_rev
(
efx
)
<=
EFX_REV_FALCON_A1
)
{
/* Data FIFO size is 5.5K */
if
(
data_xon_thr
<
0
)
data_xon_thr
=
512
>>
8
;
if
(
data_xoff_thr
<
0
)
data_xoff_thr
=
2048
>>
8
;
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_DESC_PUSH_EN
,
0
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_USR_BUF_SIZE
,
huge_buf_size
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XON_MAC_TH
,
data_xon_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XOFF_MAC_TH
,
data_xoff_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XON_MAC_TH
,
512
>>
8
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XOFF_MAC_TH
,
2048
>>
8
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XON_TX_TH
,
ctrl_xon_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XOFF_TX_TH
,
ctrl_xoff_thr
);
}
else
{
/* Data FIFO size is 80K; register fields moved */
if
(
data_xon_thr
<
0
)
data_xon_thr
=
27648
>>
8
;
/* ~3*max MTU */
if
(
data_xoff_thr
<
0
)
data_xoff_thr
=
54272
>>
8
;
/* ~80Kb - 3*max MTU */
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_DESC_PUSH_EN
,
0
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_USR_BUF_SIZE
,
huge_buf_size
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XON_MAC_TH
,
data_xon_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XOFF_MAC_TH
,
data_xoff_thr
);
/* Send XON and XOFF at ~3 * max MTU away from empty/full */
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XON_MAC_TH
,
27648
>>
8
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XOFF_MAC_TH
,
54272
>>
8
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XON_TX_TH
,
ctrl_xon_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XOFF_TX_TH
,
ctrl_xoff_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_INGR_EN
,
1
);
...
...
drivers/net/sfc/falcon_boards.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2007-20
09
Solarflare Communications Inc.
* Copyright 2007-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/falcon_xmac.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/io.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mcdi.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2008-20
09
Solarflare Communications Inc.
* Copyright 2008-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -602,7 +602,7 @@ void efx_mcdi_process_event(struct efx_channel *channel,
**************************************************************************
*/
int
efx_mcdi_fwver
(
struct
efx_nic
*
efx
,
u64
*
version
,
u32
*
build
)
void
efx_mcdi_print_fwver
(
struct
efx_nic
*
efx
,
char
*
buf
,
size_t
len
)
{
u8
outbuf
[
ALIGN
(
MC_CMD_GET_VERSION_V1_OUT_LEN
,
4
)];
size_t
outlength
;
...
...
@@ -616,29 +616,20 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build)
if
(
rc
)
goto
fail
;
if
(
outlength
==
MC_CMD_GET_VERSION_V0_OUT_LEN
)
{
*
version
=
0
;
*
build
=
MCDI_DWORD
(
outbuf
,
GET_VERSION_OUT_FIRMWARE
);
return
0
;
}
if
(
outlength
<
MC_CMD_GET_VERSION_V1_OUT_LEN
)
{
rc
=
-
EIO
;
goto
fail
;
}
ver_words
=
(
__le16
*
)
MCDI_PTR
(
outbuf
,
GET_VERSION_OUT_VERSION
);
*
version
=
(((
u64
)
le16_to_cpu
(
ver_words
[
0
])
<<
48
)
|
((
u64
)
le16_to_cpu
(
ver_words
[
1
])
<<
32
)
|
((
u64
)
le16_to_cpu
(
ver_words
[
2
])
<<
16
)
|
le16_to_cpu
(
ver_words
[
3
]));
*
build
=
MCDI_DWORD
(
outbuf
,
GET_VERSION_OUT_FIRMWARE
);
return
0
;
snprintf
(
buf
,
len
,
"%u.%u.%u.%u"
,
le16_to_cpu
(
ver_words
[
0
]),
le16_to_cpu
(
ver_words
[
1
]),
le16_to_cpu
(
ver_words
[
2
]),
le16_to_cpu
(
ver_words
[
3
]));
return
;
fail:
netif_err
(
efx
,
probe
,
efx
->
net_dev
,
"%s: failed rc=%d
\n
"
,
__func__
,
rc
);
return
rc
;
buf
[
0
]
=
0
;
}
int
efx_mcdi_drv_attach
(
struct
efx_nic
*
efx
,
bool
driver_operating
,
...
...
drivers/net/sfc/mcdi.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2008-20
09
Solarflare Communications Inc.
* Copyright 2008-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -93,7 +93,7 @@ extern void efx_mcdi_process_event(struct efx_channel *channel,
#define MCDI_EVENT_FIELD(_ev, _field) \
EFX_QWORD_FIELD(_ev, MCDI_EVENT_ ## _field)
extern
int
efx_mcdi_fwver
(
struct
efx_nic
*
efx
,
u64
*
version
,
u32
*
build
);
extern
void
efx_mcdi_print_fwver
(
struct
efx_nic
*
efx
,
char
*
buf
,
size_t
len
);
extern
int
efx_mcdi_drv_attach
(
struct
efx_nic
*
efx
,
bool
driver_operating
,
bool
*
was_attached_out
);
extern
int
efx_mcdi_get_board_cfg
(
struct
efx_nic
*
efx
,
u8
*
mac_address
,
...
...
drivers/net/sfc/mcdi_mac.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2009 Solarflare Communications Inc.
* Copyright 2009
-2010
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mcdi_pcol.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2009 Solarflare Communications Inc.
* Copyright 2009
-2011
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mcdi_phy.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2009 Solarflare Communications Inc.
* Copyright 2009
-2010
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mdio_10g.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -51,13 +51,10 @@ int efx_mdio_reset_mmd(struct efx_nic *port, int mmd,
return
spins
?
spins
:
-
ETIMEDOUT
;
}
static
int
efx_mdio_check_mmd
(
struct
efx_nic
*
efx
,
int
mmd
,
int
fault_fatal
)
static
int
efx_mdio_check_mmd
(
struct
efx_nic
*
efx
,
int
mmd
)
{
int
status
;
if
(
LOOPBACK_INTERNAL
(
efx
))
return
0
;
if
(
mmd
!=
MDIO_MMD_AN
)
{
/* Read MMD STATUS2 to check it is responding. */
status
=
efx_mdio_read
(
efx
,
mmd
,
MDIO_STAT2
);
...
...
@@ -68,20 +65,6 @@ static int efx_mdio_check_mmd(struct efx_nic *efx, int mmd, int fault_fatal)
}
}
/* Read MMD STATUS 1 to check for fault. */
status
=
efx_mdio_read
(
efx
,
mmd
,
MDIO_STAT1
);
if
(
status
&
MDIO_STAT1_FAULT
)
{
if
(
fault_fatal
)
{
netif_err
(
efx
,
hw
,
efx
->
net_dev
,
"PHY MMD %d reporting fatal"
" fault: status %x
\n
"
,
mmd
,
status
);
return
-
EIO
;
}
else
{
netif_dbg
(
efx
,
hw
,
efx
->
net_dev
,
"PHY MMD %d reporting status"
" %x (expected)
\n
"
,
mmd
,
status
);
}
}
return
0
;
}
...
...
@@ -130,8 +113,7 @@ int efx_mdio_wait_reset_mmds(struct efx_nic *efx, unsigned int mmd_mask)
return
rc
;
}
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
,
unsigned
int
fatal_mask
)
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
)
{
int
mmd
=
0
,
probe_mmd
,
devs1
,
devs2
;
u32
devices
;
...
...
@@ -161,13 +143,9 @@ int efx_mdio_check_mmds(struct efx_nic *efx,
/* Check all required MMDs are responding and happy. */
while
(
mmd_mask
)
{
if
(
mmd_mask
&
1
)
{
int
fault_fatal
=
fatal_mask
&
1
;
if
(
efx_mdio_check_mmd
(
efx
,
mmd
,
fault_fatal
))
return
-
EIO
;
}
if
((
mmd_mask
&
1
)
&&
efx_mdio_check_mmd
(
efx
,
mmd
))
return
-
EIO
;
mmd_mask
=
mmd_mask
>>
1
;
fatal_mask
=
fatal_mask
>>
1
;
mmd
++
;
}
...
...
@@ -337,7 +315,7 @@ int efx_mdio_test_alive(struct efx_nic *efx)
"no MDIO PHY present with ID %d
\n
"
,
efx
->
mdio
.
prtad
);
rc
=
-
EINVAL
;
}
else
{
rc
=
efx_mdio_check_mmds
(
efx
,
efx
->
mdio
.
mmds
,
0
);
rc
=
efx_mdio_check_mmds
(
efx
,
efx
->
mdio
.
mmds
);
}
mutex_unlock
(
&
efx
->
mac_lock
);
...
...
drivers/net/sfc/mdio_10g.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -68,8 +68,7 @@ extern int efx_mdio_reset_mmd(struct efx_nic *efx, int mmd,
int
spins
,
int
spintime
);
/* As efx_mdio_check_mmd but for multiple MMDs */
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
,
unsigned
int
fatal_mask
);
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
);
/* Check the link status of specified mmds in bit mask */
extern
bool
efx_mdio_links_ok
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
);
...
...
drivers/net/sfc/mtd.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/net_driver.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2005-20
09
Solarflare Communications Inc.
* Copyright 2005-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -41,7 +41,7 @@
*
**************************************************************************/
#define EFX_DRIVER_VERSION "3.
0
"
#define EFX_DRIVER_VERSION "3.
1
"
#ifdef EFX_ENABLE_DEBUG
#define EFX_BUG_ON_PARANOID(x) BUG_ON(x)
...
...
@@ -214,15 +214,17 @@ struct efx_tx_queue {
* If both this and page are %NULL, the buffer slot is currently free.
* @page: The associated page buffer, if any.
* If both this and skb are %NULL, the buffer slot is currently free.
* @data: Pointer to ethernet header
* @len: Buffer length, in bytes.
* @is_page: Indicates if @page is valid. If false, @skb is valid.
*/
struct
efx_rx_buffer
{
dma_addr_t
dma_addr
;
struct
sk_buff
*
skb
;
struct
page
*
page
;
char
*
data
;
union
{
struct
sk_buff
*
skb
;
struct
page
*
page
;
}
u
;
unsigned
int
len
;
bool
is_page
;
};
/**
...
...
drivers/net/sfc/nic.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -41,26 +41,6 @@
#define RX_DC_ENTRIES 64
#define RX_DC_ENTRIES_ORDER 3
/* RX FIFO XOFF watermark
*
* When the amount of the RX FIFO increases used increases past this
* watermark send XOFF. Only used if RX flow control is enabled (ethtool -A)
* This also has an effect on RX/TX arbitration
*/
int
efx_nic_rx_xoff_thresh
=
-
1
;
module_param_named
(
rx_xoff_thresh_bytes
,
efx_nic_rx_xoff_thresh
,
int
,
0644
);
MODULE_PARM_DESC
(
rx_xoff_thresh_bytes
,
"RX fifo XOFF threshold"
);
/* RX FIFO XON watermark
*
* When the amount of the RX FIFO used decreases below this
* watermark send XON. Only used if TX flow control is enabled (ethtool -A)
* This also has an effect on RX/TX arbitration
*/
int
efx_nic_rx_xon_thresh
=
-
1
;
module_param_named
(
rx_xon_thresh_bytes
,
efx_nic_rx_xon_thresh
,
int
,
0644
);
MODULE_PARM_DESC
(
rx_xon_thresh_bytes
,
"RX fifo XON threshold"
);
/* If EFX_MAX_INT_ERRORS internal errors occur within
* EFX_INT_ERROR_EXPIRE seconds, we consider the NIC broken and
* disable it.
...
...
drivers/net/sfc/nic.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -142,20 +142,14 @@ static inline struct falcon_board *falcon_board(struct efx_nic *efx)
/**
* struct siena_nic_data - Siena NIC state
* @fw_version: Management controller firmware version
* @fw_build: Firmware build number
* @mcdi: Management-Controller-to-Driver Interface
* @wol_filter_id: Wake-on-LAN packet filter id
*/
struct
siena_nic_data
{
u64
fw_version
;
u32
fw_build
;
struct
efx_mcdi_iface
mcdi
;
int
wol_filter_id
;
};
extern
void
siena_print_fwver
(
struct
efx_nic
*
efx
,
char
*
buf
,
size_t
len
);
extern
struct
efx_nic_type
falcon_a1_nic_type
;
extern
struct
efx_nic_type
falcon_b0_nic_type
;
extern
struct
efx_nic_type
siena_a0_nic_type
;
...
...
@@ -194,7 +188,6 @@ extern void efx_nic_eventq_read_ack(struct efx_channel *channel);
/* MAC/PHY */
extern
void
falcon_drain_tx_fifo
(
struct
efx_nic
*
efx
);
extern
void
falcon_reconfigure_mac_wrapper
(
struct
efx_nic
*
efx
);
extern
int
efx_nic_rx_xoff_thresh
,
efx_nic_rx_xon_thresh
;
/* Interrupts and test events */
extern
int
efx_nic_init_interrupt
(
struct
efx_nic
*
efx
);
...
...
drivers/net/sfc/phy.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2007-20
09
Solarflare Communications Inc.
* Copyright 2007-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/qt202x_phy.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/regs.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/rx.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2005-20
09
Solarflare Communications Inc.
* Copyright 2005-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -89,24 +89,37 @@ static unsigned int rx_refill_limit = 95;
*/
#define EFX_RXD_HEAD_ROOM 2
static
inline
unsigned
int
efx_rx_buf_offset
(
struct
efx_rx_buffer
*
buf
)
/* Offset of ethernet header within page */
static
inline
unsigned
int
efx_rx_buf_offset
(
struct
efx_nic
*
efx
,
struct
efx_rx_buffer
*
buf
)
{
/* Offset is always within one page, so we don't need to consider
* the page order.
*/
return
(
__force
unsigned
long
)
buf
->
data
&
(
PAGE_SIZE
-
1
);
return
(((
__force
unsigned
long
)
buf
->
dma_addr
&
(
PAGE_SIZE
-
1
))
+
efx
->
type
->
rx_buffer_hash_size
);
}
static
inline
unsigned
int
efx_rx_buf_size
(
struct
efx_nic
*
efx
)
{
return
PAGE_SIZE
<<
efx
->
rx_buffer_order
;
}
static
inline
u32
efx_rx_buf_hash
(
struct
efx_rx_buffer
*
buf
)
static
u8
*
efx_rx_buf_eh
(
struct
efx_nic
*
efx
,
struct
efx_rx_buffer
*
buf
)
{
if
(
buf
->
is_page
)
return
page_address
(
buf
->
u
.
page
)
+
efx_rx_buf_offset
(
efx
,
buf
);
else
return
((
u8
*
)
buf
->
u
.
skb
->
data
+
efx
->
type
->
rx_buffer_hash_size
);
}
static
inline
u32
efx_rx_buf_hash
(
const
u8
*
eh
)
{
/* The ethernet header is always directly after any hash. */
#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) || NET_IP_ALIGN % 4 == 0
return
__le32_to_cpup
((
const
__le32
*
)(
buf
->
data
-
4
));
return
__le32_to_cpup
((
const
__le32
*
)(
eh
-
4
));
#else
const
u8
*
data
=
(
const
u8
*
)(
buf
->
data
-
4
)
;
const
u8
*
data
=
eh
-
4
;
return
((
u32
)
data
[
0
]
|
(
u32
)
data
[
1
]
<<
8
|
(
u32
)
data
[
2
]
<<
16
|
...
...
@@ -129,6 +142,7 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue)
struct
efx_nic
*
efx
=
rx_queue
->
efx
;
struct
net_device
*
net_dev
=
efx
->
net_dev
;
struct
efx_rx_buffer
*
rx_buf
;
struct
sk_buff
*
skb
;
int
skb_len
=
efx
->
rx_buffer_len
;
unsigned
index
,
count
;
...
...
@@ -136,24 +150,23 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue)
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
rx_buf
->
skb
=
netdev_alloc_skb
(
net_dev
,
skb_len
);
if
(
unlikely
(
!
rx_buf
->
skb
))
rx_buf
->
u
.
skb
=
skb
=
netdev_alloc_skb
(
net_dev
,
skb_len
);
if
(
unlikely
(
!
skb
))
return
-
ENOMEM
;
rx_buf
->
page
=
NULL
;
/* Adjust the SKB for padding and checksum */
skb_reserve
(
rx_buf
->
skb
,
NET_IP_ALIGN
);
skb_reserve
(
skb
,
NET_IP_ALIGN
);
rx_buf
->
len
=
skb_len
-
NET_IP_ALIGN
;
rx_buf
->
data
=
(
char
*
)
rx_buf
->
skb
->
data
;
rx_buf
->
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
rx_buf
->
is_page
=
false
;
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
rx_buf
->
dma_addr
=
pci_map_single
(
efx
->
pci_dev
,
rx_buf
->
data
,
rx_buf
->
len
,
skb
->
data
,
rx_buf
->
len
,
PCI_DMA_FROMDEVICE
);
if
(
unlikely
(
pci_dma_mapping_error
(
efx
->
pci_dev
,
rx_buf
->
dma_addr
)))
{
dev_kfree_skb_any
(
rx_buf
->
skb
);
rx_buf
->
skb
=
NULL
;
dev_kfree_skb_any
(
skb
);
rx_buf
->
u
.
skb
=
NULL
;
return
-
EIO
;
}
...
...
@@ -211,10 +224,9 @@ static int efx_init_rx_buffers_page(struct efx_rx_queue *rx_queue)
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
rx_buf
->
dma_addr
=
dma_addr
+
EFX_PAGE_IP_ALIGN
;
rx_buf
->
skb
=
NULL
;
rx_buf
->
page
=
page
;
rx_buf
->
data
=
page_addr
+
EFX_PAGE_IP_ALIGN
;
rx_buf
->
u
.
page
=
page
;
rx_buf
->
len
=
efx
->
rx_buffer_len
-
EFX_PAGE_IP_ALIGN
;
rx_buf
->
is_page
=
true
;
++
rx_queue
->
added_count
;
++
rx_queue
->
alloc_page_count
;
++
state
->
refcnt
;
...
...
@@ -235,19 +247,17 @@ static int efx_init_rx_buffers_page(struct efx_rx_queue *rx_queue)
static
void
efx_unmap_rx_buffer
(
struct
efx_nic
*
efx
,
struct
efx_rx_buffer
*
rx_buf
)
{
if
(
rx_buf
->
page
)
{
if
(
rx_buf
->
is_page
&&
rx_buf
->
u
.
page
)
{
struct
efx_rx_page_state
*
state
;
EFX_BUG_ON_PARANOID
(
rx_buf
->
skb
);
state
=
page_address
(
rx_buf
->
page
);
state
=
page_address
(
rx_buf
->
u
.
page
);
if
(
--
state
->
refcnt
==
0
)
{
pci_unmap_page
(
efx
->
pci_dev
,
state
->
dma_addr
,
efx_rx_buf_size
(
efx
),
PCI_DMA_FROMDEVICE
);
}
}
else
if
(
likely
(
rx_buf
->
skb
)
)
{
}
else
if
(
!
rx_buf
->
is_page
&&
rx_buf
->
u
.
skb
)
{
pci_unmap_single
(
efx
->
pci_dev
,
rx_buf
->
dma_addr
,
rx_buf
->
len
,
PCI_DMA_FROMDEVICE
);
}
...
...
@@ -256,12 +266,12 @@ static void efx_unmap_rx_buffer(struct efx_nic *efx,
static
void
efx_free_rx_buffer
(
struct
efx_nic
*
efx
,
struct
efx_rx_buffer
*
rx_buf
)
{
if
(
rx_buf
->
page
)
{
__free_pages
(
rx_buf
->
page
,
efx
->
rx_buffer_order
);
rx_buf
->
page
=
NULL
;
}
else
if
(
likely
(
rx_buf
->
skb
)
)
{
dev_kfree_skb_any
(
rx_buf
->
skb
);
rx_buf
->
skb
=
NULL
;
if
(
rx_buf
->
is_page
&&
rx_buf
->
u
.
page
)
{
__free_pages
(
rx_buf
->
u
.
page
,
efx
->
rx_buffer_order
);
rx_buf
->
u
.
page
=
NULL
;
}
else
if
(
!
rx_buf
->
is_page
&&
rx_buf
->
u
.
skb
)
{
dev_kfree_skb_any
(
rx_buf
->
u
.
skb
);
rx_buf
->
u
.
skb
=
NULL
;
}
}
...
...
@@ -277,7 +287,7 @@ static void efx_fini_rx_buffer(struct efx_rx_queue *rx_queue,
static
void
efx_resurrect_rx_buffer
(
struct
efx_rx_queue
*
rx_queue
,
struct
efx_rx_buffer
*
rx_buf
)
{
struct
efx_rx_page_state
*
state
=
page_address
(
rx_buf
->
page
);
struct
efx_rx_page_state
*
state
=
page_address
(
rx_buf
->
u
.
page
);
struct
efx_rx_buffer
*
new_buf
;
unsigned
fill_level
,
index
;
...
...
@@ -292,16 +302,14 @@ static void efx_resurrect_rx_buffer(struct efx_rx_queue *rx_queue,
}
++
state
->
refcnt
;
get_page
(
rx_buf
->
page
);
get_page
(
rx_buf
->
u
.
page
);
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
new_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
new_buf
->
dma_addr
=
rx_buf
->
dma_addr
^
(
PAGE_SIZE
>>
1
);
new_buf
->
skb
=
NULL
;
new_buf
->
page
=
rx_buf
->
page
;
new_buf
->
data
=
(
void
*
)
((
__force
unsigned
long
)
rx_buf
->
data
^
(
PAGE_SIZE
>>
1
));
new_buf
->
u
.
page
=
rx_buf
->
u
.
page
;
new_buf
->
len
=
rx_buf
->
len
;
new_buf
->
is_page
=
true
;
++
rx_queue
->
added_count
;
}
...
...
@@ -315,16 +323,15 @@ static void efx_recycle_rx_buffer(struct efx_channel *channel,
struct
efx_rx_buffer
*
new_buf
;
unsigned
index
;
if
(
rx_buf
->
page
!=
NULL
&&
efx
->
rx_buffer_len
<=
EFX_RX_HALF_PAGE
&&
page_count
(
rx_buf
->
page
)
==
1
)
if
(
rx_buf
->
is_page
&&
efx
->
rx_buffer_len
<=
EFX_RX_HALF_PAGE
&&
page_count
(
rx_buf
->
u
.
page
)
==
1
)
efx_resurrect_rx_buffer
(
rx_queue
,
rx_buf
);
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
new_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
memcpy
(
new_buf
,
rx_buf
,
sizeof
(
*
new_buf
));
rx_buf
->
page
=
NULL
;
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
page
=
NULL
;
++
rx_queue
->
added_count
;
}
...
...
@@ -428,7 +435,7 @@ static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue,
* data at the end of the skb will be trashed. So
* we have no choice but to leak the fragment.
*/
*
leak_packet
=
(
rx_buf
->
skb
!=
NULL
)
;
*
leak_packet
=
!
rx_buf
->
is_page
;
efx_schedule_reset
(
efx
,
RESET_TYPE_RX_RECOVERY
);
}
else
{
if
(
net_ratelimit
())
...
...
@@ -448,19 +455,18 @@ static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue,
*/
static
void
efx_rx_packet_gro
(
struct
efx_channel
*
channel
,
struct
efx_rx_buffer
*
rx_buf
,
bool
checksummed
)
const
u8
*
eh
,
bool
checksummed
)
{
struct
napi_struct
*
napi
=
&
channel
->
napi_str
;
gro_result_t
gro_result
;
/* Pass the skb/page into the GRO engine */
if
(
rx_buf
->
page
)
{
if
(
rx_buf
->
is_
page
)
{
struct
efx_nic
*
efx
=
channel
->
efx
;
struct
page
*
page
=
rx_buf
->
page
;
struct
page
*
page
=
rx_buf
->
u
.
page
;
struct
sk_buff
*
skb
;
EFX_BUG_ON_PARANOID
(
rx_buf
->
skb
);
rx_buf
->
page
=
NULL
;
rx_buf
->
u
.
page
=
NULL
;
skb
=
napi_get_frags
(
napi
);
if
(
!
skb
)
{
...
...
@@ -469,11 +475,11 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
}
if
(
efx
->
net_dev
->
features
&
NETIF_F_RXHASH
)
skb
->
rxhash
=
efx_rx_buf_hash
(
rx_buf
);
skb
->
rxhash
=
efx_rx_buf_hash
(
eh
);
skb_shinfo
(
skb
)
->
frags
[
0
].
page
=
page
;
skb_shinfo
(
skb
)
->
frags
[
0
].
page_offset
=
efx_rx_buf_offset
(
rx_buf
);
efx_rx_buf_offset
(
efx
,
rx_buf
);
skb_shinfo
(
skb
)
->
frags
[
0
].
size
=
rx_buf
->
len
;
skb_shinfo
(
skb
)
->
nr_frags
=
1
;
...
...
@@ -487,11 +493,10 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
gro_result
=
napi_gro_frags
(
napi
);
}
else
{
struct
sk_buff
*
skb
=
rx_buf
->
skb
;
struct
sk_buff
*
skb
=
rx_buf
->
u
.
skb
;
EFX_BUG_ON_PARANOID
(
!
skb
);
EFX_BUG_ON_PARANOID
(
!
checksummed
);
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
skb
=
NULL
;
gro_result
=
napi_gro_receive
(
napi
,
skb
);
}
...
...
@@ -513,9 +518,6 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
bool
leak_packet
=
false
;
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
EFX_BUG_ON_PARANOID
(
!
rx_buf
->
data
);
EFX_BUG_ON_PARANOID
(
rx_buf
->
skb
&&
rx_buf
->
page
);
EFX_BUG_ON_PARANOID
(
!
(
rx_buf
->
skb
||
rx_buf
->
page
));
/* This allows the refill path to post another buffer.
* EFX_RXD_HEAD_ROOM ensures that the slot we are using
...
...
@@ -554,12 +556,12 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
/* Prefetch nice and early so data will (hopefully) be in cache by
* the time we look at it.
*/
prefetch
(
rx_buf
->
data
);
prefetch
(
efx_rx_buf_eh
(
efx
,
rx_buf
)
);
/* Pipeline receives so that we give time for packet headers to be
* prefetched into cache.
*/
rx_buf
->
len
=
len
;
rx_buf
->
len
=
len
-
efx
->
type
->
rx_buffer_hash_size
;
out:
if
(
channel
->
rx_pkt
)
__efx_rx_packet
(
channel
,
...
...
@@ -574,45 +576,43 @@ void __efx_rx_packet(struct efx_channel *channel,
{
struct
efx_nic
*
efx
=
channel
->
efx
;
struct
sk_buff
*
skb
;
rx_buf
->
data
+=
efx
->
type
->
rx_buffer_hash_size
;
rx_buf
->
len
-=
efx
->
type
->
rx_buffer_hash_size
;
u8
*
eh
=
efx_rx_buf_eh
(
efx
,
rx_buf
);
/* If we're in loopback test, then pass the packet directly to the
* loopback layer, and free the rx_buf here
*/
if
(
unlikely
(
efx
->
loopback_selftest
))
{
efx_loopback_rx_packet
(
efx
,
rx_buf
->
data
,
rx_buf
->
len
);
efx_loopback_rx_packet
(
efx
,
eh
,
rx_buf
->
len
);
efx_free_rx_buffer
(
efx
,
rx_buf
);
return
;
}
if
(
rx_buf
->
skb
)
{
prefetch
(
skb_shinfo
(
rx_buf
->
skb
))
;
if
(
!
rx_buf
->
is_page
)
{
skb
=
rx_buf
->
u
.
skb
;
skb_reserve
(
rx_buf
->
skb
,
efx
->
type
->
rx_buffer_hash_size
);
skb_put
(
rx_buf
->
skb
,
rx_buf
->
len
);
prefetch
(
skb_shinfo
(
skb
));
skb_reserve
(
skb
,
efx
->
type
->
rx_buffer_hash_size
);
skb_put
(
skb
,
rx_buf
->
len
);
if
(
efx
->
net_dev
->
features
&
NETIF_F_RXHASH
)
rx_buf
->
skb
->
rxhash
=
efx_rx_buf_hash
(
rx_buf
);
skb
->
rxhash
=
efx_rx_buf_hash
(
eh
);
/* Move past the ethernet header. rx_buf->data still points
* at the ethernet header */
rx_buf
->
skb
->
protocol
=
eth_type_trans
(
rx_buf
->
skb
,
efx
->
net_dev
);
skb
->
protocol
=
eth_type_trans
(
skb
,
efx
->
net_dev
);
skb_record_rx_queue
(
rx_buf
->
skb
,
channel
->
channel
);
skb_record_rx_queue
(
skb
,
channel
->
channel
);
}
if
(
likely
(
checksummed
||
rx_buf
->
page
))
{
efx_rx_packet_gro
(
channel
,
rx_buf
,
checksummed
);
if
(
likely
(
checksummed
||
rx_buf
->
is_
page
))
{
efx_rx_packet_gro
(
channel
,
rx_buf
,
eh
,
checksummed
);
return
;
}
/* We now own the SKB */
skb
=
rx_buf
->
skb
;
rx_buf
->
skb
=
NULL
;
EFX_BUG_ON_PARANOID
(
!
skb
);
skb
=
rx_buf
->
u
.
skb
;
rx_buf
->
u
.
skb
=
NULL
;
/* Set the SKB flags */
skb_checksum_none_assert
(
skb
);
...
...
drivers/net/sfc/selftest.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/selftest.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
08
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/siena.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -227,13 +227,6 @@ static int siena_probe_nic(struct efx_nic *efx)
if
(
rc
)
goto
fail1
;
rc
=
efx_mcdi_fwver
(
efx
,
&
nic_data
->
fw_version
,
&
nic_data
->
fw_build
);
if
(
rc
)
{
netif_err
(
efx
,
probe
,
efx
->
net_dev
,
"Failed to read MCPU firmware version - rc %d
\n
"
,
rc
);
goto
fail1
;
/* MCPU absent? */
}
/* Let the BMC know that the driver is now in charge of link and
* filter settings. We must do this before we reset the NIC */
rc
=
efx_mcdi_drv_attach
(
efx
,
true
,
&
already_attached
);
...
...
@@ -348,11 +341,6 @@ static int siena_init_nic(struct efx_nic *efx)
FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH
/
8
);
efx_writeo
(
efx
,
&
temp
,
FR_CZ_RX_RSS_IPV6_REG3
);
if
(
efx_nic_rx_xoff_thresh
>=
0
||
efx_nic_rx_xon_thresh
>=
0
)
/* No MCDI operation has been defined to set thresholds */
netif_err
(
efx
,
hw
,
efx
->
net_dev
,
"ignoring RX flow control thresholds
\n
"
);
/* Enable event logging */
rc
=
efx_mcdi_log_ctrl
(
efx
,
true
,
false
,
0
);
if
(
rc
)
...
...
@@ -514,16 +502,6 @@ static void siena_stop_nic_stats(struct efx_nic *efx)
efx_mcdi_mac_stats
(
efx
,
efx
->
stats_buffer
.
dma_addr
,
0
,
0
,
0
);
}
void
siena_print_fwver
(
struct
efx_nic
*
efx
,
char
*
buf
,
size_t
len
)
{
struct
siena_nic_data
*
nic_data
=
efx
->
nic_data
;
snprintf
(
buf
,
len
,
"%u.%u.%u.%u"
,
(
unsigned
int
)(
nic_data
->
fw_version
>>
48
),
(
unsigned
int
)(
nic_data
->
fw_version
>>
32
&
0xffff
),
(
unsigned
int
)(
nic_data
->
fw_version
>>
16
&
0xffff
),
(
unsigned
int
)(
nic_data
->
fw_version
&
0xffff
));
}
/**************************************************************************
*
* Wake on LAN
...
...
drivers/net/sfc/spi.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005 Fen Systems Ltd.
* Copyright 2006 Solarflare Communications Inc.
* Copyright 2006
-2010
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/tenxpress.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2007-20
09
Solarflare Communications Inc.
* Copyright 2007-20
11
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -196,7 +196,7 @@ static int tenxpress_phy_init(struct efx_nic *efx)
if
(
rc
<
0
)
return
rc
;
rc
=
efx_mdio_check_mmds
(
efx
,
TENXPRESS_REQUIRED_DEVS
,
0
);
rc
=
efx_mdio_check_mmds
(
efx
,
TENXPRESS_REQUIRED_DEVS
);
if
(
rc
<
0
)
return
rc
;
}
...
...
drivers/net/sfc/tx.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* Copyright 2005-20
09
Solarflare Communications Inc.
* Copyright 2005-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/txc43128_phy.c
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2006-201
0
Solarflare Communications Inc.
* Copyright 2006-201
1
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
@@ -193,7 +193,7 @@ static int txc_reset_phy(struct efx_nic *efx)
goto
fail
;
/* Check that all the MMDs we expect are present and responding. */
rc
=
efx_mdio_check_mmds
(
efx
,
TXC_REQUIRED_DEVS
,
0
);
rc
=
efx_mdio_check_mmds
(
efx
,
TXC_REQUIRED_DEVS
);
if
(
rc
<
0
)
goto
fail
;
...
...
drivers/net/sfc/workarounds.h
浏览文件 @
9836f408
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2006-20
09
Solarflare Communications Inc.
* Copyright 2006-20
10
Solarflare Communications Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录