Author: jchandra
Date: Thu Sep  9 02:52:44 2010
New Revision: 212347
URL: http://svn.freebsd.org/changeset/base/212347

Log:
  Minor clean up for nlge - nlna_submit_rx_free_desc() can use the same desc
  every time. Also merge couple of one-line functions into their caller.

Modified:
  head/sys/mips/rmi/dev/nlge/if_nlge.c

Modified: head/sys/mips/rmi/dev/nlge/if_nlge.c
==============================================================================
--- head/sys/mips/rmi/dev/nlge/if_nlge.c        Thu Sep  9 02:29:40 2010        
(r212346)
+++ head/sys/mips/rmi/dev/nlge/if_nlge.c        Thu Sep  9 02:52:44 2010        
(r212347)
@@ -148,7 +148,6 @@ static void nlge_mediastatus(struct ifne
 
 /* Other internal/helper functions */
 static void    *get_buf(void);
-static struct mbuf *get_mbuf(void);
 
 static void    nlna_add_to_port_set(struct nlge_port_set *pset,
     struct nlge_softc *sc);
@@ -170,8 +169,6 @@ static void         nlna_reset_ports(struct nln
     struct xlr_gmac_block_t *blk);
 static struct nlna_softc *nlna_sc_init(device_t dev,
     struct xlr_gmac_block_t *blk);
-static __inline__ int nlna_send_free_desc(struct nlna_softc *nlna,
-    vm_paddr_t addr);
 static void    nlna_setup_intr(struct nlna_softc *sc);
 static void    nlna_smp_update_pde(void *dummy __unused);
 static void    nlna_submit_rx_free_desc(struct nlna_softc *sc,
@@ -206,7 +203,6 @@ static int  prepare_fmn_message(struct nl
     struct msgrng_msg *msg, uint32_t *n_entries, struct mbuf *m_head,
     uint64_t fr_stid, struct nlge_tx_desc **tx_desc);
 
-static void    release_mbuf(uint64_t phy_addr);
 static void    release_tx_desc(vm_paddr_t phy_addr);
 static int     send_fmn_msg_tx(struct nlge_softc *, struct msgrng_msg *,
     uint32_t n_entries);
@@ -680,7 +676,7 @@ nlge_msgring_handler(int bucket, int siz
                if (is_p2p) {
                        release_tx_desc(phys_addr);
                } else {
-                       release_mbuf(phys_addr);
+                       m_freem((struct mbuf *)(uintptr_t)phys_addr);
                }
 
                ifp = sc->nlge_if;
@@ -1009,39 +1005,23 @@ nlna_is_last_active_na(struct nlna_softc
        return (id == 2 || xlr_board_info.gmac_block[id + 1].enabled == 0);
 }
 
-static __inline__ int
-nlna_send_free_desc(struct nlna_softc *sc, vm_paddr_t addr)
-{
-       struct msgrng_msg msg;
-       uint32_t msgrng_flags;
-       int i = 0, stid, code, ret;
-
-       stid = sc->rfrbucket;
-       memset(&msg, 0, sizeof(msg));
-       msg.msg0 = (uint64_t) addr & 0xffffffffe0ULL;
-
-       code = (sc->na_type == XLR_XGMAC) ? MSGRNG_CODE_XGMAC : MSGRNG_CODE_MAC;
-       do {
-               msgrng_flags = msgrng_access_enable();
-               ret = message_send_retry(1, code, stid, &msg);
-               msgrng_restore(msgrng_flags);
-               KASSERT(i++ < 100000, ("Too many credit fails\n"));
-       } while (ret != 0);
-       return (0);
-}
-
 static void
 nlna_submit_rx_free_desc(struct nlna_softc *sc, uint32_t n_desc)
 {
+       struct msgrng_msg msg;
        void           *ptr;
-       int             i;
-       int             ret;
+       uint32_t        msgrng_flags;
+       int             i, n, stid, ret, code;
 
        if (n_desc > 1) {
                PDEBUG("Sending %d free-in descriptors to station=%d\n", n_desc,
                    sc->rfrbucket);
        }
 
+       stid = sc->rfrbucket;
+       code = (sc->na_type == XLR_XGMAC) ? MSGRNG_CODE_XGMAC : MSGRNG_CODE_MAC;
+       memset(&msg, 0, sizeof(msg));
+
        for (i = 0; i < n_desc; i++) {
                ptr = get_buf();
                if (!ptr) {
@@ -1051,10 +1031,14 @@ nlna_submit_rx_free_desc(struct nlna_sof
                }
 
                /* Send the free Rx desc to the MAC */
-               ret = nlna_send_free_desc(sc, vtophys(ptr));
-               if (ret != 0)  /* no point trying other descriptors after
-                            a failure. */
-                       break;
+               msg.msg0 = vtophys(ptr) & 0xffffffffe0ULL;
+               n = 0;
+               do {
+                       msgrng_flags = msgrng_access_enable();
+                       ret = message_send_retry(1, code, stid, &msg);
+                       msgrng_restore(msgrng_flags);
+                       KASSERT(n++ < 100000, ("Too many credit fails\n"));
+               } while (ret != 0);
        }
 }
 
@@ -1982,15 +1966,6 @@ send_fmn_msg_tx(struct nlge_softc *sc, s
 }
 
 static void
-release_mbuf(uint64_t phy_addr)
-{
-       struct mbuf     *m;
-
-       m = (struct mbuf *)((uint32_t) phy_addr);
-       m_freem(m);
-}
-
-static void
 release_tx_desc(vm_paddr_t paddr)
 {
        struct nlge_tx_desc *tx_desc;
@@ -2008,17 +1983,6 @@ release_tx_desc(vm_paddr_t paddr)
        uma_zfree(nl_tx_desc_zone, tx_desc);
 }
 
-static struct mbuf *
-get_mbuf(void)
-{
-       struct mbuf *m_new;
-
-       if ((m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR)) == NULL)
-               return NULL;
-       m_new->m_len = m_new->m_pkthdr.len = MCLBYTES;
-       return (m_new);
-}
-
 static void *
 get_buf(void)
 {
@@ -2026,10 +1990,9 @@ get_buf(void)
        vm_paddr_t      temp1, temp2;
        unsigned int    *md;
 
-       m_new = get_mbuf();
-       if (m_new == NULL)
-               return m_new;
-
+       if ((m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR)) == NULL)
+               return NULL;
+       m_new->m_len = m_new->m_pkthdr.len = MCLBYTES;
        m_adj(m_new, XLR_CACHELINE_SIZE - ((unsigned int)m_new->m_data & 0x1f));
        md = (unsigned int *)m_new->m_data;
        md[0] = (unsigned int)m_new;    /* Back Ptr */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to