Lines Matching refs:bf

128     struct ieee80211_node *ni, struct ath_buf *bf, struct mbuf *m0);
133 struct ath_tid *tid, struct ath_buf *bf);
139 struct ath_buf *bf; in ath_tx_alq_post() local
144 bf = bf_first; in ath_tx_alq_post()
146 while (bf != NULL) { in ath_tx_alq_post()
148 if (bf->bf_nseg == 0) in ath_tx_alq_post()
150 n = ((bf->bf_nseg - 1) / sc->sc_tx_nmaps) + 1; in ath_tx_alq_post()
151 for (i = 0, ds = (const char *) bf->bf_desc; in ath_tx_alq_post()
159 bf = bf->bf_next; in ath_tx_alq_post()
196 ath_tx_set_retry(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_set_retry() argument
200 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_set_retry()
202 if (bf->bf_state.bfs_isretried == 0) { in ath_tx_set_retry()
204 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, in ath_tx_set_retry()
207 bf->bf_state.bfs_isretried = 1; in ath_tx_set_retry()
208 bf->bf_state.bfs_retries ++; in ath_tx_set_retry()
257 struct ath_buf *bf, *next; in ath_txfrag_cleanup() local
261 TAILQ_FOREACH_SAFE(bf, frags, bf_list, next) { in ath_txfrag_cleanup()
263 TAILQ_REMOVE(frags, bf, bf_list); in ath_txfrag_cleanup()
264 ath_returnbuf_head(sc, bf); in ath_txfrag_cleanup()
279 struct ath_buf *bf; in ath_txfrag_setup() local
284 bf = _ath_getbuf_locked(sc, ATH_BUFTYPE_NORMAL); in ath_txfrag_setup()
285 if (bf == NULL) { /* out of buffers, cleanup */ in ath_txfrag_setup()
292 TAILQ_INSERT_TAIL(frags, bf, bf_list); in ath_txfrag_setup()
300 ath_tx_dmasetup(struct ath_softc *sc, struct ath_buf *bf, struct mbuf *m0) in ath_tx_dmasetup() argument
309 error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0, in ath_tx_dmasetup()
310 bf->bf_segs, &bf->bf_nseg, in ath_tx_dmasetup()
314 bf->bf_nseg = ATH_MAX_SCATTER + 1; in ath_tx_dmasetup()
325 if (bf->bf_nseg > ATH_MAX_SCATTER) { /* too many desc's, linearize */ in ath_tx_dmasetup()
334 error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0, in ath_tx_dmasetup()
335 bf->bf_segs, &bf->bf_nseg, in ath_tx_dmasetup()
342 KASSERT(bf->bf_nseg <= ATH_MAX_SCATTER, in ath_tx_dmasetup()
343 ("too many segments after defrag; nseg %u", bf->bf_nseg)); in ath_tx_dmasetup()
344 } else if (bf->bf_nseg == 0) { /* null packet, discard */ in ath_tx_dmasetup()
351 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE); in ath_tx_dmasetup()
352 bf->bf_m = m0; in ath_tx_dmasetup()
364 struct ath_buf *bf, bool is_aggr, int is_first_subframe, in ath_tx_chaindesclist() argument
396 ds = (char *) bf->bf_desc; in ath_tx_chaindesclist()
400 for (i = 0; i < bf->bf_nseg; i++) { in ath_tx_chaindesclist()
401 bufAddrList[bp] = bf->bf_segs[i].ds_addr; in ath_tx_chaindesclist()
402 segLenList[bp] = bf->bf_segs[i].ds_len; in ath_tx_chaindesclist()
409 if ((i != bf->bf_nseg - 1) && (bp < numTxMaps)) in ath_tx_chaindesclist()
417 if (i == bf->bf_nseg - 1) in ath_tx_chaindesclist()
421 bf->bf_daddr + dd->dd_descsize * (dsp + 1)); in ath_tx_chaindesclist()
432 , bf->bf_descid /* XXX desc id */ in ath_tx_chaindesclist()
433 , bf->bf_state.bfs_tx_queue in ath_tx_chaindesclist()
435 , i == bf->bf_nseg - 1 /* last segment */ in ath_tx_chaindesclist()
469 bf->bf_state.bfs_ndelim); in ath_tx_chaindesclist()
472 bf->bf_lastds = (struct ath_desc *) ds; in ath_tx_chaindesclist()
486 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE); in ath_tx_chaindesclist()
506 struct ath_buf *bf) in ath_tx_set_ratectrl() argument
508 struct ath_rc_series *rc = bf->bf_state.bfs_rc; in ath_tx_set_ratectrl()
511 if (! bf->bf_state.bfs_ismrr) in ath_tx_set_ratectrl()
518 else if (bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) { in ath_tx_set_ratectrl()
533 ath_buf_set_rate(sc, ni, bf); in ath_tx_set_ratectrl()
535 ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc in ath_tx_set_ratectrl()
552 struct ath_buf *bf, *bf_prev = NULL; in ath_tx_setds_11n() local
559 bf = bf_first; in ath_tx_setds_11n()
561 if (bf->bf_state.bfs_txrate0 == 0) in ath_tx_setds_11n()
563 __func__, bf, 0); in ath_tx_setds_11n()
564 if (bf->bf_state.bfs_rc[0].ratecode == 0) in ath_tx_setds_11n()
566 __func__, bf, 0); in ath_tx_setds_11n()
572 while (bf != NULL) { in ath_tx_setds_11n()
575 __func__, bf, bf->bf_nseg, bf->bf_state.bfs_pktlen, in ath_tx_setds_11n()
576 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_setds_11n()
582 ath_hal_setuptxdesc(sc->sc_ah, bf->bf_desc in ath_tx_setds_11n()
583 , bf->bf_state.bfs_pktlen /* packet length */ in ath_tx_setds_11n()
584 , bf->bf_state.bfs_hdrlen /* header length */ in ath_tx_setds_11n()
585 , bf->bf_state.bfs_atype /* Atheros packet type */ in ath_tx_setds_11n()
586 , bf->bf_state.bfs_txpower /* txpower */ in ath_tx_setds_11n()
587 , bf->bf_state.bfs_txrate0 in ath_tx_setds_11n()
588 , bf->bf_state.bfs_try0 /* series 0 rate/tries */ in ath_tx_setds_11n()
589 , bf->bf_state.bfs_keyix /* key cache index */ in ath_tx_setds_11n()
590 , bf->bf_state.bfs_txantenna /* antenna mode */ in ath_tx_setds_11n()
591 , bf->bf_state.bfs_txflags | HAL_TXDESC_INTREQ /* flags */ in ath_tx_setds_11n()
592 , bf->bf_state.bfs_ctsrate /* rts/cts rate */ in ath_tx_setds_11n()
593 , bf->bf_state.bfs_ctsduration /* rts/cts duration */ in ath_tx_setds_11n()
600 if (bf == bf_first) { in ath_tx_setds_11n()
604 ath_tx_set_ratectrl(sc, bf->bf_node, bf); in ath_tx_setds_11n()
611 ath_tx_chaindesclist(sc, ds0, bf, in ath_tx_setds_11n()
613 !! (bf == bf_first), /* is_first_subframe */ in ath_tx_setds_11n()
614 !! (bf->bf_next == NULL) /* is_last_subframe */ in ath_tx_setds_11n()
617 if (bf == bf_first) { in ath_tx_setds_11n()
624 bf->bf_state.bfs_al, in ath_tx_setds_11n()
625 bf->bf_state.bfs_ndelim); in ath_tx_setds_11n()
634 bf->bf_daddr); in ath_tx_setds_11n()
637 bf_prev = bf; in ath_tx_setds_11n()
638 bf = bf->bf_next; in ath_tx_setds_11n()
698 struct ath_buf *bf) in ath_tx_handoff_mcast() argument
702 KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0, in ath_tx_handoff_mcast()
703 ("%s: busy status 0x%x", __func__, bf->bf_flags)); in ath_tx_handoff_mcast()
709 if (bf->bf_state.bfs_tx_queue != sc->sc_cabq->axq_qnum) { in ath_tx_handoff_mcast()
712 __func__, bf, bf->bf_state.bfs_tx_queue, in ath_tx_handoff_mcast()
730 bf->bf_daddr); in ath_tx_handoff_mcast()
732 ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); in ath_tx_handoff_mcast()
741 struct ath_buf *bf) in ath_tx_handoff_hw() argument
755 KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0, in ath_tx_handoff_hw()
756 ("%s: busy status 0x%x", __func__, bf->bf_flags)); in ath_tx_handoff_hw()
802 ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); in ath_tx_handoff_hw()
807 bf, in ath_tx_handoff_hw()
817 *txq->axq_link = bf->bf_daddr; in ath_tx_handoff_hw()
821 (caddr_t)bf->bf_daddr, bf->bf_desc, in ath_tx_handoff_hw()
827 (caddr_t)bf->bf_daddr, bf->bf_desc, in ath_tx_handoff_hw()
828 bf->bf_lastds); in ath_tx_handoff_hw()
864 if (bf->bf_state.bfs_tx_queue != txq->axq_qnum) { in ath_tx_handoff_hw()
867 __func__, bf, bf->bf_state.bfs_tx_queue, in ath_tx_handoff_hw()
874 if (bf->bf_state.bfs_aggr) in ath_tx_handoff_hw()
880 ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link); in ath_tx_handoff_hw()
911 struct ath_buf *bf, *bf_last; in ath_legacy_tx_dma_restart() local
916 bf = TAILQ_FIRST(&txq->axq_q); in ath_legacy_tx_dma_restart()
919 if (bf == NULL) in ath_legacy_tx_dma_restart()
926 bf, in ath_legacy_tx_dma_restart()
928 (uint32_t) bf->bf_daddr); in ath_legacy_tx_dma_restart()
944 ath_hal_puttxbuf(sc->sc_ah, txq->axq_qnum, bf->bf_daddr); in ath_legacy_tx_dma_restart()
959 struct ath_buf *bf) in ath_legacy_xmit_handoff() argument
965 ath_tx_alq_post(sc, bf); in ath_legacy_xmit_handoff()
969 ath_tx_handoff_mcast(sc, txq, bf); in ath_legacy_xmit_handoff()
971 ath_tx_handoff_hw(sc, txq, bf); in ath_legacy_xmit_handoff()
1044 ath_tx_calc_protection(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_calc_protection() argument
1053 flags = bf->bf_state.bfs_txflags; in ath_tx_calc_protection()
1054 rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_calc_protection()
1055 shortPreamble = bf->bf_state.bfs_shpream; in ath_tx_calc_protection()
1056 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_calc_protection()
1059 if (bf->bf_flags & ATH_BUF_TOA_PROBE) { in ath_tx_calc_protection()
1062 bf->bf_state.bfs_doprot = 0; in ath_tx_calc_protection()
1074 bf->bf_state.bfs_doprot = 1; in ath_tx_calc_protection()
1107 bf->bf_state.bfs_txflags = flags; in ath_tx_calc_protection()
1117 ath_tx_calc_duration(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_calc_duration() argument
1125 int isfrag = bf->bf_m->m_flags & M_FRAG; in ath_tx_calc_duration()
1127 flags = bf->bf_state.bfs_txflags; in ath_tx_calc_duration()
1128 rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_calc_duration()
1129 shortPreamble = bf->bf_state.bfs_shpream; in ath_tx_calc_duration()
1130 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_calc_duration()
1156 bf->bf_nextfraglen, in ath_tx_calc_duration()
1166 bf->bf_state.bfs_ismrr = 0; in ath_tx_calc_duration()
1167 bf->bf_state.bfs_try0 = ATH_TXMGTTRY; in ath_tx_calc_duration()
1257 ath_tx_set_rtscts(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_set_rtscts() argument
1261 uint8_t rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_set_rtscts()
1268 if ((bf->bf_state.bfs_txflags & in ath_tx_set_rtscts()
1271 bf->bf_state.bfs_ctsrate = 0; in ath_tx_set_rtscts()
1272 bf->bf_state.bfs_ctsduration = 0; in ath_tx_set_rtscts()
1280 if (bf->bf_state.bfs_doprot) in ath_tx_set_rtscts()
1283 rix = bf->bf_state.bfs_rc[0].rix; in ath_tx_set_rtscts()
1289 if (bf->bf_state.bfs_ctsrate0 != 0) in ath_tx_set_rtscts()
1290 cix = ath_tx_findrix(sc, bf->bf_state.bfs_ctsrate0); in ath_tx_set_rtscts()
1297 bf->bf_state.bfs_shpream); in ath_tx_set_rtscts()
1302 bf->bf_state.bfs_shpream, bf->bf_state.bfs_pktlen, in ath_tx_set_rtscts()
1303 rt, bf->bf_state.bfs_txflags); in ath_tx_set_rtscts()
1306 bf->bf_state.bfs_ctsrate = ctsrate; in ath_tx_set_rtscts()
1307 bf->bf_state.bfs_ctsduration = ctsduration; in ath_tx_set_rtscts()
1313 bf->bf_state.bfs_ismrr = 0; in ath_tx_set_rtscts()
1314 bf->bf_state.bfs_try0 = in ath_tx_set_rtscts()
1315 bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */ in ath_tx_set_rtscts()
1329 ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_setds() argument
1331 struct ath_desc *ds = bf->bf_desc; in ath_tx_setds()
1334 if (bf->bf_state.bfs_txrate0 == 0) in ath_tx_setds()
1336 "%s: bf=%p, txrate0=%d\n", __func__, bf, 0); in ath_tx_setds()
1339 , bf->bf_state.bfs_pktlen /* packet length */ in ath_tx_setds()
1340 , bf->bf_state.bfs_hdrlen /* header length */ in ath_tx_setds()
1341 , bf->bf_state.bfs_atype /* Atheros packet type */ in ath_tx_setds()
1342 , bf->bf_state.bfs_txpower /* txpower */ in ath_tx_setds()
1343 , bf->bf_state.bfs_txrate0 in ath_tx_setds()
1344 , bf->bf_state.bfs_try0 /* series 0 rate/tries */ in ath_tx_setds()
1345 , bf->bf_state.bfs_keyix /* key cache index */ in ath_tx_setds()
1346 , bf->bf_state.bfs_txantenna /* antenna mode */ in ath_tx_setds()
1347 , bf->bf_state.bfs_txflags /* flags */ in ath_tx_setds()
1348 , bf->bf_state.bfs_ctsrate /* rts/cts rate */ in ath_tx_setds()
1349 , bf->bf_state.bfs_ctsduration /* rts/cts duration */ in ath_tx_setds()
1355 bf->bf_lastds = ds; in ath_tx_setds()
1356 bf->bf_last = bf; in ath_tx_setds()
1359 ath_tx_set_ratectrl(sc, bf->bf_node, bf); in ath_tx_setds()
1360 ath_tx_chaindesclist(sc, ds, bf, 0, 0, 0); in ath_tx_setds()
1377 ath_tx_do_ratelookup(struct ath_softc *sc, struct ath_buf *bf, int tid, in ath_tx_do_ratelookup() argument
1385 if (! bf->bf_state.bfs_doratelookup) in ath_tx_do_ratelookup()
1389 bzero(bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_do_ratelookup()
1391 ATH_NODE_LOCK(ATH_NODE(bf->bf_node)); in ath_tx_do_ratelookup()
1392 ath_rate_findrate(sc, ATH_NODE(bf->bf_node), bf->bf_state.bfs_shpream, in ath_tx_do_ratelookup()
1396 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_do_ratelookup()
1397 bf->bf_state.bfs_rc[0].ratecode = rate; in ath_tx_do_ratelookup()
1398 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_do_ratelookup()
1400 if (bf->bf_state.bfs_ismrr && try0 != ATH_TXMAXTRY) in ath_tx_do_ratelookup()
1401 ath_rate_getxtxrates(sc, ATH_NODE(bf->bf_node), rix, in ath_tx_do_ratelookup()
1402 is_aggr, bf->bf_state.bfs_rc); in ath_tx_do_ratelookup()
1403 ATH_NODE_UNLOCK(ATH_NODE(bf->bf_node)); in ath_tx_do_ratelookup()
1407 bf->bf_state.bfs_try0 = try0; in ath_tx_do_ratelookup()
1408 bf->bf_state.bfs_txrate0 = rate; in ath_tx_do_ratelookup()
1409 bf->bf_state.bfs_rc_maxpktlen = maxpktlen; in ath_tx_do_ratelookup()
1417 struct ath_buf *bf) in ath_tx_update_clrdmask() argument
1419 struct ath_node *an = ATH_NODE(bf->bf_node); in ath_tx_update_clrdmask()
1424 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_update_clrdmask()
1504 struct ath_buf *bf) in ath_tx_xmit_normal() argument
1506 struct ath_node *an = ATH_NODE(bf->bf_node); in ath_tx_xmit_normal()
1507 struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid]; in ath_tx_xmit_normal()
1520 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_xmit_normal()
1523 ath_tx_do_ratelookup(sc, bf, tid->tid, bf->bf_state.bfs_pktlen, false); in ath_tx_xmit_normal()
1524 ath_tx_calc_duration(sc, bf); in ath_tx_xmit_normal()
1525 ath_tx_calc_protection(sc, bf); in ath_tx_xmit_normal()
1526 ath_tx_set_rtscts(sc, bf); in ath_tx_xmit_normal()
1527 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_xmit_normal()
1528 ath_tx_setds(sc, bf); in ath_tx_xmit_normal()
1534 bf->bf_comp = ath_tx_normal_comp; in ath_tx_xmit_normal()
1537 ath_tx_handoff(sc, txq, bf); in ath_tx_xmit_normal()
1554 struct ath_buf *bf, struct mbuf *m0, struct ath_txq *txq) in ath_tx_normal_setup() argument
1608 error = ath_tx_dmasetup(sc, bf, m0); in ath_tx_normal_setup()
1612 bf->bf_node = ni; /* NB: held reference */ in ath_tx_normal_setup()
1613 m0 = bf->bf_m; /* NB: may have changed */ in ath_tx_normal_setup()
1617 ds = bf->bf_desc; in ath_tx_normal_setup()
1698 bf->bf_state.bfs_doratelookup = 1; in ath_tx_normal_setup()
1798 bf->bf_flags |= ATH_BUF_TOA_PROBE; in ath_tx_normal_setup()
1859 bzero(&bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_normal_setup()
1865 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_normal_setup()
1866 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_normal_setup()
1867 bf->bf_state.bfs_rc[0].ratecode = txrate; in ath_tx_normal_setup()
1870 bf->bf_state.bfs_pktlen = pktlen; in ath_tx_normal_setup()
1871 bf->bf_state.bfs_hdrlen = hdrlen; in ath_tx_normal_setup()
1872 bf->bf_state.bfs_atype = atype; in ath_tx_normal_setup()
1873 bf->bf_state.bfs_txpower = ieee80211_get_node_txpower(ni); in ath_tx_normal_setup()
1874 bf->bf_state.bfs_txrate0 = txrate; in ath_tx_normal_setup()
1875 bf->bf_state.bfs_try0 = try0; in ath_tx_normal_setup()
1876 bf->bf_state.bfs_keyix = keyix; in ath_tx_normal_setup()
1877 bf->bf_state.bfs_txantenna = sc->sc_txantenna; in ath_tx_normal_setup()
1878 bf->bf_state.bfs_txflags = flags; in ath_tx_normal_setup()
1879 bf->bf_state.bfs_shpream = shortPreamble; in ath_tx_normal_setup()
1882 bf->bf_state.bfs_ctsrate0 = 0; /* ie, no hard-coded ctsrate */ in ath_tx_normal_setup()
1883 bf->bf_state.bfs_ctsrate = 0; /* calculated later */ in ath_tx_normal_setup()
1884 bf->bf_state.bfs_ctsduration = 0; in ath_tx_normal_setup()
1885 bf->bf_state.bfs_ismrr = ismrr; in ath_tx_normal_setup()
1903 struct ath_buf *bf, struct mbuf *m0) in ath_tx_start() argument
2003 bf->bf_state.bfs_tid = tid; in ath_tx_start()
2004 bf->bf_state.bfs_tx_queue = txq->axq_qnum; in ath_tx_start()
2005 bf->bf_state.bfs_pri = pri; in ath_tx_start()
2023 bf->bf_state.bfs_tx_queue = sc->sc_cabq->axq_qnum; in ath_tx_start()
2029 bf->bf_state.bfs_dobaw = 0; in ath_tx_start()
2046 seqno = ath_tx_tid_seqno_assign(sc, ni, bf, m0); in ath_tx_start()
2055 bf->bf_state.bfs_dobaw = 1; in ath_tx_start()
2063 bf->bf_state.bfs_seqno = M_SEQNO_GET(m0) << IEEE80211_SEQ_SEQ_SHIFT; in ath_tx_start()
2072 r = ath_tx_normal_setup(sc, ni, bf, m0, txq); in ath_tx_start()
2078 m0 = bf->bf_m; in ath_tx_start()
2108 "%s: bf=%p: mcastq: TX'ing\n", __func__, bf); in ath_tx_start()
2109 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2110 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2113 ath_tx_swq(sc, ni, txq, queue_to_head, bf); in ath_tx_start()
2115 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2116 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2123 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_start()
2129 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_start()
2130 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_start()
2138 struct ath_buf *bf, struct mbuf *m0, in ath_tx_raw_start() argument
2174 "ath_tx_raw_start: ni=%p, bf=%p, raw", ni, bf); in ath_tx_raw_start()
2217 bf->bf_state.bfs_dobaw = 0; in ath_tx_raw_start()
2219 error = ath_tx_dmasetup(sc, bf, m0); in ath_tx_raw_start()
2222 m0 = bf->bf_m; /* NB: may have changed */ in ath_tx_raw_start()
2225 bf->bf_node = ni; /* NB: held reference */ in ath_tx_raw_start()
2234 bf->bf_state.bfs_doprot = 1; in ath_tx_raw_start()
2266 bf->bf_flags |= ATH_BUF_TOA_PROBE; in ath_tx_raw_start()
2283 bf->bf_state.bfs_ctsrate0 = params->ibp_ctsrate; in ath_tx_raw_start()
2312 ds = bf->bf_desc; in ath_tx_raw_start()
2316 bf->bf_state.bfs_pktlen = pktlen; in ath_tx_raw_start()
2317 bf->bf_state.bfs_hdrlen = hdrlen; in ath_tx_raw_start()
2318 bf->bf_state.bfs_atype = atype; in ath_tx_raw_start()
2319 bf->bf_state.bfs_txpower = MIN(params->ibp_power, in ath_tx_raw_start()
2321 bf->bf_state.bfs_txrate0 = txrate; in ath_tx_raw_start()
2322 bf->bf_state.bfs_try0 = try0; in ath_tx_raw_start()
2323 bf->bf_state.bfs_keyix = keyix; in ath_tx_raw_start()
2324 bf->bf_state.bfs_txantenna = txantenna; in ath_tx_raw_start()
2325 bf->bf_state.bfs_txflags = flags; in ath_tx_raw_start()
2326 bf->bf_state.bfs_shpream = in ath_tx_raw_start()
2330 bf->bf_state.bfs_tid = WME_AC_TO_TID(pri); in ath_tx_raw_start()
2331 bf->bf_state.bfs_tx_queue = sc->sc_ac2q[pri]->axq_qnum; in ath_tx_raw_start()
2332 bf->bf_state.bfs_pri = pri; in ath_tx_raw_start()
2335 bf->bf_state.bfs_ctsrate = 0; in ath_tx_raw_start()
2336 bf->bf_state.bfs_ctsduration = 0; in ath_tx_raw_start()
2337 bf->bf_state.bfs_ismrr = ismrr; in ath_tx_raw_start()
2340 bzero(&bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc)); in ath_tx_raw_start()
2342 bf->bf_state.bfs_rc[0].rix = rix; in ath_tx_raw_start()
2343 bf->bf_state.bfs_rc[0].tries = try0; in ath_tx_raw_start()
2344 bf->bf_state.bfs_rc[0].ratecode = txrate; in ath_tx_raw_start()
2350 bf->bf_state.bfs_rc[1].rix = rix; in ath_tx_raw_start()
2351 bf->bf_state.bfs_rc[1].tries = params->ibp_try1; in ath_tx_raw_start()
2354 bf->bf_state.bfs_rc[2].rix = rix; in ath_tx_raw_start()
2355 bf->bf_state.bfs_rc[2].tries = params->ibp_try2; in ath_tx_raw_start()
2358 bf->bf_state.bfs_rc[3].rix = rix; in ath_tx_raw_start()
2359 bf->bf_state.bfs_rc[3].tries = params->ibp_try3; in ath_tx_raw_start()
2365 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_raw_start()
2382 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2389 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2393 ath_tx_swq(sc, ni, sc->sc_ac2q[pri], queue_to_head, bf); in ath_tx_raw_start()
2395 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2396 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2400 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK; in ath_tx_raw_start()
2406 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_raw_start()
2407 ath_tx_xmit_normal(sc, sc->sc_ac2q[pri], bf); in ath_tx_raw_start()
2423 struct ath_buf *bf; in ath_raw_xmit() local
2474 bf = ath_getbuf(sc, ATH_BUFTYPE_MGMT); in ath_raw_xmit()
2475 if (bf == NULL) { in ath_raw_xmit()
2482 m, params, bf); in ath_raw_xmit()
2489 if (ath_tx_start(sc, ni, bf, m)) { in ath_raw_xmit()
2498 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()
2656 struct ath_tid *tid, struct ath_buf *bf) in ath_tx_addto_baw() argument
2663 if (bf->bf_state.bfs_isretried) in ath_tx_addto_baw()
2668 if (! bf->bf_state.bfs_dobaw) { in ath_tx_addto_baw()
2671 __func__, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2675 if (bf->bf_state.bfs_addedbaw) in ath_tx_addto_baw()
2679 __func__, tid->tid, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2688 SEQNO(bf->bf_state.bfs_seqno))) { in ath_tx_addto_baw()
2692 __func__, bf, tid->tid, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2701 index = ATH_BA_INDEX(tap->txa_start, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_addto_baw()
2706 __func__, tid->tid, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_addto_baw()
2723 bf, in ath_tx_addto_baw()
2724 SEQNO(bf->bf_state.bfs_seqno) in ath_tx_addto_baw()
2727 tid->tx_buf[cindex] = bf; in ath_tx_addto_baw()
2794 struct ath_tid *tid, const struct ath_buf *bf) in ath_tx_update_baw() argument
2798 int seqno = SEQNO(bf->bf_state.bfs_seqno); in ath_tx_update_baw()
2822 if (tid->tx_buf[cindex] != bf) { in ath_tx_update_baw()
2825 __func__, bf, SEQNO(bf->bf_state.bfs_seqno), in ath_tx_update_baw()
2845 struct ath_buf *bf) in ath_tx_leak_count_update() argument
2852 wh = mtod(bf->bf_m, struct ieee80211_frame *); in ath_tx_leak_count_update()
2876 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, in ath_tx_leak_count_update()
2983 struct ath_buf *bf, struct mbuf *m0) in ath_tx_tid_seqno_assign() argument
3047 struct ath_txq *txq, struct ath_buf *bf) in ath_tx_xmit_aggr() argument
3049 struct ath_tid *tid = &an->an_tid[bf->bf_state.bfs_tid]; in ath_tx_xmit_aggr()
3058 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_xmit_aggr()
3064 if (bf->bf_state.bfs_dobaw && in ath_tx_xmit_aggr()
3066 SEQNO(bf->bf_state.bfs_seqno)))) { in ath_tx_xmit_aggr()
3067 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_xmit_aggr()
3082 if (bf->bf_state.bfs_aggr != 0 || bf->bf_state.bfs_nframes > 1) { in ath_tx_xmit_aggr()
3085 bf->bf_state.bfs_aggr, bf->bf_state.bfs_nframes); in ath_tx_xmit_aggr()
3086 bf->bf_state.bfs_aggr = 0; in ath_tx_xmit_aggr()
3087 bf->bf_state.bfs_nframes = 1; in ath_tx_xmit_aggr()
3091 ath_tx_update_clrdmask(sc, tid, bf); in ath_tx_xmit_aggr()
3094 ath_tx_do_ratelookup(sc, bf, tid->tid, bf->bf_state.bfs_pktlen, in ath_tx_xmit_aggr()
3096 ath_tx_calc_duration(sc, bf); in ath_tx_xmit_aggr()
3097 ath_tx_calc_protection(sc, bf); in ath_tx_xmit_aggr()
3098 ath_tx_set_rtscts(sc, bf); in ath_tx_xmit_aggr()
3099 ath_tx_rate_fill_rcflags(sc, bf); in ath_tx_xmit_aggr()
3100 ath_tx_setds(sc, bf); in ath_tx_xmit_aggr()
3109 if (bf->bf_state.bfs_dobaw) { in ath_tx_xmit_aggr()
3110 ath_tx_addto_baw(sc, an, tid, bf); in ath_tx_xmit_aggr()
3111 bf->bf_state.bfs_addedbaw = 1; in ath_tx_xmit_aggr()
3115 bf->bf_comp = ath_tx_aggr_comp; in ath_tx_xmit_aggr()
3122 ath_tx_leak_count_update(sc, tid, bf); in ath_tx_xmit_aggr()
3125 ath_tx_handoff(sc, txq, bf); in ath_tx_xmit_aggr()
3136 struct ath_txq *txq, int queue_to_head, struct ath_buf *bf) in ath_tx_swq() argument
3142 struct mbuf *m0 = bf->bf_m; in ath_tx_swq()
3153 __func__, bf, pri, tid, IEEE80211_QOS_HAS_SEQ(wh)); in ath_tx_swq()
3157 bf->bf_state.bfs_tid = tid; in ath_tx_swq()
3158 bf->bf_state.bfs_tx_queue = txq->axq_qnum; in ath_tx_swq()
3159 bf->bf_state.bfs_pri = pri; in ath_tx_swq()
3178 ATH_TID_INSERT_HEAD(atid, bf, bf_list); in ath_tx_swq()
3180 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3184 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3206 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3221 bf = ATH_TID_FIRST(atid); in ath_tx_swq()
3222 ATH_TID_REMOVE(atid, bf, bf_list); in ath_tx_swq()
3229 bf->bf_state.bfs_aggr = 0; in ath_tx_swq()
3230 bf->bf_state.bfs_nframes = 1; in ath_tx_swq()
3233 ath_tx_xmit_aggr(sc, an, txq, bf); in ath_tx_swq()
3263 ath_tx_update_clrdmask(sc, atid, bf); in ath_tx_swq()
3270 ath_tx_leak_count_update(sc, atid, bf); in ath_tx_swq()
3275 ath_tx_xmit_normal(sc, txq, bf); in ath_tx_swq()
3279 ATH_TID_INSERT_TAIL(atid, bf, bf_list); in ath_tx_swq()
3429 struct ath_buf *bf) in ath_tx_tid_filt_addbuf() argument
3438 DPRINTF(sc, ATH_DEBUG_SW_TX_FILT, "%s: bf=%p\n", __func__, bf); in ath_tx_tid_filt_addbuf()
3441 ath_tx_set_retry(sc, bf); in ath_tx_tid_filt_addbuf()
3444 ATH_TID_FILT_INSERT_TAIL(tid, bf, bf_list); in ath_tx_tid_filt_addbuf()
3454 struct ath_buf *bf) in ath_tx_tid_filt_comp_buf() argument
3467 ath_tx_tid_filt_addbuf(sc, tid, bf); in ath_tx_tid_filt_comp_buf()
3480 struct ath_buf *bf; in ath_tx_tid_filt_comp_complete() local
3499 while ((bf = ATH_TID_FILT_LAST(tid, ath_bufhead_s)) != NULL) { in ath_tx_tid_filt_comp_complete()
3500 ATH_TID_FILT_REMOVE(tid, bf, bf_list); in ath_tx_tid_filt_comp_complete()
3501 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_tid_filt_comp_complete()
3522 struct ath_buf *bf) in ath_tx_tid_filt_comp_single() argument
3532 if (bf->bf_state.bfs_retries > SWMAX_RETRIES) { in ath_tx_tid_filt_comp_single()
3537 bf, in ath_tx_tid_filt_comp_single()
3538 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_single()
3547 if (bf->bf_flags & ATH_BUF_BUSY) { in ath_tx_tid_filt_comp_single()
3548 nbf = ath_tx_retry_clone(sc, tid->an, tid, bf); in ath_tx_tid_filt_comp_single()
3551 __func__, bf, nbf); in ath_tx_tid_filt_comp_single()
3553 nbf = bf; in ath_tx_tid_filt_comp_single()
3559 __func__, bf); in ath_tx_tid_filt_comp_single()
3575 struct ath_buf *bf, *bf_next, *nbf; in ath_tx_tid_filt_comp_aggr() local
3579 bf = bf_first; in ath_tx_tid_filt_comp_aggr()
3580 while (bf) { in ath_tx_tid_filt_comp_aggr()
3581 bf_next = bf->bf_next; in ath_tx_tid_filt_comp_aggr()
3582 bf->bf_next = NULL; /* Remove it from the aggr list */ in ath_tx_tid_filt_comp_aggr()
3587 if (bf->bf_state.bfs_retries > SWMAX_RETRIES) { in ath_tx_tid_filt_comp_aggr()
3593 bf, in ath_tx_tid_filt_comp_aggr()
3594 SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3595 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_tid_filt_comp_aggr()
3599 if (bf->bf_flags & ATH_BUF_BUSY) { in ath_tx_tid_filt_comp_aggr()
3600 nbf = ath_tx_retry_clone(sc, tid->an, tid, bf); in ath_tx_tid_filt_comp_aggr()
3603 __func__, tid->tid, bf, nbf, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3605 nbf = bf; in ath_tx_tid_filt_comp_aggr()
3615 __func__, tid->tid, bf, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_filt_comp_aggr()
3616 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_tid_filt_comp_aggr()
3621 bf = bf_next; in ath_tx_tid_filt_comp_aggr()
3807 struct ath_tid *tid, ath_bufhead *bf_cq, struct ath_buf *bf) in ath_tx_tid_drain_pkt() argument
3817 bf->bf_state.bfs_dobaw) { in ath_tx_tid_drain_pkt()
3823 if (bf->bf_state.bfs_retries > 0) { in ath_tx_tid_drain_pkt()
3824 ath_tx_update_baw(sc, an, tid, bf); in ath_tx_tid_drain_pkt()
3825 bf->bf_state.bfs_dobaw = 0; in ath_tx_tid_drain_pkt()
3831 if (! bf->bf_state.bfs_addedbaw) in ath_tx_tid_drain_pkt()
3834 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_tid_drain_pkt()
3839 bf->bf_next = NULL; in ath_tx_tid_drain_pkt()
3842 TAILQ_INSERT_TAIL(bf_cq, bf, bf_list); in ath_tx_tid_drain_pkt()
3847 const char *pfx, struct ath_tid *tid, struct ath_buf *bf) in ath_tx_tid_drain_print() argument
3863 bf, in ath_tx_tid_drain_print()
3864 bf->bf_state.bfs_addedbaw, in ath_tx_tid_drain_print()
3865 bf->bf_state.bfs_dobaw, in ath_tx_tid_drain_print()
3866 SEQNO(bf->bf_state.bfs_seqno), in ath_tx_tid_drain_print()
3867 bf->bf_state.bfs_retries); in ath_tx_tid_drain_print()
3874 bf, in ath_tx_tid_drain_print()
3885 bf, in ath_tx_tid_drain_print()
3908 mtod(bf->bf_m, const uint8_t *), in ath_tx_tid_drain_print()
3909 bf->bf_m->m_len, 0, -1); in ath_tx_tid_drain_print()
3931 struct ath_buf *bf; in ath_tx_tid_drain() local
3943 bf = ATH_TID_FIRST(tid); in ath_tx_tid_drain()
3944 if (bf == NULL) { in ath_tx_tid_drain()
3949 ath_tx_tid_drain_print(sc, an, "norm", tid, bf); in ath_tx_tid_drain()
3953 ATH_TID_REMOVE(tid, bf, bf_list); in ath_tx_tid_drain()
3954 ath_tx_tid_drain_pkt(sc, an, tid, bf_cq, bf); in ath_tx_tid_drain()
3960 bf = ATH_TID_FILT_FIRST(tid); in ath_tx_tid_drain()
3961 if (bf == NULL) in ath_tx_tid_drain()
3965 ath_tx_tid_drain_print(sc, an, "filt", tid, bf); in ath_tx_tid_drain()
3969 ATH_TID_FILT_REMOVE(tid, bf, bf_list); in ath_tx_tid_drain()
3970 ath_tx_tid_drain_pkt(sc, an, tid, bf_cq, bf); in ath_tx_tid_drain()
4091 struct ath_buf *bf; in ath_tx_node_flush() local
4132 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_node_flush()
4133 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_node_flush()
4134 ath_tx_default_comp(sc, bf, 0); in ath_tx_node_flush()
4146 struct ath_buf *bf; in ath_tx_txq_drain() local
4163 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_txq_drain()
4164 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_txq_drain()
4165 ath_tx_default_comp(sc, bf, 0); in ath_tx_txq_drain()
4186 ath_tx_normal_comp(struct ath_softc *sc, struct ath_buf *bf, int fail) in ath_tx_normal_comp() argument
4188 struct ieee80211_node *ni = bf->bf_node; in ath_tx_normal_comp()
4190 int tid = bf->bf_state.bfs_tid; in ath_tx_normal_comp()
4192 struct ath_tx_status *ts = &bf->bf_status.ds_txstat; in ath_tx_normal_comp()
4198 __func__, bf, fail, atid->hwq_depth - 1); in ath_tx_normal_comp()
4214 ath_tx_tid_filt_comp_buf(sc, atid, bf); in ath_tx_normal_comp()
4255 if (fail == 0 && ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)) in ath_tx_normal_comp()
4256 ath_tx_update_ratectrl(sc, ni, bf->bf_state.bfs_rc, in ath_tx_normal_comp()
4258 bf->bf_state.bfs_pktlen, in ath_tx_normal_comp()
4259 bf->bf_state.bfs_pktlen, in ath_tx_normal_comp()
4262 ath_tx_default_comp(sc, bf, fail); in ath_tx_normal_comp()
4273 ath_tx_comp_cleanup_unaggr(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_comp_cleanup_unaggr() argument
4275 struct ieee80211_node *ni = bf->bf_node; in ath_tx_comp_cleanup_unaggr()
4277 int tid = bf->bf_state.bfs_tid; in ath_tx_comp_cleanup_unaggr()
4287 if (bf->bf_state.bfs_dobaw) { in ath_tx_comp_cleanup_unaggr()
4288 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_comp_cleanup_unaggr()
4289 if (!bf->bf_state.bfs_addedbaw) in ath_tx_comp_cleanup_unaggr()
4292 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_comp_cleanup_unaggr()
4304 ath_tx_default_comp(sc, bf, 0); in ath_tx_comp_cleanup_unaggr()
4317 struct ath_buf *bf, *bf_next; in ath_tx_tid_cleanup_frame() local
4329 bf = bf_head; in ath_tx_tid_cleanup_frame()
4330 while (bf != NULL) { in ath_tx_tid_cleanup_frame()
4331 bf_next = bf->bf_next; /* next aggregate frame, or NULL */ in ath_tx_tid_cleanup_frame()
4341 if (bf->bf_state.bfs_addedbaw) { in ath_tx_tid_cleanup_frame()
4342 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_tid_cleanup_frame()
4343 bf->bf_state.bfs_dobaw = 0; in ath_tx_tid_cleanup_frame()
4349 bf->bf_comp = ath_tx_normal_comp; in ath_tx_tid_cleanup_frame()
4350 bf->bf_next = NULL; in ath_tx_tid_cleanup_frame()
4355 TAILQ_INSERT_TAIL(bf_cq, bf, bf_list); in ath_tx_tid_cleanup_frame()
4360 bf = bf_next; in ath_tx_tid_cleanup_frame()
4382 struct ath_buf *bf, *bf_next; in ath_tx_tid_cleanup() local
4396 while ((bf = ATH_TID_FILT_LAST(atid, ath_bufhead_s)) != NULL) { in ath_tx_tid_cleanup()
4397 ATH_TID_FILT_REMOVE(atid, bf, bf_list); in ath_tx_tid_cleanup()
4398 ATH_TID_INSERT_HEAD(atid, bf, bf_list); in ath_tx_tid_cleanup()
4407 bf = ATH_TID_FIRST(atid); in ath_tx_tid_cleanup()
4408 while (bf) { in ath_tx_tid_cleanup()
4413 bf_next = TAILQ_NEXT(bf, bf_list); in ath_tx_tid_cleanup()
4418 ath_tx_tid_cleanup_frame(sc, an, tid, bf, bf_cq); in ath_tx_tid_cleanup()
4423 bf = bf_next; in ath_tx_tid_cleanup()
4450 struct ath_tid *tid, struct ath_buf *bf) in ath_tx_retry_clone() argument
4461 nbf = ath_buf_clone(sc, bf); in ath_tx_retry_clone()
4495 if (bf->bf_state.bfs_dobaw) in ath_tx_retry_clone()
4496 ath_tx_switch_baw_buf(sc, an, tid, bf, nbf); in ath_tx_retry_clone()
4499 ath_freebuf(sc, bf); in ath_tx_retry_clone()
4515 ath_tx_aggr_retry_unaggr(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_aggr_retry_unaggr() argument
4517 struct ieee80211_node *ni = bf->bf_node; in ath_tx_aggr_retry_unaggr()
4519 int tid = bf->bf_state.bfs_tid; in ath_tx_aggr_retry_unaggr()
4535 if ((bf->bf_state.bfs_retries < SWMAX_RETRIES) && in ath_tx_aggr_retry_unaggr()
4536 (bf->bf_flags & ATH_BUF_BUSY)) { in ath_tx_aggr_retry_unaggr()
4538 nbf = ath_tx_retry_clone(sc, an, atid, bf); in ath_tx_aggr_retry_unaggr()
4541 bf = nbf; in ath_tx_aggr_retry_unaggr()
4543 bf->bf_state.bfs_retries = SWMAX_RETRIES + 1; in ath_tx_aggr_retry_unaggr()
4546 if (bf->bf_state.bfs_retries >= SWMAX_RETRIES) { in ath_tx_aggr_retry_unaggr()
4549 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_aggr_retry_unaggr()
4553 if (bf->bf_state.bfs_dobaw) { in ath_tx_aggr_retry_unaggr()
4554 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_aggr_retry_unaggr()
4555 if (! bf->bf_state.bfs_addedbaw) in ath_tx_aggr_retry_unaggr()
4558 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_aggr_retry_unaggr()
4560 bf->bf_state.bfs_dobaw = 0; in ath_tx_aggr_retry_unaggr()
4572 ath_tx_default_comp(sc, bf, 0); in ath_tx_aggr_retry_unaggr()
4581 ath_tx_set_retry(sc, bf); in ath_tx_aggr_retry_unaggr()
4588 ATH_TID_INSERT_HEAD(atid, bf, bf_list); in ath_tx_aggr_retry_unaggr()
4605 ath_tx_retry_subframe(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_retry_subframe() argument
4608 struct ieee80211_node *ni = bf->bf_node; in ath_tx_retry_subframe()
4610 int tid = bf->bf_state.bfs_tid; in ath_tx_retry_subframe()
4616 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc); in ath_tx_retry_subframe()
4617 ath_hal_set11nburstduration(sc->sc_ah, bf->bf_desc, 0); in ath_tx_retry_subframe()
4629 if ((bf->bf_state.bfs_retries < SWMAX_RETRIES) && in ath_tx_retry_subframe()
4630 (bf->bf_flags & ATH_BUF_BUSY)) { in ath_tx_retry_subframe()
4632 nbf = ath_tx_retry_clone(sc, an, atid, bf); in ath_tx_retry_subframe()
4635 bf = nbf; in ath_tx_retry_subframe()
4637 bf->bf_state.bfs_retries = SWMAX_RETRIES + 1; in ath_tx_retry_subframe()
4640 if (bf->bf_state.bfs_retries >= SWMAX_RETRIES) { in ath_tx_retry_subframe()
4644 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_retry_subframe()
4645 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_retry_subframe()
4646 if (!bf->bf_state.bfs_addedbaw) in ath_tx_retry_subframe()
4649 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_retry_subframe()
4650 bf->bf_state.bfs_dobaw = 0; in ath_tx_retry_subframe()
4654 ath_tx_set_retry(sc, bf); in ath_tx_retry_subframe()
4656 bf->bf_next = NULL; /* Just to make sure */ in ath_tx_retry_subframe()
4659 bf->bf_state.bfs_aggr = 0; in ath_tx_retry_subframe()
4660 bf->bf_state.bfs_ndelim = 0; /* ??? needed? */ in ath_tx_retry_subframe()
4661 bf->bf_state.bfs_nframes = 1; in ath_tx_retry_subframe()
4663 TAILQ_INSERT_TAIL(bf_q, bf, bf_list); in ath_tx_retry_subframe()
4676 struct ath_buf *bf_next, *bf; in ath_tx_comp_aggr_error() local
4699 bf = bf_first; in ath_tx_comp_aggr_error()
4700 while (bf) { in ath_tx_comp_aggr_error()
4701 bf_next = bf->bf_next; in ath_tx_comp_aggr_error()
4702 bf->bf_next = NULL; /* Remove it from the aggr list */ in ath_tx_comp_aggr_error()
4704 if (ath_tx_retry_subframe(sc, bf, &bf_q)) { in ath_tx_comp_aggr_error()
4706 bf->bf_next = NULL; in ath_tx_comp_aggr_error()
4707 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list); in ath_tx_comp_aggr_error()
4709 bf = bf_next; in ath_tx_comp_aggr_error()
4713 while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) { in ath_tx_comp_aggr_error()
4714 TAILQ_REMOVE(&bf_q, bf, bf_list); in ath_tx_comp_aggr_error()
4715 ATH_TID_INSERT_HEAD(tid, bf, bf_list); in ath_tx_comp_aggr_error()
4744 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) { in ath_tx_comp_aggr_error()
4745 TAILQ_REMOVE(&bf_cq, bf, bf_list); in ath_tx_comp_aggr_error()
4746 ath_tx_default_comp(sc, bf, 0); in ath_tx_comp_aggr_error()
4759 struct ath_buf *bf, *bf_next; in ath_tx_comp_cleanup_aggr() local
4771 bf = bf_first; in ath_tx_comp_cleanup_aggr()
4772 while (bf) { in ath_tx_comp_cleanup_aggr()
4774 if (bf->bf_state.bfs_dobaw) { in ath_tx_comp_cleanup_aggr()
4775 ath_tx_update_baw(sc, an, atid, bf); in ath_tx_comp_cleanup_aggr()
4776 if (!bf->bf_state.bfs_addedbaw) in ath_tx_comp_cleanup_aggr()
4779 __func__, SEQNO(bf->bf_state.bfs_seqno)); in ath_tx_comp_cleanup_aggr()
4781 bf = bf->bf_next; in ath_tx_comp_cleanup_aggr()
4804 bf = bf_first; in ath_tx_comp_cleanup_aggr()
4805 while (bf) { in ath_tx_comp_cleanup_aggr()
4806 bf_next = bf->bf_next; in ath_tx_comp_cleanup_aggr()
4807 bf->bf_next = NULL; in ath_tx_comp_cleanup_aggr()
4808 ath_tx_default_comp(sc, bf, 1); in ath_tx_comp_cleanup_aggr()
4809 bf = bf_next; in ath_tx_comp_cleanup_aggr()
4835 struct ath_buf *bf, *bf_next; local
4905 TAILQ_FOREACH_SAFE(bf, &bf_cq, bf_list, bf_next) {
4906 if (bf->bf_state.bfs_addedbaw)
4908 if (bf->bf_state.bfs_dobaw) {
4909 ath_tx_update_baw(sc, an, atid, bf);
4910 if (!bf->bf_state.bfs_addedbaw)
4914 SEQNO(bf->bf_state.bfs_seqno));
4916 bf->bf_state.bfs_dobaw = 0;
5020 bf = bf_first;
5040 while (bf) {
5043 SEQNO(bf->bf_state.bfs_seqno));
5044 bf_next = bf->bf_next;
5045 bf->bf_next = NULL; /* Remove it from the aggr list */
5049 __func__, bf, SEQNO(bf->bf_state.bfs_seqno),
5054 ath_tx_update_baw(sc, an, atid, bf);
5055 bf->bf_state.bfs_dobaw = 0;
5056 if (!bf->bf_state.bfs_addedbaw)
5059 __func__, SEQNO(bf->bf_state.bfs_seqno));
5060 bf->bf_next = NULL;
5061 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
5064 if (ath_tx_retry_subframe(sc, bf, &bf_q)) {
5066 bf->bf_next = NULL;
5067 TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
5071 bf = bf_next;
5115 while ((bf = TAILQ_LAST(&bf_q, ath_bufhead_s)) != NULL) {
5116 TAILQ_REMOVE(&bf_q, bf, bf_list);
5117 ATH_TID_INSERT_HEAD(atid, bf, bf_list);
5149 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
5150 TAILQ_REMOVE(&bf_cq, bf, bf_list);
5151 ath_tx_default_comp(sc, bf, 0);
5163 ath_tx_aggr_comp_unaggr(struct ath_softc *sc, struct ath_buf *bf, int fail) argument
5165 struct ieee80211_node *ni = bf->bf_node;
5167 int tid = bf->bf_state.bfs_tid;
5176 ts = bf->bf_status.ds_txstat;
5184 if (fail == 0 && ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0))
5185 ath_tx_update_ratectrl(sc, ni, bf->bf_state.bfs_rc,
5186 &bf->bf_status.ds_txstat,
5187 bf->bf_state.bfs_pktlen,
5188 bf->bf_state.bfs_pktlen,
5203 __func__, bf, bf->bf_state.bfs_tid, atid->hwq_depth,
5204 SEQNO(bf->bf_state.bfs_seqno));
5233 ath_tx_comp_cleanup_unaggr(sc, bf);
5257 freeframe = ath_tx_tid_filt_comp_single(sc, atid, bf);
5264 if (bf->bf_state.bfs_addedbaw)
5266 if (bf->bf_state.bfs_dobaw) {
5267 ath_tx_update_baw(sc, an, atid, bf);
5268 if (!bf->bf_state.bfs_addedbaw)
5271 __func__, SEQNO(bf->bf_state.bfs_seqno));
5273 bf->bf_state.bfs_dobaw = 0;
5295 ath_tx_default_comp(sc, bf, fail);
5310 ath_tx_aggr_retry_unaggr(sc, bf);
5316 __func__, tid, SEQNO(bf->bf_state.bfs_seqno));
5317 if (bf->bf_state.bfs_dobaw) {
5318 ath_tx_update_baw(sc, an, atid, bf);
5319 bf->bf_state.bfs_dobaw = 0;
5320 if (!bf->bf_state.bfs_addedbaw)
5323 __func__, SEQNO(bf->bf_state.bfs_seqno));
5347 ath_tx_default_comp(sc, bf, fail);
5352 ath_tx_aggr_comp(struct ath_softc *sc, struct ath_buf *bf, int fail) argument
5354 if (bf->bf_state.bfs_aggr)
5355 ath_tx_aggr_comp_aggr(sc, bf, fail);
5357 ath_tx_aggr_comp_unaggr(sc, bf, fail);
5372 struct ath_buf *bf; local
5385 TAILQ_FOREACH(bf, &tid->tid_q, bf_list) {
5393 SEQNO(bf->bf_state.bfs_seqno)))) {
5398 if (! bf->bf_state.bfs_dobaw) {
5402 nbytes += bf->bf_state.bfs_pktlen;
5428 struct ath_buf *bf; local
5463 bf = ATH_TID_FIRST(tid);
5464 if (bf == NULL) {
5472 if (! bf->bf_state.bfs_dobaw) {
5476 ATH_TID_REMOVE(tid, bf, bf_list);
5478 if (bf->bf_state.bfs_nframes > 1)
5482 bf->bf_state.bfs_aggr,
5483 bf->bf_state.bfs_nframes);
5491 bf->bf_state.bfs_aggr = 0;
5492 bf->bf_state.bfs_nframes = 1;
5495 ath_tx_update_clrdmask(sc, tid, bf);
5497 ath_tx_do_ratelookup(sc, bf, tid->tid,
5498 bf->bf_state.bfs_pktlen, false);
5499 ath_tx_calc_duration(sc, bf);
5500 ath_tx_calc_protection(sc, bf);
5501 ath_tx_set_rtscts(sc, bf);
5502 ath_tx_rate_fill_rcflags(sc, bf);
5503 ath_tx_setds(sc, bf);
5504 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
5520 ath_tx_do_ratelookup(sc, bf, tid->tid, swq_pktbytes, true);
5527 ath_tx_calc_duration(sc, bf);
5528 ath_tx_calc_protection(sc, bf);
5530 ath_tx_set_rtscts(sc, bf);
5531 ath_tx_rate_fill_rcflags(sc, bf);
5548 bf = TAILQ_FIRST(&bf_q);
5558 if (bf->bf_state.bfs_nframes == 1) {
5563 ath_tx_update_clrdmask(sc, tid, bf);
5565 bf->bf_state.bfs_aggr = 0;
5566 bf->bf_state.bfs_ndelim = 0;
5567 ath_tx_setds(sc, bf);
5568 ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
5577 __func__, bf->bf_state.bfs_nframes,
5578 bf->bf_state.bfs_al);
5579 bf->bf_state.bfs_aggr = 1;
5580 sc->sc_aggr_stats.aggr_pkts[bf->bf_state.bfs_nframes]++;
5584 ath_tx_update_clrdmask(sc, tid, bf);
5589 ath_tx_calc_duration(sc, bf);
5590 ath_tx_calc_protection(sc, bf);
5597 ath_tx_set_rtscts(sc, bf);
5604 ath_tx_setds_11n(sc, bf);
5608 bf->bf_comp = ath_tx_aggr_comp;
5610 if (bf->bf_state.bfs_tid == IEEE80211_NONQOS_TID)
5619 ath_tx_leak_count_update(sc, tid, bf);
5622 ath_tx_handoff(sc, txq, bf);
5659 struct ath_buf *bf; local
5686 bf = ATH_TID_FIRST(tid);
5687 if (bf == NULL) {
5691 ATH_TID_REMOVE(tid, bf, bf_list);
5694 if (tid->tid != bf->bf_state.bfs_tid) {
5696 " tid %d\n", __func__, bf->bf_state.bfs_tid,
5700 bf->bf_comp = ath_tx_normal_comp;
5706 bf->bf_state.bfs_txflags |= HAL_TXDESC_CLRDMASK;
5709 ath_tx_update_clrdmask(sc, tid, bf);
5712 ath_tx_do_ratelookup(sc, bf, tid->tid,
5713 bf->bf_state.bfs_pktlen, false);
5714 ath_tx_calc_duration(sc, bf);
5715 ath_tx_calc_protection(sc, bf);
5716 ath_tx_set_rtscts(sc, bf);
5717 ath_tx_rate_fill_rcflags(sc, bf);
5718 ath_tx_setds(sc, bf);
5725 ath_tx_leak_count_update(sc, tid, bf);
5732 ath_tx_handoff(sc, txq, bf);
6048 struct ath_buf *bf; local
6105 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
6106 TAILQ_REMOVE(&bf_cq, bf, bf_list);
6107 ath_tx_default_comp(sc, bf, 1);
6124 struct ath_buf *bf; local
6158 while ((bf = TAILQ_FIRST(&bf_cq)) != NULL) {
6159 TAILQ_REMOVE(&bf_cq, bf, bf_list);
6160 ath_tx_default_comp(sc, bf, 1);