Lines Matching refs:bf

61 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
67 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
71 struct ath_buf *bf);
163 static bool ath_merge_ratetbl(struct ieee80211_sta *sta, struct ath_buf *bf, in ath_merge_ratetbl() argument
181 bf->rates[0] = tx_info->control.rates[0]; in ath_merge_ratetbl()
186 bf->rates[i].idx = ratetbl->rate[i].idx; in ath_merge_ratetbl()
187 bf->rates[i].flags = ratetbl->rate[i].flags; in ath_merge_ratetbl()
189 bf->rates[i].count = ratetbl->rate[i].count_rts; in ath_merge_ratetbl()
191 bf->rates[i].count = ratetbl->rate[i].count_cts; in ath_merge_ratetbl()
193 bf->rates[i].count = ratetbl->rate[i].count; in ath_merge_ratetbl()
200 struct ath_buf *bf) in ath_set_rates() argument
204 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_set_rates()
206 if (!ath_merge_ratetbl(sta, bf, tx_info)) in ath_set_rates()
207 ieee80211_get_tx_rates(vif, sta, bf->bf_mpdu, bf->rates, in ath_set_rates()
208 ARRAY_SIZE(bf->rates)); in ath_set_rates()
283 struct ath_buf *bf; in ath_tx_flush_tid() local
295 bf = fi->bf; in ath_tx_flush_tid()
296 if (!bf) { in ath_tx_flush_tid()
303 ath_tx_update_baw(sc, tid, bf); in ath_tx_flush_tid()
307 list_add_tail(&bf->list, &bf_head); in ath_tx_flush_tid()
308 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tx_flush_tid()
319 struct ath_buf *bf) in ath_tx_update_baw() argument
321 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_update_baw()
322 u16 seqno = bf->bf_state.seqno; in ath_tx_update_baw()
342 struct ath_buf *bf) in ath_tx_addto_baw() argument
344 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_addto_baw()
345 u16 seqno = bf->bf_state.seqno; in ath_tx_addto_baw()
368 struct ath_buf *bf; in ath_tid_drain() local
378 bf = fi->bf; in ath_tid_drain()
380 if (!bf) { in ath_tid_drain()
385 list_add_tail(&bf->list, &bf_head); in ath_tid_drain()
386 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tid_drain()
394 struct ath_buf *bf = fi->bf; in ath_tx_set_retry() local
406 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_set_retry()
412 struct ath_buf *bf = NULL; in ath_tx_get_buffer() local
421 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); in ath_tx_get_buffer()
422 list_del(&bf->list); in ath_tx_get_buffer()
426 return bf; in ath_tx_get_buffer()
429 static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_return_buffer() argument
432 list_add_tail(&bf->list, &sc->tx.txbuf); in ath_tx_return_buffer()
436 static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf) in ath_clone_txbuf() argument
446 tbf->bf_mpdu = bf->bf_mpdu; in ath_clone_txbuf()
447 tbf->bf_buf_addr = bf->bf_buf_addr; in ath_clone_txbuf()
448 memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len); in ath_clone_txbuf()
449 tbf->bf_state = bf->bf_state; in ath_clone_txbuf()
455 static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_count_frames() argument
467 isaggr = bf_isaggr(bf); in ath_tx_count_frames()
475 while (bf) { in ath_tx_count_frames()
476 ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno); in ath_tx_count_frames()
482 bf = bf->bf_next; in ath_tx_count_frames()
488 struct ath_buf *bf, struct list_head *bf_q, in ath_tx_complete_aggr() argument
496 struct ath_buf *bf_next, *bf_last = bf->bf_lastbf; in ath_tx_complete_aggr()
510 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
513 memcpy(rates, bf->rates, sizeof(rates)); in ath_tx_complete_aggr()
521 while (bf) { in ath_tx_complete_aggr()
522 bf_next = bf->bf_next; in ath_tx_complete_aggr()
524 if (!bf->bf_state.stale || bf_next != NULL) in ath_tx_complete_aggr()
525 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
527 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, ts, 0); in ath_tx_complete_aggr()
529 bf = bf_next; in ath_tx_complete_aggr()
549 isaggr = bf_isaggr(bf); in ath_tx_complete_aggr()
571 ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); in ath_tx_complete_aggr()
572 while (bf) { in ath_tx_complete_aggr()
573 u16 seqno = bf->bf_state.seqno; in ath_tx_complete_aggr()
576 bf_next = bf->bf_next; in ath_tx_complete_aggr()
578 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
600 ath_tx_set_retry(sc, txq, bf->bf_mpdu, in ath_tx_complete_aggr()
617 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
624 ath_tx_update_baw(sc, tid, bf); in ath_tx_complete_aggr()
628 ath_tx_rc_status(sc, bf, ts, nframes, nbad, txok); in ath_tx_complete_aggr()
630 if (bf == bf->bf_lastbf) in ath_tx_complete_aggr()
632 bf->bf_mpdu, in ath_tx_complete_aggr()
636 ath_tx_complete_buf(sc, bf, txq, &bf_head, sta, ts, in ath_tx_complete_aggr()
644 if (bf->bf_next == NULL && bf_last->bf_state.stale) { in ath_tx_complete_aggr()
654 ath_tx_update_baw(sc, tid, bf); in ath_tx_complete_aggr()
656 ath_tx_complete_buf(sc, bf, txq, in ath_tx_complete_aggr()
664 fi->bf = tbf; in ath_tx_complete_aggr()
674 bf = bf_next; in ath_tx_complete_aggr()
705 static bool bf_is_ampdu_not_probing(struct ath_buf *bf) in bf_is_ampdu_not_probing() argument
707 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); in bf_is_ampdu_not_probing()
708 return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE); in bf_is_ampdu_not_probing()
713 struct ath_buf *bf, in ath_tx_count_airtime() argument
722 int rate_dur = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, i); in ath_tx_count_airtime()
723 airtime += rate_dur * bf->rates[i].count; in ath_tx_count_airtime()
730 struct ath_tx_status *ts, struct ath_buf *bf, in ath_tx_process_buffer() argument
745 if (bf_is_ampdu_not_probing(bf)) in ath_tx_process_buffer()
748 ts->duration = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, in ath_tx_process_buffer()
751 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath_tx_process_buffer()
755 tid = ath_get_skb_tid(sc, an, bf->bf_mpdu); in ath_tx_process_buffer()
756 ath_tx_count_airtime(sc, sta, bf, ts, tid->tidno); in ath_tx_process_buffer()
761 if (!bf_isampdu(bf)) { in ath_tx_process_buffer()
763 info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_process_buffer()
764 memcpy(info->control.rates, bf->rates, in ath_tx_process_buffer()
766 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); in ath_tx_process_buffer()
767 ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts, in ath_tx_process_buffer()
770 ath_tx_complete_buf(sc, bf, txq, bf_head, sta, ts, txok); in ath_tx_process_buffer()
772 ath_tx_complete_aggr(sc, txq, bf, bf_head, sta, tid, ts, txok); in ath_tx_process_buffer()
778 static bool ath_lookup_legacy(struct ath_buf *bf) in ath_lookup_legacy() argument
785 skb = bf->bf_mpdu; in ath_lookup_legacy()
800 static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_lookup_rate() argument
811 skb = bf->bf_mpdu; in ath_lookup_rate()
813 rates = bf->rates; in ath_lookup_rate()
872 struct ath_buf *bf, u16 frmlen, in ath_compute_num_delims() argument
880 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_compute_num_delims()
916 rix = bf->rates[0].idx; in ath_compute_num_delims()
917 flags = bf->rates[0].flags; in ath_compute_num_delims()
947 struct ath_buf *bf; in ath_tx_get_tid_subframe() local
958 bf = fi->bf; in ath_tx_get_tid_subframe()
959 if (!fi->bf) in ath_tx_get_tid_subframe()
960 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_get_tid_subframe()
962 bf->bf_state.stale = false; in ath_tx_get_tid_subframe()
964 if (!bf) { in ath_tx_get_tid_subframe()
970 bf->bf_next = NULL; in ath_tx_get_tid_subframe()
971 bf->bf_lastbf = bf; in ath_tx_get_tid_subframe()
986 bf->bf_state.bf_type = 0; in ath_tx_get_tid_subframe()
990 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; in ath_tx_get_tid_subframe()
991 seqno = bf->bf_state.seqno; in ath_tx_get_tid_subframe()
1014 list_add(&bf->list, &bf_head); in ath_tx_get_tid_subframe()
1015 ath_tx_update_baw(sc, tid, bf); in ath_tx_get_tid_subframe()
1016 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tx_get_tid_subframe()
1020 if (bf_isampdu(bf)) in ath_tx_get_tid_subframe()
1021 ath_tx_addto_baw(sc, tid, bf); in ath_tx_get_tid_subframe()
1026 *buf = bf; in ath_tx_get_tid_subframe()
1036 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_aggr() local
1045 bf = bf_first; in ath_tx_form_aggr()
1046 aggr_limit = ath_lookup_rate(sc, bf, tid); in ath_tx_form_aggr()
1048 while (bf) in ath_tx_form_aggr()
1050 skb = bf->bf_mpdu; in ath_tx_form_aggr()
1057 ath_lookup_legacy(bf) || nframes >= h_baw) in ath_tx_form_aggr()
1060 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_aggr()
1078 bf->bf_next = NULL; in ath_tx_form_aggr()
1081 bf->bf_state.ndelim = ndelim; in ath_tx_form_aggr()
1083 list_add_tail(&bf->list, bf_q); in ath_tx_form_aggr()
1085 bf_prev->bf_next = bf; in ath_tx_form_aggr()
1087 bf_prev = bf; in ath_tx_form_aggr()
1089 ret = ath_tx_get_tid_subframe(sc, txq, tid, &bf); in ath_tx_form_aggr()
1095 __skb_queue_tail(&tid->retry_q, bf->bf_mpdu); in ath_tx_form_aggr()
1097 bf = bf_first; in ath_tx_form_aggr()
1098 bf->bf_lastbf = bf_prev; in ath_tx_form_aggr()
1100 if (bf == bf_prev) { in ath_tx_form_aggr()
1101 al = get_frame_info(bf->bf_mpdu)->framelen; in ath_tx_form_aggr()
1102 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_form_aggr()
1178 static u8 ath_get_rate_txpower(struct ath_softc *sc, struct ath_buf *bf, in ath_get_rate_txpower() argument
1191 skb = bf->bf_mpdu; in ath_get_rate_txpower()
1250 } else if (!bf->bf_state.bfs_paprd) { in ath_get_rate_txpower()
1264 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_buf_set_rate() argument
1274 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_buf_set_rate()
1279 skb = bf->bf_mpdu; in ath_buf_set_rate()
1281 rates = bf->rates; in ath_buf_set_rate()
1288 for (i = 0; i < ARRAY_SIZE(bf->rates); i++) { in ath_buf_set_rate()
1301 if (bf_isampdu(bf) && !bf_isaggr(bf) && in ath_buf_set_rate()
1340 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, in ath_buf_set_rate()
1361 if (bf->bf_state.bfs_paprd) in ath_buf_set_rate()
1371 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, false, in ath_buf_set_rate()
1376 if (bf_isaggr(bf) && (len > sc->sc_ah->caps.rts_aggr_limit)) in ath_buf_set_rate()
1407 static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_fill_desc() argument
1421 while (bf) { in ath_tx_fill_desc()
1422 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_fill_desc()
1425 bool aggr = !!(bf->bf_state.bf_type & BUF_AGGR); in ath_tx_fill_desc()
1428 if (bf->bf_next) in ath_tx_fill_desc()
1429 info.link = bf->bf_next->bf_daddr; in ath_tx_fill_desc()
1431 info.link = (sc->tx99_state) ? bf->bf_daddr : 0; in ath_tx_fill_desc()
1434 bf_first = bf; in ath_tx_fill_desc()
1447 if (bf->bf_state.bfs_paprd) in ath_tx_fill_desc()
1448 info.flags |= (u32) bf->bf_state.bfs_paprd << in ath_tx_fill_desc()
1458 if (aggr && (bf == bf_first) && in ath_tx_fill_desc()
1470 ath_buf_set_rate(sc, bf, &info, len, rts); in ath_tx_fill_desc()
1473 info.buf_addr[0] = bf->bf_buf_addr; in ath_tx_fill_desc()
1480 if (bf == bf_first) in ath_tx_fill_desc()
1482 else if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1487 info.ndelim = bf->bf_state.ndelim; in ath_tx_fill_desc()
1491 if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1494 ath9k_hw_set_txdesc(ah, bf->bf_desc, &info); in ath_tx_fill_desc()
1495 bf = bf->bf_next; in ath_tx_fill_desc()
1504 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_burst() local
1511 list_add_tail(&bf->list, bf_q); in ath_tx_form_burst()
1513 bf_prev->bf_next = bf; in ath_tx_form_burst()
1514 bf_prev = bf; in ath_tx_form_burst()
1519 ret = ath_tx_get_tid_subframe(sc, txq, tid, &bf); in ath_tx_form_burst()
1523 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_burst()
1525 __skb_queue_tail(&tid->retry_q, bf->bf_mpdu); in ath_tx_form_burst()
1529 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_form_burst()
1536 struct ath_buf *bf = NULL; in ath_tx_sched_aggr() local
1544 ret = ath_tx_get_tid_subframe(sc, txq, tid, &bf); in ath_tx_sched_aggr()
1548 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_sched_aggr()
1552 __skb_queue_tail(&tid->retry_q, bf->bf_mpdu); in ath_tx_sched_aggr()
1556 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_sched_aggr()
1558 aggr_len = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf); in ath_tx_sched_aggr()
1560 ath_tx_form_burst(sc, txq, tid, &bf_q, bf); in ath_tx_sched_aggr()
1570 ath_tx_fill_desc(sc, bf, txq, aggr_len); in ath_tx_sched_aggr()
1674 ath9k_set_moredata(struct ath_softc *sc, struct ath_buf *bf, bool val) in ath9k_set_moredata() argument
1686 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath9k_set_moredata()
1689 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath9k_set_moredata()
1705 struct ath_buf *bf_tail = NULL, *bf = NULL; in ath9k_release_buffered_frames() local
1720 tid, &bf); in ath9k_release_buffered_frames()
1724 ath9k_set_moredata(sc, bf, true); in ath9k_release_buffered_frames()
1725 list_add_tail(&bf->list, &bf_q); in ath9k_release_buffered_frames()
1726 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath9k_release_buffered_frames()
1727 if (bf_isampdu(bf)) in ath9k_release_buffered_frames()
1728 bf->bf_state.bf_type &= ~BUF_AGGR; in ath9k_release_buffered_frames()
1730 bf_tail->bf_next = bf; in ath9k_release_buffered_frames()
1732 bf_tail = bf; in ath9k_release_buffered_frames()
1751 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath9k_release_buffered_frames()
1753 ath_tx_fill_desc(sc, bf, txq, 0); in ath9k_release_buffered_frames()
1879 struct ath_buf *bf, *lastbf; in ath_drain_txq_list() local
1888 bf = list_first_entry(list, struct ath_buf, list); in ath_drain_txq_list()
1890 if (bf->bf_state.stale) { in ath_drain_txq_list()
1891 list_del(&bf->list); in ath_drain_txq_list()
1893 ath_tx_return_buffer(sc, bf); in ath_drain_txq_list()
1897 lastbf = bf->bf_lastbf; in ath_drain_txq_list()
1899 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_drain_txq_list()
2050 struct ath_buf *bf, *bf_last; in ath_tx_txqaddbuf() local
2063 bf = list_first_entry(head, struct ath_buf, list); in ath_tx_txqaddbuf()
2077 ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr); in ath_tx_txqaddbuf()
2080 ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2089 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr); in ath_tx_txqaddbuf()
2091 txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2100 while (bf) { in ath_tx_txqaddbuf()
2102 if (bf_is_ampdu_not_probing(bf)) in ath_tx_txqaddbuf()
2105 bf_last = bf->bf_lastbf; in ath_tx_txqaddbuf()
2106 bf = bf_last->bf_next; in ath_tx_txqaddbuf()
2118 struct ath_buf *bf = fi->bf; in ath_tx_send_normal() local
2121 list_add_tail(&bf->list, &bf_head); in ath_tx_send_normal()
2122 bf->bf_state.bf_type = 0; in ath_tx_send_normal()
2124 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_send_normal()
2125 ath_tx_addto_baw(sc, tid, bf); in ath_tx_send_normal()
2128 bf->bf_next = NULL; in ath_tx_send_normal()
2129 bf->bf_lastbf = bf; in ath_tx_send_normal()
2130 ath_tx_fill_desc(sc, bf, txq, fi->framelen); in ath_tx_send_normal()
2225 struct ath_buf *bf; in ath_tx_setup_buffer() local
2229 bf = ath_tx_get_buffer(sc); in ath_tx_setup_buffer()
2230 if (!bf) { in ath_tx_setup_buffer()
2235 ATH_TXBUF_RESET(bf); in ath_tx_setup_buffer()
2248 bf->bf_state.seqno = seqno; in ath_tx_setup_buffer()
2251 bf->bf_mpdu = skb; in ath_tx_setup_buffer()
2253 bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, in ath_tx_setup_buffer()
2255 if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) { in ath_tx_setup_buffer()
2256 bf->bf_mpdu = NULL; in ath_tx_setup_buffer()
2257 bf->bf_buf_addr = 0; in ath_tx_setup_buffer()
2260 ath_tx_return_buffer(sc, bf); in ath_tx_setup_buffer()
2264 fi->bf = bf; in ath_tx_setup_buffer()
2266 return bf; in ath_tx_setup_buffer()
2349 struct ath_buf *bf; in ath_tx_start() local
2380 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_start()
2381 if (!bf) { in ath_tx_start()
2390 bf->bf_state.bfs_paprd = txctl->paprd; in ath_tx_start()
2393 bf->bf_state.bfs_paprd_timestamp = jiffies; in ath_tx_start()
2395 ath_set_rates(vif, sta, bf); in ath_tx_start()
2413 struct ath_buf *bf; in ath_tx_cabq() local
2428 bf = ath_tx_setup_buffer(sc, txctl.txq, NULL, skb); in ath_tx_cabq()
2429 if (!bf) in ath_tx_cabq()
2432 bf->bf_lastbf = bf; in ath_tx_cabq()
2433 ath_set_rates(vif, NULL, bf); in ath_tx_cabq()
2434 ath_buf_set_rate(sc, bf, &info, fi->framelen, false); in ath_tx_cabq()
2437 bf_tail->bf_next = bf; in ath_tx_cabq()
2439 list_add_tail(&bf->list, &bf_q); in ath_tx_cabq()
2440 bf_tail = bf; in ath_tx_cabq()
2455 bf = list_last_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2456 ath9k_set_moredata(sc, bf, false); in ath_tx_cabq()
2458 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2460 ath_tx_fill_desc(sc, bf, txctl.txq, 0); in ath_tx_cabq()
2522 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_complete_buf() argument
2527 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_complete_buf()
2538 dma_unmap_single(sc->dev, bf->bf_buf_addr, skb->len, DMA_TO_DEVICE); in ath_tx_complete_buf()
2539 bf->bf_buf_addr = 0; in ath_tx_complete_buf()
2543 if (bf->bf_state.bfs_paprd) { in ath_tx_complete_buf()
2545 bf->bf_state.bfs_paprd_timestamp + in ath_tx_complete_buf()
2551 ath_debug_stat_tx(sc, bf, ts, txq, tx_flags); in ath_tx_complete_buf()
2558 bf->bf_mpdu = NULL; in ath_tx_complete_buf()
2578 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_rc_status() argument
2582 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_rc_status()
2639 struct ath_buf *bf, *lastbf, *bf_held = NULL; in ath_tx_processq() local
2659 bf = list_first_entry(&txq->axq_q, struct ath_buf, list); in ath_tx_processq()
2670 if (bf->bf_state.stale) { in ath_tx_processq()
2671 bf_held = bf; in ath_tx_processq()
2675 bf = list_entry(bf_held->list.next, struct ath_buf, in ath_tx_processq()
2679 lastbf = bf->bf_lastbf; in ath_tx_processq()
2705 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_processq()
2730 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()
2930 struct ath_buf *bf; in ath9k_tx99_send() local
2951 bf = ath_tx_setup_buffer(sc, txctl->txq, NULL, skb); in ath9k_tx99_send()
2952 if (!bf) { in ath9k_tx99_send()
2957 ath_set_rates(sc->tx99_vif, NULL, bf); in ath9k_tx99_send()
2959 ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); in ath9k_tx99_send()