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, bool 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, int tid, in ath_tx_do_ratelookup() argument
1387 if (! bf->bf_state.bfs_doratelookup) in ath_tx_do_ratelookup()
1391 bzero(bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_do_ratelookup()
1393 ATH_NODE_LOCK(ATH_NODE(bf->bf_node)); in ath_tx_do_ratelookup()
1394 ath_rate_findrate(sc, ATH_NODE(bf->bf_node), bf->bf_state.bfs_shpream, in ath_tx_do_ratelookup()
1398 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_do_ratelookup()
1399 bf->bf_state.bfs_rc[0].ratecode = rate; in ath_tx_do_ratelookup()
1400 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_do_ratelookup()
1402 if (bf->bf_state.bfs_ismrr && try0 != ATH_TXMAXTRY) in ath_tx_do_ratelookup()
1403 ath_rate_getxtxrates(sc, ATH_NODE(bf->bf_node), rix, in ath_tx_do_ratelookup()
1404 is_aggr, bf->bf_state.bfs_rc); in ath_tx_do_ratelookup()
1405 ATH_NODE_UNLOCK(ATH_NODE(bf->bf_node)); in ath_tx_do_ratelookup()
1409 bf->bf_state.bfs_try0 = try0; in ath_tx_do_ratelookup()
1410 bf->bf_state.bfs_txrate0 = rate; in ath_tx_do_ratelookup()
1411 bf->bf_state.bfs_rc_maxpktlen = maxpktlen; in ath_tx_do_ratelookup()
1419 struct ath_buf *bf) in ath_tx_update_clrdmask() argument
1421 struct ath_node *an = ATH_NODE(bf->bf_node); in ath_tx_update_clrdmask()
1426 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_update_clrdmask()
1506 struct ath_buf *bf) in ath_tx_xmit_normal() argument
1508 struct ath_node *an = ATH_NODE(bf->bf_node); in ath_tx_xmit_normal()
1509 struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid]; in ath_tx_xmit_normal()
1522 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_xmit_normal()
1525 ath_tx_do_ratelookup(sc, bf, tid->tid, bf->bf_state.bfs_pktlen, false); in ath_tx_xmit_normal()
1526 ath_tx_calc_duration(sc, bf); in ath_tx_xmit_normal()
1527 ath_tx_calc_protection(sc, bf); in ath_tx_xmit_normal()
1528 ath_tx_set_rtscts(sc, bf); in ath_tx_xmit_normal()
1529 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_xmit_normal()
1530 ath_tx_setds(sc, bf); in ath_tx_xmit_normal()
1536 bf->bf_comp = ath_tx_normal_comp; in ath_tx_xmit_normal()
1539 ath_tx_handoff(sc, txq, bf); in ath_tx_xmit_normal()
1556 struct ath_buf *bf, struct mbuf *m0, struct ath_txq *txq) in ath_tx_normal_setup() argument
1610 error = ath_tx_dmasetup(sc, bf, m0); in ath_tx_normal_setup()
1614 bf->bf_node = ni; /* NB: held reference */ in ath_tx_normal_setup()
1615 m0 = bf->bf_m; /* NB: may have changed */ in ath_tx_normal_setup()
1619 ds = bf->bf_desc; in ath_tx_normal_setup()
1700 bf->bf_state.bfs_doratelookup = 1; in ath_tx_normal_setup()
1800 bf->bf_flags |= ATH_BUF_TOA_PROBE; in ath_tx_normal_setup()
1861 bzero(&bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_normal_setup()
1867 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_normal_setup()
1868 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_normal_setup()
1869 bf->bf_state.bfs_rc[0].ratecode = txrate; in ath_tx_normal_setup()
1872 bf->bf_state.bfs_pktlen = pktlen; in ath_tx_normal_setup()
1873 bf->bf_state.bfs_hdrlen = hdrlen; in ath_tx_normal_setup()
1874 bf->bf_state.bfs_atype = atype; in ath_tx_normal_setup()
1875 bf->bf_state.bfs_txpower = ieee80211_get_node_txpower(ni); in ath_tx_normal_setup()
1876 bf->bf_state.bfs_txrate0 = txrate; in ath_tx_normal_setup()
1877 bf->bf_state.bfs_try0 = try0; in ath_tx_normal_setup()
1878 bf->bf_state.bfs_keyix = keyix; in ath_tx_normal_setup()
1879 bf->bf_state.bfs_txantenna = sc->sc_txantenna; in ath_tx_normal_setup()
1880 bf->bf_state.bfs_txflags = flags; in ath_tx_normal_setup()
1881 bf->bf_state.bfs_shpream = shortPreamble; in ath_tx_normal_setup()
1884 bf->bf_state.bfs_ctsrate0 = 0; /* ie, no hard-coded ctsrate */ in ath_tx_normal_setup()
1885 bf->bf_state.bfs_ctsrate = 0; /* calculated later */ in ath_tx_normal_setup()
1886 bf->bf_state.bfs_ctsduration = 0; in ath_tx_normal_setup()
1887 bf->bf_state.bfs_ismrr = ismrr; in ath_tx_normal_setup()
1905 struct ath_buf *bf, struct mbuf *m0) in ath_tx_start() argument
2005 bf->bf_state.bfs_tid = tid; in ath_tx_start()
2006 bf->bf_state.bfs_tx_queue = txq->axq_qnum; in ath_tx_start()
2007 bf->bf_state.bfs_pri = pri; in ath_tx_start()
2025 bf->bf_state.bfs_tx_queue = sc->sc_cabq->axq_qnum; in ath_tx_start()
2031 bf->bf_state.bfs_dobaw = 0; in ath_tx_start()
2048 seqno = ath_tx_tid_seqno_assign(sc, ni, bf, m0); in ath_tx_start()
2057 bf->bf_state.bfs_dobaw = 1; in ath_tx_start()
2065 bf->bf_state.bfs_seqno = M_SEQNO_GET(m0) << IEEE80211_SEQ_SEQ_SHIFT; in ath_tx_start()
2074 r = ath_tx_normal_setup(sc, ni, bf, m0, txq); in ath_tx_start()
2080 m0 = bf->bf_m; in ath_tx_start()
2110 "%s: bf=%p: mcastq: TX'ing\n", __func__, bf); in ath_tx_start()
2111 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2112 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2115 ath_tx_swq(sc, ni, txq, queue_to_head, bf); in ath_tx_start()
2117 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2118 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2125 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2131 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_start()
2132 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2140 struct ath_buf *bf, struct mbuf *m0, in ath_tx_raw_start() argument
2176 "ath_tx_raw_start: ni=%p, bf=%p, raw", ni, bf); in ath_tx_raw_start()
2219 bf->bf_state.bfs_dobaw = 0; in ath_tx_raw_start()
2221 error = ath_tx_dmasetup(sc, bf, m0); in ath_tx_raw_start()
2224 m0 = bf->bf_m; /* NB: may have changed */ in ath_tx_raw_start()
2227 bf->bf_node = ni; /* NB: held reference */ in ath_tx_raw_start()
2236 bf->bf_state.bfs_doprot = 1; in ath_tx_raw_start()
2268 bf->bf_flags |= ATH_BUF_TOA_PROBE; in ath_tx_raw_start()
2285 bf->bf_state.bfs_ctsrate0 = params->ibp_ctsrate; in ath_tx_raw_start()
2314 ds = bf->bf_desc; in ath_tx_raw_start()
2318 bf->bf_state.bfs_pktlen = pktlen; in ath_tx_raw_start()
2319 bf->bf_state.bfs_hdrlen = hdrlen; in ath_tx_raw_start()
2320 bf->bf_state.bfs_atype = atype; in ath_tx_raw_start()
2321 bf->bf_state.bfs_txpower = MIN(params->ibp_power, in ath_tx_raw_start()
2323 bf->bf_state.bfs_txrate0 = txrate; in ath_tx_raw_start()
2324 bf->bf_state.bfs_try0 = try0; in ath_tx_raw_start()
2325 bf->bf_state.bfs_keyix = keyix; in ath_tx_raw_start()
2326 bf->bf_state.bfs_txantenna = txantenna; in ath_tx_raw_start()
2327 bf->bf_state.bfs_txflags = flags; in ath_tx_raw_start()
2328 bf->bf_state.bfs_shpream = in ath_tx_raw_start()
2332 bf->bf_state.bfs_tid = WME_AC_TO_TID(pri); in ath_tx_raw_start()
2333 bf->bf_state.bfs_tx_queue = sc->sc_ac2q[pri]->axq_qnum; in ath_tx_raw_start()
2334 bf->bf_state.bfs_pri = pri; in ath_tx_raw_start()
2337 bf->bf_state.bfs_ctsrate = 0; in ath_tx_raw_start()
2338 bf->bf_state.bfs_ctsduration = 0; in ath_tx_raw_start()
2339 bf->bf_state.bfs_ismrr = ismrr; in ath_tx_raw_start()
2342 bzero(&bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_raw_start()
2344 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_raw_start()
2345 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_raw_start()
2346 bf->bf_state.bfs_rc[0].ratecode = txrate; in ath_tx_raw_start()
2352 bf->bf_state.bfs_rc[1].rix = rix; in ath_tx_raw_start()
2353 bf->bf_state.bfs_rc[1].tries = params->ibp_try1; in ath_tx_raw_start()
2356 bf->bf_state.bfs_rc[2].rix = rix; in ath_tx_raw_start()
2357 bf->bf_state.bfs_rc[2].tries = params->ibp_try2; in ath_tx_raw_start()
2360 bf->bf_state.bfs_rc[3].rix = rix; in ath_tx_raw_start()
2361 bf->bf_state.bfs_rc[3].tries = params->ibp_try3; in ath_tx_raw_start()
2367 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_raw_start()
2384 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2391 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2395 ath_tx_swq(sc, ni, sc->sc_ac2q[pri], queue_to_head, bf); in ath_tx_raw_start()
2397 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2398 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2402 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2408 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_raw_start()
2409 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2425 struct ath_buf *bf; in ath_raw_xmit() local
2476 bf = ath_getbuf(sc, ATH_BUFTYPE_MGMT); in ath_raw_xmit()
2477 if (bf == NULL) { in ath_raw_xmit()
2484 m, params, bf); in ath_raw_xmit()
2491 if (ath_tx_start(sc, ni, bf, m)) { in ath_raw_xmit()
2500 if (ath_tx_raw_start(sc, ni, bf, m, params)) { in ath_raw_xmit()
2533 bf); in ath_raw_xmit()
2535 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()
2725 bf, in ath_tx_addto_baw()
2726 SEQNO(bf->bf_state.bfs_seqno) in ath_tx_addto_baw()
2729 tid->tx_buf[cindex] = bf; in ath_tx_addto_baw()
2796 struct ath_tid *tid, const struct ath_buf *bf) in ath_tx_update_baw() argument
2800 int seqno = SEQNO(bf->bf_state.bfs_seqno); in ath_tx_update_baw()
2824 if (tid->tx_buf[cindex] != bf) { in ath_tx_update_baw()
2827 __func__, bf, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_update_baw()
2847 struct ath_buf *bf) in ath_tx_leak_count_update() argument
2854 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_leak_count_update()
2878 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, in ath_tx_leak_count_update()
2985 struct ath_buf *bf, struct mbuf *m0) in ath_tx_tid_seqno_assign() argument
3049 struct ath_txq *txq, struct ath_buf *bf) in ath_tx_xmit_aggr() argument
3051 struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid]; in ath_tx_xmit_aggr()
3060 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_xmit_aggr()
3066 if (bf->bf_state.bfs_dobaw && in ath_tx_xmit_aggr()
3068 SEQNO(bf->bf_state.bfs_seqno)))) { in ath_tx_xmit_aggr()
3069 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_xmit_aggr()
3084 if (bf->bf_state.bfs_aggr != 0 || bf->bf_state.bfs_nframes > 1) { in ath_tx_xmit_aggr()
3087 bf->bf_state.bfs_aggr, bf->bf_state.bfs_nframes); in ath_tx_xmit_aggr()
3088 bf->bf_state.bfs_aggr = 0; in ath_tx_xmit_aggr()
3089 bf->bf_state.bfs_nframes = 1; in ath_tx_xmit_aggr()
3093 ath_tx_update_clrdmask(sc, tid, bf); in ath_tx_xmit_aggr()
3096 ath_tx_do_ratelookup(sc, bf, tid->tid, bf->bf_state.bfs_pktlen, 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()
3223 bf = ATH_TID_FIRST(atid); in ath_tx_swq()
3224 ATH_TID_REMOVE(atid, bf, bf_list); in ath_tx_swq()
3231 bf->bf_state.bfs_aggr = 0; in ath_tx_swq()
3232 bf->bf_state.bfs_nframes = 1; in ath_tx_swq()
3235 ath_tx_xmit_aggr(sc, an, txq, bf); in ath_tx_swq()
3265 ath_tx_update_clrdmask(sc, atid, bf); in ath_tx_swq()
3272 ath_tx_leak_count_update(sc, atid, bf); in ath_tx_swq()
3277 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_swq()
3281 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3431 struct ath_buf *bf) in ath_tx_tid_filt_addbuf() argument
3440 DPRINTF(sc, ATH_DEBUG_SW_TX_FILT, "%s: bf=%p\n", __func__, bf); in ath_tx_tid_filt_addbuf()
3443 ath_tx_set_retry(sc, bf); in ath_tx_tid_filt_addbuf()
3446 ATH_TID_FILT_INSERT_TAIL(tid, bf, bf_list); in ath_tx_tid_filt_addbuf()
3456 struct ath_buf *bf) in ath_tx_tid_filt_comp_buf() argument
3469 ath_tx_tid_filt_addbuf(sc, tid, bf); in ath_tx_tid_filt_comp_buf()
3482 struct ath_buf *bf; in ath_tx_tid_filt_comp_complete() local
3501 while ((bf = ATH_TID_FILT_LAST(tid, ath_bufhead_s)) != NULL) { in ath_tx_tid_filt_comp_complete()
3502 ATH_TID_FILT_REMOVE(tid, bf, bf_list); in ath_tx_tid_filt_comp_complete()
3503 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_tid_filt_comp_complete()
3524 struct ath_buf *bf) in ath_tx_tid_filt_comp_single() argument
3534 if (bf->bf_state.bfs_retries > SWMAX_RETRIES) { in ath_tx_tid_filt_comp_single()
3539 bf, in ath_tx_tid_filt_comp_single()
3540 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_single()
3549 if (bf->bf_flags & ATH_BUF_BUSY) { in ath_tx_tid_filt_comp_single()
3550 nbf = ath_tx_retry_clone(sc, tid->an, tid, bf); in ath_tx_tid_filt_comp_single()
3553 __func__, bf, nbf); in ath_tx_tid_filt_comp_single()
3555 nbf = bf; in ath_tx_tid_filt_comp_single()
3561 __func__, bf); in ath_tx_tid_filt_comp_single()
3577 struct ath_buf *bf, *bf_next, *nbf; in ath_tx_tid_filt_comp_aggr() local
3581 bf = bf_first; in ath_tx_tid_filt_comp_aggr()
3582 while (bf) { in ath_tx_tid_filt_comp_aggr()
3583 bf_next = bf->bf_next; in ath_tx_tid_filt_comp_aggr()
3584 bf->bf_next = NULL; /* Remove it from the aggr list */ in ath_tx_tid_filt_comp_aggr()
3589 if (bf->bf_state.bfs_retries > SWMAX_RETRIES) { in ath_tx_tid_filt_comp_aggr()
3595 bf, in ath_tx_tid_filt_comp_aggr()
3596 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3597 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_tid_filt_comp_aggr()
3601 if (bf->bf_flags & ATH_BUF_BUSY) { in ath_tx_tid_filt_comp_aggr()
3602 nbf = ath_tx_retry_clone(sc, tid->an, tid, bf); in ath_tx_tid_filt_comp_aggr()
3605 __func__, tid->tid, bf, nbf, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3607 nbf = bf; in ath_tx_tid_filt_comp_aggr()
3617 __func__, tid->tid, bf, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3618 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_tid_filt_comp_aggr()
3623 bf = bf_next; in ath_tx_tid_filt_comp_aggr()
3809 struct ath_tid *tid, ath_bufhead *bf_cq, struct ath_buf *bf) in ath_tx_tid_drain_pkt() argument
3819 bf->bf_state.bfs_dobaw) { in ath_tx_tid_drain_pkt()
3825 if (bf->bf_state.bfs_retries > 0) { in ath_tx_tid_drain_pkt()
3826 ath_tx_update_baw(sc, an, tid, bf); in ath_tx_tid_drain_pkt()
3827 bf->bf_state.bfs_dobaw = 0; in ath_tx_tid_drain_pkt()
3833 if (! bf->bf_state.bfs_addedbaw) in ath_tx_tid_drain_pkt()
3836 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_drain_pkt()
3841 bf->bf_next = NULL; in ath_tx_tid_drain_pkt()
3844 TAILQ_INSERT_TAIL(bf_cq, bf, bf_list); in ath_tx_tid_drain_pkt()
3849 const char *pfx, struct ath_tid *tid, struct ath_buf *bf) in ath_tx_tid_drain_print() argument
3865 bf, in ath_tx_tid_drain_print()
3866 bf->bf_state.bfs_addedbaw, in ath_tx_tid_drain_print()
3867 bf->bf_state.bfs_dobaw, in ath_tx_tid_drain_print()
3868 SEQNO(bf->bf_state.bfs_seqno), in ath_tx_tid_drain_print()
3869 bf->bf_state.bfs_retries); in ath_tx_tid_drain_print()
3876 bf, in ath_tx_tid_drain_print()
3887 bf, in ath_tx_tid_drain_print()
3910 mtod(bf->bf_m, const uint8_t *), in ath_tx_tid_drain_print()
3911 bf->bf_m->m_len, 0, -1); in ath_tx_tid_drain_print()
3933 struct ath_buf *bf; in ath_tx_tid_drain() local
3945 bf = ATH_TID_FIRST(tid); in ath_tx_tid_drain()
3946 if (bf == NULL) { in ath_tx_tid_drain()
3951 ath_tx_tid_drain_print(sc, an, "norm", tid, bf); in ath_tx_tid_drain()
3955 ATH_TID_REMOVE(tid, bf, bf_list); in ath_tx_tid_drain()
3956 ath_tx_tid_drain_pkt(sc, an, tid, bf_cq, bf); in ath_tx_tid_drain()
3962 bf = ATH_TID_FILT_FIRST(tid); in ath_tx_tid_drain()
3963 if (bf == NULL) in ath_tx_tid_drain()
3967 ath_tx_tid_drain_print(sc, an, "filt", tid, bf); in ath_tx_tid_drain()
3971 ATH_TID_FILT_REMOVE(tid, bf, bf_list); in ath_tx_tid_drain()
3972 ath_tx_tid_drain_pkt(sc, an, tid, bf_cq, bf); in ath_tx_tid_drain()
4093 struct ath_buf *bf; in ath_tx_node_flush() local
4134 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_node_flush()
4135 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_node_flush()
4136 ath_tx_default_comp(sc, bf, 0); in ath_tx_node_flush()
4148 struct ath_buf *bf; in ath_tx_txq_drain() local
4165 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_txq_drain()
4166 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_txq_drain()
4167 ath_tx_default_comp(sc, bf, 0); in ath_tx_txq_drain()
4188 ath_tx_normal_comp(struct ath_softc *sc, struct ath_buf *bf, int fail) in ath_tx_normal_comp() argument
4190 struct ieee80211_node *ni = bf->bf_node; in ath_tx_normal_comp()
4192 int tid = bf->bf_state.bfs_tid; in ath_tx_normal_comp()
4194 struct ath_tx_status *ts = &bf->bf_status.ds_txstat; in ath_tx_normal_comp()
4200 __func__, bf, fail, atid->hwq_depth - 1); in ath_tx_normal_comp()
4216 ath_tx_tid_filt_comp_buf(sc, atid, bf); in ath_tx_normal_comp()
4257 if (fail == 0 && ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)) in ath_tx_normal_comp()
4258 ath_tx_update_ratectrl(sc, ni, bf->bf_state.bfs_rc, in ath_tx_normal_comp()
4260 bf->bf_state.bfs_pktlen, in ath_tx_normal_comp()
4261 bf->bf_state.bfs_pktlen, in ath_tx_normal_comp()
4264 ath_tx_default_comp(sc, bf, fail); in ath_tx_normal_comp()
4275 ath_tx_comp_cleanup_unaggr(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_comp_cleanup_unaggr() argument
4277 struct ieee80211_node *ni = bf->bf_node; in ath_tx_comp_cleanup_unaggr()
4279 int tid = bf->bf_state.bfs_tid; in ath_tx_comp_cleanup_unaggr()
4289 if (bf->bf_state.bfs_dobaw) { in ath_tx_comp_cleanup_unaggr()
4290 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_comp_cleanup_unaggr()
4291 if (!bf->bf_state.bfs_addedbaw) in ath_tx_comp_cleanup_unaggr()
4294 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_comp_cleanup_unaggr()
4306 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
4701 bf = bf_first; in ath_tx_comp_aggr_error()
4702 while (bf) { in ath_tx_comp_aggr_error()
4703 bf_next = bf->bf_next; in ath_tx_comp_aggr_error()
4704 bf->bf_next = NULL; /* Remove it from the aggr list */ in ath_tx_comp_aggr_error()
4706 if (ath_tx_retry_subframe(sc, bf, &bf_q)) { in ath_tx_comp_aggr_error()
4708 bf->bf_next = NULL; in ath_tx_comp_aggr_error()
4709 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list); in ath_tx_comp_aggr_error()
4711 bf = bf_next; in ath_tx_comp_aggr_error()
4715 while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) { in ath_tx_comp_aggr_error()
4716 TAILQ_REMOVE(&bf_q, bf, bf_list); in ath_tx_comp_aggr_error()
4717 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_comp_aggr_error()
4746 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_comp_aggr_error()
4747 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_comp_aggr_error()
4748 ath_tx_default_comp(sc, bf, 0); in ath_tx_comp_aggr_error()
4761 struct ath_buf *bf, *bf_next; in ath_tx_comp_cleanup_aggr() local
4773 bf = bf_first; in ath_tx_comp_cleanup_aggr()
4774 while (bf) { in ath_tx_comp_cleanup_aggr()
4776 if (bf->bf_state.bfs_dobaw) { in ath_tx_comp_cleanup_aggr()
4777 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_comp_cleanup_aggr()
4778 if (!bf->bf_state.bfs_addedbaw) in ath_tx_comp_cleanup_aggr()
4781 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_comp_cleanup_aggr()
4783 bf = bf->bf_next; in ath_tx_comp_cleanup_aggr()
4806 bf = bf_first; in ath_tx_comp_cleanup_aggr()
4807 while (bf) { in ath_tx_comp_cleanup_aggr()
4808 bf_next = bf->bf_next; in ath_tx_comp_cleanup_aggr()
4809 bf->bf_next = NULL; in ath_tx_comp_cleanup_aggr()
4810 ath_tx_default_comp(sc, bf, 1); in ath_tx_comp_cleanup_aggr()
4811 bf = bf_next; in ath_tx_comp_cleanup_aggr()
4837 struct ath_buf *bf, *bf_next; local
4907 TAILQ_FOREACH_SAFE(bf, &bf_cq, bf_list, bf_next) {
4908 if (bf->bf_state.bfs_addedbaw)
4910 if (bf->bf_state.bfs_dobaw) {
4911 ath_tx_update_baw(sc, an, atid, bf);
4912 if (!bf->bf_state.bfs_addedbaw)
4916 SEQNO(bf->bf_state.bfs_seqno));
4918 bf->bf_state.bfs_dobaw = 0;
5022 bf = bf_first;
5042 while (bf) {
5045 SEQNO(bf->bf_state.bfs_seqno));
5046 bf_next = bf->bf_next;
5047 bf->bf_next = NULL; /* Remove it from the aggr list */
5051 __func__, bf, SEQNO(bf->bf_state.bfs_seqno),
5056 ath_tx_update_baw(sc, an, atid, bf);
5057 bf->bf_state.bfs_dobaw = 0;
5058 if (!bf->bf_state.bfs_addedbaw)
5061 __func__, SEQNO(bf->bf_state.bfs_seqno));
5062 bf->bf_next = NULL;
5063 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
5066 if (ath_tx_retry_subframe(sc, bf, &bf_q)) {
5068 bf->bf_next = NULL;
5069 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
5073 bf = bf_next;
5117 while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) {
5118 TAILQ_REMOVE(&bf_q, bf, bf_list);
5119 ATH_TID_INSERT_HEAD(atid, bf, bf_list);
5151 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
5152 TAILQ_REMOVE(&bf_cq, bf, bf_list);
5153 ath_tx_default_comp(sc, bf, 0);
5165 ath_tx_aggr_comp_unaggr(struct ath_softc *sc, struct ath_buf *bf, int fail) argument
5167 struct ieee80211_node *ni = bf->bf_node;
5169 int tid = bf->bf_state.bfs_tid;
5178 ts = bf->bf_status.ds_txstat;
5186 if (fail == 0 && ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0))
5187 ath_tx_update_ratectrl(sc, ni, bf->bf_state.bfs_rc,
5188 &bf->bf_status.ds_txstat,
5189 bf->bf_state.bfs_pktlen,
5190 bf->bf_state.bfs_pktlen,
5205 __func__, bf, bf->bf_state.bfs_tid, atid->hwq_depth,
5206 SEQNO(bf->bf_state.bfs_seqno));
5235 ath_tx_comp_cleanup_unaggr(sc, bf);
5259 freeframe = ath_tx_tid_filt_comp_single(sc, atid, bf);
5266 if (bf->bf_state.bfs_addedbaw)
5268 if (bf->bf_state.bfs_dobaw) {
5269 ath_tx_update_baw(sc, an, atid, bf);
5270 if (!bf->bf_state.bfs_addedbaw)
5273 __func__, SEQNO(bf->bf_state.bfs_seqno));
5275 bf->bf_state.bfs_dobaw = 0;
5297 ath_tx_default_comp(sc, bf, fail);
5312 ath_tx_aggr_retry_unaggr(sc, bf);
5318 __func__, tid, SEQNO(bf->bf_state.bfs_seqno));
5319 if (bf->bf_state.bfs_dobaw) {
5320 ath_tx_update_baw(sc, an, atid, bf);
5321 bf->bf_state.bfs_dobaw = 0;
5322 if (!bf->bf_state.bfs_addedbaw)
5325 __func__, SEQNO(bf->bf_state.bfs_seqno));
5349 ath_tx_default_comp(sc, bf, fail);
5354 ath_tx_aggr_comp(struct ath_softc *sc, struct ath_buf *bf, int fail) argument
5356 if (bf->bf_state.bfs_aggr)
5357 ath_tx_aggr_comp_aggr(sc, bf, fail);
5359 ath_tx_aggr_comp_unaggr(sc, bf, fail);
5374 struct ath_buf *bf; local
5387 TAILQ_FOREACH(bf, &tid->tid_q, bf_list) {
5395 SEQNO(bf->bf_state.bfs_seqno)))) {
5400 if (! bf->bf_state.bfs_dobaw) {
5404 nbytes += bf->bf_state.bfs_pktlen;
5430 struct ath_buf *bf; local
5465 bf = ATH_TID_FIRST(tid);
5466 if (bf == NULL) {
5474 if (! bf->bf_state.bfs_dobaw) {
5478 ATH_TID_REMOVE(tid, bf, bf_list);
5480 if (bf->bf_state.bfs_nframes > 1)
5484 bf->bf_state.bfs_aggr,
5485 bf->bf_state.bfs_nframes);
5493 bf->bf_state.bfs_aggr = 0;
5494 bf->bf_state.bfs_nframes = 1;
5497 ath_tx_update_clrdmask(sc, tid, bf);
5499 ath_tx_do_ratelookup(sc, bf, tid->tid,
5500 bf->bf_state.bfs_pktlen, false);
5501 ath_tx_calc_duration(sc, bf);
5502 ath_tx_calc_protection(sc, bf);
5503 ath_tx_set_rtscts(sc, bf);
5504 ath_tx_rate_fill_rcflags(sc, bf);
5505 ath_tx_setds(sc, bf);
5506 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
5522 ath_tx_do_ratelookup(sc, bf, tid->tid, swq_pktbytes, true);
5529 ath_tx_calc_duration(sc, bf);
5530 ath_tx_calc_protection(sc, bf);
5532 ath_tx_set_rtscts(sc, bf);
5533 ath_tx_rate_fill_rcflags(sc, bf);
5550 bf = TAILQ_FIRST(&bf_q);
5560 if (bf->bf_state.bfs_nframes == 1) {
5565 ath_tx_update_clrdmask(sc, tid, bf);
5567 bf->bf_state.bfs_aggr = 0;
5568 bf->bf_state.bfs_ndelim = 0;
5569 ath_tx_setds(sc, bf);
5570 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
5579 __func__, bf->bf_state.bfs_nframes,
5580 bf->bf_state.bfs_al);
5581 bf->bf_state.bfs_aggr = 1;
5582 sc->sc_aggr_stats.aggr_pkts[bf->bf_state.bfs_nframes]++;
5586 ath_tx_update_clrdmask(sc, tid, bf);
5591 ath_tx_calc_duration(sc, bf);
5592 ath_tx_calc_protection(sc, bf);
5599 ath_tx_set_rtscts(sc, bf);
5606 ath_tx_setds_11n(sc, bf);
5610 bf->bf_comp = ath_tx_aggr_comp;
5612 if (bf->bf_state.bfs_tid == IEEE80211_NONQOS_TID)
5621 ath_tx_leak_count_update(sc, tid, bf);
5624 ath_tx_handoff(sc, txq, bf);
5661 struct ath_buf *bf; local
5688 bf = ATH_TID_FIRST(tid);
5689 if (bf == NULL) {
5693 ATH_TID_REMOVE(tid, bf, bf_list);
5696 if (tid->tid != bf->bf_state.bfs_tid) {
5698 " tid %d\n", __func__, bf->bf_state.bfs_tid,
5702 bf->bf_comp = ath_tx_normal_comp;
5708 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK;
5711 ath_tx_update_clrdmask(sc, tid, bf);
5714 ath_tx_do_ratelookup(sc, bf, tid->tid,
5715 bf->bf_state.bfs_pktlen, false);
5716 ath_tx_calc_duration(sc, bf);
5717 ath_tx_calc_protection(sc, bf);
5718 ath_tx_set_rtscts(sc, bf);
5719 ath_tx_rate_fill_rcflags(sc, bf);
5720 ath_tx_setds(sc, bf);
5727 ath_tx_leak_count_update(sc, tid, bf);
5734 ath_tx_handoff(sc, txq, bf);
6050 struct ath_buf *bf; local
6107 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
6108 TAILQ_REMOVE(&bf_cq, bf, bf_list);
6109 ath_tx_default_comp(sc, bf, 1);
6126 struct ath_buf *bf; local
6160 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
6161 TAILQ_REMOVE(&bf_cq, bf, bf_list);
6162 ath_tx_default_comp(sc, bf, 1);