Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f04ea74e authored by Michał Mirosław's avatar Michał Mirosław Committed by David S. Miller
Browse files

ixgb: finish conversion to ndo_fix_features



Finish conversion to unified ethtool ops: convert get_flags.

Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ac5ac789
Loading
Loading
Loading
Loading
+0 −39
Original line number Diff line number Diff line
@@ -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,
@@ -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)
+18 −4
Original line number Diff line number Diff line
@@ -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);
@@ -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,
};

@@ -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;