Lines Matching refs:bf

628 ath5k_rxbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf)  in ath5k_rxbuf_setup()  argument
630 struct sk_buff *skb = bf->skb; in ath5k_rxbuf_setup()
635 skb = ath5k_rx_skb_alloc(ah, &bf->skbaddr); in ath5k_rxbuf_setup()
638 bf->skb = skb; in ath5k_rxbuf_setup()
656 ds = bf->desc; in ath5k_rxbuf_setup()
657 ds->ds_link = bf->daddr; /* link to self */ in ath5k_rxbuf_setup()
658 ds->ds_data = bf->skbaddr; in ath5k_rxbuf_setup()
666 *ah->rxlink = bf->daddr; in ath5k_rxbuf_setup()
697 struct ath5k_buf *bf, int idx) in ath5k_get_rate() argument
703 if (bf->rates[idx].idx < 0) { in ath5k_get_rate()
707 return &hw->wiphy->bands[info->band]->bitrates[ bf->rates[idx].idx ]; in ath5k_get_rate()
713 struct ath5k_buf *bf, int idx) in ath5k_get_rate_hw_value() argument
719 rate = ath5k_get_rate(hw, info, bf, idx); in ath5k_get_rate_hw_value()
723 rc_flags = bf->rates[idx].flags; in ath5k_get_rate_hw_value()
731 ath5k_txbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf, in ath5k_txbuf_setup() argument
735 struct ath5k_desc *ds = bf->desc; in ath5k_txbuf_setup()
736 struct sk_buff *skb = bf->skb; in ath5k_txbuf_setup()
750 bf->skbaddr = dma_map_single(ah->dev, skb->data, skb->len, in ath5k_txbuf_setup()
753 if (dma_mapping_error(ah->dev, bf->skbaddr)) in ath5k_txbuf_setup()
756 ieee80211_get_tx_rates(info->control.vif, (control) ? control->sta : NULL, skb, bf->rates, in ath5k_txbuf_setup()
757 ARRAY_SIZE(bf->rates)); in ath5k_txbuf_setup()
759 rate = ath5k_get_rate(ah->hw, info, bf, 0); in ath5k_txbuf_setup()
769 rc_flags = bf->rates[0].flags; in ath5k_txbuf_setup()
771 hw_rate = ath5k_get_rate_hw_value(ah->hw, info, bf, 0); in ath5k_txbuf_setup()
800 bf->rates[0].count, keyidx, ah->ah_tx_ant, flags, in ath5k_txbuf_setup()
812 rate = ath5k_get_rate(ah->hw, info, bf, i); in ath5k_txbuf_setup()
816 mrr_rate[i] = ath5k_get_rate_hw_value(ah->hw, info, bf, i); in ath5k_txbuf_setup()
817 mrr_tries[i] = bf->rates[i].count; in ath5k_txbuf_setup()
827 ds->ds_data = bf->skbaddr; in ath5k_txbuf_setup()
830 list_add_tail(&bf->list, &txq->q); in ath5k_txbuf_setup()
833 ath5k_hw_set_txdp(ah, txq->qnum, bf->daddr); in ath5k_txbuf_setup()
835 *txq->link = bf->daddr; in ath5k_txbuf_setup()
843 dma_unmap_single(ah->dev, bf->skbaddr, skb->len, DMA_TO_DEVICE); in ath5k_txbuf_setup()
855 struct ath5k_buf *bf; in ath5k_desc_alloc() local
876 bf = kcalloc(1 + ATH_TXBUF + ATH_RXBUF + ATH_BCBUF, in ath5k_desc_alloc()
878 if (bf == NULL) { in ath5k_desc_alloc()
883 ah->bufptr = bf; in ath5k_desc_alloc()
886 for (i = 0; i < ATH_RXBUF; i++, bf++, ds++, da += sizeof(*ds)) { in ath5k_desc_alloc()
887 bf->desc = ds; in ath5k_desc_alloc()
888 bf->daddr = da; in ath5k_desc_alloc()
889 list_add_tail(&bf->list, &ah->rxbuf); in ath5k_desc_alloc()
894 for (i = 0; i < ATH_TXBUF; i++, bf++, ds++, da += sizeof(*ds)) { in ath5k_desc_alloc()
895 bf->desc = ds; in ath5k_desc_alloc()
896 bf->daddr = da; in ath5k_desc_alloc()
897 list_add_tail(&bf->list, &ah->txbuf); in ath5k_desc_alloc()
902 for (i = 0; i < ATH_BCBUF; i++, bf++, ds++, da += sizeof(*ds)) { in ath5k_desc_alloc()
903 bf->desc = ds; in ath5k_desc_alloc()
904 bf->daddr = da; in ath5k_desc_alloc()
905 list_add_tail(&bf->list, &ah->bcbuf); in ath5k_desc_alloc()
917 ath5k_txbuf_free_skb(struct ath5k_hw *ah, struct ath5k_buf *bf) in ath5k_txbuf_free_skb() argument
919 BUG_ON(!bf); in ath5k_txbuf_free_skb()
920 if (!bf->skb) in ath5k_txbuf_free_skb()
922 dma_unmap_single(ah->dev, bf->skbaddr, bf->skb->len, in ath5k_txbuf_free_skb()
924 ieee80211_free_txskb(ah->hw, bf->skb); in ath5k_txbuf_free_skb()
925 bf->skb = NULL; in ath5k_txbuf_free_skb()
926 bf->skbaddr = 0; in ath5k_txbuf_free_skb()
927 bf->desc->ds_data = 0; in ath5k_txbuf_free_skb()
931 ath5k_rxbuf_free_skb(struct ath5k_hw *ah, struct ath5k_buf *bf) in ath5k_rxbuf_free_skb() argument
935 BUG_ON(!bf); in ath5k_rxbuf_free_skb()
936 if (!bf->skb) in ath5k_rxbuf_free_skb()
938 dma_unmap_single(ah->dev, bf->skbaddr, common->rx_bufsize, in ath5k_rxbuf_free_skb()
940 dev_kfree_skb_any(bf->skb); in ath5k_rxbuf_free_skb()
941 bf->skb = NULL; in ath5k_rxbuf_free_skb()
942 bf->skbaddr = 0; in ath5k_rxbuf_free_skb()
943 bf->desc->ds_data = 0; in ath5k_rxbuf_free_skb()
949 struct ath5k_buf *bf; in ath5k_desc_free() local
951 list_for_each_entry(bf, &ah->txbuf, list) in ath5k_desc_free()
952 ath5k_txbuf_free_skb(ah, bf); in ath5k_desc_free()
953 list_for_each_entry(bf, &ah->rxbuf, list) in ath5k_desc_free()
954 ath5k_rxbuf_free_skb(ah, bf); in ath5k_desc_free()
955 list_for_each_entry(bf, &ah->bcbuf, list) in ath5k_desc_free()
956 ath5k_txbuf_free_skb(ah, bf); in ath5k_desc_free()
1112 struct ath5k_buf *bf, *bf0; in ath5k_drain_tx_buffs() local
1119 list_for_each_entry_safe(bf, bf0, &txq->q, list) { in ath5k_drain_tx_buffs()
1120 ath5k_debug_printtxbuf(ah, bf); in ath5k_drain_tx_buffs()
1122 ath5k_txbuf_free_skb(ah, bf); in ath5k_drain_tx_buffs()
1125 list_move_tail(&bf->list, &ah->txbuf); in ath5k_drain_tx_buffs()
1162 struct ath5k_buf *bf; in ath5k_rx_start() local
1172 list_for_each_entry(bf, &ah->rxbuf, list) { in ath5k_rx_start()
1173 ret = ath5k_rxbuf_setup(ah, bf); in ath5k_rx_start()
1179 bf = list_first_entry(&ah->rxbuf, struct ath5k_buf, list); in ath5k_rx_start()
1180 ath5k_hw_set_rxdp(ah, bf->daddr); in ath5k_rx_start()
1545 struct ath5k_buf *bf; in ath5k_tasklet_rx() local
1555 bf = list_first_entry(&ah->rxbuf, struct ath5k_buf, list); in ath5k_tasklet_rx()
1556 BUG_ON(bf->skb == NULL); in ath5k_tasklet_rx()
1557 skb = bf->skb; in ath5k_tasklet_rx()
1558 ds = bf->desc; in ath5k_tasklet_rx()
1561 if (ath5k_hw_get_rxdp(ah) == bf->daddr) in ath5k_tasklet_rx()
1583 dma_unmap_single(ah->dev, bf->skbaddr, in ath5k_tasklet_rx()
1591 bf->skb = next_skb; in ath5k_tasklet_rx()
1592 bf->skbaddr = next_skb_addr; in ath5k_tasklet_rx()
1595 list_move_tail(&bf->list, &ah->rxbuf); in ath5k_tasklet_rx()
1596 } while (ath5k_rxbuf_setup(ah, bf) == 0); in ath5k_tasklet_rx()
1613 struct ath5k_buf *bf; in ath5k_tx_queue() local
1641 bf = list_first_entry(&ah->txbuf, struct ath5k_buf, list); in ath5k_tx_queue()
1642 list_del(&bf->list); in ath5k_tx_queue()
1648 bf->skb = skb; in ath5k_tx_queue()
1650 if (ath5k_txbuf_setup(ah, bf, txq, padsize, control)) { in ath5k_tx_queue()
1651 bf->skb = NULL; in ath5k_tx_queue()
1653 list_add_tail(&bf->list, &ah->txbuf); in ath5k_tx_queue()
1667 struct ath5k_buf *bf) in ath5k_tx_frame_completed() argument
1678 size = min_t(int, sizeof(info->status.rates), sizeof(bf->rates)); in ath5k_tx_frame_completed()
1679 memcpy(info->status.rates, bf->rates, size); in ath5k_tx_frame_completed()
1734 struct ath5k_buf *bf, *bf0; in ath5k_tx_processq() local
1740 list_for_each_entry_safe(bf, bf0, &txq->q, list) { in ath5k_tx_processq()
1745 if (bf->skb != NULL) { in ath5k_tx_processq()
1746 ds = bf->desc; in ath5k_tx_processq()
1758 skb = bf->skb; in ath5k_tx_processq()
1759 bf->skb = NULL; in ath5k_tx_processq()
1761 dma_unmap_single(ah->dev, bf->skbaddr, skb->len, in ath5k_tx_processq()
1763 ath5k_tx_frame_completed(ah, skb, txq, &ts, bf); in ath5k_tx_processq()
1772 if (ath5k_hw_get_txdp(ah, txq->qnum) != bf->daddr) { in ath5k_tx_processq()
1774 list_move_tail(&bf->list, &ah->txbuf); in ath5k_tx_processq()
1808 ath5k_beacon_setup(struct ath5k_hw *ah, struct ath5k_buf *bf) in ath5k_beacon_setup() argument
1810 struct sk_buff *skb = bf->skb; in ath5k_beacon_setup()
1818 bf->skbaddr = dma_map_single(ah->dev, skb->data, skb->len, in ath5k_beacon_setup()
1822 (unsigned long long)bf->skbaddr); in ath5k_beacon_setup()
1824 if (dma_mapping_error(ah->dev, bf->skbaddr)) { in ath5k_beacon_setup()
1827 bf->skb = NULL; in ath5k_beacon_setup()
1831 ds = bf->desc; in ath5k_beacon_setup()
1836 ds->ds_link = bf->daddr; /* self-linked */ in ath5k_beacon_setup()
1866 ds->ds_data = bf->skbaddr; in ath5k_beacon_setup()
1879 dma_unmap_single(ah->dev, bf->skbaddr, skb->len, DMA_TO_DEVICE); in ath5k_beacon_setup()
1931 struct ath5k_buf *bf; in ath5k_beacon_send() local
1982 bf = avf->bbuf; in ath5k_beacon_send()
2002 if (unlikely(bf->skb == NULL || ah->opmode == NL80211_IFTYPE_STATION || in ath5k_beacon_send()
2004 ATH5K_WARN(ah, "bf=%p bf_skb=%p\n", bf, bf->skb); in ath5k_beacon_send()
2008 trace_ath5k_tx(ah, bf->skb, &ah->txqs[ah->bhalq]); in ath5k_beacon_send()
2010 ath5k_hw_set_txdp(ah, ah->bhalq, bf->daddr); in ath5k_beacon_send()
2013 ah->bhalq, (unsigned long long)bf->daddr, bf->desc); in ath5k_beacon_send()