sfc: commonise FC advertising
Signed-off-by: Edward Cree <ecree@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
5671dd5565
Коммит
53e1f21abd
|
@ -133,30 +133,6 @@ static int efx_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **xdpfs,
|
|||
*
|
||||
**************************************************************************/
|
||||
|
||||
/* Equivalent to efx_link_set_advertising with all-zeroes, except does not
|
||||
* force the Autoneg bit on.
|
||||
*/
|
||||
void efx_link_clear_advertising(struct efx_nic *efx)
|
||||
{
|
||||
bitmap_zero(efx->link_advertising, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||
efx->wanted_fc &= ~(EFX_FC_TX | EFX_FC_RX);
|
||||
}
|
||||
|
||||
void efx_link_set_wanted_fc(struct efx_nic *efx, u8 wanted_fc)
|
||||
{
|
||||
efx->wanted_fc = wanted_fc;
|
||||
if (efx->link_advertising[0]) {
|
||||
if (wanted_fc & EFX_FC_RX)
|
||||
efx->link_advertising[0] |= (ADVERTISED_Pause |
|
||||
ADVERTISED_Asym_Pause);
|
||||
else
|
||||
efx->link_advertising[0] &= ~(ADVERTISED_Pause |
|
||||
ADVERTISED_Asym_Pause);
|
||||
if (wanted_fc & EFX_FC_TX)
|
||||
efx->link_advertising[0] ^= ADVERTISED_Asym_Pause;
|
||||
}
|
||||
}
|
||||
|
||||
static void efx_fini_port(struct efx_nic *efx);
|
||||
|
||||
static int efx_probe_port(struct efx_nic *efx)
|
||||
|
|
|
@ -216,9 +216,6 @@ static inline void efx_schedule_channel_irq(struct efx_channel *channel)
|
|||
efx_schedule_channel(channel);
|
||||
}
|
||||
|
||||
void efx_link_clear_advertising(struct efx_nic *efx);
|
||||
void efx_link_set_wanted_fc(struct efx_nic *efx, u8);
|
||||
|
||||
static inline void efx_device_detach_sync(struct efx_nic *efx)
|
||||
{
|
||||
struct net_device *dev = efx->net_dev;
|
||||
|
|
|
@ -383,6 +383,30 @@ static void efx_stop_datapath(struct efx_nic *efx)
|
|||
*
|
||||
**************************************************************************/
|
||||
|
||||
/* Equivalent to efx_link_set_advertising with all-zeroes, except does not
|
||||
* force the Autoneg bit on.
|
||||
*/
|
||||
void efx_link_clear_advertising(struct efx_nic *efx)
|
||||
{
|
||||
bitmap_zero(efx->link_advertising, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||
efx->wanted_fc &= ~(EFX_FC_TX | EFX_FC_RX);
|
||||
}
|
||||
|
||||
void efx_link_set_wanted_fc(struct efx_nic *efx, u8 wanted_fc)
|
||||
{
|
||||
efx->wanted_fc = wanted_fc;
|
||||
if (efx->link_advertising[0]) {
|
||||
if (wanted_fc & EFX_FC_RX)
|
||||
efx->link_advertising[0] |= (ADVERTISED_Pause |
|
||||
ADVERTISED_Asym_Pause);
|
||||
else
|
||||
efx->link_advertising[0] &= ~(ADVERTISED_Pause |
|
||||
ADVERTISED_Asym_Pause);
|
||||
if (wanted_fc & EFX_FC_TX)
|
||||
efx->link_advertising[0] ^= ADVERTISED_Asym_Pause;
|
||||
}
|
||||
}
|
||||
|
||||
static void efx_start_port(struct efx_nic *efx)
|
||||
{
|
||||
netif_dbg(efx, ifup, efx->net_dev, "start port\n");
|
||||
|
|
|
@ -18,6 +18,9 @@ int efx_init_struct(struct efx_nic *efx, struct pci_dev *pci_dev,
|
|||
struct net_device *net_dev);
|
||||
void efx_fini_struct(struct efx_nic *efx);
|
||||
|
||||
void efx_link_clear_advertising(struct efx_nic *efx);
|
||||
void efx_link_set_wanted_fc(struct efx_nic *efx, u8);
|
||||
|
||||
void efx_start_all(struct efx_nic *efx);
|
||||
void efx_stop_all(struct efx_nic *efx);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче