diff options
Diffstat (limited to 'drivers/net/sfc/ethtool.c')
| -rw-r--r-- | drivers/net/sfc/ethtool.c | 27 | 
1 files changed, 5 insertions, 22 deletions
diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c index d229027dc36..bc4643af6dd 100644 --- a/drivers/net/sfc/ethtool.c +++ b/drivers/net/sfc/ethtool.c @@ -796,30 +796,13 @@ static int efx_ethtool_set_wol(struct net_device *net_dev,  static int efx_ethtool_reset(struct net_device *net_dev, u32 *flags)  {  	struct efx_nic *efx = netdev_priv(net_dev); -	enum reset_type method; -	enum { -		ETH_RESET_EFX_INVISIBLE = (ETH_RESET_DMA | ETH_RESET_FILTER | -					   ETH_RESET_OFFLOAD | ETH_RESET_MAC) -	}; - -	/* Check for minimal reset flags */ -	if ((*flags & ETH_RESET_EFX_INVISIBLE) != ETH_RESET_EFX_INVISIBLE) -		return -EINVAL; -	*flags ^= ETH_RESET_EFX_INVISIBLE; -	method = RESET_TYPE_INVISIBLE; - -	if (*flags & ETH_RESET_PHY) { -		*flags ^= ETH_RESET_PHY; -		method = RESET_TYPE_ALL; -	} +	int rc; -	if ((*flags & efx->type->reset_world_flags) == -	    efx->type->reset_world_flags) { -		*flags ^= efx->type->reset_world_flags; -		method = RESET_TYPE_WORLD; -	} +	rc = efx->type->map_reset_flags(flags); +	if (rc < 0) +		return rc; -	return efx_reset(efx, method); +	return efx_reset(efx, rc);  }  static int  | 
