diff options
author | adrian <adrian@FreeBSD.org> | 2013-03-26 04:48:58 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2013-03-26 04:48:58 +0000 |
commit | 244deab9088e59efd49d1541e5ede504d732cda6 (patch) | |
tree | 949b63f3c5b442138c5c4d115b24d1a79d506e3e | |
parent | 5af56a0bad1ba2efd969921e41bf9a84c9ddfbe1 (diff) | |
download | FreeBSD-src-244deab9088e59efd49d1541e5ede504d732cda6.zip FreeBSD-src-244deab9088e59efd49d1541e5ede504d732cda6.tar.gz |
Convert the EDMA multicast queue code over to use the HAL method to set
the descriptor link pointer, rather than directly.
This is needed on AR9380 and later (ie, EDMA) NICs so the multicast queue
has a chance in hell of being put together right.
Tested:
* AR9380, AR9580 in hostap mode, CABQ traffic (but with other patches..)
-rw-r--r-- | sys/dev/ath/if_ath_tx_edma.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/ath/if_ath_tx_edma.c b/sys/dev/ath/if_ath_tx_edma.c index e51e50a..24bd039 100644 --- a/sys/dev/ath/if_ath_tx_edma.c +++ b/sys/dev/ath/if_ath_tx_edma.c @@ -249,7 +249,7 @@ ath_edma_xmit_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *bf) { - ATH_TXQ_LOCK_ASSERT(txq); + ATH_TX_LOCK_ASSERT(sc); KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0, ("%s: busy status 0x%x", __func__, bf->bf_flags)); @@ -257,7 +257,7 @@ ath_edma_xmit_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq, /* * XXX this is mostly duplicated in ath_tx_handoff_mcast(). */ - if (ATH_TXQ_FIRST(txq) != NULL) { + if (ATH_TXQ_LAST(txq, axq_q_s) != NULL) { struct ath_buf *bf_last = ATH_TXQ_LAST(txq, axq_q_s); struct ieee80211_frame *wh; @@ -270,7 +270,9 @@ ath_edma_xmit_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq, BUS_DMASYNC_PREWRITE); /* link descriptor */ - *txq->axq_link = bf->bf_daddr; + ath_hal_settxdesclink(sc->sc_ah, + bf_last->bf_lastds, + bf->bf_daddr); } #ifdef ATH_DEBUG_ALQ |