ixgb: finish conversion to ndo_fix_features
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Fri, 23 Sep 2011 02:11:30 +0000 (02:11 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Sep 2011 17:55:25 +0000 (13:55 -0400)
Finish conversion to unified ethtool ops: convert get_flags.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/ixgb/ixgb_ethtool.c
drivers/net/ethernet/intel/ixgb/ixgb_main.c

index fdb30cc60173b6a89aa3dd427b59acb0c4ce87cf..ab404e71f86a96f1b4ae4bea0687268b32a5f667 100644 (file)
@@ -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)
index ca3ab4a29ac43d5276fc54ee1d68b1f4300848d6..88558b1aac073d488ce2ec1e57ec5ec1142134f8 100644 (file)
@@ -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;