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,
150 struct ath_buf *bf) in ath_set_rates() argument
152 ieee80211_get_tx_rates(vif, sta, bf->bf_mpdu, bf->rates, in ath_set_rates()
153 ARRAY_SIZE(bf->rates)); in ath_set_rates()
214 struct ath_buf *bf; in ath_tx_tid_change_state() local
219 bf = fi->bf; in ath_tx_tid_change_state()
224 if (bf) in ath_tx_tid_change_state()
227 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_tid_change_state()
228 if (!bf) { in ath_tx_tid_change_state()
242 struct ath_buf *bf; in ath_tx_flush_tid() local
254 bf = fi->bf; in ath_tx_flush_tid()
255 if (!bf) { in ath_tx_flush_tid()
262 ath_tx_update_baw(sc, tid, bf->bf_state.seqno); in ath_tx_flush_tid()
266 list_add_tail(&bf->list, &bf_head); in ath_tx_flush_tid()
267 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); in ath_tx_flush_tid()
296 struct ath_buf *bf) in ath_tx_addto_baw() argument
298 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_addto_baw()
299 u16 seqno = bf->bf_state.seqno; in ath_tx_addto_baw()
319 struct ath_buf *bf; in ath_tid_drain() local
329 bf = fi->bf; in ath_tid_drain()
331 if (!bf) { in ath_tid_drain()
336 list_add_tail(&bf->list, &bf_head); in ath_tid_drain()
337 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); in ath_tid_drain()
345 struct ath_buf *bf = fi->bf; in ath_tx_set_retry() local
357 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_set_retry()
363 struct ath_buf *bf = NULL; in ath_tx_get_buffer() local
372 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); in ath_tx_get_buffer()
373 list_del(&bf->list); in ath_tx_get_buffer()
377 return bf; in ath_tx_get_buffer()
380 static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_return_buffer() argument
383 list_add_tail(&bf->list, &sc->tx.txbuf); in ath_tx_return_buffer()
387 static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf) in ath_clone_txbuf() argument
397 tbf->bf_mpdu = bf->bf_mpdu; in ath_clone_txbuf()
398 tbf->bf_buf_addr = bf->bf_buf_addr; in ath_clone_txbuf()
399 memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len); in ath_clone_txbuf()
400 tbf->bf_state = bf->bf_state; in ath_clone_txbuf()
406 static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_count_frames() argument
419 isaggr = bf_isaggr(bf); in ath_tx_count_frames()
425 while (bf) { in ath_tx_count_frames()
426 fi = get_frame_info(bf->bf_mpdu); in ath_tx_count_frames()
427 ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno); in ath_tx_count_frames()
433 bf = bf->bf_next; in ath_tx_count_frames()
439 struct ath_buf *bf, struct list_head *bf_q, in ath_tx_complete_aggr() argument
449 struct ath_buf *bf_next, *bf_last = bf->bf_lastbf; in ath_tx_complete_aggr()
463 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
468 memcpy(rates, bf->rates, sizeof(rates)); in ath_tx_complete_aggr()
481 while (bf) { in ath_tx_complete_aggr()
482 bf_next = bf->bf_next; in ath_tx_complete_aggr()
484 if (!bf->bf_state.stale || bf_next != NULL) in ath_tx_complete_aggr()
485 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
487 ath_tx_complete_buf(sc, bf, txq, &bf_head, ts, 0); in ath_tx_complete_aggr()
489 bf = bf_next; in ath_tx_complete_aggr()
510 isaggr = bf_isaggr(bf); in ath_tx_complete_aggr()
532 ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); in ath_tx_complete_aggr()
533 while (bf) { in ath_tx_complete_aggr()
534 u16 seqno = bf->bf_state.seqno; in ath_tx_complete_aggr()
537 bf_next = bf->bf_next; in ath_tx_complete_aggr()
539 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
561 ath_tx_set_retry(sc, txq, bf->bf_mpdu, in ath_tx_complete_aggr()
578 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
589 ath_tx_rc_status(sc, bf, ts, nframes, nbad, txok); in ath_tx_complete_aggr()
591 if (bf == bf->bf_lastbf) in ath_tx_complete_aggr()
593 bf->bf_mpdu, in ath_tx_complete_aggr()
597 ath_tx_complete_buf(sc, bf, txq, &bf_head, ts, in ath_tx_complete_aggr()
605 if (bf->bf_next == NULL && bf_last->bf_state.stale) { in ath_tx_complete_aggr()
617 ath_tx_complete_buf(sc, bf, txq, in ath_tx_complete_aggr()
624 fi->bf = tbf; in ath_tx_complete_aggr()
634 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
686 if (bf_is_ampdu_not_probing(bf)) in ath_tx_process_buffer()
689 ts->duration = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, in ath_tx_process_buffer()
691 if (!bf_isampdu(bf)) { in ath_tx_process_buffer()
693 info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_process_buffer()
694 memcpy(info->control.rates, bf->rates, in ath_tx_process_buffer()
696 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); in ath_tx_process_buffer()
697 ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts); in ath_tx_process_buffer()
699 ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok); in ath_tx_process_buffer()
701 ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok); in ath_tx_process_buffer()
707 static bool ath_lookup_legacy(struct ath_buf *bf) in ath_lookup_legacy() argument
714 skb = bf->bf_mpdu; in ath_lookup_legacy()
729 static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_lookup_rate() argument
740 skb = bf->bf_mpdu; in ath_lookup_rate()
742 rates = bf->rates; in ath_lookup_rate()
801 struct ath_buf *bf, u16 frmlen, in ath_compute_num_delims() argument
809 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_compute_num_delims()
845 rix = bf->rates[0].idx; in ath_compute_num_delims()
846 flags = bf->rates[0].flags; in ath_compute_num_delims()
877 struct ath_buf *bf; in ath_tx_get_tid_subframe() local
890 bf = fi->bf; in ath_tx_get_tid_subframe()
891 if (!fi->bf) in ath_tx_get_tid_subframe()
892 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_get_tid_subframe()
894 bf->bf_state.stale = false; in ath_tx_get_tid_subframe()
896 if (!bf) { in ath_tx_get_tid_subframe()
903 bf->bf_next = NULL; in ath_tx_get_tid_subframe()
904 bf->bf_lastbf = bf; in ath_tx_get_tid_subframe()
918 bf->bf_state.bf_type = 0; in ath_tx_get_tid_subframe()
919 return bf; in ath_tx_get_tid_subframe()
922 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; in ath_tx_get_tid_subframe()
923 seqno = bf->bf_state.seqno; in ath_tx_get_tid_subframe()
934 list_add(&bf->list, &bf_head); in ath_tx_get_tid_subframe()
937 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0); in ath_tx_get_tid_subframe()
941 return bf; in ath_tx_get_tid_subframe()
954 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_aggr() local
963 bf = bf_first; in ath_tx_form_aggr()
964 aggr_limit = ath_lookup_rate(sc, bf, tid); in ath_tx_form_aggr()
967 skb = bf->bf_mpdu; in ath_tx_form_aggr()
974 ath_lookup_legacy(bf) || nframes >= h_baw) in ath_tx_form_aggr()
977 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_aggr()
995 bf->bf_next = NULL; in ath_tx_form_aggr()
999 ath_tx_addto_baw(sc, tid, bf); in ath_tx_form_aggr()
1000 bf->bf_state.ndelim = ndelim; in ath_tx_form_aggr()
1003 list_add_tail(&bf->list, bf_q); in ath_tx_form_aggr()
1005 bf_prev->bf_next = bf; in ath_tx_form_aggr()
1007 bf_prev = bf; in ath_tx_form_aggr()
1009 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_form_aggr()
1010 if (!bf) { in ath_tx_form_aggr()
1016 bf = bf_first; in ath_tx_form_aggr()
1017 bf->bf_lastbf = bf_prev; in ath_tx_form_aggr()
1019 if (bf == bf_prev) { in ath_tx_form_aggr()
1020 al = get_frame_info(bf->bf_mpdu)->framelen; in ath_tx_form_aggr()
1021 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_form_aggr()
1099 static u8 ath_get_rate_txpower(struct ath_softc *sc, struct ath_buf *bf, in ath_get_rate_txpower() argument
1111 skb = bf->bf_mpdu; in ath_get_rate_txpower()
1158 } else if (!bf->bf_state.bfs_paprd) { in ath_get_rate_txpower()
1172 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_buf_set_rate() argument
1182 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_buf_set_rate()
1187 skb = bf->bf_mpdu; in ath_buf_set_rate()
1189 rates = bf->rates; in ath_buf_set_rate()
1196 for (i = 0; i < ARRAY_SIZE(bf->rates); i++) { in ath_buf_set_rate()
1209 if (bf_isampdu(bf) && !bf_isaggr(bf) && in ath_buf_set_rate()
1243 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, in ath_buf_set_rate()
1264 if (bf->bf_state.bfs_paprd) in ath_buf_set_rate()
1274 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, false, in ath_buf_set_rate()
1279 if (bf_isaggr(bf) && (len > sc->sc_ah->caps.rts_aggr_limit)) in ath_buf_set_rate()
1310 static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_fill_desc() argument
1324 while (bf) { in ath_tx_fill_desc()
1325 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_fill_desc()
1328 bool aggr = !!(bf->bf_state.bf_type & BUF_AGGR); in ath_tx_fill_desc()
1331 if (bf->bf_next) in ath_tx_fill_desc()
1332 info.link = bf->bf_next->bf_daddr; in ath_tx_fill_desc()
1334 info.link = (sc->tx99_state) ? bf->bf_daddr : 0; in ath_tx_fill_desc()
1337 bf_first = bf; in ath_tx_fill_desc()
1350 if (bf->bf_state.bfs_paprd) in ath_tx_fill_desc()
1351 info.flags |= (u32) bf->bf_state.bfs_paprd << in ath_tx_fill_desc()
1361 if (aggr && (bf == bf_first) && in ath_tx_fill_desc()
1373 ath_buf_set_rate(sc, bf, &info, len, rts); in ath_tx_fill_desc()
1376 info.buf_addr[0] = bf->bf_buf_addr; in ath_tx_fill_desc()
1383 if (bf == bf_first) in ath_tx_fill_desc()
1385 else if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1390 info.ndelim = bf->bf_state.ndelim; in ath_tx_fill_desc()
1394 if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1397 ath9k_hw_set_txdesc(ah, bf->bf_desc, &info); in ath_tx_fill_desc()
1398 bf = bf->bf_next; in ath_tx_fill_desc()
1407 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_burst() local
1413 skb = bf->bf_mpdu; in ath_tx_form_burst()
1417 list_add_tail(&bf->list, bf_q); in ath_tx_form_burst()
1419 bf_prev->bf_next = bf; in ath_tx_form_burst()
1420 bf_prev = bf; in ath_tx_form_burst()
1425 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_form_burst()
1426 if (!bf) in ath_tx_form_burst()
1429 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_burst()
1433 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_form_burst()
1440 struct ath_buf *bf; in ath_tx_sched_aggr() local
1452 bf = ath_tx_get_tid_subframe(sc, txq, tid, &tid_q); in ath_tx_sched_aggr()
1453 if (!bf) in ath_tx_sched_aggr()
1456 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_sched_aggr()
1464 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_sched_aggr()
1466 last = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf, in ath_tx_sched_aggr()
1469 ath_tx_form_burst(sc, txq, tid, &bf_q, bf, tid_q); in ath_tx_sched_aggr()
1479 ath_tx_fill_desc(sc, bf, txq, aggr_len); in ath_tx_sched_aggr()
1634 struct ath_buf *bf_tail = NULL, *bf; in ath9k_release_buffered_frames() local
1650 bf = ath_tx_get_tid_subframe(sc, sc->tx.uapsdq, tid, &tid_q); in ath9k_release_buffered_frames()
1651 if (!bf) in ath9k_release_buffered_frames()
1654 __skb_unlink(bf->bf_mpdu, tid_q); in ath9k_release_buffered_frames()
1655 list_add_tail(&bf->list, &bf_q); in ath9k_release_buffered_frames()
1656 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath9k_release_buffered_frames()
1657 if (bf_isampdu(bf)) { in ath9k_release_buffered_frames()
1658 ath_tx_addto_baw(sc, tid, bf); in ath9k_release_buffered_frames()
1659 bf->bf_state.bf_type &= ~BUF_AGGR; in ath9k_release_buffered_frames()
1662 bf_tail->bf_next = bf; in ath9k_release_buffered_frames()
1664 bf_tail = bf; in ath9k_release_buffered_frames()
1681 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath9k_release_buffered_frames()
1683 ath_tx_fill_desc(sc, bf, txq, 0); in ath9k_release_buffered_frames()
1809 struct ath_buf *bf, *lastbf; in ath_drain_txq_list() local
1818 bf = list_first_entry(list, struct ath_buf, list); in ath_drain_txq_list()
1820 if (bf->bf_state.stale) { in ath_drain_txq_list()
1821 list_del(&bf->list); in ath_drain_txq_list()
1823 ath_tx_return_buffer(sc, bf); in ath_drain_txq_list()
1827 lastbf = bf->bf_lastbf; in ath_drain_txq_list()
1829 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_drain_txq_list()
2021 struct ath_buf *bf, *bf_last; in ath_tx_txqaddbuf() local
2034 bf = list_first_entry(head, struct ath_buf, list); in ath_tx_txqaddbuf()
2048 ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr); in ath_tx_txqaddbuf()
2051 ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2060 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr); in ath_tx_txqaddbuf()
2062 txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2071 while (bf) { in ath_tx_txqaddbuf()
2073 if (bf_is_ampdu_not_probing(bf)) in ath_tx_txqaddbuf()
2076 bf_last = bf->bf_lastbf; in ath_tx_txqaddbuf()
2077 bf = bf_last->bf_next; in ath_tx_txqaddbuf()
2089 struct ath_buf *bf = fi->bf; in ath_tx_send_normal() local
2092 list_add_tail(&bf->list, &bf_head); in ath_tx_send_normal()
2093 bf->bf_state.bf_type = 0; in ath_tx_send_normal()
2095 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_send_normal()
2096 ath_tx_addto_baw(sc, tid, bf); in ath_tx_send_normal()
2099 bf->bf_next = NULL; in ath_tx_send_normal()
2100 bf->bf_lastbf = bf; in ath_tx_send_normal()
2101 ath_tx_fill_desc(sc, bf, txq, fi->framelen); in ath_tx_send_normal()
2192 struct ath_buf *bf; in ath_tx_setup_buffer() local
2196 bf = ath_tx_get_buffer(sc); in ath_tx_setup_buffer()
2197 if (!bf) { in ath_tx_setup_buffer()
2202 ATH_TXBUF_RESET(bf); in ath_tx_setup_buffer()
2215 bf->bf_state.seqno = seqno; in ath_tx_setup_buffer()
2218 bf->bf_mpdu = skb; in ath_tx_setup_buffer()
2220 bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, in ath_tx_setup_buffer()
2222 if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) { in ath_tx_setup_buffer()
2223 bf->bf_mpdu = NULL; in ath_tx_setup_buffer()
2224 bf->bf_buf_addr = 0; in ath_tx_setup_buffer()
2227 ath_tx_return_buffer(sc, bf); in ath_tx_setup_buffer()
2231 fi->bf = bf; in ath_tx_setup_buffer()
2233 return bf; in ath_tx_setup_buffer()
2317 struct ath_buf *bf; in ath_tx_start() local
2394 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_start()
2395 if (!bf) { in ath_tx_start()
2404 bf->bf_state.bfs_paprd = txctl->paprd; in ath_tx_start()
2407 bf->bf_state.bfs_paprd_timestamp = jiffies; in ath_tx_start()
2409 ath_set_rates(vif, sta, bf); in ath_tx_start()
2428 struct ath_buf *bf; in ath_tx_cabq() local
2443 bf = ath_tx_setup_buffer(sc, txctl.txq, NULL, skb); in ath_tx_cabq()
2444 if (!bf) in ath_tx_cabq()
2447 bf->bf_lastbf = bf; in ath_tx_cabq()
2448 ath_set_rates(vif, NULL, bf); in ath_tx_cabq()
2449 ath_buf_set_rate(sc, bf, &info, fi->framelen, false); in ath_tx_cabq()
2452 bf_tail->bf_next = bf; in ath_tx_cabq()
2454 list_add_tail(&bf->list, &bf_q); in ath_tx_cabq()
2455 bf_tail = bf; in ath_tx_cabq()
2470 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2471 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath_tx_cabq()
2475 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_cabq()
2480 ath_tx_fill_desc(sc, bf, txctl.txq, 0); in ath_tx_cabq()
2538 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_complete_buf() argument
2542 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_complete_buf()
2553 dma_unmap_single(sc->dev, bf->bf_buf_addr, skb->len, DMA_TO_DEVICE); in ath_tx_complete_buf()
2554 bf->bf_buf_addr = 0; in ath_tx_complete_buf()
2558 if (bf->bf_state.bfs_paprd) { in ath_tx_complete_buf()
2560 bf->bf_state.bfs_paprd_timestamp + in ath_tx_complete_buf()
2566 ath_debug_stat_tx(sc, bf, ts, txq, tx_flags); in ath_tx_complete_buf()
2573 bf->bf_mpdu = NULL; in ath_tx_complete_buf()
2583 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_rc_status() argument
2587 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_rc_status()
2642 struct ath_buf *bf, *lastbf, *bf_held = NULL; in ath_tx_processq() local
2662 bf = list_first_entry(&txq->axq_q, struct ath_buf, list); in ath_tx_processq()
2673 if (bf->bf_state.stale) { in ath_tx_processq()
2674 bf_held = bf; in ath_tx_processq()
2678 bf = list_entry(bf_held->list.next, struct ath_buf, in ath_tx_processq()
2682 lastbf = bf->bf_lastbf; in ath_tx_processq()
2708 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_processq()
2731 struct ath_buf *bf, *lastbf; in ath_tx_edma_tasklet() local
2774 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2775 if (bf->bf_state.stale) { in ath_tx_edma_tasklet()
2776 list_del(&bf->list); in ath_tx_edma_tasklet()
2777 ath_tx_return_buffer(sc, bf); in ath_tx_edma_tasklet()
2778 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2781 lastbf = bf->bf_lastbf; in ath_tx_edma_tasklet()
2798 if (bf != lastbf) in ath_tx_edma_tasklet()
2803 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_edma_tasklet()
2941 struct ath_buf *bf; in ath9k_tx99_send() local
2962 bf = ath_tx_setup_buffer(sc, txctl->txq, NULL, skb); in ath9k_tx99_send()
2963 if (!bf) { in ath9k_tx99_send()
2968 ath_set_rates(sc->tx99_vif, NULL, bf); in ath9k_tx99_send()
2970 ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); in ath9k_tx99_send()