summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-12-11 04:19:51 +0000
committeradrian <adrian@FreeBSD.org>2012-12-11 04:19:51 +0000
commitb35ed10b9e923445d6c1992e687327f0e0b2c67b (patch)
tree939cc07105262fb97ee17632398fc8c234b31df0
parent2a065c7bf07356bbc84ff330f04ecf38d851febf (diff)
downloadFreeBSD-src-b35ed10b9e923445d6c1992e687327f0e0b2c67b.zip
FreeBSD-src-b35ed10b9e923445d6c1992e687327f0e0b2c67b.tar.gz
There's no need to use a TXQ pointer here; we specifically need the
hardware queue ID when queuing to EDMA descriptors. This is a small part of trying to reduce the size of ath_buf entries.
-rw-r--r--sys/dev/ath/if_ath_tx.c41
-rw-r--r--sys/dev/ath/if_athvar.h3
2 files changed, 14 insertions, 30 deletions
diff --git a/sys/dev/ath/if_ath_tx.c b/sys/dev/ath/if_ath_tx.c
index 199d890..263e69c 100644
--- a/sys/dev/ath/if_ath_tx.c
+++ b/sys/dev/ath/if_ath_tx.c
@@ -372,7 +372,6 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_desc *ds0,
uint32_t segLenList[4];
int numTxMaps = 1;
int isFirstDesc = 1;
- int qnum;
/*
* XXX There's txdma and txdma_mgmt; the descriptor
@@ -426,18 +425,16 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_desc *ds0,
bf->bf_daddr + dd->dd_descsize * (dsp + 1));
/*
- * XXX this assumes that bfs_txq is the actual destination
- * hardware queue at this point. It may not have been assigned,
- * it may actually be pointing to the multicast software
- * TXQ id. These must be fixed!
+ * XXX This assumes that bfs_txq is the actual destination
+ * hardware queue at this point. It may not have been
+ * assigned, it may actually be pointing to the multicast
+ * software TXQ id. These must be fixed!
*/
- qnum = bf->bf_state.bfs_txq->axq_qnum;
-
ath_hal_filltxdesc(ah, (struct ath_desc *) ds
, bufAddrList
, segLenList
, bf->bf_descid /* XXX desc id */
- , qnum
+ , bf->bf_state.bfs_tx_queue
, isFirstDesc /* first segment */
, i == bf->bf_nseg - 1 /* last segment */
, (struct ath_desc *) ds0 /* first descriptor */
@@ -478,7 +475,8 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_desc *ds0,
isFirstDesc = 0;
#ifdef ATH_DEBUG
if (sc->sc_debug & ATH_DEBUG_XMIT)
- ath_printtxbuf(sc, bf, qnum, 0, 0);
+ ath_printtxbuf(sc, bf, bf->bf_state.bfs_tx_queue,
+ 0, 0);
#endif
bf->bf_lastds = (struct ath_desc *) ds;
@@ -697,11 +695,11 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first)
* during the beacon setup code.
*
* XXX TODO: since the AR9300 EDMA TX queue support wants the QCU ID
- * as part of the TX descriptor, bf_state.bfs_txq must be updated
+ * as part of the TX descriptor, bf_state.bfs_tx_queue must be updated
* with the actual hardware txq, or all of this will fall apart.
*
* XXX It may not be a bad idea to just stuff the QCU ID into bf_state
- * and retire bfs_txq; then make sure the CABQ QCU ID is populated
+ * and retire bfs_tx_queue; then make sure the CABQ QCU ID is populated
* correctly.
*/
static void
@@ -1840,7 +1838,7 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni,
/* Set local packet state, used to queue packets to hardware */
bf->bf_state.bfs_tid = tid;
- bf->bf_state.bfs_txq = txq;
+ bf->bf_state.bfs_tx_queue = txq->axq_qnum;
bf->bf_state.bfs_pri = pri;
/*
@@ -1858,7 +1856,7 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni,
* queue, so the descriptor setup functions will
* correctly initialise the descriptor 'qcuId' field.
*/
- bf->bf_state.bfs_txq = sc->sc_cabq;
+ bf->bf_state.bfs_tx_queue = sc->sc_cabq->axq_qnum;
}
/* Do the generic frame setup */
@@ -2114,7 +2112,7 @@ ath_tx_raw_start(struct ath_softc *sc, struct ieee80211_node *ni,
/* Set local packet state, used to queue packets to hardware */
bf->bf_state.bfs_tid = WME_AC_TO_TID(pri);
- bf->bf_state.bfs_txq = sc->sc_ac2q[pri];
+ bf->bf_state.bfs_tx_queue = sc->sc_ac2q[pri]->axq_qnum;
bf->bf_state.bfs_pri = pri;
/* XXX this should be done in ath_tx_setrate() */
@@ -2713,16 +2711,8 @@ ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an,
struct ath_txq *txq, struct ath_buf *bf)
{
struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid];
-// struct ath_txq *txq = bf->bf_state.bfs_txq;
struct ieee80211_tx_ampdu *tap;
- if (txq != bf->bf_state.bfs_txq) {
- device_printf(sc->sc_dev, "%s: txq %d != bfs_txq %d!\n",
- __func__,
- txq->axq_qnum,
- bf->bf_state.bfs_txq->axq_qnum);
- }
-
ATH_TX_LOCK_ASSERT(sc);
tap = ath_tx_get_tx_tid(an, tid->tid);
@@ -2821,9 +2811,8 @@ ath_tx_swq(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_txq *txq,
/* Set local packet state, used to queue packets to hardware */
/* XXX potentially duplicate info, re-check */
- /* XXX remember, txq must be the hardware queue, not the av_mcastq */
bf->bf_state.bfs_tid = tid;
- bf->bf_state.bfs_txq = txq;
+ bf->bf_state.bfs_tx_queue = txq->axq_qnum;
bf->bf_state.bfs_pri = pri;
/*
@@ -4869,8 +4858,6 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an,
}
queuepkt:
- //txq = bf->bf_state.bfs_txq;
-
/* Set completion handler, multi-frame aggregate or not */
bf->bf_comp = ath_tx_aggr_comp;
@@ -4936,8 +4923,6 @@ ath_tx_tid_hw_queue_norm(struct ath_softc *sc, struct ath_node *an,
ATH_TID_REMOVE(tid, bf, bf_list);
- KASSERT(txq == bf->bf_state.bfs_txq, ("txqs not equal!\n"));
-
/* Sanity check! */
if (tid->tid != bf->bf_state.bfs_tid) {
device_printf(sc->sc_dev, "%s: bfs_tid %d !="
diff --git a/sys/dev/ath/if_athvar.h b/sys/dev/ath/if_athvar.h
index 7c70252..9edf8e1 100644
--- a/sys/dev/ath/if_athvar.h
+++ b/sys/dev/ath/if_athvar.h
@@ -241,8 +241,7 @@ struct ath_buf {
uint8_t bfs_tid; /* packet TID (or TID_MAX for no QoS) */
uint8_t bfs_nframes; /* number of frames in aggregate */
uint8_t bfs_pri; /* packet AC priority */
-
- struct ath_txq *bfs_txq; /* eventual dest hardware TXQ */
+ uint8_t bfs_tx_queue; /* destination hardware TX queue */
u_int32_t bfs_aggr:1, /* part of aggregate? */
bfs_aggrburst:1, /* part of aggregate burst? */
OpenPOWER on IntegriCloud