svn commit: r224974 - user/adrian/if_ath_tx/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Thu Aug 18 16:19:26 UTC 2011
Author: adrian
Date: Thu Aug 18 16:19:26 2011
New Revision: 224974
URL: http://svn.freebsd.org/changeset/base/224974
Log:
As much as I've been wanting to avoid this, convert STAILQ->TAILQ.
There's at least one instance where I need to traverse the list in reverse
order, and that's impossible with a STAILQ.
It also makes TID schedule/unschedule O(1).
Modified:
user/adrian/if_ath_tx/sys/dev/ath/if_ath.c
user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx_ht.c
user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath.c Thu Aug 18 16:07:41 2011 (r224973)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath.c Thu Aug 18 16:19:26 2011 (r224974)
@@ -977,7 +977,7 @@ ath_vap_create(struct ieee80211com *ic,
/*
* Check that a beacon buffer is available; the code below assumes it.
*/
- if (needbeacon & STAILQ_EMPTY(&sc->sc_bbuf)) {
+ if (needbeacon & TAILQ_EMPTY(&sc->sc_bbuf)) {
device_printf(sc->sc_dev, "no beacon buffer available\n");
goto bad;
}
@@ -1039,8 +1039,8 @@ ath_vap_create(struct ieee80211com *ic,
* multicast frames. We know a beacon buffer is
* available because we checked above.
*/
- avp->av_bcbuf = STAILQ_FIRST(&sc->sc_bbuf);
- STAILQ_REMOVE_HEAD(&sc->sc_bbuf, bf_list);
+ avp->av_bcbuf = TAILQ_FIRST(&sc->sc_bbuf);
+ TAILQ_REMOVE(&sc->sc_bbuf, avp->av_bcbuf, bf_list);
if (opmode != IEEE80211_M_IBSS || !sc->sc_hasveol) {
/*
* Assign the vap to a beacon xmit slot. As above
@@ -1845,14 +1845,14 @@ _ath_getbuf_locked(struct ath_softc *sc)
ATH_TXBUF_LOCK_ASSERT(sc);
- bf = STAILQ_FIRST(&sc->sc_txbuf);
+ bf = TAILQ_FIRST(&sc->sc_txbuf);
if (bf != NULL && (bf->bf_flags & ATH_BUF_BUSY) == 0)
- STAILQ_REMOVE_HEAD(&sc->sc_txbuf, bf_list);
+ TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list);
else
bf = NULL;
if (bf == NULL) {
DPRINTF(sc, ATH_DEBUG_XMIT, "%s: %s\n", __func__,
- STAILQ_FIRST(&sc->sc_txbuf) == NULL ?
+ TAILQ_FIRST(&sc->sc_txbuf) == NULL ?
"out of xmit buffers" : "xmit buffer busy");
}
bf->bf_next = NULL; /* XXX just to be sure */
@@ -1899,7 +1899,7 @@ ath_start(struct ifnet *ifp)
IFQ_DEQUEUE(&ifp->if_snd, m);
if (m == NULL) {
ATH_TXBUF_LOCK(sc);
- STAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
+ TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
ATH_TXBUF_UNLOCK(sc);
break;
}
@@ -1910,7 +1910,7 @@ ath_start(struct ifnet *ifp)
* buffers to send all the fragments so all
* go out or none...
*/
- STAILQ_INIT(&frags);
+ TAILQ_INIT(&frags);
if ((m->m_flags & M_FRAG) &&
!ath_txfrag_setup(sc, &frags, m, ni)) {
DPRINTF(sc, ATH_DEBUG_XMIT,
@@ -1942,7 +1942,7 @@ ath_start(struct ifnet *ifp)
bf->bf_m = NULL;
bf->bf_node = NULL;
ATH_TXBUF_LOCK(sc);
- STAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
+ TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
ath_txfrag_cleanup(sc, &frags, ni);
ATH_TXBUF_UNLOCK(sc);
if (ni != NULL)
@@ -1963,9 +1963,9 @@ ath_start(struct ifnet *ifp)
goto reclaim;
}
m = next;
- bf = STAILQ_FIRST(&frags);
+ bf = TAILQ_FIRST(&frags);
KASSERT(bf != NULL, ("no buf for txfrag"));
- STAILQ_REMOVE_HEAD(&frags, bf_list);
+ TAILQ_REMOVE(&frags, bf, bf_list);
goto nextfrag;
}
@@ -2468,7 +2468,7 @@ ath_beacon_update(struct ieee80211vap *v
static void
ath_txqmove(struct ath_txq *dst, struct ath_txq *src)
{
- STAILQ_CONCAT(&dst->axq_q, &src->axq_q);
+ TAILQ_CONCAT(&dst->axq_q, &src->axq_q, bf_list);
dst->axq_link = src->axq_link;
src->axq_link = NULL;
dst->axq_depth += src->axq_depth;
@@ -2663,7 +2663,7 @@ ath_beacon_generate(struct ath_softc *sc
* Move frames from the s/w mcast q to the h/w cab q.
* XXX MORE_DATA bit
*/
- bfm = STAILQ_FIRST(&avp->av_mcastq.axq_q);
+ bfm = TAILQ_FIRST(&avp->av_mcastq.axq_q);
if (cabq->axq_link != NULL) {
*cabq->axq_link = bfm->bf_daddr;
} else
@@ -2752,7 +2752,7 @@ ath_beacon_return(struct ath_softc *sc,
ieee80211_free_node(bf->bf_node);
bf->bf_node = NULL;
}
- STAILQ_INSERT_TAIL(&sc->sc_bbuf, bf, bf_list);
+ TAILQ_INSERT_TAIL(&sc->sc_bbuf, bf, bf_list);
}
/*
@@ -2763,7 +2763,7 @@ ath_beacon_free(struct ath_softc *sc)
{
struct ath_buf *bf;
- STAILQ_FOREACH(bf, &sc->sc_bbuf, bf_list) {
+ TAILQ_FOREACH(bf, &sc->sc_bbuf, bf_list) {
if (bf->bf_m != NULL) {
bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
m_freem(bf->bf_m);
@@ -3082,7 +3082,7 @@ ath_descdma_setup(struct ath_softc *sc,
}
dd->dd_bufptr = bf;
- STAILQ_INIT(head);
+ TAILQ_INIT(head);
for (i = 0; i < nbuf; i++, bf++, ds += (ndesc * desc_len)) {
bf->bf_desc = (struct ath_desc *) ds;
bf->bf_daddr = DS2PHYS(dd, ds);
@@ -3109,7 +3109,7 @@ ath_descdma_setup(struct ath_softc *sc,
return error;
}
bf->bf_lastds = bf->bf_desc; /* Just an initial value */
- STAILQ_INSERT_TAIL(head, bf, bf_list);
+ TAILQ_INSERT_TAIL(head, bf, bf_list);
}
return 0;
fail3:
@@ -3138,7 +3138,7 @@ ath_descdma_cleanup(struct ath_softc *sc
bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
bus_dma_tag_destroy(dd->dd_dmat);
- STAILQ_FOREACH(bf, head, bf_list) {
+ TAILQ_FOREACH(bf, head, bf_list) {
if (bf->bf_m) {
m_freem(bf->bf_m);
bf->bf_m = NULL;
@@ -3157,7 +3157,7 @@ ath_descdma_cleanup(struct ath_softc *sc
}
}
- STAILQ_INIT(head);
+ TAILQ_INIT(head);
free(dd->dd_bufptr, M_ATHDEV);
memset(dd, 0, sizeof(*dd));
}
@@ -3511,7 +3511,7 @@ ath_rx_proc(void *arg, int npending)
sc->sc_stats.ast_rx_noise = nf;
tsf = ath_hal_gettsf64(ah);
do {
- bf = STAILQ_FIRST(&sc->sc_rxbuf);
+ bf = TAILQ_FIRST(&sc->sc_rxbuf);
if (sc->sc_rxslink && bf == NULL) { /* NB: shouldn't happen */
if_printf(ifp, "%s: no buffer!\n", __func__);
break;
@@ -3531,7 +3531,7 @@ ath_rx_proc(void *arg, int npending)
*/
/* XXX make debug msg */
if_printf(ifp, "%s: no mbuf!\n", __func__);
- STAILQ_REMOVE_HEAD(&sc->sc_rxbuf, bf_list);
+ TAILQ_REMOVE(&sc->sc_rxbuf, bf, bf_list);
goto rx_next;
}
ds = bf->bf_desc;
@@ -3561,7 +3561,7 @@ ath_rx_proc(void *arg, int npending)
#endif
if (status == HAL_EINPROGRESS)
break;
- STAILQ_REMOVE_HEAD(&sc->sc_rxbuf, bf_list);
+ TAILQ_REMOVE(&sc->sc_rxbuf, bf, bf_list);
/* These aren't specifically errors */
if (rs->rs_flags & HAL_RX_GI)
@@ -3828,7 +3828,7 @@ rx_accept:
ath_led_event(sc, 0);
}
rx_next:
- STAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list);
+ TAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list);
} while (ath_rxbuf_init(sc, bf) == 0);
/* rx signal state monitoring */
@@ -3877,8 +3877,8 @@ ath_txq_init(struct ath_softc *sc, struc
txq->axq_depth = 0;
txq->axq_intrcnt = 0;
txq->axq_link = NULL;
- STAILQ_INIT(&txq->axq_q);
- STAILQ_INIT(&txq->axq_tidq);
+ TAILQ_INIT(&txq->axq_q);
+ TAILQ_INIT(&txq->axq_tidq);
ATH_TXQ_LOCK_INIT(sc, txq);
}
@@ -4188,7 +4188,7 @@ ath_tx_processq(struct ath_softc *sc, st
for (;;) {
txq->axq_intrcnt = 0; /* reset periodic desc intr count */
ATH_TXQ_LOCK(txq);
- bf = STAILQ_FIRST(&txq->axq_q);
+ bf = TAILQ_FIRST(&txq->axq_q);
if (bf == NULL) {
ATH_TXQ_UNLOCK(txq);
break;
@@ -4206,7 +4206,7 @@ ath_tx_processq(struct ath_softc *sc, st
ATH_TXQ_UNLOCK(txq);
break;
}
- ATH_TXQ_REMOVE_HEAD(txq, bf_list);
+ ATH_TXQ_REMOVE(txq, bf, bf_list);
#ifdef IEEE80211_SUPPORT_TDMA
if (txq->axq_depth > 0) {
/*
@@ -4434,7 +4434,7 @@ ath_tx_freebuf(struct ath_softc *sc, str
bf->bf_flags &= ~ATH_BUF_BUSY;
ATH_TXBUF_LOCK(sc);
- STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
+ TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
ATH_TXBUF_UNLOCK(sc);
}
@@ -4452,20 +4452,20 @@ ath_tx_draintxq(struct ath_softc *sc, st
* we do not need to block ath_tx_proc
*/
ATH_TXBUF_LOCK(sc);
- bf = STAILQ_LAST(&sc->sc_txbuf, ath_buf, bf_list);
+ bf = TAILQ_LAST(&sc->sc_txbuf, ath_bufhead_s);
if (bf != NULL)
bf->bf_flags &= ~ATH_BUF_BUSY;
ATH_TXBUF_UNLOCK(sc);
for (ix = 0;; ix++) {
ATH_TXQ_LOCK(txq);
- bf = STAILQ_FIRST(&txq->axq_q);
+ bf = TAILQ_FIRST(&txq->axq_q);
if (bf == NULL) {
txq->axq_link = NULL;
ATH_TXQ_UNLOCK(txq);
break;
}
- ATH_TXQ_REMOVE_HEAD(txq, bf_list);
+ ATH_TXQ_REMOVE(txq, bf, bf_list);
ATH_TXQ_UNLOCK(txq);
#ifdef ATH_DEBUG
if (sc->sc_debug & ATH_DEBUG_RESET) {
@@ -4530,7 +4530,7 @@ ath_draintxq(struct ath_softc *sc)
ath_tx_draintxq(sc, &sc->sc_txq[i]);
#ifdef ATH_DEBUG
if (sc->sc_debug & ATH_DEBUG_RESET) {
- struct ath_buf *bf = STAILQ_FIRST(&sc->sc_bbuf);
+ struct ath_buf *bf = TAILQ_FIRST(&sc->sc_bbuf);
if (bf != NULL && bf->bf_m != NULL) {
ath_printtxbuf(sc, bf, sc->sc_bhalq, 0,
ath_hal_txprocdesc(ah, bf->bf_desc,
@@ -4568,7 +4568,7 @@ ath_stoprecv(struct ath_softc *sc)
printf("%s: rx queue %p, link %p\n", __func__,
(caddr_t)(uintptr_t) ath_hal_getrxbuf(ah), sc->sc_rxlink);
ix = 0;
- STAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
+ TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
struct ath_desc *ds = bf->bf_desc;
struct ath_rx_status *rs = &bf->bf_status.ds_rxstat;
HAL_STATUS status = ath_hal_rxprocdesc(ah, ds,
@@ -4598,7 +4598,7 @@ ath_startrecv(struct ath_softc *sc)
sc->sc_rxlink = NULL;
sc->sc_rxpending = NULL;
- STAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
+ TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
int error = ath_rxbuf_init(sc, bf);
if (error != 0) {
DPRINTF(sc, ATH_DEBUG_RECV,
@@ -4608,7 +4608,7 @@ ath_startrecv(struct ath_softc *sc)
}
}
- bf = STAILQ_FIRST(&sc->sc_rxbuf);
+ bf = TAILQ_FIRST(&sc->sc_rxbuf);
ath_hal_putrxbuf(ah, bf->bf_daddr);
ath_hal_rxena(ah); /* enable recv descriptors */
ath_mode_init(sc); /* set filters, etc. */
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Thu Aug 18 16:07:41 2011 (r224973)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Thu Aug 18 16:19:26 2011 (r224974)
@@ -181,10 +181,10 @@ ath_txfrag_cleanup(struct ath_softc *sc,
ATH_TXBUF_LOCK_ASSERT(sc);
- STAILQ_FOREACH_SAFE(bf, frags, bf_list, next) {
+ TAILQ_FOREACH_SAFE(bf, frags, bf_list, next) {
/* NB: bf assumed clean */
- STAILQ_REMOVE_HEAD(frags, bf_list);
- STAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
+ TAILQ_REMOVE(frags, bf, bf_list);
+ TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
ieee80211_node_decref(ni);
}
}
@@ -209,11 +209,11 @@ ath_txfrag_setup(struct ath_softc *sc, a
break;
}
ieee80211_node_incref(ni);
- STAILQ_INSERT_TAIL(frags, bf, bf_list);
+ TAILQ_INSERT_TAIL(frags, bf, bf_list);
}
ATH_TXBUF_UNLOCK(sc);
- return !STAILQ_EMPTY(frags);
+ return !TAILQ_EMPTY(frags);
}
/*
@@ -453,7 +453,7 @@ ath_tx_handoff_mcast(struct ath_softc *s
KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0,
("%s: busy status 0x%x", __func__, bf->bf_flags));
if (txq->axq_link != NULL) {
- struct ath_buf *last = ATH_TXQ_LAST(txq);
+ struct ath_buf *last = ATH_TXQ_LAST(txq, axq_q_s);
struct ieee80211_frame *wh;
/* mark previous frame */
@@ -542,7 +542,7 @@ ath_tx_handoff_hw(struct ath_softc *sc,
* is/was empty.
*/
ath_hal_puttxbuf(ah, txq->axq_qnum,
- STAILQ_FIRST(&txq->axq_q)->bf_daddr);
+ TAILQ_FIRST(&txq->axq_q)->bf_daddr);
txq->axq_flags &= ~ATH_TXQ_PUTPENDING;
DPRINTF(sc, ATH_DEBUG_TDMA | ATH_DEBUG_XMIT,
"%s: Q%u restarted\n", __func__,
@@ -1608,7 +1608,7 @@ ath_raw_xmit(struct ieee80211_node *ni,
return 0;
bad2:
ATH_TXBUF_LOCK(sc);
- STAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
+ TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
ATH_TXBUF_UNLOCK(sc);
bad:
ifp->if_oerrors++;
@@ -1812,7 +1812,7 @@ ath_tx_tid_sched(struct ath_softc *sc, s
atid->sched = 1;
- STAILQ_INSERT_TAIL(&txq->axq_tidq, atid, axq_qelem);
+ TAILQ_INSERT_TAIL(&txq->axq_tidq, atid, axq_qelem);
}
/*
@@ -1833,7 +1833,7 @@ ath_tx_tid_unsched(struct ath_softc *sc,
return;
atid->sched = 0;
- STAILQ_REMOVE(&txq->axq_tidq, atid, ath_tid, axq_qelem);
+ TAILQ_REMOVE(&txq->axq_tidq, atid, axq_qelem);
}
/*
@@ -1961,7 +1961,7 @@ ath_tx_tid_init(struct ath_softc *sc, st
for (i = 0; i < IEEE80211_TID_SIZE; i++) {
atid = &an->an_tid[i];
- STAILQ_INIT(&atid->axq_q);
+ TAILQ_INIT(&atid->axq_q);
atid->tid = i;
atid->an = an;
for (j = 0; j < ATH_TID_MAX_BUFS; j++)
@@ -2063,7 +2063,7 @@ ath_tx_tid_free_pkts(struct ath_softc *s
/* Walk the queue, free frames */
for (;;) {
ATH_TXQ_LOCK(atid);
- bf = STAILQ_FIRST(&atid->axq_q);
+ bf = TAILQ_FIRST(&atid->axq_q);
if (bf == NULL) {
ATH_TXQ_UNLOCK(atid);
break;
@@ -2077,7 +2077,7 @@ ath_tx_tid_free_pkts(struct ath_softc *s
bf->bf_state.bfs_dobaw)
ath_tx_update_baw(sc, an, atid,
SEQNO(bf->bf_state.bfs_seqno));
- ATH_TXQ_REMOVE_HEAD(atid, bf_list);
+ ATH_TXQ_REMOVE(atid, bf, bf_list);
ATH_TXQ_UNLOCK(atid);
ath_tx_freebuf(sc, bf, -1);
}
@@ -2200,11 +2200,11 @@ ath_tx_cleanup(struct ath_softc *sc, str
* + Fix the completion function to be non-aggregate
*/
ATH_TXQ_LOCK(atid);
- bf = STAILQ_FIRST(&atid->axq_q);
+ bf = TAILQ_FIRST(&atid->axq_q);
while (bf) {
if (bf->bf_state.bfs_isretried) {
- bf_next = STAILQ_NEXT(bf, bf_list);
- STAILQ_REMOVE(&atid->axq_q, bf, ath_buf, bf_list);
+ bf_next = TAILQ_NEXT(bf, bf_list);
+ TAILQ_REMOVE(&atid->axq_q, bf, bf_list);
atid->axq_depth--;
if (bf->bf_state.bfs_dobaw)
ath_tx_update_baw(sc, an, atid,
@@ -2219,7 +2219,7 @@ ath_tx_cleanup(struct ath_softc *sc, str
}
/* Give these the default completion handler */
bf->bf_comp = ath_tx_normal_comp;
- bf = STAILQ_NEXT(bf, bf_list);
+ bf = TAILQ_NEXT(bf, bf_list);
}
ATH_TXQ_UNLOCK(atid);
@@ -2403,7 +2403,7 @@ ath_tx_retry_subframe(struct ath_softc *
ath_tx_set_retry(sc, bf);
bf->bf_next = NULL; /* Just to make sure */
- STAILQ_INSERT_TAIL(bf_q, bf, bf_list);
+ TAILQ_INSERT_TAIL(bf_q, bf, bf_list);
return 0;
}
@@ -2423,7 +2423,7 @@ ath_tx_comp_aggr_error(struct ath_softc
tap = ath_tx_get_tx_tid(an, tid->tid);
- STAILQ_INIT(&bf_q);
+ TAILQ_INIT(&bf_q);
/* Retry all subframes */
bf = bf_first;
@@ -2458,14 +2458,9 @@ ath_tx_comp_aggr_error(struct ath_softc
#endif
/* Prepend all frames to the beginning of the queue */
- /*
- * XXX for now, these are done in reverse order.
- * XXX I'll have to convert this into a TAILQ, so it can
- * XXX added to by walking in the reverse order.
- */
ATH_TXQ_LOCK(tid);
- while ((bf = STAILQ_FIRST(&bf_q)) != NULL) {
- STAILQ_REMOVE_HEAD(&bf_q, bf_list);
+ while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) {
+ TAILQ_REMOVE(&bf_q, bf, bf_list);
ATH_TXQ_INSERT_HEAD(tid, bf, bf_list);
}
ATH_TXQ_UNLOCK(tid);
@@ -2546,7 +2541,7 @@ ath_tx_aggr_comp_aggr(struct ath_softc *
return;
}
- STAILQ_INIT(&bf_q);
+ TAILQ_INIT(&bf_q);
tap = ath_tx_get_tx_tid(an, tid);
/*
@@ -2626,14 +2621,9 @@ ath_tx_aggr_comp_aggr(struct ath_softc *
#endif
/* Prepend all frames to the beginning of the queue */
- /*
- * XXX for now, these are done in reverse order.
- * XXX I'll have to convert this into a TAILQ, so it can
- * XXX added to by walking in the reverse order.
- */
ATH_TXQ_LOCK(atid);
- while ((bf = STAILQ_FIRST(&bf_q)) != NULL) {
- STAILQ_REMOVE_HEAD(&bf_q, bf_list);
+ while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) {
+ TAILQ_REMOVE(&bf_q, bf, bf_list);
ATH_TXQ_INSERT_HEAD(atid, bf, bf_list);
}
ATH_TXQ_UNLOCK(atid);
@@ -2742,7 +2732,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
if (atid->paused)
break;
- bf = STAILQ_FIRST(&atid->axq_q);
+ bf = TAILQ_FIRST(&atid->axq_q);
if (bf == NULL) {
ATH_TXQ_UNLOCK(atid);
break;
@@ -2755,7 +2745,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
if (! bf->bf_state.bfs_dobaw) {
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL, "%s: non-baw packet\n",
__func__);
- ATH_TXQ_REMOVE_HEAD(atid, bf_list);
+ ATH_TXQ_REMOVE(atid, bf, bf_list);
ATH_TXQ_UNLOCK(atid);
bf->bf_state.bfs_aggr = 0;
/* Ensure the last descriptor link is 0 */
@@ -2771,7 +2761,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
ATH_TXQ_UNLOCK(atid);
/* Don't lock the TID - ath_tx_form_aggr will lock as needed */
- STAILQ_INIT(&bf_q);
+ TAILQ_INIT(&bf_q);
status = ath_tx_form_aggr(sc, an, atid, &bf_q);
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
@@ -2780,14 +2770,14 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
/*
* No frames to be picked up - out of BAW
*/
- if (STAILQ_EMPTY(&bf_q))
+ if (TAILQ_EMPTY(&bf_q))
break;
/*
* This assumes that the descriptor list in the ath_bufhead
* are already linked together via bf_next pointers.
*/
- bf = STAILQ_FIRST(&bf_q);
+ bf = TAILQ_FIRST(&bf_q);
/*
* If it's the only frame send as non-aggregate
@@ -2890,13 +2880,13 @@ ath_tx_tid_hw_queue_norm(struct ath_soft
if (atid->paused)
break;
- bf = STAILQ_FIRST(&atid->axq_q);
+ bf = TAILQ_FIRST(&atid->axq_q);
if (bf == NULL) {
ATH_TXQ_UNLOCK(atid);
break;
}
- ATH_TXQ_REMOVE_HEAD(atid, bf_list);
+ ATH_TXQ_REMOVE(atid, bf, bf_list);
ATH_TXQ_UNLOCK(atid);
txq = bf->bf_state.bfs_txq;
@@ -2939,7 +2929,7 @@ ath_txq_sched(struct ath_softc *sc, stru
* or the like. That's a later problem. Just throw
* packets at the hardware.
*/
- STAILQ_FOREACH_SAFE(atid, &txq->axq_tidq, axq_qelem, next) {
+ TAILQ_FOREACH_SAFE(atid, &txq->axq_tidq, axq_qelem, next) {
/*
* Suspend paused queues here; they'll be resumed
* once the addba completes or times out.
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx_ht.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx_ht.c Thu Aug 18 16:07:41 2011 (r224973)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx_ht.c Thu Aug 18 16:19:26 2011 (r224974)
@@ -354,7 +354,7 @@ ath_tx_form_aggr(struct ath_softc *sc, s
for (;;) {
ATH_TXQ_LOCK(tid);
- bf = STAILQ_FIRST(&tid->axq_q);
+ bf = TAILQ_FIRST(&tid->axq_q);
if (bf_first == NULL)
bf_first = bf;
if (bf == NULL) {
@@ -432,11 +432,11 @@ ath_tx_form_aggr(struct ath_softc *sc, s
/*
* this packet is part of an aggregate.
*/
- ATH_TXQ_REMOVE_HEAD(tid, bf_list);
+ ATH_TXQ_REMOVE(tid, bf, bf_list);
ATH_TXQ_UNLOCK(tid);
ath_tx_addto_baw(sc, an, tid, bf);
- STAILQ_INSERT_TAIL(bf_q, bf, bf_list);
+ TAILQ_INSERT_TAIL(bf_q, bf, bf_list);
nframes ++;
/* Completion handler */
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h Thu Aug 18 16:07:41 2011 (r224973)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h Thu Aug 18 16:19:26 2011 (r224974)
@@ -91,7 +91,7 @@ struct ath_buf;
* Note that TID 16 (WME_NUM_TID+1) is for handling non-QoS frames.
*/
struct ath_tid {
- STAILQ_HEAD(,ath_buf) axq_q; /* pending buffers */
+ TAILQ_HEAD(,ath_buf) axq_q; /* pending buffers */
struct mtx axq_lock; /* lock on q and link */
u_int axq_depth; /* SW queue depth */
char axq_name[48]; /* lock name */
@@ -103,7 +103,7 @@ struct ath_tid {
* Entry on the ath_txq; when there's traffic
* to send
*/
- STAILQ_ENTRY(ath_tid) axq_qelem;
+ TAILQ_ENTRY(ath_tid) axq_qelem;
int sched;
int paused; /* >0 if the TID has been paused */
@@ -170,7 +170,7 @@ struct ath_node {
#define ATH_RSSI(x) ATH_EP_RND(x, HAL_RSSI_EP_MULTIPLIER)
struct ath_buf {
- STAILQ_ENTRY(ath_buf) bf_list;
+ TAILQ_ENTRY(ath_buf) bf_list;
struct ath_buf * bf_next; /* next buffer in the aggregate */
int bf_nseg;
uint16_t bf_txflags; /* tx descriptor flags */
@@ -234,7 +234,7 @@ struct ath_buf {
struct ath_rc_series bfs_rc[ATH_RC_NUM]; /* non-11n TX series */
} bf_state;
};
-typedef STAILQ_HEAD(, ath_buf) ath_bufhead;
+typedef TAILQ_HEAD(ath_bufhead_s, ath_buf) ath_bufhead;
#define ATH_BUF_BUSY 0x00000002 /* (tx) desc owned by h/w */
@@ -270,12 +270,12 @@ struct ath_txq {
u_int axq_depth; /* queue depth (stat only) */
u_int axq_intrcnt; /* interrupt count */
u_int32_t *axq_link; /* link ptr in last TX desc */
- STAILQ_HEAD(, ath_buf) axq_q; /* transmit queue */
+ TAILQ_HEAD(axq_q_s, ath_buf) axq_q; /* transmit queue */
struct mtx axq_lock; /* lock on q and link */
char axq_name[12]; /* e.g. "ath0_txq4" */
/* Per-TID traffic queue for software -> hardware TX */
- STAILQ_HEAD(,ath_tid) axq_tidq;
+ TAILQ_HEAD(,ath_tid) axq_tidq;
};
#define ATH_NODE_LOCK(_an) mtx_lock(&(_an)->an_mtx)
@@ -294,21 +294,18 @@ struct ath_txq {
#define ATH_TXQ_IS_LOCKED(_tq) mtx_owned(&(_tq)->axq_lock)
#define ATH_TXQ_INSERT_HEAD(_tq, _elm, _field) do { \
- STAILQ_INSERT_HEAD(&(_tq)->axq_q, (_elm), _field); \
+ TAILQ_INSERT_HEAD(&(_tq)->axq_q, (_elm), _field); \
(_tq)->axq_depth++; \
} while (0)
#define ATH_TXQ_INSERT_TAIL(_tq, _elm, _field) do { \
- STAILQ_INSERT_TAIL(&(_tq)->axq_q, (_elm), _field); \
+ TAILQ_INSERT_TAIL(&(_tq)->axq_q, (_elm), _field); \
(_tq)->axq_depth++; \
} while (0)
-#define ATH_TXQ_REMOVE_HEAD(_tq, _field) do { \
- STAILQ_REMOVE_HEAD(&(_tq)->axq_q, _field); \
+#define ATH_TXQ_REMOVE(_tq, _elm, _field) do { \
+ TAILQ_REMOVE(&(_tq)->axq_q, _elm, _field); \
(_tq)->axq_depth--; \
} while (0)
-/* NB: this does not do the "head empty check" that STAILQ_LAST does */
-#define ATH_TXQ_LAST(_tq) \
- ((struct ath_buf *)(void *) \
- ((char *)((_tq)->axq_q.stqh_last) - __offsetof(struct ath_buf, bf_list)))
+#define ATH_TXQ_LAST(_tq, _field) TAILQ_LAST(&(_tq)->axq_q, _field)
struct ath_vap {
struct ieee80211vap av_vap; /* base class */
More information about the svn-src-user
mailing list