Skip to content

Commit

Permalink
ixgb: finish conversion to ndo_fix_features
Browse files Browse the repository at this point in the history
Finish conversion to unified ethtool ops: convert get_flags.

Signed-off-by: Michał Mirosław <[email protected]>
Tested-by: Aaron Brown <[email protected]>
Signed-off-by: Jeff Kirsher <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
osctobe authored and davem330 committed Sep 23, 2011
1 parent ac5ac78 commit f04ea74
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 43 deletions.
39 changes: 0 additions & 39 deletions drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -634,43 +634,6 @@ ixgb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
}
}

static int ixgb_set_flags(struct net_device *netdev, u32 data)
{
struct ixgb_adapter *adapter = netdev_priv(netdev);
bool need_reset;
int rc;

/*
* Tx VLAN insertion does not work per HW design when Rx stripping is
* disabled. Disable txvlan when rxvlan is turned off, and enable
* rxvlan when txvlan is turned on.
*/
if (!(data & ETH_FLAG_RXVLAN) &&
(netdev->features & NETIF_F_HW_VLAN_TX))
data &= ~ETH_FLAG_TXVLAN;
else if (data & ETH_FLAG_TXVLAN)
data |= ETH_FLAG_RXVLAN;

need_reset = (data & ETH_FLAG_RXVLAN) !=
(netdev->features & NETIF_F_HW_VLAN_RX);

rc = ethtool_op_set_flags(netdev, data, ETH_FLAG_RXVLAN |
ETH_FLAG_TXVLAN);
if (rc)
return rc;

if (need_reset) {
if (netif_running(netdev)) {
ixgb_down(adapter, true);
ixgb_up(adapter);
ixgb_set_speed_duplex(netdev);
} else
ixgb_reset(adapter);
}

return 0;
}

static const struct ethtool_ops ixgb_ethtool_ops = {
.get_settings = ixgb_get_settings,
.set_settings = ixgb_set_settings,
Expand All @@ -691,8 +654,6 @@ static const struct ethtool_ops ixgb_ethtool_ops = {
.set_phys_id = ixgb_set_phys_id,
.get_sset_count = ixgb_get_sset_count,
.get_ethtool_stats = ixgb_get_ethtool_stats,
.get_flags = ethtool_op_get_flags,
.set_flags = ixgb_set_flags,
};

void ixgb_set_ethtool_ops(struct net_device *netdev)
Expand Down
22 changes: 18 additions & 4 deletions drivers/net/ethernet/intel/ixgb/ixgb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,13 +325,26 @@ ixgb_reset(struct ixgb_adapter *adapter)
}
}

static u32
ixgb_fix_features(struct net_device *netdev, u32 features)
{
/*
* Tx VLAN insertion does not work per HW design when Rx stripping is
* disabled.
*/
if (!(features & NETIF_F_HW_VLAN_RX))
features &= ~NETIF_F_HW_VLAN_TX;

return features;
}

static int
ixgb_set_features(struct net_device *netdev, u32 features)
{
struct ixgb_adapter *adapter = netdev_priv(netdev);
u32 changed = features ^ netdev->features;

if (!(changed & NETIF_F_RXCSUM))
if (!(changed & (NETIF_F_RXCSUM|NETIF_F_HW_VLAN_RX)))
return 0;

adapter->rx_csum = !!(features & NETIF_F_RXCSUM);
Expand Down Expand Up @@ -362,6 +375,7 @@ static const struct net_device_ops ixgb_netdev_ops = {
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = ixgb_netpoll,
#endif
.ndo_fix_features = ixgb_fix_features,
.ndo_set_features = ixgb_set_features,
};

Expand Down Expand Up @@ -464,10 +478,10 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

netdev->hw_features = NETIF_F_SG |
NETIF_F_TSO |
NETIF_F_HW_CSUM;
netdev->features = netdev->hw_features |
NETIF_F_HW_CSUM |
NETIF_F_HW_VLAN_TX |
NETIF_F_HW_VLAN_RX |
NETIF_F_HW_VLAN_RX;
netdev->features = netdev->hw_features |
NETIF_F_HW_VLAN_FILTER;
netdev->hw_features |= NETIF_F_RXCSUM;

Expand Down

0 comments on commit f04ea74

Please sign in to comment.