Lines Matching refs:bf

629 ath5k_rxbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf)  in ath5k_rxbuf_setup()  argument
631 struct sk_buff *skb = bf->skb; in ath5k_rxbuf_setup()
636 skb = ath5k_rx_skb_alloc(ah, &bf->skbaddr); in ath5k_rxbuf_setup()
639 bf->skb = skb; in ath5k_rxbuf_setup()
657 ds = bf->desc; in ath5k_rxbuf_setup()
658 ds->ds_link = bf->daddr; /* link to self */ in ath5k_rxbuf_setup()
659 ds->ds_data = bf->skbaddr; in ath5k_rxbuf_setup()
667 *ah->rxlink = bf->daddr; in ath5k_rxbuf_setup()
698 struct ath5k_buf *bf, int idx) in ath5k_get_rate() argument
704 if (bf->rates[idx].idx < 0) { in ath5k_get_rate()
708 return &hw->wiphy->bands[info->band]->bitrates[ bf->rates[idx].idx ]; in ath5k_get_rate()
714 struct ath5k_buf *bf, int idx) in ath5k_get_rate_hw_value() argument
720 rate = ath5k_get_rate(hw, info, bf, idx); in ath5k_get_rate_hw_value()
724 rc_flags = bf->rates[idx].flags; in ath5k_get_rate_hw_value()
732 ath5k_txbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf, in ath5k_txbuf_setup() argument
736 struct ath5k_desc *ds = bf->desc; in ath5k_txbuf_setup()
737 struct sk_buff *skb = bf->skb; in ath5k_txbuf_setup()
751 bf->skbaddr = dma_map_single(ah->dev, skb->data, skb->len, in ath5k_txbuf_setup()
754 if (dma_mapping_error(ah->dev, bf->skbaddr)) in ath5k_txbuf_setup()
757 ieee80211_get_tx_rates(info->control.vif, (control) ? control->sta : NULL, skb, bf->rates, in ath5k_txbuf_setup()
758 ARRAY_SIZE(bf->rates)); in ath5k_txbuf_setup()
760 rate = ath5k_get_rate(ah->hw, info, bf, 0); in ath5k_txbuf_setup()
770 rc_flags = bf->rates[0].flags; in ath5k_txbuf_setup()
772 hw_rate = ath5k_get_rate_hw_value(ah->hw, info, bf, 0); in ath5k_txbuf_setup()
801 bf->rates[0].count, keyidx, ah->ah_tx_ant, flags, in ath5k_txbuf_setup()
813 rate = ath5k_get_rate(ah->hw, info, bf, i); in ath5k_txbuf_setup()
817 mrr_rate[i] = ath5k_get_rate_hw_value(ah->hw, info, bf, i); in ath5k_txbuf_setup()
818 mrr_tries[i] = bf->rates[i].count; in ath5k_txbuf_setup()
828 ds->ds_data = bf->skbaddr; in ath5k_txbuf_setup()
831 list_add_tail(&bf->list, &txq->q); in ath5k_txbuf_setup()
834 ath5k_hw_set_txdp(ah, txq->qnum, bf->daddr); in ath5k_txbuf_setup()
836 *txq->link = bf->daddr; in ath5k_txbuf_setup()
844 dma_unmap_single(ah->dev, bf->skbaddr, skb->len, DMA_TO_DEVICE); in ath5k_txbuf_setup()
856 struct ath5k_buf *bf; in ath5k_desc_alloc() local
877 bf = kcalloc(1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF, in ath5k_desc_alloc()
879 if (bf == NULL) { in ath5k_desc_alloc()
884 ah->bufptr = bf; in ath5k_desc_alloc()
887 for (i = 0; i < ATH_RXBUF; i++, bf++, ds++, da += sizeof(*ds)) { in ath5k_desc_alloc()
888 bf->desc = ds; in ath5k_desc_alloc()
889 bf->daddr = da; in ath5k_desc_alloc()
890 list_add_tail(&bf->list, &ah->rxbuf); in ath5k_desc_alloc()
895 for (i = 0; i < ATH_TXBUF; i++, bf++, ds++, da += sizeof(*ds)) { in ath5k_desc_alloc()
896 bf->desc = ds; in ath5k_desc_alloc()
897 bf->daddr = da; in ath5k_desc_alloc()
898 list_add_tail(&bf->list, &ah->txbuf); in ath5k_desc_alloc()
903 for (i = 0; i < ATH_BCBUF; i++, bf++, ds++, da += sizeof(*ds)) { in ath5k_desc_alloc()
904 bf->desc = ds; in ath5k_desc_alloc()
905 bf->daddr = da; in ath5k_desc_alloc()
906 list_add_tail(&bf->list, &ah->bcbuf); in ath5k_desc_alloc()
918 ath5k_txbuf_free_skb(struct ath5k_hw *ah, struct ath5k_buf *bf) in ath5k_txbuf_free_skb() argument
920 BUG_ON(!bf); in ath5k_txbuf_free_skb()
921 if (!bf->skb) in ath5k_txbuf_free_skb()
923 dma_unmap_single(ah->dev, bf->skbaddr, bf->skb->len, in ath5k_txbuf_free_skb()
925 ieee80211_free_txskb(ah->hw, bf->skb); in ath5k_txbuf_free_skb()
926 bf->skb = NULL; in ath5k_txbuf_free_skb()
927 bf->skbaddr = 0; in ath5k_txbuf_free_skb()
928 bf->desc->ds_data = 0; in ath5k_txbuf_free_skb()
932 ath5k_rxbuf_free_skb(struct ath5k_hw *ah, struct ath5k_buf *bf) in ath5k_rxbuf_free_skb() argument
936 BUG_ON(!bf); in ath5k_rxbuf_free_skb()
937 if (!bf->skb) in ath5k_rxbuf_free_skb()
939 dma_unmap_single(ah->dev, bf->skbaddr, common->rx_bufsize, in ath5k_rxbuf_free_skb()
941 dev_kfree_skb_any(bf->skb); in ath5k_rxbuf_free_skb()
942 bf->skb = NULL; in ath5k_rxbuf_free_skb()
943 bf->skbaddr = 0; in ath5k_rxbuf_free_skb()
944 bf->desc->ds_data = 0; in ath5k_rxbuf_free_skb()
950 struct ath5k_buf *bf; in ath5k_desc_free() local
952 list_for_each_entry(bf, &ah->txbuf, list) in ath5k_desc_free()
953 ath5k_txbuf_free_skb(ah, bf); in ath5k_desc_free()
954 list_for_each_entry(bf, &ah->rxbuf, list) in ath5k_desc_free()
955 ath5k_rxbuf_free_skb(ah, bf); in ath5k_desc_free()
956 list_for_each_entry(bf, &ah->bcbuf, list) in ath5k_desc_free()
957 ath5k_txbuf_free_skb(ah, bf); in ath5k_desc_free()
1113 struct ath5k_buf *bf, *bf0; in ath5k_drain_tx_buffs() local
1120 list_for_each_entry_safe(bf, bf0, &txq->q, list) { in ath5k_drain_tx_buffs()
1121 ath5k_debug_printtxbuf(ah, bf); in ath5k_drain_tx_buffs()
1123 ath5k_txbuf_free_skb(ah, bf); in ath5k_drain_tx_buffs()
1126 list_move_tail(&bf->list, &ah->txbuf); in ath5k_drain_tx_buffs()
1163 struct ath5k_buf *bf; in ath5k_rx_start() local
1173 list_for_each_entry(bf, &ah->rxbuf, list) { in ath5k_rx_start()
1174 ret = ath5k_rxbuf_setup(ah, bf); in ath5k_rx_start()
1180 bf = list_first_entry(&ah->rxbuf, struct ath5k_buf, list); in ath5k_rx_start()
1181 ath5k_hw_set_rxdp(ah, bf->daddr); in ath5k_rx_start()
1546 struct ath5k_buf *bf; in ath5k_tasklet_rx() local
1556 bf = list_first_entry(&ah->rxbuf, struct ath5k_buf, list); in ath5k_tasklet_rx()
1557 BUG_ON(bf->skb == NULL); in ath5k_tasklet_rx()
1558 skb = bf->skb; in ath5k_tasklet_rx()
1559 ds = bf->desc; in ath5k_tasklet_rx()
1562 if (ath5k_hw_get_rxdp(ah) == bf->daddr) in ath5k_tasklet_rx()
1584 dma_unmap_single(ah->dev, bf->skbaddr, in ath5k_tasklet_rx()
1592 bf->skb = next_skb; in ath5k_tasklet_rx()
1593 bf->skbaddr = next_skb_addr; in ath5k_tasklet_rx()
1596 list_move_tail(&bf->list, &ah->rxbuf); in ath5k_tasklet_rx()
1597 } while (ath5k_rxbuf_setup(ah, bf) == 0); in ath5k_tasklet_rx()
1614 struct ath5k_buf *bf; in ath5k_tx_queue() local
1642 bf = list_first_entry(&ah->txbuf, struct ath5k_buf, list); in ath5k_tx_queue()
1643 list_del(&bf->list); in ath5k_tx_queue()
1649 bf->skb = skb; in ath5k_tx_queue()
1651 if (ath5k_txbuf_setup(ah, bf, txq, padsize, control)) { in ath5k_tx_queue()
1652 bf->skb = NULL; in ath5k_tx_queue()
1654 list_add_tail(&bf->list, &ah->txbuf); in ath5k_tx_queue()
1668 struct ath5k_buf *bf) in ath5k_tx_frame_completed() argument
1679 size = min_t(int, sizeof(info->status.rates), sizeof(bf->rates)); in ath5k_tx_frame_completed()
1680 memcpy(info->status.rates, bf->rates, size); in ath5k_tx_frame_completed()
1735 struct ath5k_buf *bf, *bf0; in ath5k_tx_processq() local
1741 list_for_each_entry_safe(bf, bf0, &txq->q, list) { in ath5k_tx_processq()
1746 if (bf->skb != NULL) { in ath5k_tx_processq()
1747 ds = bf->desc; in ath5k_tx_processq()
1759 skb = bf->skb; in ath5k_tx_processq()
1760 bf->skb = NULL; in ath5k_tx_processq()
1762 dma_unmap_single(ah->dev, bf->skbaddr, skb->len, in ath5k_tx_processq()
1764 ath5k_tx_frame_completed(ah, skb, txq, &ts, bf); in ath5k_tx_processq()
1773 if (ath5k_hw_get_txdp(ah, txq->qnum) != bf->daddr) { in ath5k_tx_processq()
1775 list_move_tail(&bf->list, &ah->txbuf); in ath5k_tx_processq()
1809 ath5k_beacon_setup(struct ath5k_hw *ah, struct ath5k_buf *bf) in ath5k_beacon_setup() argument
1811 struct sk_buff *skb = bf->skb; in ath5k_beacon_setup()
1819 bf->skbaddr = dma_map_single(ah->dev, skb->data, skb->len, in ath5k_beacon_setup()
1823 (unsigned long long)bf->skbaddr); in ath5k_beacon_setup()
1825 if (dma_mapping_error(ah->dev, bf->skbaddr)) { in ath5k_beacon_setup()
1828 bf->skb = NULL; in ath5k_beacon_setup()
1832 ds = bf->desc; in ath5k_beacon_setup()
1837 ds->ds_link = bf->daddr; /* self-linked */ in ath5k_beacon_setup()
1867 ds->ds_data = bf->skbaddr; in ath5k_beacon_setup()
1880 dma_unmap_single(ah->dev, bf->skbaddr, skb->len, DMA_TO_DEVICE); in ath5k_beacon_setup()
1932 struct ath5k_buf *bf; in ath5k_beacon_send() local
1983 bf = avf->bbuf; in ath5k_beacon_send()
2003 if (unlikely(bf->skb == NULL || ah->opmode == NL80211_IFTYPE_STATION || in ath5k_beacon_send()
2005 ATH5K_WARN(ah, "bf=%p bf_skb=%p\n", bf, bf->skb); in ath5k_beacon_send()
2009 trace_ath5k_tx(ah, bf->skb, &ah->txqs[ah->bhalq]); in ath5k_beacon_send()
2011 ath5k_hw_set_txdp(ah, ah->bhalq, bf->daddr); in ath5k_beacon_send()
2014 ah->bhalq, (unsigned long long)bf->daddr, bf->desc); in ath5k_beacon_send()