Author: luigi
Date: Thu May  9 16:57:02 2013
New Revision: 250413
URL: http://svnweb.freebsd.org/changeset/base/250413

Log:
  simplify the code to initialize the RDT while in netmap mode.

Modified:
  head/sys/dev/e1000/if_em.c
  head/sys/dev/e1000/if_lem.c

Modified: head/sys/dev/e1000/if_em.c
==============================================================================
--- head/sys/dev/e1000/if_em.c  Thu May  9 16:42:01 2013        (r250412)
+++ head/sys/dev/e1000/if_em.c  Thu May  9 16:57:02 2013        (r250413)
@@ -4333,6 +4333,8 @@ em_initialize_receive_unit(struct adapte
 
        for (int i = 0; i < adapter->num_queues; i++, rxr++) {
                /* Setup the Base and Length of the Rx Descriptor Ring */
+               u32 rdt = adapter->num_rx_desc - 1; /* default */
+
                bus_addr = rxr->rxdma.dma_paddr;
                E1000_WRITE_REG(hw, E1000_RDLEN(i),
                    adapter->num_rx_desc * sizeof(struct e1000_rx_desc));
@@ -4344,18 +4346,11 @@ em_initialize_receive_unit(struct adapte
                /*
                 * an init() while a netmap client is active must
                 * preserve the rx buffers passed to userspace.
-                * In this driver it means we adjust RDT to
-                * something different from na->num_rx_desc - 1.
                 */
-               if (ifp->if_capenable & IFCAP_NETMAP) {
-                       struct netmap_adapter *na = NA(adapter->ifp);
-                       struct netmap_kring *kring = &na->rx_rings[i];
-                       int t = na->num_rx_desc - 1 - kring->nr_hwavail;
-
-                       E1000_WRITE_REG(hw, E1000_RDT(i), t);
-               } else
+               if (ifp->if_capenable & IFCAP_NETMAP)
+                       rdt -= NA(adapter->ifp)->rx_rings[i].nr_hwavail;
 #endif /* DEV_NETMAP */
-               E1000_WRITE_REG(hw, E1000_RDT(i), adapter->num_rx_desc - 1);
+               E1000_WRITE_REG(hw, E1000_RDT(i), rdt);
        }
 
        /* Set PTHRESH for improved jumbo performance */

Modified: head/sys/dev/e1000/if_lem.c
==============================================================================
--- head/sys/dev/e1000/if_lem.c Thu May  9 16:42:01 2013        (r250412)
+++ head/sys/dev/e1000/if_lem.c Thu May  9 16:57:02 2013        (r250413)
@@ -3361,19 +3361,13 @@ lem_initialize_receive_unit(struct adapt
         * Tail Descriptor Pointers
         */
        E1000_WRITE_REG(&adapter->hw, E1000_RDH(0), 0);
+       rctl = adapter->num_rx_desc - 1; /* default RDT value */
 #ifdef DEV_NETMAP
        /* preserve buffers already made available to clients */
-       if (ifp->if_capenable & IFCAP_NETMAP) {
-               struct netmap_adapter *na = NA(adapter->ifp);
-               struct netmap_kring *kring = &na->rx_rings[0];
-               int t = na->num_rx_desc - 1 - kring->nr_hwavail;
-
-               if (t >= na->num_rx_desc)
-                       t -= na->num_rx_desc;
-               E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), t);
-       } else
+       if (ifp->if_capenable & IFCAP_NETMAP)
+               rctl -= NA(adapter->ifp)->rx_rings[0].nr_hwavail;
 #endif /* DEV_NETMAP */
-       E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), adapter->num_rx_desc - 1);
+       E1000_WRITE_REG(&adapter->hw, E1000_RDT(0), rctl);
 
        return;
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to