igb: Consolidate all of the ring feature flags into a single value
authorAlexander Duyck <alexander.h.duyck@intel.com>
Fri, 26 Aug 2011 07:45:36 +0000 (07:45 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sat, 8 Oct 2011 05:37:24 +0000 (22:37 -0700)
This change moves all of the ring flags into a single value.  The advantage
to this is that there is one central area for all of these flags and they
can all make use of the set/test bit operations.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/igb.h
drivers/net/ethernet/intel/igb/igb_main.c

index 9e4bed37d9be1a79b5bb366f8ad44a1e7b1a1868..0df040ad1d5430edf33e3edfe3202cffa9370bd1 100644 (file)
@@ -237,10 +237,12 @@ struct igb_ring {
        int numa_node;                  /* node to alloc ring memory on */
 };
 
-#define IGB_RING_FLAG_RX_CSUM        0x00000001 /* RX CSUM enabled */
-#define IGB_RING_FLAG_RX_SCTP_CSUM   0x00000002 /* SCTP CSUM offload enabled */
-
-#define IGB_RING_FLAG_TX_CTX_IDX     0x00000001 /* HW requires context index */
+enum e1000_ring_flags_t {
+       IGB_RING_FLAG_RX_CSUM,
+       IGB_RING_FLAG_RX_SCTP_CSUM,
+       IGB_RING_FLAG_TX_CTX_IDX,
+       IGB_RING_FLAG_TX_DETECT_HANG
+};
 
 #define IGB_TXD_DCMD (E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_RS)
 
index 3a5c75dda526edec63e3b34ada358d9590f3455d..f339de97c5b660fc9b4f30ac0888f88907428985 100644 (file)
@@ -708,7 +708,7 @@ static int igb_alloc_queues(struct igb_adapter *adapter)
                ring->numa_node = adapter->node;
                /* For 82575, context index must be unique per ring. */
                if (adapter->hw.mac.type == e1000_82575)
-                       ring->flags = IGB_RING_FLAG_TX_CTX_IDX;
+                       set_bit(IGB_RING_FLAG_TX_CTX_IDX, &ring->flags);
                adapter->tx_ring[i] = ring;
        }
        /* Restore the adapter's original node */
@@ -732,10 +732,11 @@ static int igb_alloc_queues(struct igb_adapter *adapter)
                ring->dev = &adapter->pdev->dev;
                ring->netdev = adapter->netdev;
                ring->numa_node = adapter->node;
-               ring->flags = IGB_RING_FLAG_RX_CSUM; /* enable rx checksum */
+               /* enable rx checksum */
+               set_bit(IGB_RING_FLAG_RX_CSUM, &ring->flags);
                /* set flag indicating ring supports SCTP checksum offload */
                if (adapter->hw.mac.type >= e1000_82576)
-                       ring->flags |= IGB_RING_FLAG_RX_SCTP_CSUM;
+                       set_bit(IGB_RING_FLAG_RX_SCTP_CSUM, &ring->flags);
                adapter->rx_ring[i] = ring;
        }
        /* Restore the adapter's original node */
@@ -1822,9 +1823,11 @@ static int igb_set_features(struct net_device *netdev, u32 features)
 
        for (i = 0; i < adapter->num_rx_queues; i++) {
                if (features & NETIF_F_RXCSUM)
-                       adapter->rx_ring[i]->flags |= IGB_RING_FLAG_RX_CSUM;
+                       set_bit(IGB_RING_FLAG_RX_CSUM,
+                               &adapter->rx_ring[i]->flags);
                else
-                       adapter->rx_ring[i]->flags &= ~IGB_RING_FLAG_RX_CSUM;
+                       clear_bit(IGB_RING_FLAG_RX_CSUM,
+                                 &adapter->rx_ring[i]->flags);
        }
 
        if (changed & NETIF_F_HW_VLAN_RX)
@@ -4035,7 +4038,7 @@ void igb_tx_ctxtdesc(struct igb_ring *tx_ring, u32 vlan_macip_lens,
        type_tucmd |= E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT;
 
        /* For 82575, context index must be unique per ring. */
-       if (tx_ring->flags & IGB_RING_FLAG_TX_CTX_IDX)
+       if (test_bit(IGB_RING_FLAG_TX_CTX_IDX, &tx_ring->flags))
                mss_l4len_idx |= tx_ring->reg_idx << 4;
 
        context_desc->vlan_macip_lens   = cpu_to_le32(vlan_macip_lens);
@@ -4202,7 +4205,7 @@ static void igb_tx_olinfo_status(struct igb_ring *tx_ring,
 
        /* 82575 requires a unique index per ring if any offload is enabled */
        if ((tx_flags & (IGB_TX_FLAGS_CSUM | IGB_TX_FLAGS_VLAN)) &&
-           (tx_ring->flags & IGB_RING_FLAG_TX_CTX_IDX))
+           test_bit(IGB_RING_FLAG_TX_CTX_IDX, &tx_ring->flags))
                olinfo_status |= tx_ring->reg_idx << 4;
 
        /* insert L4 checksum */
@@ -5828,7 +5831,7 @@ static inline void igb_rx_checksum(struct igb_ring *ring,
        skb_checksum_none_assert(skb);
 
        /* Ignore Checksum bit is set or checksum is disabled through ethtool */
-       if (!(ring->flags & IGB_RING_FLAG_RX_CSUM) ||
+       if (!test_bit(IGB_RING_FLAG_RX_CSUM, &ring->flags) ||
             (status_err & E1000_RXD_STAT_IXSM))
                return;
 
@@ -5840,8 +5843,8 @@ static inline void igb_rx_checksum(struct igb_ring *ring,
                 * L4E bit is set incorrectly on 64 byte (60 byte w/o crc)
                 * packets, (aka let the stack check the crc32c)
                 */
-               if ((skb->len == 60) &&
-                   (ring->flags & IGB_RING_FLAG_RX_SCTP_CSUM)) {
+               if (!((skb->len == 60) &&
+                     test_bit(IGB_RING_FLAG_RX_SCTP_CSUM, &ring->flags))) {
                        u64_stats_update_begin(&ring->rx_syncp);
                        ring->rx_stats.csum_err++;
                        u64_stats_update_end(&ring->rx_syncp);