summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2013-03-26 04:48:58 +0000
committeradrian <adrian@FreeBSD.org>2013-03-26 04:48:58 +0000
commit244deab9088e59efd49d1541e5ede504d732cda6 (patch)
tree949b63f3c5b442138c5c4d115b24d1a79d506e3e
parent5af56a0bad1ba2efd969921e41bf9a84c9ddfbe1 (diff)
downloadFreeBSD-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.c8
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
OpenPOWER on IntegriCloud