Lines Matching refs:bf
55 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
61 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
158 struct ath_buf *bf) in ath_set_rates() argument
160 ieee80211_get_tx_rates(vif, sta, bf->bf_mpdu, bf->rates, in ath_set_rates()
161 ARRAY_SIZE(bf->rates)); in ath_set_rates()
222 struct ath_buf *bf; in ath_tx_tid_change_state() local
227 bf = fi->bf; in ath_tx_tid_change_state()
232 if (bf) in ath_tx_tid_change_state()
235 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_tid_change_state()
236 if (!bf) { in ath_tx_tid_change_state()
250 struct ath_buf *bf; in ath_tx_flush_tid() local
262 bf = fi->bf; in ath_tx_flush_tid()
263 if (!bf) { in ath_tx_flush_tid()
270 ath_tx_update_baw(sc, tid, bf->bf_state.seqno); in ath_tx_flush_tid()
274 list_add_tail(&bf->list, &bf_head); in ath_tx_flush_tid()
275 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tx_flush_tid()
304 struct ath_buf *bf) in ath_tx_addto_baw() argument
306 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_addto_baw()
307 u16 seqno = bf->bf_state.seqno; in ath_tx_addto_baw()
327 struct ath_buf *bf; in ath_tid_drain() local
337 bf = fi->bf; in ath_tid_drain()
339 if (!bf) { in ath_tid_drain()
344 list_add_tail(&bf->list, &bf_head); in ath_tid_drain()
345 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tid_drain()
353 struct ath_buf *bf = fi->bf; in ath_tx_set_retry() local
365 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_set_retry()
371 struct ath_buf *bf = NULL; in ath_tx_get_buffer() local
380 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); in ath_tx_get_buffer()
381 list_del(&bf->list); in ath_tx_get_buffer()
385 return bf; in ath_tx_get_buffer()
388 static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_return_buffer() argument
391 list_add_tail(&bf->list, &sc->tx.txbuf); in ath_tx_return_buffer()
395 static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf) in ath_clone_txbuf() argument
405 tbf->bf_mpdu = bf->bf_mpdu; in ath_clone_txbuf()
406 tbf->bf_buf_addr = bf->bf_buf_addr; in ath_clone_txbuf()
407 memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len); in ath_clone_txbuf()
408 tbf->bf_state = bf->bf_state; in ath_clone_txbuf()
414 static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_count_frames() argument
427 isaggr = bf_isaggr(bf); in ath_tx_count_frames()
433 while (bf) { in ath_tx_count_frames()
434 fi = get_frame_info(bf->bf_mpdu); in ath_tx_count_frames()
435 ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno); in ath_tx_count_frames()
441 bf = bf->bf_next; in ath_tx_count_frames()
447 struct ath_buf *bf, struct list_head *bf_q, in ath_tx_complete_aggr() argument
456 struct ath_buf *bf_next, *bf_last = bf->bf_lastbf; in ath_tx_complete_aggr()
470 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
475 memcpy(rates, bf->rates, sizeof(rates)); in ath_tx_complete_aggr()
483 while (bf) { in ath_tx_complete_aggr()
484 bf_next = bf->bf_next; in ath_tx_complete_aggr()
486 if (!bf->bf_state.stale || bf_next != NULL) in ath_tx_complete_aggr()
487 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
489 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, ts, 0); in ath_tx_complete_aggr()
491 bf = bf_next; in ath_tx_complete_aggr()
511 isaggr = bf_isaggr(bf); in ath_tx_complete_aggr()
533 ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); in ath_tx_complete_aggr()
534 while (bf) { in ath_tx_complete_aggr()
535 u16 seqno = bf->bf_state.seqno; in ath_tx_complete_aggr()
538 bf_next = bf->bf_next; in ath_tx_complete_aggr()
540 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
562 ath_tx_set_retry(sc, txq, bf->bf_mpdu, in ath_tx_complete_aggr()
579 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
590 ath_tx_rc_status(sc, bf, ts, nframes, nbad, txok); in ath_tx_complete_aggr()
592 if (bf == bf->bf_lastbf) in ath_tx_complete_aggr()
594 bf->bf_mpdu, in ath_tx_complete_aggr()
598 ath_tx_complete_buf(sc, bf, txq, &bf_head, sta, ts, in ath_tx_complete_aggr()
606 if (bf->bf_next == NULL && bf_last->bf_state.stale) { in ath_tx_complete_aggr()
618 ath_tx_complete_buf(sc, bf, txq, in ath_tx_complete_aggr()
626 fi->bf = tbf; in ath_tx_complete_aggr()
636 bf = bf_next; in ath_tx_complete_aggr()
668 static bool bf_is_ampdu_not_probing(struct ath_buf *bf) in bf_is_ampdu_not_probing() argument
670 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); in bf_is_ampdu_not_probing()
671 return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE); in bf_is_ampdu_not_probing()
675 struct ath_tx_status *ts, struct ath_buf *bf, in ath_tx_process_buffer() argument
690 if (bf_is_ampdu_not_probing(bf)) in ath_tx_process_buffer()
693 ts->duration = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, in ath_tx_process_buffer()
696 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath_tx_process_buffer()
700 tid = ath_get_skb_tid(sc, an, bf->bf_mpdu); in ath_tx_process_buffer()
705 if (!bf_isampdu(bf)) { in ath_tx_process_buffer()
707 info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_process_buffer()
708 memcpy(info->control.rates, bf->rates, in ath_tx_process_buffer()
710 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); in ath_tx_process_buffer()
711 ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts); in ath_tx_process_buffer()
713 ath_tx_complete_buf(sc, bf, txq, bf_head, sta, ts, txok); in ath_tx_process_buffer()
715 ath_tx_complete_aggr(sc, txq, bf, bf_head, sta, tid, ts, txok); in ath_tx_process_buffer()
721 static bool ath_lookup_legacy(struct ath_buf *bf) in ath_lookup_legacy() argument
728 skb = bf->bf_mpdu; in ath_lookup_legacy()
743 static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_lookup_rate() argument
754 skb = bf->bf_mpdu; in ath_lookup_rate()
756 rates = bf->rates; in ath_lookup_rate()
815 struct ath_buf *bf, u16 frmlen, in ath_compute_num_delims() argument
823 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_compute_num_delims()
859 rix = bf->rates[0].idx; in ath_compute_num_delims()
860 flags = bf->rates[0].flags; in ath_compute_num_delims()
891 struct ath_buf *bf; in ath_tx_get_tid_subframe() local
904 bf = fi->bf; in ath_tx_get_tid_subframe()
905 if (!fi->bf) in ath_tx_get_tid_subframe()
906 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_get_tid_subframe()
908 bf->bf_state.stale = false; in ath_tx_get_tid_subframe()
910 if (!bf) { in ath_tx_get_tid_subframe()
917 bf->bf_next = NULL; in ath_tx_get_tid_subframe()
918 bf->bf_lastbf = bf; in ath_tx_get_tid_subframe()
932 bf->bf_state.bf_type = 0; in ath_tx_get_tid_subframe()
933 return bf; in ath_tx_get_tid_subframe()
936 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; in ath_tx_get_tid_subframe()
937 seqno = bf->bf_state.seqno; in ath_tx_get_tid_subframe()
948 list_add(&bf->list, &bf_head); in ath_tx_get_tid_subframe()
951 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tx_get_tid_subframe()
955 return bf; in ath_tx_get_tid_subframe()
968 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_aggr() local
977 bf = bf_first; in ath_tx_form_aggr()
978 aggr_limit = ath_lookup_rate(sc, bf, tid); in ath_tx_form_aggr()
981 skb = bf->bf_mpdu; in ath_tx_form_aggr()
988 ath_lookup_legacy(bf) || nframes >= h_baw) in ath_tx_form_aggr()
991 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_aggr()
1009 bf->bf_next = NULL; in ath_tx_form_aggr()
1013 ath_tx_addto_baw(sc, tid, bf); in ath_tx_form_aggr()
1014 bf->bf_state.ndelim = ndelim; in ath_tx_form_aggr()
1017 list_add_tail(&bf->list, bf_q); in ath_tx_form_aggr()
1019 bf_prev->bf_next = bf; in ath_tx_form_aggr()
1021 bf_prev = bf; in ath_tx_form_aggr()
1023 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_form_aggr()
1024 if (!bf) { in ath_tx_form_aggr()
1030 bf = bf_first; in ath_tx_form_aggr()
1031 bf->bf_lastbf = bf_prev; in ath_tx_form_aggr()
1033 if (bf == bf_prev) { in ath_tx_form_aggr()
1034 al = get_frame_info(bf->bf_mpdu)->framelen; in ath_tx_form_aggr()
1035 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_form_aggr()
1113 static u8 ath_get_rate_txpower(struct ath_softc *sc, struct ath_buf *bf, in ath_get_rate_txpower() argument
1125 skb = bf->bf_mpdu; in ath_get_rate_txpower()
1172 } else if (!bf->bf_state.bfs_paprd) { in ath_get_rate_txpower()
1186 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_buf_set_rate() argument
1196 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_buf_set_rate()
1201 skb = bf->bf_mpdu; in ath_buf_set_rate()
1203 rates = bf->rates; in ath_buf_set_rate()
1210 for (i = 0; i < ARRAY_SIZE(bf->rates); i++) { in ath_buf_set_rate()
1223 if (bf_isampdu(bf) && !bf_isaggr(bf) && in ath_buf_set_rate()
1257 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, in ath_buf_set_rate()
1278 if (bf->bf_state.bfs_paprd) in ath_buf_set_rate()
1288 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, false, in ath_buf_set_rate()
1293 if (bf_isaggr(bf) && (len > sc->sc_ah->caps.rts_aggr_limit)) in ath_buf_set_rate()
1324 static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_fill_desc() argument
1338 while (bf) { in ath_tx_fill_desc()
1339 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_fill_desc()
1342 bool aggr = !!(bf->bf_state.bf_type & BUF_AGGR); in ath_tx_fill_desc()
1345 if (bf->bf_next) in ath_tx_fill_desc()
1346 info.link = bf->bf_next->bf_daddr; in ath_tx_fill_desc()
1348 info.link = (sc->tx99_state) ? bf->bf_daddr : 0; in ath_tx_fill_desc()
1351 bf_first = bf; in ath_tx_fill_desc()
1364 if (bf->bf_state.bfs_paprd) in ath_tx_fill_desc()
1365 info.flags |= (u32) bf->bf_state.bfs_paprd << in ath_tx_fill_desc()
1375 if (aggr && (bf == bf_first) && in ath_tx_fill_desc()
1387 ath_buf_set_rate(sc, bf, &info, len, rts); in ath_tx_fill_desc()
1390 info.buf_addr[0] = bf->bf_buf_addr; in ath_tx_fill_desc()
1397 if (bf == bf_first) in ath_tx_fill_desc()
1399 else if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1404 info.ndelim = bf->bf_state.ndelim; in ath_tx_fill_desc()
1408 if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1411 ath9k_hw_set_txdesc(ah, bf->bf_desc, &info); in ath_tx_fill_desc()
1412 bf = bf->bf_next; in ath_tx_fill_desc()
1421 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_burst() local
1427 skb = bf->bf_mpdu; in ath_tx_form_burst()
1431 list_add_tail(&bf->list, bf_q); in ath_tx_form_burst()
1433 bf_prev->bf_next = bf; in ath_tx_form_burst()
1434 bf_prev = bf; in ath_tx_form_burst()
1439 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_form_burst()
1440 if (!bf) in ath_tx_form_burst()
1443 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_burst()
1447 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_form_burst()
1454 struct ath_buf *bf; in ath_tx_sched_aggr() local
1466 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_sched_aggr()
1467 if (!bf) in ath_tx_sched_aggr()
1470 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_sched_aggr()
1478 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_sched_aggr()
1480 last = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf, in ath_tx_sched_aggr()
1483 ath_tx_form_burst(sc, txq, tid, &bf_q, bf, tid_q); in ath_tx_sched_aggr()
1493 ath_tx_fill_desc(sc, bf, txq, aggr_len); in ath_tx_sched_aggr()
1653 struct ath_buf *bf_tail = NULL, *bf; in ath9k_release_buffered_frames() local
1669 bf = ath_tx_get_tid_subframe(sc, sc->tx.uapsdq, tid, &tid_q); in ath9k_release_buffered_frames()
1670 if (!bf) in ath9k_release_buffered_frames()
1673 __skb_unlink(bf->bf_mpdu, tid_q); in ath9k_release_buffered_frames()
1674 list_add_tail(&bf->list, &bf_q); in ath9k_release_buffered_frames()
1675 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath9k_release_buffered_frames()
1676 if (bf_isampdu(bf)) { in ath9k_release_buffered_frames()
1677 ath_tx_addto_baw(sc, tid, bf); in ath9k_release_buffered_frames()
1678 bf->bf_state.bf_type &= ~BUF_AGGR; in ath9k_release_buffered_frames()
1681 bf_tail->bf_next = bf; in ath9k_release_buffered_frames()
1683 bf_tail = bf; in ath9k_release_buffered_frames()
1700 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath9k_release_buffered_frames()
1702 ath_tx_fill_desc(sc, bf, txq, 0); in ath9k_release_buffered_frames()
1828 struct ath_buf *bf, *lastbf; in ath_drain_txq_list() local
1837 bf = list_first_entry(list, struct ath_buf, list); in ath_drain_txq_list()
1839 if (bf->bf_state.stale) { in ath_drain_txq_list()
1840 list_del(&bf->list); in ath_drain_txq_list()
1842 ath_tx_return_buffer(sc, bf); in ath_drain_txq_list()
1846 lastbf = bf->bf_lastbf; in ath_drain_txq_list()
1848 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_drain_txq_list()
2026 struct ath_buf *bf, *bf_last; in ath_tx_txqaddbuf() local
2039 bf = list_first_entry(head, struct ath_buf, list); in ath_tx_txqaddbuf()
2053 ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr); in ath_tx_txqaddbuf()
2056 ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2065 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr); in ath_tx_txqaddbuf()
2067 txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2076 while (bf) { in ath_tx_txqaddbuf()
2078 if (bf_is_ampdu_not_probing(bf)) in ath_tx_txqaddbuf()
2081 bf_last = bf->bf_lastbf; in ath_tx_txqaddbuf()
2082 bf = bf_last->bf_next; in ath_tx_txqaddbuf()
2094 struct ath_buf *bf = fi->bf; in ath_tx_send_normal() local
2097 list_add_tail(&bf->list, &bf_head); in ath_tx_send_normal()
2098 bf->bf_state.bf_type = 0; in ath_tx_send_normal()
2100 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_send_normal()
2101 ath_tx_addto_baw(sc, tid, bf); in ath_tx_send_normal()
2104 bf->bf_next = NULL; in ath_tx_send_normal()
2105 bf->bf_lastbf = bf; in ath_tx_send_normal()
2106 ath_tx_fill_desc(sc, bf, txq, fi->framelen); in ath_tx_send_normal()
2197 struct ath_buf *bf; in ath_tx_setup_buffer() local
2201 bf = ath_tx_get_buffer(sc); in ath_tx_setup_buffer()
2202 if (!bf) { in ath_tx_setup_buffer()
2207 ATH_TXBUF_RESET(bf); in ath_tx_setup_buffer()
2220 bf->bf_state.seqno = seqno; in ath_tx_setup_buffer()
2223 bf->bf_mpdu = skb; in ath_tx_setup_buffer()
2225 bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, in ath_tx_setup_buffer()
2227 if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) { in ath_tx_setup_buffer()
2228 bf->bf_mpdu = NULL; in ath_tx_setup_buffer()
2229 bf->bf_buf_addr = 0; in ath_tx_setup_buffer()
2232 ath_tx_return_buffer(sc, bf); in ath_tx_setup_buffer()
2236 fi->bf = bf; in ath_tx_setup_buffer()
2238 return bf; in ath_tx_setup_buffer()
2322 struct ath_buf *bf; in ath_tx_start() local
2405 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_start()
2406 if (!bf) { in ath_tx_start()
2415 bf->bf_state.bfs_paprd = txctl->paprd; in ath_tx_start()
2418 bf->bf_state.bfs_paprd_timestamp = jiffies; in ath_tx_start()
2420 ath_set_rates(vif, sta, bf); in ath_tx_start()
2439 struct ath_buf *bf; in ath_tx_cabq() local
2454 bf = ath_tx_setup_buffer(sc, txctl.txq, NULL, skb); in ath_tx_cabq()
2455 if (!bf) in ath_tx_cabq()
2458 bf->bf_lastbf = bf; in ath_tx_cabq()
2459 ath_set_rates(vif, NULL, bf); in ath_tx_cabq()
2460 ath_buf_set_rate(sc, bf, &info, fi->framelen, false); in ath_tx_cabq()
2463 bf_tail->bf_next = bf; in ath_tx_cabq()
2465 list_add_tail(&bf->list, &bf_q); in ath_tx_cabq()
2466 bf_tail = bf; in ath_tx_cabq()
2481 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2482 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath_tx_cabq()
2486 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_cabq()
2491 ath_tx_fill_desc(sc, bf, txctl.txq, 0); in ath_tx_cabq()
2553 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_complete_buf() argument
2558 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_complete_buf()
2569 dma_unmap_single(sc->dev, bf->bf_buf_addr, skb->len, DMA_TO_DEVICE); in ath_tx_complete_buf()
2570 bf->bf_buf_addr = 0; in ath_tx_complete_buf()
2574 if (bf->bf_state.bfs_paprd) { in ath_tx_complete_buf()
2576 bf->bf_state.bfs_paprd_timestamp + in ath_tx_complete_buf()
2582 ath_debug_stat_tx(sc, bf, ts, txq, tx_flags); in ath_tx_complete_buf()
2589 bf->bf_mpdu = NULL; in ath_tx_complete_buf()
2599 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_rc_status() argument
2603 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_rc_status()
2658 struct ath_buf *bf, *lastbf, *bf_held = NULL; in ath_tx_processq() local
2678 bf = list_first_entry(&txq->axq_q, struct ath_buf, list); in ath_tx_processq()
2689 if (bf->bf_state.stale) { in ath_tx_processq()
2690 bf_held = bf; in ath_tx_processq()
2694 bf = list_entry(bf_held->list.next, struct ath_buf, in ath_tx_processq()
2698 lastbf = bf->bf_lastbf; in ath_tx_processq()
2724 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_processq()
2749 struct ath_buf *bf, *lastbf; in ath_tx_edma_tasklet() local
2793 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2794 if (bf->bf_state.stale) { in ath_tx_edma_tasklet()
2795 list_del(&bf->list); in ath_tx_edma_tasklet()
2796 ath_tx_return_buffer(sc, bf); in ath_tx_edma_tasklet()
2797 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2800 lastbf = bf->bf_lastbf; in ath_tx_edma_tasklet()
2817 if (bf != lastbf) in ath_tx_edma_tasklet()
2822 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_edma_tasklet()
2944 struct ath_buf *bf; in ath9k_tx99_send() local
2965 bf = ath_tx_setup_buffer(sc, txctl->txq, NULL, skb); in ath9k_tx99_send()
2966 if (!bf) { in ath9k_tx99_send()
2971 ath_set_rates(sc->tx99_vif, NULL, bf); in ath9k_tx99_send()
2973 ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); in ath9k_tx99_send()