Lines Matching refs:bf
130 struct ieee80211_node *ni, struct ath_buf *bf, struct mbuf *m0);
135 struct ath_tid *tid, struct ath_buf *bf);
141 struct ath_buf *bf; in ath_tx_alq_post() local
146 bf = bf_first; in ath_tx_alq_post()
148 while (bf != NULL) { in ath_tx_alq_post()
150 if (bf->bf_nseg == 0) in ath_tx_alq_post()
152 n = ((bf->bf_nseg - 1) / sc->sc_tx_nmaps) + 1; in ath_tx_alq_post()
153 for (i = 0, ds = (const char *) bf->bf_desc; in ath_tx_alq_post()
161 bf = bf->bf_next; in ath_tx_alq_post()
198 ath_tx_set_retry(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_set_retry() argument
202 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_set_retry()
204 if (bf->bf_state.bfs_isretried == 0) { in ath_tx_set_retry()
206 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, in ath_tx_set_retry()
209 bf->bf_state.bfs_isretried = 1; in ath_tx_set_retry()
210 bf->bf_state.bfs_retries ++; in ath_tx_set_retry()
259 struct ath_buf *bf, *next; in ath_txfrag_cleanup() local
263 TAILQ_FOREACH_SAFE(bf, frags, bf_list, next) { in ath_txfrag_cleanup()
265 TAILQ_REMOVE(frags, bf, bf_list); in ath_txfrag_cleanup()
266 ath_returnbuf_head(sc, bf); in ath_txfrag_cleanup()
281 struct ath_buf *bf; in ath_txfrag_setup() local
286 bf = _ath_getbuf_locked(sc, ATH_BUFTYPE_NORMAL); in ath_txfrag_setup()
287 if (bf == NULL) { /* out of buffers, cleanup */ in ath_txfrag_setup()
294 TAILQ_INSERT_TAIL(frags, bf, bf_list); in ath_txfrag_setup()
302 ath_tx_dmasetup(struct ath_softc *sc, struct ath_buf *bf, struct mbuf *m0) in ath_tx_dmasetup() argument
311 error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0, in ath_tx_dmasetup()
312 bf->bf_segs, &bf->bf_nseg, in ath_tx_dmasetup()
316 bf->bf_nseg = ATH_MAX_SCATTER + 1; in ath_tx_dmasetup()
327 if (bf->bf_nseg > ATH_MAX_SCATTER) { /* too many desc's, linearize */ in ath_tx_dmasetup()
336 error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0, in ath_tx_dmasetup()
337 bf->bf_segs, &bf->bf_nseg, in ath_tx_dmasetup()
344 KASSERT(bf->bf_nseg <= ATH_MAX_SCATTER, in ath_tx_dmasetup()
345 ("too many segments after defrag; nseg %u", bf->bf_nseg)); in ath_tx_dmasetup()
346 } else if (bf->bf_nseg == 0) { /* null packet, discard */ in ath_tx_dmasetup()
353 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE); in ath_tx_dmasetup()
354 bf->bf_m = m0; in ath_tx_dmasetup()
366 struct ath_buf *bf, int is_aggr, int is_first_subframe, in ath_tx_chaindesclist() argument
398 ds = (char *) bf->bf_desc; in ath_tx_chaindesclist()
402 for (i = 0; i < bf->bf_nseg; i++) { in ath_tx_chaindesclist()
403 bufAddrList[bp] = bf->bf_segs[i].ds_addr; in ath_tx_chaindesclist()
404 segLenList[bp] = bf->bf_segs[i].ds_len; in ath_tx_chaindesclist()
411 if ((i != bf->bf_nseg - 1) && (bp < numTxMaps)) in ath_tx_chaindesclist()
419 if (i == bf->bf_nseg - 1) in ath_tx_chaindesclist()
423 bf->bf_daddr + dd->dd_descsize * (dsp + 1)); in ath_tx_chaindesclist()
434 , bf->bf_descid /* XXX desc id */ in ath_tx_chaindesclist()
435 , bf->bf_state.bfs_tx_queue in ath_tx_chaindesclist()
437 , i == bf->bf_nseg - 1 /* last segment */ in ath_tx_chaindesclist()
471 bf->bf_state.bfs_ndelim); in ath_tx_chaindesclist()
474 bf->bf_lastds = (struct ath_desc *) ds; in ath_tx_chaindesclist()
488 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE); in ath_tx_chaindesclist()
508 struct ath_buf *bf) in ath_tx_set_ratectrl() argument
510 struct ath_rc_series *rc = bf->bf_state.bfs_rc; in ath_tx_set_ratectrl()
513 if (! bf->bf_state.bfs_ismrr) in ath_tx_set_ratectrl()
520 else if (bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) { in ath_tx_set_ratectrl()
535 ath_buf_set_rate(sc, ni, bf); in ath_tx_set_ratectrl()
537 ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc in ath_tx_set_ratectrl()
554 struct ath_buf *bf, *bf_prev = NULL; in ath_tx_setds_11n() local
561 bf = bf_first; in ath_tx_setds_11n()
563 if (bf->bf_state.bfs_txrate0 == 0) in ath_tx_setds_11n()
565 __func__, bf, 0); in ath_tx_setds_11n()
566 if (bf->bf_state.bfs_rc[0].ratecode == 0) in ath_tx_setds_11n()
568 __func__, bf, 0); in ath_tx_setds_11n()
574 while (bf != NULL) { in ath_tx_setds_11n()
577 __func__, bf, bf->bf_nseg, bf->bf_state.bfs_pktlen, in ath_tx_setds_11n()
578 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_setds_11n()
584 ath_hal_setuptxdesc(sc->sc_ah, bf->bf_desc in ath_tx_setds_11n()
585 , bf->bf_state.bfs_pktlen /* packet length */ in ath_tx_setds_11n()
586 , bf->bf_state.bfs_hdrlen /* header length */ in ath_tx_setds_11n()
587 , bf->bf_state.bfs_atype /* Atheros packet type */ in ath_tx_setds_11n()
588 , bf->bf_state.bfs_txpower /* txpower */ in ath_tx_setds_11n()
589 , bf->bf_state.bfs_txrate0 in ath_tx_setds_11n()
590 , bf->bf_state.bfs_try0 /* series 0 rate/tries */ in ath_tx_setds_11n()
591 , bf->bf_state.bfs_keyix /* key cache index */ in ath_tx_setds_11n()
592 , bf->bf_state.bfs_txantenna /* antenna mode */ in ath_tx_setds_11n()
593 , bf->bf_state.bfs_txflags | HAL_TXDESC_INTREQ /* flags */ in ath_tx_setds_11n()
594 , bf->bf_state.bfs_ctsrate /* rts/cts rate */ in ath_tx_setds_11n()
595 , bf->bf_state.bfs_ctsduration /* rts/cts duration */ in ath_tx_setds_11n()
602 if (bf == bf_first) { in ath_tx_setds_11n()
606 ath_tx_set_ratectrl(sc, bf->bf_node, bf); in ath_tx_setds_11n()
613 ath_tx_chaindesclist(sc, ds0, bf, in ath_tx_setds_11n()
615 !! (bf == bf_first), /* is_first_subframe */ in ath_tx_setds_11n()
616 !! (bf->bf_next == NULL) /* is_last_subframe */ in ath_tx_setds_11n()
619 if (bf == bf_first) { in ath_tx_setds_11n()
626 bf->bf_state.bfs_al, in ath_tx_setds_11n()
627 bf->bf_state.bfs_ndelim); in ath_tx_setds_11n()
636 bf->bf_daddr); in ath_tx_setds_11n()
639 bf_prev = bf; in ath_tx_setds_11n()
640 bf = bf->bf_next; in ath_tx_setds_11n()
700 struct ath_buf *bf) in ath_tx_handoff_mcast() argument
704 KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0, in ath_tx_handoff_mcast()
705 ("%s: busy status 0x%x", __func__, bf->bf_flags)); in ath_tx_handoff_mcast()
711 if (bf->bf_state.bfs_tx_queue != sc->sc_cabq->axq_qnum) { in ath_tx_handoff_mcast()
714 __func__, bf, bf->bf_state.bfs_tx_queue, in ath_tx_handoff_mcast()
732 bf->bf_daddr); in ath_tx_handoff_mcast()
734 ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); in ath_tx_handoff_mcast()
743 struct ath_buf *bf) in ath_tx_handoff_hw() argument
757 KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0, in ath_tx_handoff_hw()
758 ("%s: busy status 0x%x", __func__, bf->bf_flags)); in ath_tx_handoff_hw()
804 ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); in ath_tx_handoff_hw()
809 bf, in ath_tx_handoff_hw()
819 *txq->axq_link = bf->bf_daddr; in ath_tx_handoff_hw()
823 (caddr_t)bf->bf_daddr, bf->bf_desc, in ath_tx_handoff_hw()
829 (caddr_t)bf->bf_daddr, bf->bf_desc, in ath_tx_handoff_hw()
830 bf->bf_lastds); in ath_tx_handoff_hw()
866 if (bf->bf_state.bfs_tx_queue != txq->axq_qnum) { in ath_tx_handoff_hw()
869 __func__, bf, bf->bf_state.bfs_tx_queue, in ath_tx_handoff_hw()
876 if (bf->bf_state.bfs_aggr) in ath_tx_handoff_hw()
882 ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link); in ath_tx_handoff_hw()
913 struct ath_buf *bf, *bf_last; in ath_legacy_tx_dma_restart() local
918 bf = TAILQ_FIRST(&txq->axq_q); in ath_legacy_tx_dma_restart()
921 if (bf == NULL) in ath_legacy_tx_dma_restart()
928 bf, in ath_legacy_tx_dma_restart()
930 (uint32_t) bf->bf_daddr); in ath_legacy_tx_dma_restart()
946 ath_hal_puttxbuf(sc->sc_ah, txq->axq_qnum, bf->bf_daddr); in ath_legacy_tx_dma_restart()
961 struct ath_buf *bf) in ath_legacy_xmit_handoff() argument
967 ath_tx_alq_post(sc, bf); in ath_legacy_xmit_handoff()
971 ath_tx_handoff_mcast(sc, txq, bf); in ath_legacy_xmit_handoff()
973 ath_tx_handoff_hw(sc, txq, bf); in ath_legacy_xmit_handoff()
1046 ath_tx_calc_protection(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_calc_protection() argument
1055 flags = bf->bf_state.bfs_txflags; in ath_tx_calc_protection()
1056 rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_calc_protection()
1057 shortPreamble = bf->bf_state.bfs_shpream; in ath_tx_calc_protection()
1058 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_calc_protection()
1061 if (bf->bf_flags & ATH_BUF_TOA_PROBE) { in ath_tx_calc_protection()
1064 bf->bf_state.bfs_doprot = 0; in ath_tx_calc_protection()
1076 bf->bf_state.bfs_doprot = 1; in ath_tx_calc_protection()
1109 bf->bf_state.bfs_txflags = flags; in ath_tx_calc_protection()
1119 ath_tx_calc_duration(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_calc_duration() argument
1127 int isfrag = bf->bf_m->m_flags & M_FRAG; in ath_tx_calc_duration()
1129 flags = bf->bf_state.bfs_txflags; in ath_tx_calc_duration()
1130 rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_calc_duration()
1131 shortPreamble = bf->bf_state.bfs_shpream; in ath_tx_calc_duration()
1132 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_calc_duration()
1158 bf->bf_nextfraglen, in ath_tx_calc_duration()
1168 bf->bf_state.bfs_ismrr = 0; in ath_tx_calc_duration()
1169 bf->bf_state.bfs_try0 = ATH_TXMGTTRY; in ath_tx_calc_duration()
1259 ath_tx_set_rtscts(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_set_rtscts() argument
1263 uint8_t rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_set_rtscts()
1270 if ((bf->bf_state.bfs_txflags & in ath_tx_set_rtscts()
1273 bf->bf_state.bfs_ctsrate = 0; in ath_tx_set_rtscts()
1274 bf->bf_state.bfs_ctsduration = 0; in ath_tx_set_rtscts()
1282 if (bf->bf_state.bfs_doprot) in ath_tx_set_rtscts()
1285 rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_set_rtscts()
1291 if (bf->bf_state.bfs_ctsrate0 != 0) in ath_tx_set_rtscts()
1292 cix = ath_tx_findrix(sc, bf->bf_state.bfs_ctsrate0); in ath_tx_set_rtscts()
1299 bf->bf_state.bfs_shpream); in ath_tx_set_rtscts()
1304 bf->bf_state.bfs_shpream, bf->bf_state.bfs_pktlen, in ath_tx_set_rtscts()
1305 rt, bf->bf_state.bfs_txflags); in ath_tx_set_rtscts()
1308 bf->bf_state.bfs_ctsrate = ctsrate; in ath_tx_set_rtscts()
1309 bf->bf_state.bfs_ctsduration = ctsduration; in ath_tx_set_rtscts()
1315 bf->bf_state.bfs_ismrr = 0; in ath_tx_set_rtscts()
1316 bf->bf_state.bfs_try0 = in ath_tx_set_rtscts()
1317 bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */ in ath_tx_set_rtscts()
1331 ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_setds() argument
1333 struct ath_desc *ds = bf->bf_desc; in ath_tx_setds()
1336 if (bf->bf_state.bfs_txrate0 == 0) in ath_tx_setds()
1338 "%s: bf=%p, txrate0=%d\n", __func__, bf, 0); in ath_tx_setds()
1341 , bf->bf_state.bfs_pktlen /* packet length */ in ath_tx_setds()
1342 , bf->bf_state.bfs_hdrlen /* header length */ in ath_tx_setds()
1343 , bf->bf_state.bfs_atype /* Atheros packet type */ in ath_tx_setds()
1344 , bf->bf_state.bfs_txpower /* txpower */ in ath_tx_setds()
1345 , bf->bf_state.bfs_txrate0 in ath_tx_setds()
1346 , bf->bf_state.bfs_try0 /* series 0 rate/tries */ in ath_tx_setds()
1347 , bf->bf_state.bfs_keyix /* key cache index */ in ath_tx_setds()
1348 , bf->bf_state.bfs_txantenna /* antenna mode */ in ath_tx_setds()
1349 , bf->bf_state.bfs_txflags /* flags */ in ath_tx_setds()
1350 , bf->bf_state.bfs_ctsrate /* rts/cts rate */ in ath_tx_setds()
1351 , bf->bf_state.bfs_ctsduration /* rts/cts duration */ in ath_tx_setds()
1357 bf->bf_lastds = ds; in ath_tx_setds()
1358 bf->bf_last = bf; in ath_tx_setds()
1361 ath_tx_set_ratectrl(sc, bf->bf_node, bf); in ath_tx_setds()
1362 ath_tx_chaindesclist(sc, ds, bf, 0, 0, 0); in ath_tx_setds()
1379 ath_tx_do_ratelookup(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_do_ratelookup() argument
1384 if (! bf->bf_state.bfs_doratelookup) in ath_tx_do_ratelookup()
1388 bzero(bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_do_ratelookup()
1390 ATH_NODE_LOCK(ATH_NODE(bf->bf_node)); in ath_tx_do_ratelookup()
1391 ath_rate_findrate(sc, ATH_NODE(bf->bf_node), bf->bf_state.bfs_shpream, in ath_tx_do_ratelookup()
1392 bf->bf_state.bfs_pktlen, &rix, &try0, &rate); in ath_tx_do_ratelookup()
1395 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_do_ratelookup()
1396 bf->bf_state.bfs_rc[0].ratecode = rate; in ath_tx_do_ratelookup()
1397 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_do_ratelookup()
1399 if (bf->bf_state.bfs_ismrr && try0 != ATH_TXMAXTRY) in ath_tx_do_ratelookup()
1400 ath_rate_getxtxrates(sc, ATH_NODE(bf->bf_node), rix, in ath_tx_do_ratelookup()
1401 bf->bf_state.bfs_rc); in ath_tx_do_ratelookup()
1402 ATH_NODE_UNLOCK(ATH_NODE(bf->bf_node)); in ath_tx_do_ratelookup()
1406 bf->bf_state.bfs_try0 = try0; in ath_tx_do_ratelookup()
1407 bf->bf_state.bfs_txrate0 = rate; in ath_tx_do_ratelookup()
1415 struct ath_buf *bf) in ath_tx_update_clrdmask() argument
1417 struct ath_node *an = ATH_NODE(bf->bf_node); in ath_tx_update_clrdmask()
1422 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_update_clrdmask()
1503 struct ath_buf *bf) in ath_tx_xmit_normal() argument
1505 struct ath_node *an = ATH_NODE(bf->bf_node); in ath_tx_xmit_normal()
1506 struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid]; in ath_tx_xmit_normal()
1519 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_xmit_normal()
1522 ath_tx_do_ratelookup(sc, bf); in ath_tx_xmit_normal()
1523 ath_tx_calc_duration(sc, bf); in ath_tx_xmit_normal()
1524 ath_tx_calc_protection(sc, bf); in ath_tx_xmit_normal()
1525 ath_tx_set_rtscts(sc, bf); in ath_tx_xmit_normal()
1526 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_xmit_normal()
1527 ath_tx_setds(sc, bf); in ath_tx_xmit_normal()
1533 bf->bf_comp = ath_tx_normal_comp; in ath_tx_xmit_normal()
1536 ath_tx_handoff(sc, txq, bf); in ath_tx_xmit_normal()
1553 struct ath_buf *bf, struct mbuf *m0, struct ath_txq *txq) in ath_tx_normal_setup() argument
1607 error = ath_tx_dmasetup(sc, bf, m0); in ath_tx_normal_setup()
1611 bf->bf_node = ni; /* NB: held reference */ in ath_tx_normal_setup()
1612 m0 = bf->bf_m; /* NB: may have changed */ in ath_tx_normal_setup()
1616 ds = bf->bf_desc; in ath_tx_normal_setup()
1697 bf->bf_state.bfs_doratelookup = 1; in ath_tx_normal_setup()
1797 bf->bf_flags |= ATH_BUF_TOA_PROBE; in ath_tx_normal_setup()
1858 bzero(&bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_normal_setup()
1864 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_normal_setup()
1865 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_normal_setup()
1866 bf->bf_state.bfs_rc[0].ratecode = txrate; in ath_tx_normal_setup()
1869 bf->bf_state.bfs_pktlen = pktlen; in ath_tx_normal_setup()
1870 bf->bf_state.bfs_hdrlen = hdrlen; in ath_tx_normal_setup()
1871 bf->bf_state.bfs_atype = atype; in ath_tx_normal_setup()
1872 bf->bf_state.bfs_txpower = ieee80211_get_node_txpower(ni); in ath_tx_normal_setup()
1873 bf->bf_state.bfs_txrate0 = txrate; in ath_tx_normal_setup()
1874 bf->bf_state.bfs_try0 = try0; in ath_tx_normal_setup()
1875 bf->bf_state.bfs_keyix = keyix; in ath_tx_normal_setup()
1876 bf->bf_state.bfs_txantenna = sc->sc_txantenna; in ath_tx_normal_setup()
1877 bf->bf_state.bfs_txflags = flags; in ath_tx_normal_setup()
1878 bf->bf_state.bfs_shpream = shortPreamble; in ath_tx_normal_setup()
1881 bf->bf_state.bfs_ctsrate0 = 0; /* ie, no hard-coded ctsrate */ in ath_tx_normal_setup()
1882 bf->bf_state.bfs_ctsrate = 0; /* calculated later */ in ath_tx_normal_setup()
1883 bf->bf_state.bfs_ctsduration = 0; in ath_tx_normal_setup()
1884 bf->bf_state.bfs_ismrr = ismrr; in ath_tx_normal_setup()
1902 struct ath_buf *bf, struct mbuf *m0) in ath_tx_start() argument
2002 bf->bf_state.bfs_tid = tid; in ath_tx_start()
2003 bf->bf_state.bfs_tx_queue = txq->axq_qnum; in ath_tx_start()
2004 bf->bf_state.bfs_pri = pri; in ath_tx_start()
2022 bf->bf_state.bfs_tx_queue = sc->sc_cabq->axq_qnum; in ath_tx_start()
2028 bf->bf_state.bfs_dobaw = 0; in ath_tx_start()
2045 seqno = ath_tx_tid_seqno_assign(sc, ni, bf, m0); in ath_tx_start()
2054 bf->bf_state.bfs_dobaw = 1; in ath_tx_start()
2062 bf->bf_state.bfs_seqno = M_SEQNO_GET(m0) << IEEE80211_SEQ_SEQ_SHIFT; in ath_tx_start()
2071 r = ath_tx_normal_setup(sc, ni, bf, m0, txq); in ath_tx_start()
2077 m0 = bf->bf_m; in ath_tx_start()
2107 "%s: bf=%p: mcastq: TX'ing\n", __func__, bf); in ath_tx_start()
2108 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2109 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2112 ath_tx_swq(sc, ni, txq, queue_to_head, bf); in ath_tx_start()
2114 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2115 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2122 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2128 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_start()
2129 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2137 struct ath_buf *bf, struct mbuf *m0, in ath_tx_raw_start() argument
2173 "ath_tx_raw_start: ni=%p, bf=%p, raw", ni, bf); in ath_tx_raw_start()
2216 bf->bf_state.bfs_dobaw = 0; in ath_tx_raw_start()
2218 error = ath_tx_dmasetup(sc, bf, m0); in ath_tx_raw_start()
2221 m0 = bf->bf_m; /* NB: may have changed */ in ath_tx_raw_start()
2224 bf->bf_node = ni; /* NB: held reference */ in ath_tx_raw_start()
2233 bf->bf_state.bfs_doprot = 1; in ath_tx_raw_start()
2265 bf->bf_flags |= ATH_BUF_TOA_PROBE; in ath_tx_raw_start()
2282 bf->bf_state.bfs_ctsrate0 = params->ibp_ctsrate; in ath_tx_raw_start()
2311 ds = bf->bf_desc; in ath_tx_raw_start()
2315 bf->bf_state.bfs_pktlen = pktlen; in ath_tx_raw_start()
2316 bf->bf_state.bfs_hdrlen = hdrlen; in ath_tx_raw_start()
2317 bf->bf_state.bfs_atype = atype; in ath_tx_raw_start()
2318 bf->bf_state.bfs_txpower = MIN(params->ibp_power, in ath_tx_raw_start()
2320 bf->bf_state.bfs_txrate0 = txrate; in ath_tx_raw_start()
2321 bf->bf_state.bfs_try0 = try0; in ath_tx_raw_start()
2322 bf->bf_state.bfs_keyix = keyix; in ath_tx_raw_start()
2323 bf->bf_state.bfs_txantenna = txantenna; in ath_tx_raw_start()
2324 bf->bf_state.bfs_txflags = flags; in ath_tx_raw_start()
2325 bf->bf_state.bfs_shpream = in ath_tx_raw_start()
2329 bf->bf_state.bfs_tid = WME_AC_TO_TID(pri); in ath_tx_raw_start()
2330 bf->bf_state.bfs_tx_queue = sc->sc_ac2q[pri]->axq_qnum; in ath_tx_raw_start()
2331 bf->bf_state.bfs_pri = pri; in ath_tx_raw_start()
2334 bf->bf_state.bfs_ctsrate = 0; in ath_tx_raw_start()
2335 bf->bf_state.bfs_ctsduration = 0; in ath_tx_raw_start()
2336 bf->bf_state.bfs_ismrr = ismrr; in ath_tx_raw_start()
2339 bzero(&bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_raw_start()
2341 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_raw_start()
2342 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_raw_start()
2343 bf->bf_state.bfs_rc[0].ratecode = txrate; in ath_tx_raw_start()
2349 bf->bf_state.bfs_rc[1].rix = rix; in ath_tx_raw_start()
2350 bf->bf_state.bfs_rc[1].tries = params->ibp_try1; in ath_tx_raw_start()
2353 bf->bf_state.bfs_rc[2].rix = rix; in ath_tx_raw_start()
2354 bf->bf_state.bfs_rc[2].tries = params->ibp_try2; in ath_tx_raw_start()
2357 bf->bf_state.bfs_rc[3].rix = rix; in ath_tx_raw_start()
2358 bf->bf_state.bfs_rc[3].tries = params->ibp_try3; in ath_tx_raw_start()
2364 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_raw_start()
2381 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2388 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2392 ath_tx_swq(sc, ni, sc->sc_ac2q[pri], queue_to_head, bf); in ath_tx_raw_start()
2394 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2395 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2399 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2405 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_raw_start()
2406 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2422 struct ath_buf *bf; in ath_raw_xmit() local
2473 bf = ath_getbuf(sc, ATH_BUFTYPE_MGMT); in ath_raw_xmit()
2474 if (bf == NULL) { in ath_raw_xmit()
2481 m, params, bf); in ath_raw_xmit()
2488 if (ath_tx_start(sc, ni, bf, m)) { in ath_raw_xmit()
2497 if (ath_tx_raw_start(sc, ni, bf, m, params)) { in ath_raw_xmit()
2531 bf); in ath_raw_xmit()
2533 ath_returnbuf_head(sc, bf); in ath_raw_xmit()
2658 struct ath_tid *tid, struct ath_buf *bf) in ath_tx_addto_baw() argument
2665 if (bf->bf_state.bfs_isretried) in ath_tx_addto_baw()
2670 if (! bf->bf_state.bfs_dobaw) { in ath_tx_addto_baw()
2673 __func__, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2677 if (bf->bf_state.bfs_addedbaw) in ath_tx_addto_baw()
2681 __func__, tid->tid, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2690 SEQNO(bf->bf_state.bfs_seqno))) { in ath_tx_addto_baw()
2694 __func__, bf, tid->tid, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2703 index = ATH_BA_INDEX(tap->txa_start, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_addto_baw()
2708 __func__, tid->tid, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2726 bf, in ath_tx_addto_baw()
2727 SEQNO(bf->bf_state.bfs_seqno) in ath_tx_addto_baw()
2730 tid->tx_buf[cindex] = bf; in ath_tx_addto_baw()
2797 struct ath_tid *tid, const struct ath_buf *bf) in ath_tx_update_baw() argument
2801 int seqno = SEQNO(bf->bf_state.bfs_seqno); in ath_tx_update_baw()
2825 if (tid->tx_buf[cindex] != bf) { in ath_tx_update_baw()
2828 __func__, bf, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_update_baw()
2848 struct ath_buf *bf) in ath_tx_leak_count_update() argument
2855 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_leak_count_update()
2879 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, in ath_tx_leak_count_update()
2986 struct ath_buf *bf, struct mbuf *m0) in ath_tx_tid_seqno_assign() argument
3050 struct ath_txq *txq, struct ath_buf *bf) in ath_tx_xmit_aggr() argument
3052 struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid]; in ath_tx_xmit_aggr()
3061 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_xmit_aggr()
3067 if (bf->bf_state.bfs_dobaw && in ath_tx_xmit_aggr()
3069 SEQNO(bf->bf_state.bfs_seqno)))) { in ath_tx_xmit_aggr()
3070 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_xmit_aggr()
3085 if (bf->bf_state.bfs_aggr != 0 || bf->bf_state.bfs_nframes > 1) { in ath_tx_xmit_aggr()
3088 bf->bf_state.bfs_aggr, bf->bf_state.bfs_nframes); in ath_tx_xmit_aggr()
3089 bf->bf_state.bfs_aggr = 0; in ath_tx_xmit_aggr()
3090 bf->bf_state.bfs_nframes = 1; in ath_tx_xmit_aggr()
3094 ath_tx_update_clrdmask(sc, tid, bf); in ath_tx_xmit_aggr()
3097 ath_tx_do_ratelookup(sc, bf); in ath_tx_xmit_aggr()
3098 ath_tx_calc_duration(sc, bf); in ath_tx_xmit_aggr()
3099 ath_tx_calc_protection(sc, bf); in ath_tx_xmit_aggr()
3100 ath_tx_set_rtscts(sc, bf); in ath_tx_xmit_aggr()
3101 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_xmit_aggr()
3102 ath_tx_setds(sc, bf); in ath_tx_xmit_aggr()
3111 if (bf->bf_state.bfs_dobaw) { in ath_tx_xmit_aggr()
3112 ath_tx_addto_baw(sc, an, tid, bf); in ath_tx_xmit_aggr()
3113 bf->bf_state.bfs_addedbaw = 1; in ath_tx_xmit_aggr()
3117 bf->bf_comp = ath_tx_aggr_comp; in ath_tx_xmit_aggr()
3124 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_xmit_aggr()
3127 ath_tx_handoff(sc, txq, bf); in ath_tx_xmit_aggr()
3138 struct ath_txq *txq, int queue_to_head, struct ath_buf *bf) in ath_tx_swq() argument
3144 struct mbuf *m0 = bf->bf_m; in ath_tx_swq()
3155 __func__, bf, pri, tid, IEEE80211_QOS_HAS_SEQ(wh)); in ath_tx_swq()
3159 bf->bf_state.bfs_tid = tid; in ath_tx_swq()
3160 bf->bf_state.bfs_tx_queue = txq->axq_qnum; in ath_tx_swq()
3161 bf->bf_state.bfs_pri = pri; in ath_tx_swq()
3180 ATH_TID_INSERT_HEAD(atid, bf, bf_list); in ath_tx_swq()
3182 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3186 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3208 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3224 bf = ATH_TID_FIRST(atid); in ath_tx_swq()
3225 ATH_TID_REMOVE(atid, bf, bf_list); in ath_tx_swq()
3232 bf->bf_state.bfs_aggr = 0; in ath_tx_swq()
3233 bf->bf_state.bfs_nframes = 1; in ath_tx_swq()
3236 ath_tx_xmit_aggr(sc, an, txq, bf); in ath_tx_swq()
3266 ath_tx_update_clrdmask(sc, atid, bf); in ath_tx_swq()
3273 ath_tx_leak_count_update(sc, atid, bf); in ath_tx_swq()
3278 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_swq()
3282 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3432 struct ath_buf *bf) in ath_tx_tid_filt_addbuf() argument
3441 DPRINTF(sc, ATH_DEBUG_SW_TX_FILT, "%s: bf=%p\n", __func__, bf); in ath_tx_tid_filt_addbuf()
3444 ath_tx_set_retry(sc, bf); in ath_tx_tid_filt_addbuf()
3447 ATH_TID_FILT_INSERT_TAIL(tid, bf, bf_list); in ath_tx_tid_filt_addbuf()
3457 struct ath_buf *bf) in ath_tx_tid_filt_comp_buf() argument
3470 ath_tx_tid_filt_addbuf(sc, tid, bf); in ath_tx_tid_filt_comp_buf()
3483 struct ath_buf *bf; in ath_tx_tid_filt_comp_complete() local
3502 while ((bf = ATH_TID_FILT_LAST(tid, ath_bufhead_s)) != NULL) { in ath_tx_tid_filt_comp_complete()
3503 ATH_TID_FILT_REMOVE(tid, bf, bf_list); in ath_tx_tid_filt_comp_complete()
3504 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_tid_filt_comp_complete()
3525 struct ath_buf *bf) in ath_tx_tid_filt_comp_single() argument
3535 if (bf->bf_state.bfs_retries > SWMAX_RETRIES) { in ath_tx_tid_filt_comp_single()
3540 bf, in ath_tx_tid_filt_comp_single()
3541 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_single()
3550 if (bf->bf_flags & ATH_BUF_BUSY) { in ath_tx_tid_filt_comp_single()
3551 nbf = ath_tx_retry_clone(sc, tid->an, tid, bf); in ath_tx_tid_filt_comp_single()
3554 __func__, bf, nbf); in ath_tx_tid_filt_comp_single()
3556 nbf = bf; in ath_tx_tid_filt_comp_single()
3562 __func__, bf); in ath_tx_tid_filt_comp_single()
3578 struct ath_buf *bf, *bf_next, *nbf; in ath_tx_tid_filt_comp_aggr() local
3582 bf = bf_first; in ath_tx_tid_filt_comp_aggr()
3583 while (bf) { in ath_tx_tid_filt_comp_aggr()
3584 bf_next = bf->bf_next; in ath_tx_tid_filt_comp_aggr()
3585 bf->bf_next = NULL; /* Remove it from the aggr list */ in ath_tx_tid_filt_comp_aggr()
3590 if (bf->bf_state.bfs_retries > SWMAX_RETRIES) { in ath_tx_tid_filt_comp_aggr()
3596 bf, in ath_tx_tid_filt_comp_aggr()
3597 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3598 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_tid_filt_comp_aggr()
3602 if (bf->bf_flags & ATH_BUF_BUSY) { in ath_tx_tid_filt_comp_aggr()
3603 nbf = ath_tx_retry_clone(sc, tid->an, tid, bf); in ath_tx_tid_filt_comp_aggr()
3606 __func__, tid->tid, bf, nbf, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3608 nbf = bf; in ath_tx_tid_filt_comp_aggr()
3618 __func__, tid->tid, bf, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3619 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_tid_filt_comp_aggr()
3624 bf = bf_next; in ath_tx_tid_filt_comp_aggr()
3810 struct ath_tid *tid, ath_bufhead *bf_cq, struct ath_buf *bf) in ath_tx_tid_drain_pkt() argument
3820 bf->bf_state.bfs_dobaw) { in ath_tx_tid_drain_pkt()
3826 if (bf->bf_state.bfs_retries > 0) { in ath_tx_tid_drain_pkt()
3827 ath_tx_update_baw(sc, an, tid, bf); in ath_tx_tid_drain_pkt()
3828 bf->bf_state.bfs_dobaw = 0; in ath_tx_tid_drain_pkt()
3834 if (! bf->bf_state.bfs_addedbaw) in ath_tx_tid_drain_pkt()
3837 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_drain_pkt()
3842 bf->bf_next = NULL; in ath_tx_tid_drain_pkt()
3845 TAILQ_INSERT_TAIL(bf_cq, bf, bf_list); in ath_tx_tid_drain_pkt()
3850 const char *pfx, struct ath_tid *tid, struct ath_buf *bf) in ath_tx_tid_drain_print() argument
3866 bf, in ath_tx_tid_drain_print()
3867 bf->bf_state.bfs_addedbaw, in ath_tx_tid_drain_print()
3868 bf->bf_state.bfs_dobaw, in ath_tx_tid_drain_print()
3869 SEQNO(bf->bf_state.bfs_seqno), in ath_tx_tid_drain_print()
3870 bf->bf_state.bfs_retries); in ath_tx_tid_drain_print()
3877 bf, in ath_tx_tid_drain_print()
3888 bf, in ath_tx_tid_drain_print()
3911 mtod(bf->bf_m, const uint8_t *), in ath_tx_tid_drain_print()
3912 bf->bf_m->m_len, 0, -1); in ath_tx_tid_drain_print()
3934 struct ath_buf *bf; in ath_tx_tid_drain() local
3946 bf = ATH_TID_FIRST(tid); in ath_tx_tid_drain()
3947 if (bf == NULL) { in ath_tx_tid_drain()
3952 ath_tx_tid_drain_print(sc, an, "norm", tid, bf); in ath_tx_tid_drain()
3956 ATH_TID_REMOVE(tid, bf, bf_list); in ath_tx_tid_drain()
3957 ath_tx_tid_drain_pkt(sc, an, tid, bf_cq, bf); in ath_tx_tid_drain()
3963 bf = ATH_TID_FILT_FIRST(tid); in ath_tx_tid_drain()
3964 if (bf == NULL) in ath_tx_tid_drain()
3968 ath_tx_tid_drain_print(sc, an, "filt", tid, bf); in ath_tx_tid_drain()
3972 ATH_TID_FILT_REMOVE(tid, bf, bf_list); in ath_tx_tid_drain()
3973 ath_tx_tid_drain_pkt(sc, an, tid, bf_cq, bf); in ath_tx_tid_drain()
4094 struct ath_buf *bf; in ath_tx_node_flush() local
4135 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_node_flush()
4136 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_node_flush()
4137 ath_tx_default_comp(sc, bf, 0); in ath_tx_node_flush()
4149 struct ath_buf *bf; in ath_tx_txq_drain() local
4166 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_txq_drain()
4167 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_txq_drain()
4168 ath_tx_default_comp(sc, bf, 0); in ath_tx_txq_drain()
4189 ath_tx_normal_comp(struct ath_softc *sc, struct ath_buf *bf, int fail) in ath_tx_normal_comp() argument
4191 struct ieee80211_node *ni = bf->bf_node; in ath_tx_normal_comp()
4193 int tid = bf->bf_state.bfs_tid; in ath_tx_normal_comp()
4195 struct ath_tx_status *ts = &bf->bf_status.ds_txstat; in ath_tx_normal_comp()
4201 __func__, bf, fail, atid->hwq_depth - 1); in ath_tx_normal_comp()
4217 ath_tx_tid_filt_comp_buf(sc, atid, bf); in ath_tx_normal_comp()
4258 if (fail == 0 && ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)) in ath_tx_normal_comp()
4259 ath_tx_update_ratectrl(sc, ni, bf->bf_state.bfs_rc, in ath_tx_normal_comp()
4260 ts, bf->bf_state.bfs_pktlen, in ath_tx_normal_comp()
4263 ath_tx_default_comp(sc, bf, fail); in ath_tx_normal_comp()
4274 ath_tx_comp_cleanup_unaggr(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_comp_cleanup_unaggr() argument
4276 struct ieee80211_node *ni = bf->bf_node; in ath_tx_comp_cleanup_unaggr()
4278 int tid = bf->bf_state.bfs_tid; in ath_tx_comp_cleanup_unaggr()
4288 if (bf->bf_state.bfs_dobaw) { in ath_tx_comp_cleanup_unaggr()
4289 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_comp_cleanup_unaggr()
4290 if (!bf->bf_state.bfs_addedbaw) in ath_tx_comp_cleanup_unaggr()
4293 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_comp_cleanup_unaggr()
4305 ath_tx_default_comp(sc, bf, 0); in ath_tx_comp_cleanup_unaggr()
4319 struct ath_buf *bf, *bf_next; in ath_tx_tid_cleanup_frame() local
4331 bf = bf_head; in ath_tx_tid_cleanup_frame()
4332 while (bf != NULL) { in ath_tx_tid_cleanup_frame()
4333 bf_next = bf->bf_next; /* next aggregate frame, or NULL */ in ath_tx_tid_cleanup_frame()
4343 if (bf->bf_state.bfs_addedbaw) { in ath_tx_tid_cleanup_frame()
4344 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_tid_cleanup_frame()
4345 bf->bf_state.bfs_dobaw = 0; in ath_tx_tid_cleanup_frame()
4351 bf->bf_comp = ath_tx_normal_comp; in ath_tx_tid_cleanup_frame()
4352 bf->bf_next = NULL; in ath_tx_tid_cleanup_frame()
4357 TAILQ_INSERT_TAIL(bf_cq, bf, bf_list); in ath_tx_tid_cleanup_frame()
4362 bf = bf_next; in ath_tx_tid_cleanup_frame()
4384 struct ath_buf *bf, *bf_next; in ath_tx_tid_cleanup() local
4398 while ((bf = ATH_TID_FILT_LAST(atid, ath_bufhead_s)) != NULL) { in ath_tx_tid_cleanup()
4399 ATH_TID_FILT_REMOVE(atid, bf, bf_list); in ath_tx_tid_cleanup()
4400 ATH_TID_INSERT_HEAD(atid, bf, bf_list); in ath_tx_tid_cleanup()
4409 bf = ATH_TID_FIRST(atid); in ath_tx_tid_cleanup()
4410 while (bf) { in ath_tx_tid_cleanup()
4415 bf_next = TAILQ_NEXT(bf, bf_list); in ath_tx_tid_cleanup()
4420 ath_tx_tid_cleanup_frame(sc, an, tid, bf, bf_cq); in ath_tx_tid_cleanup()
4425 bf = bf_next; in ath_tx_tid_cleanup()
4452 struct ath_tid *tid, struct ath_buf *bf) in ath_tx_retry_clone() argument
4463 nbf = ath_buf_clone(sc, bf); in ath_tx_retry_clone()
4497 if (bf->bf_state.bfs_dobaw) in ath_tx_retry_clone()
4498 ath_tx_switch_baw_buf(sc, an, tid, bf, nbf); in ath_tx_retry_clone()
4501 ath_freebuf(sc, bf); in ath_tx_retry_clone()
4517 ath_tx_aggr_retry_unaggr(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_aggr_retry_unaggr() argument
4519 struct ieee80211_node *ni = bf->bf_node; in ath_tx_aggr_retry_unaggr()
4521 int tid = bf->bf_state.bfs_tid; in ath_tx_aggr_retry_unaggr()
4537 if ((bf->bf_state.bfs_retries < SWMAX_RETRIES) && in ath_tx_aggr_retry_unaggr()
4538 (bf->bf_flags & ATH_BUF_BUSY)) { in ath_tx_aggr_retry_unaggr()
4540 nbf = ath_tx_retry_clone(sc, an, atid, bf); in ath_tx_aggr_retry_unaggr()
4543 bf = nbf; in ath_tx_aggr_retry_unaggr()
4545 bf->bf_state.bfs_retries = SWMAX_RETRIES + 1; in ath_tx_aggr_retry_unaggr()
4548 if (bf->bf_state.bfs_retries >= SWMAX_RETRIES) { in ath_tx_aggr_retry_unaggr()
4551 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_aggr_retry_unaggr()
4555 if (bf->bf_state.bfs_dobaw) { in ath_tx_aggr_retry_unaggr()
4556 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_aggr_retry_unaggr()
4557 if (! bf->bf_state.bfs_addedbaw) in ath_tx_aggr_retry_unaggr()
4560 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_aggr_retry_unaggr()
4562 bf->bf_state.bfs_dobaw = 0; in ath_tx_aggr_retry_unaggr()
4574 ath_tx_default_comp(sc, bf, 0); in ath_tx_aggr_retry_unaggr()
4583 ath_tx_set_retry(sc, bf); in ath_tx_aggr_retry_unaggr()
4590 ATH_TID_INSERT_HEAD(atid, bf, bf_list); in ath_tx_aggr_retry_unaggr()
4607 ath_tx_retry_subframe(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_retry_subframe() argument
4610 struct ieee80211_node *ni = bf->bf_node; in ath_tx_retry_subframe()
4612 int tid = bf->bf_state.bfs_tid; in ath_tx_retry_subframe()
4618 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc); in ath_tx_retry_subframe()
4619 ath_hal_set11nburstduration(sc->sc_ah, bf->bf_desc, 0); in ath_tx_retry_subframe()
4631 if ((bf->bf_state.bfs_retries < SWMAX_RETRIES) && in ath_tx_retry_subframe()
4632 (bf->bf_flags & ATH_BUF_BUSY)) { in ath_tx_retry_subframe()
4634 nbf = ath_tx_retry_clone(sc, an, atid, bf); in ath_tx_retry_subframe()
4637 bf = nbf; in ath_tx_retry_subframe()
4639 bf->bf_state.bfs_retries = SWMAX_RETRIES + 1; in ath_tx_retry_subframe()
4642 if (bf->bf_state.bfs_retries >= SWMAX_RETRIES) { in ath_tx_retry_subframe()
4646 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_retry_subframe()
4647 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_retry_subframe()
4648 if (!bf->bf_state.bfs_addedbaw) in ath_tx_retry_subframe()
4651 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_retry_subframe()
4652 bf->bf_state.bfs_dobaw = 0; in ath_tx_retry_subframe()
4656 ath_tx_set_retry(sc, bf); in ath_tx_retry_subframe()
4658 bf->bf_next = NULL; /* Just to make sure */ in ath_tx_retry_subframe()
4661 bf->bf_state.bfs_aggr = 0; in ath_tx_retry_subframe()
4662 bf->bf_state.bfs_ndelim = 0; /* ??? needed? */ in ath_tx_retry_subframe()
4663 bf->bf_state.bfs_nframes = 1; in ath_tx_retry_subframe()
4665 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_retry_subframe()
4678 struct ath_buf *bf_next, *bf; in ath_tx_comp_aggr_error() local
4703 bf = bf_first; in ath_tx_comp_aggr_error()
4704 while (bf) { in ath_tx_comp_aggr_error()
4705 bf_next = bf->bf_next; in ath_tx_comp_aggr_error()
4706 bf->bf_next = NULL; /* Remove it from the aggr list */ in ath_tx_comp_aggr_error()
4708 if (ath_tx_retry_subframe(sc, bf, &bf_q)) { in ath_tx_comp_aggr_error()
4710 bf->bf_next = NULL; in ath_tx_comp_aggr_error()
4711 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list); in ath_tx_comp_aggr_error()
4713 bf = bf_next; in ath_tx_comp_aggr_error()
4717 while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) { in ath_tx_comp_aggr_error()
4718 TAILQ_REMOVE(&bf_q, bf, bf_list); in ath_tx_comp_aggr_error()
4719 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_comp_aggr_error()
4748 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_comp_aggr_error()
4749 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_comp_aggr_error()
4750 ath_tx_default_comp(sc, bf, 0); in ath_tx_comp_aggr_error()
4763 struct ath_buf *bf, *bf_next; in ath_tx_comp_cleanup_aggr() local
4775 bf = bf_first; in ath_tx_comp_cleanup_aggr()
4776 while (bf) { in ath_tx_comp_cleanup_aggr()
4778 if (bf->bf_state.bfs_dobaw) { in ath_tx_comp_cleanup_aggr()
4779 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_comp_cleanup_aggr()
4780 if (!bf->bf_state.bfs_addedbaw) in ath_tx_comp_cleanup_aggr()
4783 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_comp_cleanup_aggr()
4785 bf = bf->bf_next; in ath_tx_comp_cleanup_aggr()
4808 bf = bf_first; in ath_tx_comp_cleanup_aggr()
4809 while (bf) { in ath_tx_comp_cleanup_aggr()
4810 bf_next = bf->bf_next; in ath_tx_comp_cleanup_aggr()
4811 bf->bf_next = NULL; in ath_tx_comp_cleanup_aggr()
4812 ath_tx_default_comp(sc, bf, 1); in ath_tx_comp_cleanup_aggr()
4813 bf = bf_next; in ath_tx_comp_cleanup_aggr()
4839 struct ath_buf *bf, *bf_next; local
4906 TAILQ_FOREACH_SAFE(bf, &bf_cq, bf_list, bf_next) {
4907 if (bf->bf_state.bfs_addedbaw)
4909 if (bf->bf_state.bfs_dobaw) {
4910 ath_tx_update_baw(sc, an, atid, bf);
4911 if (!bf->bf_state.bfs_addedbaw)
4915 SEQNO(bf->bf_state.bfs_seqno));
4917 bf->bf_state.bfs_dobaw = 0;
5017 bf = bf_first;
5037 while (bf) {
5040 SEQNO(bf->bf_state.bfs_seqno));
5041 bf_next = bf->bf_next;
5042 bf->bf_next = NULL; /* Remove it from the aggr list */
5046 __func__, bf, SEQNO(bf->bf_state.bfs_seqno),
5051 ath_tx_update_baw(sc, an, atid, bf);
5052 bf->bf_state.bfs_dobaw = 0;
5053 if (!bf->bf_state.bfs_addedbaw)
5056 __func__, SEQNO(bf->bf_state.bfs_seqno));
5057 bf->bf_next = NULL;
5058 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
5061 if (ath_tx_retry_subframe(sc, bf, &bf_q)) {
5063 bf->bf_next = NULL;
5064 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
5068 bf = bf_next;
5111 while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) {
5112 TAILQ_REMOVE(&bf_q, bf, bf_list);
5113 ATH_TID_INSERT_HEAD(atid, bf, bf_list);
5145 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
5146 TAILQ_REMOVE(&bf_cq, bf, bf_list);
5147 ath_tx_default_comp(sc, bf, 0);
5159 ath_tx_aggr_comp_unaggr(struct ath_softc *sc, struct ath_buf *bf, int fail) argument
5161 struct ieee80211_node *ni = bf->bf_node;
5163 int tid = bf->bf_state.bfs_tid;
5172 ts = bf->bf_status.ds_txstat;
5180 if (fail == 0 && ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0))
5181 ath_tx_update_ratectrl(sc, ni, bf->bf_state.bfs_rc,
5182 &bf->bf_status.ds_txstat,
5183 bf->bf_state.bfs_pktlen,
5198 __func__, bf, bf->bf_state.bfs_tid, atid->hwq_depth,
5199 SEQNO(bf->bf_state.bfs_seqno));
5228 ath_tx_comp_cleanup_unaggr(sc, bf);
5252 freeframe = ath_tx_tid_filt_comp_single(sc, atid, bf);
5259 if (bf->bf_state.bfs_addedbaw)
5261 if (bf->bf_state.bfs_dobaw) {
5262 ath_tx_update_baw(sc, an, atid, bf);
5263 if (!bf->bf_state.bfs_addedbaw)
5266 __func__, SEQNO(bf->bf_state.bfs_seqno));
5268 bf->bf_state.bfs_dobaw = 0;
5290 ath_tx_default_comp(sc, bf, fail);
5305 ath_tx_aggr_retry_unaggr(sc, bf);
5311 __func__, tid, SEQNO(bf->bf_state.bfs_seqno));
5312 if (bf->bf_state.bfs_dobaw) {
5313 ath_tx_update_baw(sc, an, atid, bf);
5314 bf->bf_state.bfs_dobaw = 0;
5315 if (!bf->bf_state.bfs_addedbaw)
5318 __func__, SEQNO(bf->bf_state.bfs_seqno));
5342 ath_tx_default_comp(sc, bf, fail);
5347 ath_tx_aggr_comp(struct ath_softc *sc, struct ath_buf *bf, int fail) argument
5349 if (bf->bf_state.bfs_aggr)
5350 ath_tx_aggr_comp_aggr(sc, bf, fail);
5352 ath_tx_aggr_comp_unaggr(sc, bf, fail);
5364 struct ath_buf *bf; local
5398 bf = ATH_TID_FIRST(tid);
5399 if (bf == NULL) {
5407 if (! bf->bf_state.bfs_dobaw) {
5411 ATH_TID_REMOVE(tid, bf, bf_list);
5413 if (bf->bf_state.bfs_nframes > 1)
5417 bf->bf_state.bfs_aggr,
5418 bf->bf_state.bfs_nframes);
5426 bf->bf_state.bfs_aggr = 0;
5427 bf->bf_state.bfs_nframes = 1;
5430 ath_tx_update_clrdmask(sc, tid, bf);
5432 ath_tx_do_ratelookup(sc, bf);
5433 ath_tx_calc_duration(sc, bf);
5434 ath_tx_calc_protection(sc, bf);
5435 ath_tx_set_rtscts(sc, bf);
5436 ath_tx_rate_fill_rcflags(sc, bf);
5437 ath_tx_setds(sc, bf);
5438 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
5456 ath_tx_do_ratelookup(sc, bf);
5457 bf->bf_state.bfs_rc[3].rix = 0;
5458 bf->bf_state.bfs_rc[3].tries = 0;
5460 ath_tx_calc_duration(sc, bf);
5461 ath_tx_calc_protection(sc, bf);
5463 ath_tx_set_rtscts(sc, bf);
5464 ath_tx_rate_fill_rcflags(sc, bf);
5481 bf = TAILQ_FIRST(&bf_q);
5491 if (bf->bf_state.bfs_nframes == 1) {
5496 ath_tx_update_clrdmask(sc, tid, bf);
5498 bf->bf_state.bfs_aggr = 0;
5499 bf->bf_state.bfs_ndelim = 0;
5500 ath_tx_setds(sc, bf);
5501 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
5510 __func__, bf->bf_state.bfs_nframes,
5511 bf->bf_state.bfs_al);
5512 bf->bf_state.bfs_aggr = 1;
5513 sc->sc_aggr_stats.aggr_pkts[bf->bf_state.bfs_nframes]++;
5517 ath_tx_update_clrdmask(sc, tid, bf);
5522 ath_tx_calc_duration(sc, bf);
5523 ath_tx_calc_protection(sc, bf);
5530 ath_tx_set_rtscts(sc, bf);
5537 ath_tx_setds_11n(sc, bf);
5542 bf->bf_comp = ath_tx_aggr_comp;
5544 if (bf->bf_state.bfs_tid == IEEE80211_NONQOS_TID)
5553 ath_tx_leak_count_update(sc, tid, bf);
5556 ath_tx_handoff(sc, txq, bf);
5593 struct ath_buf *bf; local
5621 bf = ATH_TID_FIRST(tid);
5622 if (bf == NULL) {
5626 ATH_TID_REMOVE(tid, bf, bf_list);
5629 if (tid->tid != bf->bf_state.bfs_tid) {
5631 " tid %d\n", __func__, bf->bf_state.bfs_tid,
5635 bf->bf_comp = ath_tx_normal_comp;
5641 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK;
5644 ath_tx_update_clrdmask(sc, tid, bf);
5647 ath_tx_do_ratelookup(sc, bf);
5648 ath_tx_calc_duration(sc, bf);
5649 ath_tx_calc_protection(sc, bf);
5650 ath_tx_set_rtscts(sc, bf);
5651 ath_tx_rate_fill_rcflags(sc, bf);
5652 ath_tx_setds(sc, bf);
5659 ath_tx_leak_count_update(sc, tid, bf);
5666 ath_tx_handoff(sc, txq, bf);
5984 struct ath_buf *bf; local
6041 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
6042 TAILQ_REMOVE(&bf_cq, bf, bf_list);
6043 ath_tx_default_comp(sc, bf, 1);
6060 struct ath_buf *bf; local
6094 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
6095 TAILQ_REMOVE(&bf_cq, bf, bf_list);
6096 ath_tx_default_comp(sc, bf, 1);