]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Refactor out the tx buffer free code into a routine, rsu_freebuf().
authoradrian <adrian@FreeBSD.org>
Fri, 18 Sep 2015 07:26:34 +0000 (07:26 +0000)
committeradrian <adrian@FreeBSD.org>
Fri, 18 Sep 2015 07:26:34 +0000 (07:26 +0000)
This makes it easier to add more transmit buffers, have different buffer
pools for things, etc.

sys/dev/usb/wlan/if_rsu.c

index 316e056ac02aed004907a58dba263efceac13037..502c428a6c7ba9efc0a68f6740a0f401e2e914d2 100644 (file)
@@ -174,6 +174,7 @@ static void rsu_free_tx_list(struct rsu_softc *);
 static void    rsu_free_list(struct rsu_softc *, struct rsu_data [], int);
 static struct rsu_data *_rsu_getbuf(struct rsu_softc *);
 static struct rsu_data *rsu_getbuf(struct rsu_softc *);
+static void    rsu_freebuf(struct rsu_softc *, struct rsu_data *);
 static int     rsu_write_region_1(struct rsu_softc *, uint16_t, uint8_t *,
                    int);
 static void    rsu_write_1(struct rsu_softc *, uint16_t, uint8_t);
@@ -759,6 +760,14 @@ rsu_getbuf(struct rsu_softc *sc)
        return (bf);
 }
 
+static void
+rsu_freebuf(struct rsu_softc *sc, struct rsu_data *bf)
+{
+
+       RSU_ASSERT_LOCKED(sc);
+       STAILQ_INSERT_TAIL(&sc->sc_tx_inactive, bf, next);
+}
+
 static int
 rsu_write_region_1(struct rsu_softc *sc, uint16_t addr, uint8_t *buf,
     int len)
@@ -1742,7 +1751,7 @@ rsu_bulk_tx_callback_sub(struct usb_xfer *xfer, usb_error_t error,
                    __func__, data);
                STAILQ_REMOVE_HEAD(&sc->sc_tx_active[which], next);
                rsu_txeof(xfer, data);
-               STAILQ_INSERT_TAIL(&sc->sc_tx_inactive, data, next);
+               rsu_freebuf(sc, data);
                /* FALLTHROUGH */
        case USB_ST_SETUP:
 tr_setup:
@@ -1766,7 +1775,7 @@ tr_setup:
                if (data != NULL) {
                        STAILQ_REMOVE_HEAD(&sc->sc_tx_active[which], next);
                        rsu_txeof(xfer, data);
-                       STAILQ_INSERT_TAIL(&sc->sc_tx_inactive, data, next);
+                       rsu_freebuf(sc, data);
                }
                counter_u64_add(ic->ic_oerrors, 1);
 
@@ -1975,7 +1984,7 @@ rsu_start(struct rsu_softc *sc)
                if (rsu_tx_start(sc, ni, m, bf) != 0) {
                        if_inc_counter(ni->ni_vap->iv_ifp,
                            IFCOUNTER_OERRORS, 1);
-                       STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next);
+                       rsu_freebuf(sc, bf);
                        ieee80211_free_node(ni);
                        break;
                }
@@ -2477,7 +2486,7 @@ rsu_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
        }
        if (rsu_tx_start(sc, ni, m, bf) != 0) {
                ieee80211_free_node(ni);
-               STAILQ_INSERT_HEAD(&sc->sc_tx_inactive, bf, next);
+               rsu_freebuf(sc, bf);
                RSU_UNLOCK(sc);
                return (EIO);
        }