Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
9836f408
Commit
9836f408
authored
Mar 01, 2011
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-davem' of
git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc-next-2.6
parents
e364a341
6d84b986
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
150 additions
and
220 deletions
+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
No files found.
drivers/net/sfc/efx.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/efx.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/ethtool.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
@@ -28,7 +28,8 @@ struct efx_ethtool_stat {
...
@@ -28,7 +28,8 @@ struct efx_ethtool_stat {
enum
{
enum
{
EFX_ETHTOOL_STAT_SOURCE_mac_stats
,
EFX_ETHTOOL_STAT_SOURCE_mac_stats
,
EFX_ETHTOOL_STAT_SOURCE_nic
,
EFX_ETHTOOL_STAT_SOURCE_nic
,
EFX_ETHTOOL_STAT_SOURCE_channel
EFX_ETHTOOL_STAT_SOURCE_channel
,
EFX_ETHTOOL_STAT_SOURCE_tx_queue
}
source
;
}
source
;
unsigned
offset
;
unsigned
offset
;
u64
(
*
get_stat
)
(
void
*
field
);
/* Reader function */
u64
(
*
get_stat
)
(
void
*
field
);
/* Reader function */
...
@@ -86,6 +87,10 @@ static u64 efx_get_atomic_stat(void *field)
...
@@ -86,6 +87,10 @@ static u64 efx_get_atomic_stat(void *field)
EFX_ETHTOOL_STAT(field, channel, n_##field, \
EFX_ETHTOOL_STAT(field, channel, n_##field, \
unsigned int, efx_get_uint_stat)
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
[]
=
{
static
struct
efx_ethtool_stat
efx_ethtool_stats
[]
=
{
EFX_ETHTOOL_U64_MAC_STAT
(
tx_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
tx_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
tx_good_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
tx_good_bytes
),
...
@@ -116,6 +121,10 @@ static struct efx_ethtool_stat efx_ethtool_stats[] = {
...
@@ -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_non_tcpudp
),
EFX_ETHTOOL_ULONG_MAC_STAT
(
tx_mac_src_error
),
EFX_ETHTOOL_ULONG_MAC_STAT
(
tx_mac_src_error
),
EFX_ETHTOOL_ULONG_MAC_STAT
(
tx_ip_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_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_good_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_good_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_bad_bytes
),
EFX_ETHTOOL_U64_MAC_STAT
(
rx_bad_bytes
),
...
@@ -237,8 +246,8 @@ static void efx_ethtool_get_drvinfo(struct net_device *net_dev,
...
@@ -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
->
driver
,
KBUILD_MODNAME
,
sizeof
(
info
->
driver
));
strlcpy
(
info
->
version
,
EFX_DRIVER_VERSION
,
sizeof
(
info
->
version
));
strlcpy
(
info
->
version
,
EFX_DRIVER_VERSION
,
sizeof
(
info
->
version
));
if
(
efx_nic_rev
(
efx
)
>=
EFX_REV_SIENA_A0
)
if
(
efx_nic_rev
(
efx
)
>=
EFX_REV_SIENA_A0
)
siena
_print_fwver
(
efx
,
info
->
fw_version
,
efx_mcdi
_print_fwver
(
efx
,
info
->
fw_version
,
sizeof
(
info
->
fw_version
));
sizeof
(
info
->
fw_version
));
strlcpy
(
info
->
bus_info
,
pci_name
(
efx
->
pci_dev
),
sizeof
(
info
->
bus_info
));
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,
...
@@ -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_mac_stats
*
mac_stats
=
&
efx
->
mac_stats
;
struct
efx_ethtool_stat
*
stat
;
struct
efx_ethtool_stat
*
stat
;
struct
efx_channel
*
channel
;
struct
efx_channel
*
channel
;
struct
efx_tx_queue
*
tx_queue
;
struct
rtnl_link_stats64
temp
;
struct
rtnl_link_stats64
temp
;
int
i
;
int
i
;
...
@@ -495,6 +505,15 @@ static void efx_ethtool_get_stats(struct net_device *net_dev,
...
@@ -495,6 +505,15 @@ static void efx_ethtool_get_stats(struct net_device *net_dev,
data
[
i
]
+=
stat
->
get_stat
((
void
*
)
channel
+
data
[
i
]
+=
stat
->
get_stat
((
void
*
)
channel
+
stat
->
offset
);
stat
->
offset
);
break
;
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
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* 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)
...
@@ -1478,36 +1478,26 @@ static void falcon_init_rx_cfg(struct efx_nic *efx)
/* RX control FIFO thresholds (32 entries) */
/* RX control FIFO thresholds (32 entries) */
const
unsigned
ctrl_xon_thr
=
20
;
const
unsigned
ctrl_xon_thr
=
20
;
const
unsigned
ctrl_xoff_thr
=
25
;
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_oword_t
reg
;
efx_reado
(
efx
,
&
reg
,
FR_AZ_RX_CFG
);
efx_reado
(
efx
,
&
reg
,
FR_AZ_RX_CFG
);
if
(
efx_nic_rev
(
efx
)
<=
EFX_REV_FALCON_A1
)
{
if
(
efx_nic_rev
(
efx
)
<=
EFX_REV_FALCON_A1
)
{
/* Data FIFO size is 5.5K */
/* 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_DESC_PUSH_EN
,
0
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_USR_BUF_SIZE
,
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_USR_BUF_SIZE
,
huge_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_XON_MAC_TH
,
512
>>
8
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XOFF_MAC_TH
,
data_xoff_thr
);
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_XON_TX_TH
,
ctrl_xon_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XOFF_TX_TH
,
ctrl_xoff_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_AA_RX_XOFF_TX_TH
,
ctrl_xoff_thr
);
}
else
{
}
else
{
/* Data FIFO size is 80K; register fields moved */
/* 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_DESC_PUSH_EN
,
0
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_USR_BUF_SIZE
,
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_USR_BUF_SIZE
,
huge_buf_size
);
huge_buf_size
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XON_MAC_TH
,
data_xon_thr
);
/* Send XON and XOFF at ~3 * max MTU away from empty/full */
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_XOFF_MAC_TH
,
data_xoff_thr
);
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_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_XOFF_TX_TH
,
ctrl_xoff_thr
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_INGR_EN
,
1
);
EFX_SET_OWORD_FIELD
(
reg
,
FRF_BZ_RX_INGR_EN
,
1
);
...
...
drivers/net/sfc/falcon_boards.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/falcon_xmac.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/io.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mcdi.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* 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,
...
@@ -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
)];
u8
outbuf
[
ALIGN
(
MC_CMD_GET_VERSION_V1_OUT_LEN
,
4
)];
size_t
outlength
;
size_t
outlength
;
...
@@ -616,29 +616,20 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build)
...
@@ -616,29 +616,20 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build)
if
(
rc
)
if
(
rc
)
goto
fail
;
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
)
{
if
(
outlength
<
MC_CMD_GET_VERSION_V1_OUT_LEN
)
{
rc
=
-
EIO
;
rc
=
-
EIO
;
goto
fail
;
goto
fail
;
}
}
ver_words
=
(
__le16
*
)
MCDI_PTR
(
outbuf
,
GET_VERSION_OUT_VERSION
);
ver_words
=
(
__le16
*
)
MCDI_PTR
(
outbuf
,
GET_VERSION_OUT_VERSION
);
*
version
=
(((
u64
)
le16_to_cpu
(
ver_words
[
0
])
<<
48
)
|
snprintf
(
buf
,
len
,
"%u.%u.%u.%u"
,
((
u64
)
le16_to_cpu
(
ver_words
[
1
])
<<
32
)
|
le16_to_cpu
(
ver_words
[
0
]),
le16_to_cpu
(
ver_words
[
1
]),
((
u64
)
le16_to_cpu
(
ver_words
[
2
])
<<
16
)
|
le16_to_cpu
(
ver_words
[
2
]),
le16_to_cpu
(
ver_words
[
3
]));
le16_to_cpu
(
ver_words
[
3
]));
return
;
*
build
=
MCDI_DWORD
(
outbuf
,
GET_VERSION_OUT_FIRMWARE
);
return
0
;
fail:
fail:
netif_err
(
efx
,
probe
,
efx
->
net_dev
,
"%s: failed rc=%d
\n
"
,
__func__
,
rc
);
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
,
int
efx_mcdi_drv_attach
(
struct
efx_nic
*
efx
,
bool
driver_operating
,
...
...
drivers/net/sfc/mcdi.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* 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,
...
@@ -93,7 +93,7 @@ extern void efx_mcdi_process_event(struct efx_channel *channel,
#define MCDI_EVENT_FIELD(_ev, _field) \
#define MCDI_EVENT_FIELD(_ev, _field) \
EFX_QWORD_FIELD(_ev, MCDI_EVENT_ ## _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
,
extern
int
efx_mcdi_drv_attach
(
struct
efx_nic
*
efx
,
bool
driver_operating
,
bool
*
was_attached_out
);
bool
*
was_attached_out
);
extern
int
efx_mcdi_get_board_cfg
(
struct
efx_nic
*
efx
,
u8
*
mac_address
,
extern
int
efx_mcdi_get_board_cfg
(
struct
efx_nic
*
efx
,
u8
*
mac_address
,
...
...
drivers/net/sfc/mcdi_mac.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mcdi_pcol.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mcdi_phy.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/mdio_10g.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* 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,
...
@@ -51,13 +51,10 @@ int efx_mdio_reset_mmd(struct efx_nic *port, int mmd,
return
spins
?
spins
:
-
ETIMEDOUT
;
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
;
int
status
;
if
(
LOOPBACK_INTERNAL
(
efx
))
return
0
;
if
(
mmd
!=
MDIO_MMD_AN
)
{
if
(
mmd
!=
MDIO_MMD_AN
)
{
/* Read MMD STATUS2 to check it is responding. */
/* Read MMD STATUS2 to check it is responding. */
status
=
efx_mdio_read
(
efx
,
mmd
,
MDIO_STAT2
);
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)
...
@@ -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
;
return
0
;
}
}
...
@@ -130,8 +113,7 @@ int efx_mdio_wait_reset_mmds(struct efx_nic *efx, unsigned int mmd_mask)
...
@@ -130,8 +113,7 @@ int efx_mdio_wait_reset_mmds(struct efx_nic *efx, unsigned int mmd_mask)
return
rc
;
return
rc
;
}
}
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
)
unsigned
int
mmd_mask
,
unsigned
int
fatal_mask
)
{
{
int
mmd
=
0
,
probe_mmd
,
devs1
,
devs2
;
int
mmd
=
0
,
probe_mmd
,
devs1
,
devs2
;
u32
devices
;
u32
devices
;
...
@@ -161,13 +143,9 @@ int efx_mdio_check_mmds(struct efx_nic *efx,
...
@@ -161,13 +143,9 @@ int efx_mdio_check_mmds(struct efx_nic *efx,
/* Check all required MMDs are responding and happy. */
/* Check all required MMDs are responding and happy. */
while
(
mmd_mask
)
{
while
(
mmd_mask
)
{
if
(
mmd_mask
&
1
)
{
if
((
mmd_mask
&
1
)
&&
efx_mdio_check_mmd
(
efx
,
mmd
))
int
fault_fatal
=
fatal_mask
&
1
;
return
-
EIO
;
if
(
efx_mdio_check_mmd
(
efx
,
mmd
,
fault_fatal
))
return
-
EIO
;
}
mmd_mask
=
mmd_mask
>>
1
;
mmd_mask
=
mmd_mask
>>
1
;
fatal_mask
=
fatal_mask
>>
1
;
mmd
++
;
mmd
++
;
}
}
...
@@ -337,7 +315,7 @@ int efx_mdio_test_alive(struct efx_nic *efx)
...
@@ -337,7 +315,7 @@ int efx_mdio_test_alive(struct efx_nic *efx)
"no MDIO PHY present with ID %d
\n
"
,
efx
->
mdio
.
prtad
);
"no MDIO PHY present with ID %d
\n
"
,
efx
->
mdio
.
prtad
);
rc
=
-
EINVAL
;
rc
=
-
EINVAL
;
}
else
{
}
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
);
mutex_unlock
(
&
efx
->
mac_lock
);
...
...
drivers/net/sfc/mdio_10g.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* 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,
...
@@ -68,8 +68,7 @@ extern int efx_mdio_reset_mmd(struct efx_nic *efx, int mmd,
int
spins
,
int
spintime
);
int
spins
,
int
spintime
);
/* As efx_mdio_check_mmd but for multiple MMDs */
/* As efx_mdio_check_mmd but for multiple MMDs */
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
int
efx_mdio_check_mmds
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
);
unsigned
int
mmd_mask
,
unsigned
int
fatal_mask
);
/* Check the link status of specified mmds in bit 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
);
extern
bool
efx_mdio_links_ok
(
struct
efx_nic
*
efx
,
unsigned
int
mmd_mask
);
...
...
drivers/net/sfc/mtd.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/net_driver.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
*
*
**************************************************************************/
**************************************************************************/
#define EFX_DRIVER_VERSION "3.
0
"
#define EFX_DRIVER_VERSION "3.
1
"
#ifdef EFX_ENABLE_DEBUG
#ifdef EFX_ENABLE_DEBUG
#define EFX_BUG_ON_PARANOID(x) BUG_ON(x)
#define EFX_BUG_ON_PARANOID(x) BUG_ON(x)
...
@@ -214,15 +214,17 @@ struct efx_tx_queue {
...
@@ -214,15 +214,17 @@ struct efx_tx_queue {
* If both this and page are %NULL, the buffer slot is currently free.
* If both this and page are %NULL, the buffer slot is currently free.
* @page: The associated page buffer, if any.
* @page: The associated page buffer, if any.
* If both this and skb are %NULL, the buffer slot is currently free.
* If both this and skb are %NULL, the buffer slot is currently free.
* @data: Pointer to ethernet header
* @len: Buffer length, in bytes.
* @len: Buffer length, in bytes.
* @is_page: Indicates if @page is valid. If false, @skb is valid.
*/
*/
struct
efx_rx_buffer
{
struct
efx_rx_buffer
{
dma_addr_t
dma_addr
;
dma_addr_t
dma_addr
;
struct
sk_buff
*
skb
;
union
{
struct
page
*
page
;
struct
sk_buff
*
skb
;
char
*
data
;
struct
page
*
page
;
}
u
;
unsigned
int
len
;
unsigned
int
len
;
bool
is_page
;
};
};
/**
/**
...
...
drivers/net/sfc/nic.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
@@ -41,26 +41,6 @@
...
@@ -41,26 +41,6 @@
#define RX_DC_ENTRIES 64
#define RX_DC_ENTRIES 64
#define RX_DC_ENTRIES_ORDER 3
#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
/* If EFX_MAX_INT_ERRORS internal errors occur within
* EFX_INT_ERROR_EXPIRE seconds, we consider the NIC broken and
* EFX_INT_ERROR_EXPIRE seconds, we consider the NIC broken and
* disable it.
* disable it.
...
...
drivers/net/sfc/nic.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* 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)
...
@@ -142,20 +142,14 @@ static inline struct falcon_board *falcon_board(struct efx_nic *efx)
/**
/**
* struct siena_nic_data - Siena NIC state
* struct siena_nic_data - Siena NIC state
* @fw_version: Management controller firmware version
* @fw_build: Firmware build number
* @mcdi: Management-Controller-to-Driver Interface
* @mcdi: Management-Controller-to-Driver Interface
* @wol_filter_id: Wake-on-LAN packet filter id
* @wol_filter_id: Wake-on-LAN packet filter id
*/
*/
struct
siena_nic_data
{
struct
siena_nic_data
{
u64
fw_version
;
u32
fw_build
;
struct
efx_mcdi_iface
mcdi
;
struct
efx_mcdi_iface
mcdi
;
int
wol_filter_id
;
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_a1_nic_type
;
extern
struct
efx_nic_type
falcon_b0_nic_type
;
extern
struct
efx_nic_type
falcon_b0_nic_type
;
extern
struct
efx_nic_type
siena_a0_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);
...
@@ -194,7 +188,6 @@ extern void efx_nic_eventq_read_ack(struct efx_channel *channel);
/* MAC/PHY */
/* MAC/PHY */
extern
void
falcon_drain_tx_fifo
(
struct
efx_nic
*
efx
);
extern
void
falcon_drain_tx_fifo
(
struct
efx_nic
*
efx
);
extern
void
falcon_reconfigure_mac_wrapper
(
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 */
/* Interrupts and test events */
extern
int
efx_nic_init_interrupt
(
struct
efx_nic
*
efx
);
extern
int
efx_nic_init_interrupt
(
struct
efx_nic
*
efx
);
...
...
drivers/net/sfc/phy.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/qt202x_phy.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/regs.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/rx.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
@@ -89,24 +89,37 @@ static unsigned int rx_refill_limit = 95;
...
@@ -89,24 +89,37 @@ static unsigned int rx_refill_limit = 95;
*/
*/
#define EFX_RXD_HEAD_ROOM 2
#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
/* Offset is always within one page, so we don't need to consider
* the page order.
* 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
)
static
inline
unsigned
int
efx_rx_buf_size
(
struct
efx_nic
*
efx
)
{
{
return
PAGE_SIZE
<<
efx
->
rx_buffer_order
;
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
#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
#else
const
u8
*
data
=
(
const
u8
*
)(
buf
->
data
-
4
)
;
const
u8
*
data
=
eh
-
4
;
return
((
u32
)
data
[
0
]
|
return
((
u32
)
data
[
0
]
|
(
u32
)
data
[
1
]
<<
8
|
(
u32
)
data
[
1
]
<<
8
|
(
u32
)
data
[
2
]
<<
16
|
(
u32
)
data
[
2
]
<<
16
|
...
@@ -129,6 +142,7 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue)
...
@@ -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
efx_nic
*
efx
=
rx_queue
->
efx
;
struct
net_device
*
net_dev
=
efx
->
net_dev
;
struct
net_device
*
net_dev
=
efx
->
net_dev
;
struct
efx_rx_buffer
*
rx_buf
;
struct
efx_rx_buffer
*
rx_buf
;
struct
sk_buff
*
skb
;
int
skb_len
=
efx
->
rx_buffer_len
;
int
skb_len
=
efx
->
rx_buffer_len
;
unsigned
index
,
count
;
unsigned
index
,
count
;
...
@@ -136,24 +150,23 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue)
...
@@ -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
;
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
rx_buf
->
skb
=
netdev_alloc_skb
(
net_dev
,
skb_len
);
rx_buf
->
u
.
skb
=
skb
=
netdev_alloc_skb
(
net_dev
,
skb_len
);
if
(
unlikely
(
!
rx_buf
->
skb
))
if
(
unlikely
(
!
skb
))
return
-
ENOMEM
;
return
-
ENOMEM
;
rx_buf
->
page
=
NULL
;
/* Adjust the SKB for padding and checksum */
/* 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
->
len
=
skb_len
-
NET_IP_ALIGN
;
rx_buf
->
data
=
(
char
*
)
rx_buf
->
skb
->
data
;
rx_buf
->
is_page
=
false
;
rx_buf
->
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
rx_buf
->
dma_addr
=
pci_map_single
(
efx
->
pci_dev
,
rx_buf
->
dma_addr
=
pci_map_single
(
efx
->
pci_dev
,
rx_buf
->
data
,
rx_buf
->
len
,
skb
->
data
,
rx_buf
->
len
,
PCI_DMA_FROMDEVICE
);
PCI_DMA_FROMDEVICE
);
if
(
unlikely
(
pci_dma_mapping_error
(
efx
->
pci_dev
,
if
(
unlikely
(
pci_dma_mapping_error
(
efx
->
pci_dev
,
rx_buf
->
dma_addr
)))
{
rx_buf
->
dma_addr
)))
{
dev_kfree_skb_any
(
rx_buf
->
skb
);
dev_kfree_skb_any
(
skb
);
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
skb
=
NULL
;
return
-
EIO
;
return
-
EIO
;
}
}
...
@@ -211,10 +224,9 @@ static int efx_init_rx_buffers_page(struct efx_rx_queue *rx_queue)
...
@@ -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
;
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
rx_buf
->
dma_addr
=
dma_addr
+
EFX_PAGE_IP_ALIGN
;
rx_buf
->
dma_addr
=
dma_addr
+
EFX_PAGE_IP_ALIGN
;
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
page
=
page
;
rx_buf
->
page
=
page
;
rx_buf
->
data
=
page_addr
+
EFX_PAGE_IP_ALIGN
;
rx_buf
->
len
=
efx
->
rx_buffer_len
-
EFX_PAGE_IP_ALIGN
;
rx_buf
->
len
=
efx
->
rx_buffer_len
-
EFX_PAGE_IP_ALIGN
;
rx_buf
->
is_page
=
true
;
++
rx_queue
->
added_count
;
++
rx_queue
->
added_count
;
++
rx_queue
->
alloc_page_count
;
++
rx_queue
->
alloc_page_count
;
++
state
->
refcnt
;
++
state
->
refcnt
;
...
@@ -235,19 +247,17 @@ static int efx_init_rx_buffers_page(struct efx_rx_queue *rx_queue)
...
@@ -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
,
static
void
efx_unmap_rx_buffer
(
struct
efx_nic
*
efx
,
struct
efx_rx_buffer
*
rx_buf
)
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
;
struct
efx_rx_page_state
*
state
;
EFX_BUG_ON_PARANOID
(
rx_buf
->
skb
);
state
=
page_address
(
rx_buf
->
u
.
page
);
state
=
page_address
(
rx_buf
->
page
);
if
(
--
state
->
refcnt
==
0
)
{
if
(
--
state
->
refcnt
==
0
)
{
pci_unmap_page
(
efx
->
pci_dev
,
pci_unmap_page
(
efx
->
pci_dev
,
state
->
dma_addr
,
state
->
dma_addr
,
efx_rx_buf_size
(
efx
),
efx_rx_buf_size
(
efx
),
PCI_DMA_FROMDEVICE
);
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
,
pci_unmap_single
(
efx
->
pci_dev
,
rx_buf
->
dma_addr
,
rx_buf
->
len
,
PCI_DMA_FROMDEVICE
);
rx_buf
->
len
,
PCI_DMA_FROMDEVICE
);
}
}
...
@@ -256,12 +266,12 @@ static void efx_unmap_rx_buffer(struct efx_nic *efx,
...
@@ -256,12 +266,12 @@ static void efx_unmap_rx_buffer(struct efx_nic *efx,
static
void
efx_free_rx_buffer
(
struct
efx_nic
*
efx
,
static
void
efx_free_rx_buffer
(
struct
efx_nic
*
efx
,
struct
efx_rx_buffer
*
rx_buf
)
struct
efx_rx_buffer
*
rx_buf
)
{
{
if
(
rx_buf
->
page
)
{
if
(
rx_buf
->
is_page
&&
rx_buf
->
u
.
page
)
{
__free_pages
(
rx_buf
->
page
,
efx
->
rx_buffer_order
);
__free_pages
(
rx_buf
->
u
.
page
,
efx
->
rx_buffer_order
);
rx_buf
->
page
=
NULL
;
rx_buf
->
u
.
page
=
NULL
;
}
else
if
(
likely
(
rx_buf
->
skb
)
)
{
}
else
if
(
!
rx_buf
->
is_page
&&
rx_buf
->
u
.
skb
)
{
dev_kfree_skb_any
(
rx_buf
->
skb
);
dev_kfree_skb_any
(
rx_buf
->
u
.
skb
);
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
skb
=
NULL
;
}
}
}
}
...
@@ -277,7 +287,7 @@ static void efx_fini_rx_buffer(struct efx_rx_queue *rx_queue,
...
@@ -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
,
static
void
efx_resurrect_rx_buffer
(
struct
efx_rx_queue
*
rx_queue
,
struct
efx_rx_buffer
*
rx_buf
)
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
;
struct
efx_rx_buffer
*
new_buf
;
unsigned
fill_level
,
index
;
unsigned
fill_level
,
index
;
...
@@ -292,16 +302,14 @@ static void efx_resurrect_rx_buffer(struct efx_rx_queue *rx_queue,
...
@@ -292,16 +302,14 @@ static void efx_resurrect_rx_buffer(struct efx_rx_queue *rx_queue,
}
}
++
state
->
refcnt
;
++
state
->
refcnt
;
get_page
(
rx_buf
->
page
);
get_page
(
rx_buf
->
u
.
page
);
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
new_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
new_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
new_buf
->
dma_addr
=
rx_buf
->
dma_addr
^
(
PAGE_SIZE
>>
1
);
new_buf
->
dma_addr
=
rx_buf
->
dma_addr
^
(
PAGE_SIZE
>>
1
);
new_buf
->
skb
=
NULL
;
new_buf
->
u
.
page
=
rx_buf
->
u
.
page
;
new_buf
->
page
=
rx_buf
->
page
;
new_buf
->
data
=
(
void
*
)
((
__force
unsigned
long
)
rx_buf
->
data
^
(
PAGE_SIZE
>>
1
));
new_buf
->
len
=
rx_buf
->
len
;
new_buf
->
len
=
rx_buf
->
len
;
new_buf
->
is_page
=
true
;
++
rx_queue
->
added_count
;
++
rx_queue
->
added_count
;
}
}
...
@@ -315,16 +323,15 @@ static void efx_recycle_rx_buffer(struct efx_channel *channel,
...
@@ -315,16 +323,15 @@ static void efx_recycle_rx_buffer(struct efx_channel *channel,
struct
efx_rx_buffer
*
new_buf
;
struct
efx_rx_buffer
*
new_buf
;
unsigned
index
;
unsigned
index
;
if
(
rx_buf
->
page
!=
NULL
&&
efx
->
rx_buffer_len
<=
EFX_RX_HALF_PAGE
&&
if
(
rx_buf
->
is_page
&&
efx
->
rx_buffer_len
<=
EFX_RX_HALF_PAGE
&&
page_count
(
rx_buf
->
page
)
==
1
)
page_count
(
rx_buf
->
u
.
page
)
==
1
)
efx_resurrect_rx_buffer
(
rx_queue
,
rx_buf
);
efx_resurrect_rx_buffer
(
rx_queue
,
rx_buf
);
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
index
=
rx_queue
->
added_count
&
rx_queue
->
ptr_mask
;
new_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
new_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
memcpy
(
new_buf
,
rx_buf
,
sizeof
(
*
new_buf
));
memcpy
(
new_buf
,
rx_buf
,
sizeof
(
*
new_buf
));
rx_buf
->
page
=
NULL
;
rx_buf
->
u
.
page
=
NULL
;
rx_buf
->
skb
=
NULL
;
++
rx_queue
->
added_count
;
++
rx_queue
->
added_count
;
}
}
...
@@ -428,7 +435,7 @@ static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue,
...
@@ -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
* data at the end of the skb will be trashed. So
* we have no choice but to leak the fragment.
* 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
);
efx_schedule_reset
(
efx
,
RESET_TYPE_RX_RECOVERY
);
}
else
{
}
else
{
if
(
net_ratelimit
())
if
(
net_ratelimit
())
...
@@ -448,19 +455,18 @@ static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue,
...
@@ -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
,
static
void
efx_rx_packet_gro
(
struct
efx_channel
*
channel
,
struct
efx_rx_buffer
*
rx_buf
,
struct
efx_rx_buffer
*
rx_buf
,
bool
checksummed
)
const
u8
*
eh
,
bool
checksummed
)
{
{
struct
napi_struct
*
napi
=
&
channel
->
napi_str
;
struct
napi_struct
*
napi
=
&
channel
->
napi_str
;
gro_result_t
gro_result
;
gro_result_t
gro_result
;
/* Pass the skb/page into the GRO engine */
/* Pass the skb/page into the GRO engine */
if
(
rx_buf
->
page
)
{
if
(
rx_buf
->
is_
page
)
{
struct
efx_nic
*
efx
=
channel
->
efx
;
struct
efx_nic
*
efx
=
channel
->
efx
;
struct
page
*
page
=
rx_buf
->
page
;
struct
page
*
page
=
rx_buf
->
u
.
page
;
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
EFX_BUG_ON_PARANOID
(
rx_buf
->
skb
);
rx_buf
->
u
.
page
=
NULL
;
rx_buf
->
page
=
NULL
;
skb
=
napi_get_frags
(
napi
);
skb
=
napi_get_frags
(
napi
);
if
(
!
skb
)
{
if
(
!
skb
)
{
...
@@ -469,11 +475,11 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
...
@@ -469,11 +475,11 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
}
}
if
(
efx
->
net_dev
->
features
&
NETIF_F_RXHASH
)
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
=
page
;
skb_shinfo
(
skb
)
->
frags
[
0
].
page_offset
=
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
)
->
frags
[
0
].
size
=
rx_buf
->
len
;
skb_shinfo
(
skb
)
->
nr_frags
=
1
;
skb_shinfo
(
skb
)
->
nr_frags
=
1
;
...
@@ -487,11 +493,10 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
...
@@ -487,11 +493,10 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
gro_result
=
napi_gro_frags
(
napi
);
gro_result
=
napi_gro_frags
(
napi
);
}
else
{
}
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
);
EFX_BUG_ON_PARANOID
(
!
checksummed
);
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
skb
=
NULL
;
gro_result
=
napi_gro_receive
(
napi
,
skb
);
gro_result
=
napi_gro_receive
(
napi
,
skb
);
}
}
...
@@ -513,9 +518,6 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
...
@@ -513,9 +518,6 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
bool
leak_packet
=
false
;
bool
leak_packet
=
false
;
rx_buf
=
efx_rx_buffer
(
rx_queue
,
index
);
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.
/* This allows the refill path to post another buffer.
* EFX_RXD_HEAD_ROOM ensures that the slot we are using
* 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,
...
@@ -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
/* Prefetch nice and early so data will (hopefully) be in cache by
* the time we look at it.
* 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
/* Pipeline receives so that we give time for packet headers to be
* prefetched into cache.
* prefetched into cache.
*/
*/
rx_buf
->
len
=
len
;
rx_buf
->
len
=
len
-
efx
->
type
->
rx_buffer_hash_size
;
out:
out:
if
(
channel
->
rx_pkt
)
if
(
channel
->
rx_pkt
)
__efx_rx_packet
(
channel
,
__efx_rx_packet
(
channel
,
...
@@ -574,45 +576,43 @@ void __efx_rx_packet(struct efx_channel *channel,
...
@@ -574,45 +576,43 @@ void __efx_rx_packet(struct efx_channel *channel,
{
{
struct
efx_nic
*
efx
=
channel
->
efx
;
struct
efx_nic
*
efx
=
channel
->
efx
;
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
u8
*
eh
=
efx_rx_buf_eh
(
efx
,
rx_buf
);
rx_buf
->
data
+=
efx
->
type
->
rx_buffer_hash_size
;
rx_buf
->
len
-=
efx
->
type
->
rx_buffer_hash_size
;
/* If we're in loopback test, then pass the packet directly to the
/* If we're in loopback test, then pass the packet directly to the
* loopback layer, and free the rx_buf here
* loopback layer, and free the rx_buf here
*/
*/
if
(
unlikely
(
efx
->
loopback_selftest
))
{
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
);
efx_free_rx_buffer
(
efx
,
rx_buf
);
return
;
return
;
}
}
if
(
rx_buf
->
skb
)
{
if
(
!
rx_buf
->
is_page
)
{
prefetch
(
skb_shinfo
(
rx_buf
->
skb
))
;
skb
=
rx_buf
->
u
.
skb
;
skb_reserve
(
rx_buf
->
skb
,
efx
->
type
->
rx_buffer_hash_size
);
prefetch
(
skb_shinfo
(
skb
));
skb_put
(
rx_buf
->
skb
,
rx_buf
->
len
);
skb_reserve
(
skb
,
efx
->
type
->
rx_buffer_hash_size
);
skb_put
(
skb
,
rx_buf
->
len
);
if
(
efx
->
net_dev
->
features
&
NETIF_F_RXHASH
)
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
/* Move past the ethernet header. rx_buf->data still points
* at the ethernet header */
* at the ethernet header */
rx_buf
->
skb
->
protocol
=
eth_type_trans
(
rx_buf
->
skb
,
skb
->
protocol
=
eth_type_trans
(
skb
,
efx
->
net_dev
);
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
))
{
if
(
likely
(
checksummed
||
rx_buf
->
is_
page
))
{
efx_rx_packet_gro
(
channel
,
rx_buf
,
checksummed
);
efx_rx_packet_gro
(
channel
,
rx_buf
,
eh
,
checksummed
);
return
;
return
;
}
}
/* We now own the SKB */
/* We now own the SKB */
skb
=
rx_buf
->
skb
;
skb
=
rx_buf
->
u
.
skb
;
rx_buf
->
skb
=
NULL
;
rx_buf
->
u
.
skb
=
NULL
;
EFX_BUG_ON_PARANOID
(
!
skb
);
/* Set the SKB flags */
/* Set the SKB flags */
skb_checksum_none_assert
(
skb
);
skb_checksum_none_assert
(
skb
);
...
...
drivers/net/sfc/selftest.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/selftest.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/siena.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* 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)
...
@@ -227,13 +227,6 @@ static int siena_probe_nic(struct efx_nic *efx)
if
(
rc
)
if
(
rc
)
goto
fail1
;
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
/* 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 */
* filter settings. We must do this before we reset the NIC */
rc
=
efx_mcdi_drv_attach
(
efx
,
true
,
&
already_attached
);
rc
=
efx_mcdi_drv_attach
(
efx
,
true
,
&
already_attached
);
...
@@ -348,11 +341,6 @@ static int siena_init_nic(struct efx_nic *efx)
...
@@ -348,11 +341,6 @@ static int siena_init_nic(struct efx_nic *efx)
FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH
/
8
);
FRF_CZ_RX_RSS_IPV6_TKEY_HI_WIDTH
/
8
);
efx_writeo
(
efx
,
&
temp
,
FR_CZ_RX_RSS_IPV6_REG3
);
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 */
/* Enable event logging */
rc
=
efx_mcdi_log_ctrl
(
efx
,
true
,
false
,
0
);
rc
=
efx_mcdi_log_ctrl
(
efx
,
true
,
false
,
0
);
if
(
rc
)
if
(
rc
)
...
@@ -514,16 +502,6 @@ static void siena_stop_nic_stats(struct efx_nic *efx)
...
@@ -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
);
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
* Wake on LAN
...
...
drivers/net/sfc/spi.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/tenxpress.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* 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)
...
@@ -196,7 +196,7 @@ static int tenxpress_phy_init(struct efx_nic *efx)
if
(
rc
<
0
)
if
(
rc
<
0
)
return
rc
;
return
rc
;
rc
=
efx_mdio_check_mmds
(
efx
,
TENXPRESS_REQUIRED_DEVS
,
0
);
rc
=
efx_mdio_check_mmds
(
efx
,
TENXPRESS_REQUIRED_DEVS
);
if
(
rc
<
0
)
if
(
rc
<
0
)
return
rc
;
return
rc
;
}
}
...
...
drivers/net/sfc/tx.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* Driver for Solarflare Solarstorm network controllers and boards
* Copyright 2005-2006 Fen Systems Ltd.
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
drivers/net/sfc/txc43128_phy.c
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* 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)
...
@@ -193,7 +193,7 @@ static int txc_reset_phy(struct efx_nic *efx)
goto
fail
;
goto
fail
;
/* Check that all the MMDs we expect are present and responding. */
/* 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
)
if
(
rc
<
0
)
goto
fail
;
goto
fail
;
...
...
drivers/net/sfc/workarounds.h
View file @
9836f408
/****************************************************************************
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
* 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
* 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
* under the terms of the GNU General Public License version 2 as published
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment