]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
e1000e: convert to netdev features/hw_features API
authorJoe Jin <joe.jin@oracle.com>
Thu, 17 May 2012 06:55:14 +0000 (14:55 +0800)
committerJoe Jin <joe.jin@oracle.com>
Thu, 17 May 2012 06:55:14 +0000 (14:55 +0800)
Private rx_csum flags are now duplicate of netdev->features &
NETIF_F_RXCSUM.  Remove those duplicates and use the net_device_ops
ndo_set_features.  This is based on the original patch submitted by
Michał Mirosław <mirq-linux@rere.qmqm.pl>

(backported from commit dc221294719ae0f28cc260cc37edd439161088a9)
Cc: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/e1000e/82571.c
drivers/net/e1000e/e1000.h
drivers/net/e1000e/es2lan.c
drivers/net/e1000e/ethtool.c
drivers/net/e1000e/ich8lan.c
drivers/net/e1000e/netdev.c

index 536b3a55c45f9ca7cf2bc55171477a26477187c4..2d4dc53a4fb8567d10578e6cf4f559cb708094ec 100644 (file)
@@ -2019,7 +2019,6 @@ struct e1000_info e1000_82571_info = {
                                  | FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_HAS_WOL
                                  | FLAG_APME_IN_CTRL3
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_HAS_SMART_POWER_DOWN
                                  | FLAG_RESET_OVERWRITES_LAA /* errata */
@@ -2041,7 +2040,6 @@ struct e1000_info e1000_82572_info = {
                                  | FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_HAS_WOL
                                  | FLAG_APME_IN_CTRL3
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_TARC_SPEED_MODE_BIT, /* errata */
        .flags2                 = FLAG2_DISABLE_ASPM_L1 /* errata 13 */
@@ -2059,7 +2057,6 @@ struct e1000_info e1000_82573_info = {
        .flags                  = FLAG_HAS_HW_VLAN_FILTER
                                  | FLAG_HAS_WOL
                                  | FLAG_APME_IN_CTRL3
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_SMART_POWER_DOWN
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_SWSM_ON_LOAD,
@@ -2080,7 +2077,6 @@ struct e1000_info e1000_82574_info = {
                                  | FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_HAS_WOL
                                  | FLAG_APME_IN_CTRL3
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_SMART_POWER_DOWN
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_CTRLEXT_ON_LOAD,
@@ -2100,7 +2096,6 @@ struct e1000_info e1000_82583_info = {
        .flags                  = FLAG_HAS_HW_VLAN_FILTER
                                  | FLAG_HAS_WOL
                                  | FLAG_APME_IN_CTRL3
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_SMART_POWER_DOWN
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_JUMBO_FRAMES
index 0a836dffa1e138419b19e187eb117f2fe1406017..37bd58c54a796ec3ff836f696380bd3a32b34f84 100644 (file)
@@ -441,12 +441,11 @@ struct e1000_info {
 #define FLAG_LSC_GIG_SPEED_DROP           (1 << 25)
 #define FLAG_SMART_POWER_DOWN             (1 << 26)
 #define FLAG_MSI_ENABLED                  (1 << 27)
-#define FLAG_RX_CSUM_ENABLED              (1 << 28)
+/* reserved (1 << 28) */
 #define FLAG_TSO_FORCE                    (1 << 29)
 #define FLAG_RX_RESTART_NOW               (1 << 30)
 #define FLAG_MSI_TEST_FAILED              (1 << 31)
 
-/* CRC Stripping defines */
 #define FLAG2_CRC_STRIPPING               (1 << 0)
 #define FLAG2_HAS_PHY_WAKEUP              (1 << 1)
 #define FLAG2_IS_DISCARDING               (1 << 2)
index e4f42257c24c9743c5d6b135694930284f7b1f62..b7544336cef43f597905a73fee581cc103d6886f 100644 (file)
@@ -1498,7 +1498,6 @@ struct e1000_info e1000_es2_info = {
                                  | FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_HAS_WOL
                                  | FLAG_APME_IN_CTRL3
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_RX_NEEDS_RESTART /* errata */
                                  | FLAG_TARC_SET_BIT_ZERO /* errata */
index 98e14a5efafa7f4ebef46e5b7326c7afacb97756..69c9d2199140a94b4f754bdc1fc43d93bd00b6ea 100644 (file)
@@ -367,59 +367,6 @@ out:
        return retval;
 }
 
-static u32 e1000_get_rx_csum(struct net_device *netdev)
-{
-       struct e1000_adapter *adapter = netdev_priv(netdev);
-       return adapter->flags & FLAG_RX_CSUM_ENABLED;
-}
-
-static int e1000_set_rx_csum(struct net_device *netdev, u32 data)
-{
-       struct e1000_adapter *adapter = netdev_priv(netdev);
-
-       if (data)
-               adapter->flags |= FLAG_RX_CSUM_ENABLED;
-       else
-               adapter->flags &= ~FLAG_RX_CSUM_ENABLED;
-
-       if (netif_running(netdev))
-               e1000e_reinit_locked(adapter);
-       else
-               e1000e_reset(adapter);
-       return 0;
-}
-
-static u32 e1000_get_tx_csum(struct net_device *netdev)
-{
-       return (netdev->features & NETIF_F_HW_CSUM) != 0;
-}
-
-static int e1000_set_tx_csum(struct net_device *netdev, u32 data)
-{
-       if (data)
-               netdev->features |= NETIF_F_HW_CSUM;
-       else
-               netdev->features &= ~NETIF_F_HW_CSUM;
-
-       return 0;
-}
-
-static int e1000_set_tso(struct net_device *netdev, u32 data)
-{
-       struct e1000_adapter *adapter = netdev_priv(netdev);
-
-       if (data) {
-               netdev->features |= NETIF_F_TSO;
-               netdev->features |= NETIF_F_TSO6;
-       } else {
-               netdev->features &= ~NETIF_F_TSO;
-               netdev->features &= ~NETIF_F_TSO6;
-       }
-
-       adapter->flags |= FLAG_TSO_FORCE;
-       return 0;
-}
-
 static u32 e1000_get_msglevel(struct net_device *netdev)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
@@ -2010,31 +1957,6 @@ static void e1000_get_strings(struct net_device *netdev, u32 stringset,
        }
 }
 
-static int e1000e_set_flags(struct net_device *netdev, u32 data)
-{
-       struct e1000_adapter *adapter = netdev_priv(netdev);
-       bool need_reset = false;
-       int rc;
-
-       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))
-                       e1000e_reinit_locked(adapter);
-               else
-                       e1000e_reset(adapter);
-       }
-
-       return 0;
-}
-
 static const struct ethtool_ops e1000_ethtool_ops = {
        .get_settings           = e1000_get_settings,
        .set_settings           = e1000_set_settings,
@@ -2054,14 +1976,6 @@ static const struct ethtool_ops e1000_ethtool_ops = {
        .set_ringparam          = e1000_set_ringparam,
        .get_pauseparam         = e1000_get_pauseparam,
        .set_pauseparam         = e1000_set_pauseparam,
-       .get_rx_csum            = e1000_get_rx_csum,
-       .set_rx_csum            = e1000_set_rx_csum,
-       .get_tx_csum            = e1000_get_tx_csum,
-       .set_tx_csum            = e1000_set_tx_csum,
-       .get_sg                 = ethtool_op_get_sg,
-       .set_sg                 = ethtool_op_set_sg,
-       .get_tso                = ethtool_op_get_tso,
-       .set_tso                = e1000_set_tso,
        .self_test              = e1000_diag_test,
        .get_strings            = e1000_get_strings,
        .set_phys_id            = e1000_set_phys_id,
@@ -2069,8 +1983,6 @@ static const struct ethtool_ops e1000_ethtool_ops = {
        .get_sset_count         = e1000e_get_sset_count,
        .get_coalesce           = e1000_get_coalesce,
        .set_coalesce           = e1000_set_coalesce,
-       .get_flags              = ethtool_op_get_flags,
-       .set_flags              = e1000e_set_flags,
 };
 
 void e1000e_set_ethtool_ops(struct net_device *netdev)
index b19d6d114f1f915b9eda8f75ae87ab4149f301f7..cc247a2d026824e8072125fca6aa28641df5c6b3 100644 (file)
@@ -4062,7 +4062,6 @@ struct e1000_info e1000_ich8_info = {
        .mac                    = e1000_ich8lan,
        .flags                  = FLAG_HAS_WOL
                                  | FLAG_IS_ICH
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_FLASH
@@ -4080,7 +4079,6 @@ struct e1000_info e1000_ich9_info = {
        .flags                  = FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_IS_ICH
                                  | FLAG_HAS_WOL
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_ERT
@@ -4099,7 +4097,6 @@ struct e1000_info e1000_ich10_info = {
        .flags                  = FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_IS_ICH
                                  | FLAG_HAS_WOL
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_ERT
@@ -4117,7 +4114,6 @@ struct e1000_info e1000_pch_info = {
        .mac                    = e1000_pchlan,
        .flags                  = FLAG_IS_ICH
                                  | FLAG_HAS_WOL
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_FLASH
@@ -4137,7 +4133,6 @@ struct e1000_info e1000_pch2_info = {
        .mac                    = e1000_pch2lan,
        .flags                  = FLAG_IS_ICH
                                  | FLAG_HAS_WOL
-                                 | FLAG_RX_CSUM_ENABLED
                                  | FLAG_HAS_CTRLEXT_ON_LOAD
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_FLASH
index 2ffefac9564c7353d85f4cabd2dc87fae5d91d16..ba7d0981bde3adc90659721e7657419a5c7b6868 100644 (file)
@@ -3067,7 +3067,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
 
        /* Enable Receive Checksum Offload for TCP and UDP */
        rxcsum = er32(RXCSUM);
-       if (adapter->flags & FLAG_RX_CSUM_ENABLED) {
+       if (adapter->netdev->features & NETIF_F_RXCSUM) {
                rxcsum |= E1000_RXCSUM_TUOFL;
 
                /*
@@ -5920,6 +5920,26 @@ static void e1000_eeprom_checks(struct e1000_adapter *adapter)
        }
 }
 
+static int e1000_set_features(struct net_device *netdev, u32 features)
+{
+       struct e1000_adapter *adapter = netdev_priv(netdev);
+       u32 changed = features ^ netdev->features;
+
+       if (changed & (NETIF_F_TSO | NETIF_F_TSO6))
+               adapter->flags |= FLAG_TSO_FORCE;
+
+       if (!(changed & (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX |
+                        NETIF_F_RXCSUM)))
+               return 0;
+
+       if (netif_running(netdev))
+               e1000e_reinit_locked(adapter);
+       else
+               e1000e_reset(adapter);
+
+       return 0;
+}
+
 static const struct net_device_ops e1000e_netdev_ops = {
        .ndo_open               = e1000_open,
        .ndo_stop               = e1000_close,
@@ -5937,6 +5957,7 @@ static const struct net_device_ops e1000e_netdev_ops = {
 #ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller    = e1000_netpoll,
 #endif
+       .ndo_set_features = e1000_set_features,
 };
 
 /**
@@ -6095,21 +6116,25 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
        if (e1000_check_reset_block(&adapter->hw))
                e_info("PHY reset is blocked due to SOL/IDER session.\n");
 
-       netdev->features = NETIF_F_SG |
-                          NETIF_F_HW_CSUM |
-                          NETIF_F_HW_VLAN_TX |
-                          NETIF_F_HW_VLAN_RX;
+       /* Set initial default active device features */
+       netdev->features = (NETIF_F_SG |
+                           NETIF_F_HW_VLAN_RX |
+                           NETIF_F_HW_VLAN_TX |
+                           NETIF_F_TSO |
+                           NETIF_F_TSO6 |
+                           NETIF_F_RXCSUM |
+                           NETIF_F_HW_CSUM);
+
+       /* Set user-changeable features (subset of all device features) */
+       netdev->hw_features = netdev->features;
 
        if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER)
                netdev->features |= NETIF_F_HW_VLAN_FILTER;
 
-       netdev->features |= NETIF_F_TSO;
-       netdev->features |= NETIF_F_TSO6;
-
-       netdev->vlan_features |= NETIF_F_TSO;
-       netdev->vlan_features |= NETIF_F_TSO6;
-       netdev->vlan_features |= NETIF_F_HW_CSUM;
-       netdev->vlan_features |= NETIF_F_SG;
+       netdev->vlan_features |= (NETIF_F_SG |
+                                 NETIF_F_TSO |
+                                 NETIF_F_TSO6 |
+                                 NETIF_F_HW_CSUM);
 
        netdev->priv_flags |= IFF_UNICAST_FLT;