Lines Matching refs:bf
54 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
59 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
139 struct ath_buf *bf) in ath_set_rates() argument
141 ieee80211_get_tx_rates(vif, sta, bf->bf_mpdu, bf->rates, in ath_set_rates()
142 ARRAY_SIZE(bf->rates)); in ath_set_rates()
203 struct ath_buf *bf; in ath_tx_tid_change_state() local
208 bf = fi->bf; in ath_tx_tid_change_state()
213 if (bf) in ath_tx_tid_change_state()
216 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_tid_change_state()
217 if (!bf) { in ath_tx_tid_change_state()
231 struct ath_buf *bf; in ath_tx_flush_tid() local
243 bf = fi->bf; in ath_tx_flush_tid()
244 if (!bf) { in ath_tx_flush_tid()
251 ath_tx_update_baw(sc, tid, bf->bf_state.seqno); in ath_tx_flush_tid()
255 list_add_tail(&bf->list, &bf_head); in ath_tx_flush_tid()
256 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); in ath_tx_flush_tid()
285 struct ath_buf *bf) in ath_tx_addto_baw() argument
287 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_addto_baw()
288 u16 seqno = bf->bf_state.seqno; in ath_tx_addto_baw()
308 struct ath_buf *bf; in ath_tid_drain() local
318 bf = fi->bf; in ath_tid_drain()
320 if (!bf) { in ath_tid_drain()
325 list_add_tail(&bf->list, &bf_head); in ath_tid_drain()
326 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); in ath_tid_drain()
334 struct ath_buf *bf = fi->bf; in ath_tx_set_retry() local
346 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_set_retry()
352 struct ath_buf *bf = NULL; in ath_tx_get_buffer() local
361 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); in ath_tx_get_buffer()
362 list_del(&bf->list); in ath_tx_get_buffer()
366 return bf; in ath_tx_get_buffer()
369 static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_return_buffer() argument
372 list_add_tail(&bf->list, &sc->tx.txbuf); in ath_tx_return_buffer()
376 static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf) in ath_clone_txbuf() argument
386 tbf->bf_mpdu = bf->bf_mpdu; in ath_clone_txbuf()
387 tbf->bf_buf_addr = bf->bf_buf_addr; in ath_clone_txbuf()
388 memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len); in ath_clone_txbuf()
389 tbf->bf_state = bf->bf_state; in ath_clone_txbuf()
395 static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_count_frames() argument
408 isaggr = bf_isaggr(bf); in ath_tx_count_frames()
414 while (bf) { in ath_tx_count_frames()
415 fi = get_frame_info(bf->bf_mpdu); in ath_tx_count_frames()
416 ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno); in ath_tx_count_frames()
422 bf = bf->bf_next; in ath_tx_count_frames()
428 struct ath_buf *bf, struct list_head *bf_q, in ath_tx_complete_aggr() argument
438 struct ath_buf *bf_next, *bf_last = bf->bf_lastbf; in ath_tx_complete_aggr()
452 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
457 memcpy(rates, bf->rates, sizeof(rates)); in ath_tx_complete_aggr()
470 while (bf) { in ath_tx_complete_aggr()
471 bf_next = bf->bf_next; in ath_tx_complete_aggr()
473 if (!bf->bf_state.stale || bf_next != NULL) in ath_tx_complete_aggr()
474 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
476 ath_tx_complete_buf(sc, bf, txq, &bf_head, ts, 0); in ath_tx_complete_aggr()
478 bf = bf_next; in ath_tx_complete_aggr()
499 isaggr = bf_isaggr(bf); in ath_tx_complete_aggr()
521 ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); in ath_tx_complete_aggr()
522 while (bf) { in ath_tx_complete_aggr()
523 u16 seqno = bf->bf_state.seqno; in ath_tx_complete_aggr()
526 bf_next = bf->bf_next; in ath_tx_complete_aggr()
528 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
550 ath_tx_set_retry(sc, txq, bf->bf_mpdu, in ath_tx_complete_aggr()
567 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
578 ath_tx_rc_status(sc, bf, ts, nframes, nbad, txok); in ath_tx_complete_aggr()
580 if (bf == bf->bf_lastbf) in ath_tx_complete_aggr()
582 bf->bf_mpdu, in ath_tx_complete_aggr()
586 ath_tx_complete_buf(sc, bf, txq, &bf_head, ts, in ath_tx_complete_aggr()
594 if (bf->bf_next == NULL && bf_last->bf_state.stale) { in ath_tx_complete_aggr()
606 ath_tx_complete_buf(sc, bf, txq, in ath_tx_complete_aggr()
613 fi->bf = tbf; in ath_tx_complete_aggr()
623 bf = bf_next; in ath_tx_complete_aggr()
657 static bool bf_is_ampdu_not_probing(struct ath_buf *bf) in bf_is_ampdu_not_probing() argument
659 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); in bf_is_ampdu_not_probing()
660 return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE); in bf_is_ampdu_not_probing()
664 struct ath_tx_status *ts, struct ath_buf *bf, in ath_tx_process_buffer() argument
675 if (bf_is_ampdu_not_probing(bf)) in ath_tx_process_buffer()
678 ts->duration = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, in ath_tx_process_buffer()
680 if (!bf_isampdu(bf)) { in ath_tx_process_buffer()
682 info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_process_buffer()
683 memcpy(info->control.rates, bf->rates, in ath_tx_process_buffer()
685 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); in ath_tx_process_buffer()
686 ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts); in ath_tx_process_buffer()
688 ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok); in ath_tx_process_buffer()
690 ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok); in ath_tx_process_buffer()
696 static bool ath_lookup_legacy(struct ath_buf *bf) in ath_lookup_legacy() argument
703 skb = bf->bf_mpdu; in ath_lookup_legacy()
718 static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_lookup_rate() argument
729 skb = bf->bf_mpdu; in ath_lookup_rate()
731 rates = bf->rates; in ath_lookup_rate()
790 struct ath_buf *bf, u16 frmlen, in ath_compute_num_delims() argument
798 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_compute_num_delims()
834 rix = bf->rates[0].idx; in ath_compute_num_delims()
835 flags = bf->rates[0].flags; in ath_compute_num_delims()
866 struct ath_buf *bf; in ath_tx_get_tid_subframe() local
879 bf = fi->bf; in ath_tx_get_tid_subframe()
880 if (!fi->bf) in ath_tx_get_tid_subframe()
881 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_get_tid_subframe()
883 bf->bf_state.stale = false; in ath_tx_get_tid_subframe()
885 if (!bf) { in ath_tx_get_tid_subframe()
892 bf->bf_next = NULL; in ath_tx_get_tid_subframe()
893 bf->bf_lastbf = bf; in ath_tx_get_tid_subframe()
907 bf->bf_state.bf_type = 0; in ath_tx_get_tid_subframe()
908 return bf; in ath_tx_get_tid_subframe()
911 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; in ath_tx_get_tid_subframe()
912 seqno = bf->bf_state.seqno; in ath_tx_get_tid_subframe()
923 list_add(&bf->list, &bf_head); in ath_tx_get_tid_subframe()
926 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); in ath_tx_get_tid_subframe()
930 return bf; in ath_tx_get_tid_subframe()
943 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_aggr() local
952 bf = bf_first; in ath_tx_form_aggr()
953 aggr_limit = ath_lookup_rate(sc, bf, tid); in ath_tx_form_aggr()
956 skb = bf->bf_mpdu; in ath_tx_form_aggr()
963 ath_lookup_legacy(bf) || nframes >= h_baw) in ath_tx_form_aggr()
966 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_aggr()
984 bf->bf_next = NULL; in ath_tx_form_aggr()
988 ath_tx_addto_baw(sc, tid, bf); in ath_tx_form_aggr()
989 bf->bf_state.ndelim = ndelim; in ath_tx_form_aggr()
992 list_add_tail(&bf->list, bf_q); in ath_tx_form_aggr()
994 bf_prev->bf_next = bf; in ath_tx_form_aggr()
996 bf_prev = bf; in ath_tx_form_aggr()
998 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_form_aggr()
999 if (!bf) { in ath_tx_form_aggr()
1005 bf = bf_first; in ath_tx_form_aggr()
1006 bf->bf_lastbf = bf_prev; in ath_tx_form_aggr()
1008 if (bf == bf_prev) { in ath_tx_form_aggr()
1009 al = get_frame_info(bf->bf_mpdu)->framelen; in ath_tx_form_aggr()
1010 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_form_aggr()
1088 static u8 ath_get_rate_txpower(struct ath_softc *sc, struct ath_buf *bf, in ath_get_rate_txpower() argument
1100 skb = bf->bf_mpdu; in ath_get_rate_txpower()
1147 } else if (!bf->bf_state.bfs_paprd) { in ath_get_rate_txpower()
1161 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_buf_set_rate() argument
1171 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_buf_set_rate()
1176 skb = bf->bf_mpdu; in ath_buf_set_rate()
1178 rates = bf->rates; in ath_buf_set_rate()
1185 for (i = 0; i < ARRAY_SIZE(bf->rates); i++) { in ath_buf_set_rate()
1198 if (bf_isampdu(bf) && !bf_isaggr(bf) && in ath_buf_set_rate()
1232 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, in ath_buf_set_rate()
1253 if (bf->bf_state.bfs_paprd) in ath_buf_set_rate()
1263 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, false, in ath_buf_set_rate()
1268 if (bf_isaggr(bf) && (len > sc->sc_ah->caps.rts_aggr_limit)) in ath_buf_set_rate()
1299 static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_fill_desc() argument
1313 while (bf) { in ath_tx_fill_desc()
1314 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_fill_desc()
1317 bool aggr = !!(bf->bf_state.bf_type & BUF_AGGR); in ath_tx_fill_desc()
1320 if (bf->bf_next) in ath_tx_fill_desc()
1321 info.link = bf->bf_next->bf_daddr; in ath_tx_fill_desc()
1323 info.link = (sc->tx99_state) ? bf->bf_daddr : 0; in ath_tx_fill_desc()
1326 bf_first = bf; in ath_tx_fill_desc()
1339 if (bf->bf_state.bfs_paprd) in ath_tx_fill_desc()
1340 info.flags |= (u32) bf->bf_state.bfs_paprd << in ath_tx_fill_desc()
1350 if (aggr && (bf == bf_first) && in ath_tx_fill_desc()
1362 ath_buf_set_rate(sc, bf, &info, len, rts); in ath_tx_fill_desc()
1365 info.buf_addr[0] = bf->bf_buf_addr; in ath_tx_fill_desc()
1372 if (bf == bf_first) in ath_tx_fill_desc()
1374 else if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1379 info.ndelim = bf->bf_state.ndelim; in ath_tx_fill_desc()
1383 if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1386 ath9k_hw_set_txdesc(ah, bf->bf_desc, &info); in ath_tx_fill_desc()
1387 bf = bf->bf_next; in ath_tx_fill_desc()
1396 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_burst() local
1402 skb = bf->bf_mpdu; in ath_tx_form_burst()
1406 list_add_tail(&bf->list, bf_q); in ath_tx_form_burst()
1408 bf_prev->bf_next = bf; in ath_tx_form_burst()
1409 bf_prev = bf; in ath_tx_form_burst()
1414 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_form_burst()
1415 if (!bf) in ath_tx_form_burst()
1418 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_burst()
1422 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_form_burst()
1429 struct ath_buf *bf; in ath_tx_sched_aggr() local
1441 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_sched_aggr()
1442 if (!bf) in ath_tx_sched_aggr()
1445 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_sched_aggr()
1453 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_sched_aggr()
1455 last = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf, in ath_tx_sched_aggr()
1458 ath_tx_form_burst(sc, txq, tid, &bf_q, bf, tid_q); in ath_tx_sched_aggr()
1468 ath_tx_fill_desc(sc, bf, txq, aggr_len); in ath_tx_sched_aggr()
1613 struct ath_buf *bf_tail = NULL, *bf; in ath9k_release_buffered_frames() local
1629 bf = ath_tx_get_tid_subframe(sc, sc->tx.uapsdq, tid, &tid_q); in ath9k_release_buffered_frames()
1630 if (!bf) in ath9k_release_buffered_frames()
1633 __skb_unlink(bf->bf_mpdu, tid_q); in ath9k_release_buffered_frames()
1634 list_add_tail(&bf->list, &bf_q); in ath9k_release_buffered_frames()
1635 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath9k_release_buffered_frames()
1636 if (bf_isampdu(bf)) { in ath9k_release_buffered_frames()
1637 ath_tx_addto_baw(sc, tid, bf); in ath9k_release_buffered_frames()
1638 bf->bf_state.bf_type &= ~BUF_AGGR; in ath9k_release_buffered_frames()
1641 bf_tail->bf_next = bf; in ath9k_release_buffered_frames()
1643 bf_tail = bf; in ath9k_release_buffered_frames()
1660 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath9k_release_buffered_frames()
1662 ath_tx_fill_desc(sc, bf, txq, 0); in ath9k_release_buffered_frames()
1788 struct ath_buf *bf, *lastbf; in ath_drain_txq_list() local
1797 bf = list_first_entry(list, struct ath_buf, list); in ath_drain_txq_list()
1799 if (bf->bf_state.stale) { in ath_drain_txq_list()
1800 list_del(&bf->list); in ath_drain_txq_list()
1802 ath_tx_return_buffer(sc, bf); in ath_drain_txq_list()
1806 lastbf = bf->bf_lastbf; in ath_drain_txq_list()
1808 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_drain_txq_list()
1984 struct ath_buf *bf, *bf_last; in ath_tx_txqaddbuf() local
1997 bf = list_first_entry(head, struct ath_buf, list); in ath_tx_txqaddbuf()
2011 ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr); in ath_tx_txqaddbuf()
2014 ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2023 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr); in ath_tx_txqaddbuf()
2025 txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2034 while (bf) { in ath_tx_txqaddbuf()
2036 if (bf_is_ampdu_not_probing(bf)) in ath_tx_txqaddbuf()
2039 bf_last = bf->bf_lastbf; in ath_tx_txqaddbuf()
2040 bf = bf_last->bf_next; in ath_tx_txqaddbuf()
2052 struct ath_buf *bf = fi->bf; in ath_tx_send_normal() local
2055 list_add_tail(&bf->list, &bf_head); in ath_tx_send_normal()
2056 bf->bf_state.bf_type = 0; in ath_tx_send_normal()
2058 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_send_normal()
2059 ath_tx_addto_baw(sc, tid, bf); in ath_tx_send_normal()
2062 bf->bf_next = NULL; in ath_tx_send_normal()
2063 bf->bf_lastbf = bf; in ath_tx_send_normal()
2064 ath_tx_fill_desc(sc, bf, txq, fi->framelen); in ath_tx_send_normal()
2155 struct ath_buf *bf; in ath_tx_setup_buffer() local
2159 bf = ath_tx_get_buffer(sc); in ath_tx_setup_buffer()
2160 if (!bf) { in ath_tx_setup_buffer()
2165 ATH_TXBUF_RESET(bf); in ath_tx_setup_buffer()
2178 bf->bf_state.seqno = seqno; in ath_tx_setup_buffer()
2181 bf->bf_mpdu = skb; in ath_tx_setup_buffer()
2183 bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, in ath_tx_setup_buffer()
2185 if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) { in ath_tx_setup_buffer()
2186 bf->bf_mpdu = NULL; in ath_tx_setup_buffer()
2187 bf->bf_buf_addr = 0; in ath_tx_setup_buffer()
2190 ath_tx_return_buffer(sc, bf); in ath_tx_setup_buffer()
2194 fi->bf = bf; in ath_tx_setup_buffer()
2196 return bf; in ath_tx_setup_buffer()
2280 struct ath_buf *bf; in ath_tx_start() local
2357 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_start()
2358 if (!bf) { in ath_tx_start()
2367 bf->bf_state.bfs_paprd = txctl->paprd; in ath_tx_start()
2370 bf->bf_state.bfs_paprd_timestamp = jiffies; in ath_tx_start()
2372 ath_set_rates(vif, sta, bf); in ath_tx_start()
2391 struct ath_buf *bf; in ath_tx_cabq() local
2406 bf = ath_tx_setup_buffer(sc, txctl.txq, NULL, skb); in ath_tx_cabq()
2407 if (!bf) in ath_tx_cabq()
2410 bf->bf_lastbf = bf; in ath_tx_cabq()
2411 ath_set_rates(vif, NULL, bf); in ath_tx_cabq()
2412 ath_buf_set_rate(sc, bf, &info, fi->framelen, false); in ath_tx_cabq()
2415 bf_tail->bf_next = bf; in ath_tx_cabq()
2417 list_add_tail(&bf->list, &bf_q); in ath_tx_cabq()
2418 bf_tail = bf; in ath_tx_cabq()
2433 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2434 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath_tx_cabq()
2438 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_cabq()
2443 ath_tx_fill_desc(sc, bf, txctl.txq, 0); in ath_tx_cabq()
2501 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_complete_buf() argument
2505 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_complete_buf()
2516 dma_unmap_single(sc->dev, bf->bf_buf_addr, skb->len, DMA_TO_DEVICE); in ath_tx_complete_buf()
2517 bf->bf_buf_addr = 0; in ath_tx_complete_buf()
2521 if (bf->bf_state.bfs_paprd) { in ath_tx_complete_buf()
2523 bf->bf_state.bfs_paprd_timestamp + in ath_tx_complete_buf()
2529 ath_debug_stat_tx(sc, bf, ts, txq, tx_flags); in ath_tx_complete_buf()
2536 bf->bf_mpdu = NULL; in ath_tx_complete_buf()
2546 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_rc_status() argument
2550 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_rc_status()
2605 struct ath_buf *bf, *lastbf, *bf_held = NULL; in ath_tx_processq() local
2625 bf = list_first_entry(&txq->axq_q, struct ath_buf, list); in ath_tx_processq()
2636 if (bf->bf_state.stale) { in ath_tx_processq()
2637 bf_held = bf; in ath_tx_processq()
2641 bf = list_entry(bf_held->list.next, struct ath_buf, in ath_tx_processq()
2645 lastbf = bf->bf_lastbf; in ath_tx_processq()
2671 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_processq()
2694 struct ath_buf *bf, *lastbf; in ath_tx_edma_tasklet() local
2737 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2738 if (bf->bf_state.stale) { in ath_tx_edma_tasklet()
2739 list_del(&bf->list); in ath_tx_edma_tasklet()
2740 ath_tx_return_buffer(sc, bf); in ath_tx_edma_tasklet()
2741 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2744 lastbf = bf->bf_lastbf; in ath_tx_edma_tasklet()
2761 if (bf != lastbf) in ath_tx_edma_tasklet()
2766 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_edma_tasklet()
2887 struct ath_buf *bf; in ath9k_tx99_send() local
2908 bf = ath_tx_setup_buffer(sc, txctl->txq, NULL, skb); in ath9k_tx99_send()
2909 if (!bf) { in ath9k_tx99_send()
2914 ath_set_rates(sc->tx99_vif, NULL, bf); in ath9k_tx99_send()
2916 ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); in ath9k_tx99_send()