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,
65 struct ath_buf *bf);
157 static bool ath_merge_ratetbl(struct ieee80211_sta *sta, struct ath_buf *bf, in ath_merge_ratetbl() argument
175 bf->rates[0] = tx_info->control.rates[0]; in ath_merge_ratetbl()
180 bf->rates[i].idx = ratetbl->rate[i].idx; in ath_merge_ratetbl()
181 bf->rates[i].flags = ratetbl->rate[i].flags; in ath_merge_ratetbl()
183 bf->rates[i].count = ratetbl->rate[i].count_rts; in ath_merge_ratetbl()
185 bf->rates[i].count = ratetbl->rate[i].count_cts; in ath_merge_ratetbl()
187 bf->rates[i].count = ratetbl->rate[i].count; in ath_merge_ratetbl()
194 struct ath_buf *bf) in ath_set_rates() argument
198 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_set_rates()
200 if (!ath_merge_ratetbl(sta, bf, tx_info)) in ath_set_rates()
201 ieee80211_get_tx_rates(vif, sta, bf->bf_mpdu, bf->rates, in ath_set_rates()
202 ARRAY_SIZE(bf->rates)); in ath_set_rates()
277 struct ath_buf *bf; in ath_tx_flush_tid() local
289 bf = fi->bf; in ath_tx_flush_tid()
290 if (!bf) { in ath_tx_flush_tid()
297 ath_tx_update_baw(sc, tid, bf); in ath_tx_flush_tid()
301 list_add_tail(&bf->list, &bf_head); in ath_tx_flush_tid()
302 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tx_flush_tid()
313 struct ath_buf *bf) in ath_tx_update_baw() argument
315 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_update_baw()
316 u16 seqno = bf->bf_state.seqno; in ath_tx_update_baw()
336 struct ath_buf *bf) in ath_tx_addto_baw() argument
338 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_tx_addto_baw()
339 u16 seqno = bf->bf_state.seqno; in ath_tx_addto_baw()
362 struct ath_buf *bf; in ath_tid_drain() local
373 bf = fi->bf; in ath_tid_drain()
375 if (!bf) { in ath_tid_drain()
380 list_add_tail(&bf->list, &bf_head); in ath_tid_drain()
381 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tid_drain()
389 struct ath_buf *bf = fi->bf; in ath_tx_set_retry() local
401 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath_tx_set_retry()
407 struct ath_buf *bf = NULL; in ath_tx_get_buffer() local
416 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); in ath_tx_get_buffer()
417 list_del(&bf->list); in ath_tx_get_buffer()
421 return bf; in ath_tx_get_buffer()
424 static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf) in ath_tx_return_buffer() argument
427 list_add_tail(&bf->list, &sc->tx.txbuf); in ath_tx_return_buffer()
431 static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf) in ath_clone_txbuf() argument
441 tbf->bf_mpdu = bf->bf_mpdu; in ath_clone_txbuf()
442 tbf->bf_buf_addr = bf->bf_buf_addr; in ath_clone_txbuf()
443 memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len); in ath_clone_txbuf()
444 tbf->bf_state = bf->bf_state; in ath_clone_txbuf()
450 static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_count_frames() argument
462 isaggr = bf_isaggr(bf); in ath_tx_count_frames()
468 while (bf) { in ath_tx_count_frames()
469 ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno); in ath_tx_count_frames()
475 bf = bf->bf_next; in ath_tx_count_frames()
481 struct ath_buf *bf, struct list_head *bf_q, in ath_tx_complete_aggr() argument
489 struct ath_buf *bf_next, *bf_last = bf->bf_lastbf; in ath_tx_complete_aggr()
503 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
506 memcpy(rates, bf->rates, sizeof(rates)); in ath_tx_complete_aggr()
514 while (bf) { in ath_tx_complete_aggr()
515 bf_next = bf->bf_next; in ath_tx_complete_aggr()
517 if (!bf->bf_state.stale || bf_next != NULL) in ath_tx_complete_aggr()
518 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
520 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, ts, 0); in ath_tx_complete_aggr()
522 bf = bf_next; in ath_tx_complete_aggr()
542 isaggr = bf_isaggr(bf); in ath_tx_complete_aggr()
564 ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad); in ath_tx_complete_aggr()
565 while (bf) { in ath_tx_complete_aggr()
566 u16 seqno = bf->bf_state.seqno; in ath_tx_complete_aggr()
569 bf_next = bf->bf_next; in ath_tx_complete_aggr()
571 skb = bf->bf_mpdu; in ath_tx_complete_aggr()
593 ath_tx_set_retry(sc, txq, bf->bf_mpdu, in ath_tx_complete_aggr()
610 list_move_tail(&bf->list, &bf_head); in ath_tx_complete_aggr()
617 ath_tx_update_baw(sc, tid, bf); in ath_tx_complete_aggr()
621 ath_tx_rc_status(sc, bf, ts, nframes, nbad, txok); in ath_tx_complete_aggr()
623 if (bf == bf->bf_lastbf) in ath_tx_complete_aggr()
625 bf->bf_mpdu, in ath_tx_complete_aggr()
629 ath_tx_complete_buf(sc, bf, txq, &bf_head, sta, ts, in ath_tx_complete_aggr()
637 if (bf->bf_next == NULL && bf_last->bf_state.stale) { in ath_tx_complete_aggr()
647 ath_tx_update_baw(sc, tid, bf); in ath_tx_complete_aggr()
649 ath_tx_complete_buf(sc, bf, txq, in ath_tx_complete_aggr()
657 fi->bf = tbf; in ath_tx_complete_aggr()
667 bf = bf_next; in ath_tx_complete_aggr()
698 static bool bf_is_ampdu_not_probing(struct ath_buf *bf) in bf_is_ampdu_not_probing() argument
700 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu); in bf_is_ampdu_not_probing()
701 return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE); in bf_is_ampdu_not_probing()
706 struct ath_buf *bf, in ath_tx_count_airtime() argument
715 int rate_dur = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, i); in ath_tx_count_airtime()
716 airtime += rate_dur * bf->rates[i].count; in ath_tx_count_airtime()
723 struct ath_tx_status *ts, struct ath_buf *bf, in ath_tx_process_buffer() argument
738 if (bf_is_ampdu_not_probing(bf)) in ath_tx_process_buffer()
741 ts->duration = ath9k_hw_get_duration(sc->sc_ah, bf->bf_desc, in ath_tx_process_buffer()
744 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath_tx_process_buffer()
748 tid = ath_get_skb_tid(sc, an, bf->bf_mpdu); in ath_tx_process_buffer()
749 ath_tx_count_airtime(sc, sta, bf, ts, tid->tidno); in ath_tx_process_buffer()
754 if (!bf_isampdu(bf)) { in ath_tx_process_buffer()
756 info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_process_buffer()
757 memcpy(info->control.rates, bf->rates, in ath_tx_process_buffer()
759 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok); in ath_tx_process_buffer()
760 ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts, in ath_tx_process_buffer()
763 ath_tx_complete_buf(sc, bf, txq, bf_head, sta, ts, txok); in ath_tx_process_buffer()
765 ath_tx_complete_aggr(sc, txq, bf, bf_head, sta, tid, ts, txok); in ath_tx_process_buffer()
771 static bool ath_lookup_legacy(struct ath_buf *bf) in ath_lookup_legacy() argument
778 skb = bf->bf_mpdu; in ath_lookup_legacy()
793 static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_lookup_rate() argument
804 skb = bf->bf_mpdu; in ath_lookup_rate()
806 rates = bf->rates; in ath_lookup_rate()
865 struct ath_buf *bf, u16 frmlen, in ath_compute_num_delims() argument
873 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_compute_num_delims()
909 rix = bf->rates[0].idx; in ath_compute_num_delims()
910 flags = bf->rates[0].flags; in ath_compute_num_delims()
940 struct ath_buf *bf; in ath_tx_get_tid_subframe() local
951 bf = fi->bf; in ath_tx_get_tid_subframe()
952 if (!fi->bf) in ath_tx_get_tid_subframe()
953 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_get_tid_subframe()
955 bf->bf_state.stale = false; in ath_tx_get_tid_subframe()
957 if (!bf) { in ath_tx_get_tid_subframe()
963 bf->bf_next = NULL; in ath_tx_get_tid_subframe()
964 bf->bf_lastbf = bf; in ath_tx_get_tid_subframe()
979 bf->bf_state.bf_type = 0; in ath_tx_get_tid_subframe()
983 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR; in ath_tx_get_tid_subframe()
984 seqno = bf->bf_state.seqno; in ath_tx_get_tid_subframe()
1007 list_add(&bf->list, &bf_head); in ath_tx_get_tid_subframe()
1008 ath_tx_update_baw(sc, tid, bf); in ath_tx_get_tid_subframe()
1009 ath_tx_complete_buf(sc, bf, txq, &bf_head, NULL, &ts, 0); in ath_tx_get_tid_subframe()
1013 if (bf_isampdu(bf)) in ath_tx_get_tid_subframe()
1014 ath_tx_addto_baw(sc, tid, bf); in ath_tx_get_tid_subframe()
1019 *buf = bf; in ath_tx_get_tid_subframe()
1029 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_aggr() local
1038 bf = bf_first; in ath_tx_form_aggr()
1039 aggr_limit = ath_lookup_rate(sc, bf, tid); in ath_tx_form_aggr()
1041 while (bf) in ath_tx_form_aggr()
1043 skb = bf->bf_mpdu; in ath_tx_form_aggr()
1050 ath_lookup_legacy(bf) || nframes >= h_baw) in ath_tx_form_aggr()
1053 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_aggr()
1071 bf->bf_next = NULL; in ath_tx_form_aggr()
1074 bf->bf_state.ndelim = ndelim; in ath_tx_form_aggr()
1076 list_add_tail(&bf->list, bf_q); in ath_tx_form_aggr()
1078 bf_prev->bf_next = bf; in ath_tx_form_aggr()
1080 bf_prev = bf; in ath_tx_form_aggr()
1082 ret = ath_tx_get_tid_subframe(sc, txq, tid, &bf); in ath_tx_form_aggr()
1088 __skb_queue_tail(&tid->retry_q, bf->bf_mpdu); in ath_tx_form_aggr()
1090 bf = bf_first; in ath_tx_form_aggr()
1091 bf->bf_lastbf = bf_prev; in ath_tx_form_aggr()
1093 if (bf == bf_prev) { in ath_tx_form_aggr()
1094 al = get_frame_info(bf->bf_mpdu)->framelen; in ath_tx_form_aggr()
1095 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_form_aggr()
1171 static u8 ath_get_rate_txpower(struct ath_softc *sc, struct ath_buf *bf, in ath_get_rate_txpower() argument
1183 skb = bf->bf_mpdu; in ath_get_rate_txpower()
1231 } else if (!bf->bf_state.bfs_paprd) { in ath_get_rate_txpower()
1245 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, in ath_buf_set_rate() argument
1255 struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu); in ath_buf_set_rate()
1260 skb = bf->bf_mpdu; in ath_buf_set_rate()
1262 rates = bf->rates; in ath_buf_set_rate()
1269 for (i = 0; i < ARRAY_SIZE(bf->rates); i++) { in ath_buf_set_rate()
1282 if (bf_isampdu(bf) && !bf_isaggr(bf) && in ath_buf_set_rate()
1321 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, in ath_buf_set_rate()
1342 if (bf->bf_state.bfs_paprd) in ath_buf_set_rate()
1352 info->txpower[i] = ath_get_rate_txpower(sc, bf, rix, false, in ath_buf_set_rate()
1357 if (bf_isaggr(bf) && (len > sc->sc_ah->caps.rts_aggr_limit)) in ath_buf_set_rate()
1388 static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_fill_desc() argument
1402 while (bf) { in ath_tx_fill_desc()
1403 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_fill_desc()
1406 bool aggr = !!(bf->bf_state.bf_type & BUF_AGGR); in ath_tx_fill_desc()
1409 if (bf->bf_next) in ath_tx_fill_desc()
1410 info.link = bf->bf_next->bf_daddr; in ath_tx_fill_desc()
1412 info.link = (sc->tx99_state) ? bf->bf_daddr : 0; in ath_tx_fill_desc()
1415 bf_first = bf; in ath_tx_fill_desc()
1428 if (bf->bf_state.bfs_paprd) in ath_tx_fill_desc()
1429 info.flags |= (u32) bf->bf_state.bfs_paprd << in ath_tx_fill_desc()
1439 if (aggr && (bf == bf_first) && in ath_tx_fill_desc()
1451 ath_buf_set_rate(sc, bf, &info, len, rts); in ath_tx_fill_desc()
1454 info.buf_addr[0] = bf->bf_buf_addr; in ath_tx_fill_desc()
1461 if (bf == bf_first) in ath_tx_fill_desc()
1463 else if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1468 info.ndelim = bf->bf_state.ndelim; in ath_tx_fill_desc()
1472 if (bf == bf_first->bf_lastbf) in ath_tx_fill_desc()
1475 ath9k_hw_set_txdesc(ah, bf->bf_desc, &info); in ath_tx_fill_desc()
1476 bf = bf->bf_next; in ath_tx_fill_desc()
1485 struct ath_buf *bf = bf_first, *bf_prev = NULL; in ath_tx_form_burst() local
1492 list_add_tail(&bf->list, bf_q); in ath_tx_form_burst()
1494 bf_prev->bf_next = bf; in ath_tx_form_burst()
1495 bf_prev = bf; in ath_tx_form_burst()
1500 ret = ath_tx_get_tid_subframe(sc, txq, tid, &bf); in ath_tx_form_burst()
1504 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_form_burst()
1506 __skb_queue_tail(&tid->retry_q, bf->bf_mpdu); in ath_tx_form_burst()
1510 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_form_burst()
1517 struct ath_buf *bf = NULL; in ath_tx_sched_aggr() local
1525 ret = ath_tx_get_tid_subframe(sc, txq, tid, &bf); in ath_tx_sched_aggr()
1529 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu); in ath_tx_sched_aggr()
1533 __skb_queue_tail(&tid->retry_q, bf->bf_mpdu); in ath_tx_sched_aggr()
1537 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath_tx_sched_aggr()
1539 aggr_len = ath_tx_form_aggr(sc, txq, tid, &bf_q, bf); in ath_tx_sched_aggr()
1541 ath_tx_form_burst(sc, txq, tid, &bf_q, bf); in ath_tx_sched_aggr()
1551 ath_tx_fill_desc(sc, bf, txq, aggr_len); in ath_tx_sched_aggr()
1655 ath9k_set_moredata(struct ath_softc *sc, struct ath_buf *bf, bool val) in ath9k_set_moredata() argument
1661 hdr = (struct ieee80211_hdr *) bf->bf_mpdu->data; in ath9k_set_moredata()
1664 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, in ath9k_set_moredata()
1680 struct ath_buf *bf_tail = NULL, *bf = NULL; in ath9k_release_buffered_frames() local
1695 tid, &bf); in ath9k_release_buffered_frames()
1699 ath9k_set_moredata(sc, bf, true); in ath9k_release_buffered_frames()
1700 list_add_tail(&bf->list, &bf_q); in ath9k_release_buffered_frames()
1701 ath_set_rates(tid->an->vif, tid->an->sta, bf); in ath9k_release_buffered_frames()
1702 if (bf_isampdu(bf)) in ath9k_release_buffered_frames()
1703 bf->bf_state.bf_type &= ~BUF_AGGR; in ath9k_release_buffered_frames()
1705 bf_tail->bf_next = bf; in ath9k_release_buffered_frames()
1707 bf_tail = bf; in ath9k_release_buffered_frames()
1726 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath9k_release_buffered_frames()
1728 ath_tx_fill_desc(sc, bf, txq, 0); in ath9k_release_buffered_frames()
1854 struct ath_buf *bf, *lastbf; in ath_drain_txq_list() local
1863 bf = list_first_entry(list, struct ath_buf, list); in ath_drain_txq_list()
1865 if (bf->bf_state.stale) { in ath_drain_txq_list()
1866 list_del(&bf->list); in ath_drain_txq_list()
1868 ath_tx_return_buffer(sc, bf); in ath_drain_txq_list()
1872 lastbf = bf->bf_lastbf; in ath_drain_txq_list()
1874 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_drain_txq_list()
2025 struct ath_buf *bf, *bf_last; in ath_tx_txqaddbuf() local
2038 bf = list_first_entry(head, struct ath_buf, list); in ath_tx_txqaddbuf()
2052 ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr); in ath_tx_txqaddbuf()
2055 ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2064 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr); in ath_tx_txqaddbuf()
2066 txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc); in ath_tx_txqaddbuf()
2075 while (bf) { in ath_tx_txqaddbuf()
2077 if (bf_is_ampdu_not_probing(bf)) in ath_tx_txqaddbuf()
2080 bf_last = bf->bf_lastbf; in ath_tx_txqaddbuf()
2081 bf = bf_last->bf_next; in ath_tx_txqaddbuf()
2093 struct ath_buf *bf = fi->bf; in ath_tx_send_normal() local
2096 list_add_tail(&bf->list, &bf_head); in ath_tx_send_normal()
2097 bf->bf_state.bf_type = 0; in ath_tx_send_normal()
2099 bf->bf_state.bf_type = BUF_AMPDU; in ath_tx_send_normal()
2100 ath_tx_addto_baw(sc, tid, bf); in ath_tx_send_normal()
2103 bf->bf_next = NULL; in ath_tx_send_normal()
2104 bf->bf_lastbf = bf; in ath_tx_send_normal()
2105 ath_tx_fill_desc(sc, bf, txq, fi->framelen); in ath_tx_send_normal()
2200 struct ath_buf *bf; in ath_tx_setup_buffer() local
2204 bf = ath_tx_get_buffer(sc); in ath_tx_setup_buffer()
2205 if (!bf) { in ath_tx_setup_buffer()
2210 ATH_TXBUF_RESET(bf); in ath_tx_setup_buffer()
2223 bf->bf_state.seqno = seqno; in ath_tx_setup_buffer()
2226 bf->bf_mpdu = skb; in ath_tx_setup_buffer()
2228 bf->bf_buf_addr = dma_map_single(sc->dev, skb->data, in ath_tx_setup_buffer()
2230 if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) { in ath_tx_setup_buffer()
2231 bf->bf_mpdu = NULL; in ath_tx_setup_buffer()
2232 bf->bf_buf_addr = 0; in ath_tx_setup_buffer()
2235 ath_tx_return_buffer(sc, bf); in ath_tx_setup_buffer()
2239 fi->bf = bf; in ath_tx_setup_buffer()
2241 return bf; in ath_tx_setup_buffer()
2324 struct ath_buf *bf; in ath_tx_start() local
2355 bf = ath_tx_setup_buffer(sc, txq, tid, skb); in ath_tx_start()
2356 if (!bf) { in ath_tx_start()
2365 bf->bf_state.bfs_paprd = txctl->paprd; in ath_tx_start()
2368 bf->bf_state.bfs_paprd_timestamp = jiffies; in ath_tx_start()
2370 ath_set_rates(vif, sta, bf); in ath_tx_start()
2388 struct ath_buf *bf; in ath_tx_cabq() local
2403 bf = ath_tx_setup_buffer(sc, txctl.txq, NULL, skb); in ath_tx_cabq()
2404 if (!bf) in ath_tx_cabq()
2407 bf->bf_lastbf = bf; in ath_tx_cabq()
2408 ath_set_rates(vif, NULL, bf); in ath_tx_cabq()
2409 ath_buf_set_rate(sc, bf, &info, fi->framelen, false); in ath_tx_cabq()
2412 bf_tail->bf_next = bf; in ath_tx_cabq()
2414 list_add_tail(&bf->list, &bf_q); in ath_tx_cabq()
2415 bf_tail = bf; in ath_tx_cabq()
2430 bf = list_last_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2431 ath9k_set_moredata(sc, bf, false); in ath_tx_cabq()
2433 bf = list_first_entry(&bf_q, struct ath_buf, list); in ath_tx_cabq()
2435 ath_tx_fill_desc(sc, bf, txctl.txq, 0); in ath_tx_cabq()
2497 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_complete_buf() argument
2502 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_complete_buf()
2513 dma_unmap_single(sc->dev, bf->bf_buf_addr, skb->len, DMA_TO_DEVICE); in ath_tx_complete_buf()
2514 bf->bf_buf_addr = 0; in ath_tx_complete_buf()
2518 if (bf->bf_state.bfs_paprd) { in ath_tx_complete_buf()
2520 bf->bf_state.bfs_paprd_timestamp + in ath_tx_complete_buf()
2526 ath_debug_stat_tx(sc, bf, ts, txq, tx_flags); in ath_tx_complete_buf()
2533 bf->bf_mpdu = NULL; in ath_tx_complete_buf()
2553 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf, in ath_tx_rc_status() argument
2557 struct sk_buff *skb = bf->bf_mpdu; in ath_tx_rc_status()
2614 struct ath_buf *bf, *lastbf, *bf_held = NULL; in ath_tx_processq() local
2634 bf = list_first_entry(&txq->axq_q, struct ath_buf, list); in ath_tx_processq()
2645 if (bf->bf_state.stale) { in ath_tx_processq()
2646 bf_held = bf; in ath_tx_processq()
2650 bf = list_entry(bf_held->list.next, struct ath_buf, in ath_tx_processq()
2654 lastbf = bf->bf_lastbf; in ath_tx_processq()
2680 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_processq()
2705 struct ath_buf *bf, *lastbf; in ath_tx_edma_tasklet() local
2749 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2750 if (bf->bf_state.stale) { in ath_tx_edma_tasklet()
2751 list_del(&bf->list); in ath_tx_edma_tasklet()
2752 ath_tx_return_buffer(sc, bf); in ath_tx_edma_tasklet()
2753 bf = list_first_entry(fifo_list, struct ath_buf, list); in ath_tx_edma_tasklet()
2756 lastbf = bf->bf_lastbf; in ath_tx_edma_tasklet()
2773 if (bf != lastbf) in ath_tx_edma_tasklet()
2778 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); in ath_tx_edma_tasklet()
2905 struct ath_buf *bf; in ath9k_tx99_send() local
2926 bf = ath_tx_setup_buffer(sc, txctl->txq, NULL, skb); in ath9k_tx99_send()
2927 if (!bf) { in ath9k_tx99_send()
2932 ath_set_rates(sc->tx99_vif, NULL, bf); in ath9k_tx99_send()
2934 ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); in ath9k_tx99_send()