igb: Move IGB_FLAG_TSO_IPLEN0 into TX rings
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 28 Jan 2013 09:36:36 +0000 (17:36 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 28 Jan 2013 09:36:36 +0000 (17:36 +0800)
Avoid extra access to softc and leave enough space for TX ring specific
flags.

sys/dev/netif/igb/if_igb.c
sys/dev/netif/igb/if_igb.h

index e6a6fde..f588b4a 100644 (file)
@@ -436,9 +436,6 @@ igb_attach(device_t dev)
 #endif
        sc->tx_ring_inuse = sc->tx_ring_cnt;
 
-       if (sc->hw.mac.type == e1000_82575)
-               sc->flags |= IGB_FLAG_TSO_IPLEN0;
-
        /* Enable bus mastering */
        pci_enable_busmaster(dev);
 
@@ -1771,6 +1768,9 @@ igb_create_tx_ring(struct igb_tx_ring *txr)
                }
        }
 
+       if (txr->sc->hw.mac.type == e1000_82575)
+               txr->tx_flags |= IGB_TXFLAG_TSO_IPLEN0;
+
        /*
         * Initialize various watermark
         */
@@ -4515,7 +4515,7 @@ igb_tso_pullup(struct igb_tx_ring *txr, struct mbuf **mp)
                }
                *mp = m;
        }
-       if (txr->sc->flags & IGB_FLAG_TSO_IPLEN0) {
+       if (txr->tx_flags & IGB_TXFLAG_TSO_IPLEN0) {
                struct ip *ip;
 
                ip = mtodoff(m, struct ip *, hoff);
index d4bec2c..faae39e 100644 (file)
@@ -226,6 +226,8 @@ struct igb_tx_ring {
        struct igb_softc        *sc;
        struct ifaltq_subque    *ifsq;
        uint32_t                me;
+       uint32_t                tx_flags;
+#define IGB_TXFLAG_TSO_IPLEN0  0x1
        struct e1000_tx_desc    *tx_base;
        int                     num_tx_desc;
        uint32_t                next_avail_desc;
@@ -316,7 +318,6 @@ struct igb_softc {
        uint32_t                flags;
 #define IGB_FLAG_SHARED_INTR   0x1
 #define IGB_FLAG_HAS_MGMT      0x2
-#define IGB_FLAG_TSO_IPLEN0    0x4
 
        bus_dma_tag_t           parent_tag;