diff options
author | adrian <adrian@FreeBSD.org> | 2013-03-26 04:47:40 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2013-03-26 04:47:40 +0000 |
commit | 5af56a0bad1ba2efd969921e41bf9a84c9ddfbe1 (patch) | |
tree | 2b7608f8f5846c8143a24984bf15c41383217276 | |
parent | 49a21b7c2ed9406dd08968495779c6ccfb4a58a5 (diff) | |
download | FreeBSD-src-5af56a0bad1ba2efd969921e41bf9a84c9ddfbe1.zip FreeBSD-src-5af56a0bad1ba2efd969921e41bf9a84c9ddfbe1.tar.gz |
Migrate the multicast queue assembly code to not use the axq_link pointer
and instead use the HAL method to set the link pointer.
Tested:
* AR9280, hostap mode, CABQ frames being queued and transmitted
-rw-r--r-- | sys/dev/ath/if_ath_tx.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/dev/ath/if_ath_tx.c b/sys/dev/ath/if_ath_tx.c index 00c68d2..7d2a910 100644 --- a/sys/dev/ath/if_ath_tx.c +++ b/sys/dev/ath/if_ath_tx.c @@ -704,18 +704,20 @@ ath_tx_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq, ("%s: busy status 0x%x", __func__, bf->bf_flags)); ATH_TXQ_LOCK(txq); - if (txq->axq_link != NULL) { - struct ath_buf *last = ATH_TXQ_LAST(txq, axq_q_s); + 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; /* mark previous frame */ - wh = mtod(last->bf_m, struct ieee80211_frame *); + wh = mtod(bf_last->bf_m, struct ieee80211_frame *); wh->i_fc[1] |= IEEE80211_FC1_MORE_DATA; - bus_dmamap_sync(sc->sc_dmat, last->bf_dmamap, + bus_dmamap_sync(sc->sc_dmat, bf_last->bf_dmamap, BUS_DMASYNC_PREWRITE); /* link descriptor */ - *txq->axq_link = bf->bf_daddr; + ath_hal_settxdesclink(sc->sc_ah, + bf_last->bf_lastds, + bf->bf_daddr); } ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); ath_hal_gettxdesclinkptr(sc->sc_ah, bf->bf_lastds, &txq->axq_link); |