Commit 575fc895 authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

ath10k: clean up cont frag desc init code

This makes the code easier to extend and re-use.

While at it fix _warn to _err. Other than that
there are no functional changes.
Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 9b783763
...@@ -97,6 +97,41 @@ void ath10k_htt_tx_free_msdu_id(struct ath10k_htt *htt, u16 msdu_id) ...@@ -97,6 +97,41 @@ void ath10k_htt_tx_free_msdu_id(struct ath10k_htt *htt, u16 msdu_id)
idr_remove(&htt->pending_tx, msdu_id); idr_remove(&htt->pending_tx, msdu_id);
} }
static void ath10k_htt_tx_free_cont_frag_desc(struct ath10k_htt *htt)
{
size_t size;
if (!htt->frag_desc.vaddr)
return;
size = htt->max_num_pending_tx * sizeof(struct htt_msdu_ext_desc);
dma_free_coherent(htt->ar->dev,
size,
htt->frag_desc.vaddr,
htt->frag_desc.paddr);
}
static int ath10k_htt_tx_alloc_cont_frag_desc(struct ath10k_htt *htt)
{
struct ath10k *ar = htt->ar;
size_t size;
if (!ar->hw_params.continuous_frag_desc)
return 0;
size = htt->max_num_pending_tx * sizeof(struct htt_msdu_ext_desc);
htt->frag_desc.vaddr = dma_alloc_coherent(ar->dev, size,
&htt->frag_desc.paddr,
GFP_KERNEL);
if (!htt->frag_desc.vaddr) {
ath10k_err(ar, "failed to alloc fragment desc memory\n");
return -ENOMEM;
}
return 0;
}
int ath10k_htt_tx_alloc(struct ath10k_htt *htt) int ath10k_htt_tx_alloc(struct ath10k_htt *htt)
{ {
struct ath10k *ar = htt->ar; struct ath10k *ar = htt->ar;
...@@ -118,20 +153,12 @@ int ath10k_htt_tx_alloc(struct ath10k_htt *htt) ...@@ -118,20 +153,12 @@ int ath10k_htt_tx_alloc(struct ath10k_htt *htt)
goto free_idr_pending_tx; goto free_idr_pending_tx;
} }
if (!ar->hw_params.continuous_frag_desc) ret = ath10k_htt_tx_alloc_cont_frag_desc(htt);
goto skip_frag_desc_alloc; if (ret) {
ath10k_err(ar, "failed to alloc cont frag desc: %d\n", ret);
size = htt->max_num_pending_tx * sizeof(struct htt_msdu_ext_desc);
htt->frag_desc.vaddr = dma_alloc_coherent(ar->dev, size,
&htt->frag_desc.paddr,
GFP_KERNEL);
if (!htt->frag_desc.vaddr) {
ath10k_warn(ar, "failed to alloc fragment desc memory\n");
ret = -ENOMEM;
goto free_txbuf; goto free_txbuf;
} }
skip_frag_desc_alloc:
return 0; return 0;
free_txbuf: free_txbuf:
...@@ -139,8 +166,10 @@ int ath10k_htt_tx_alloc(struct ath10k_htt *htt) ...@@ -139,8 +166,10 @@ int ath10k_htt_tx_alloc(struct ath10k_htt *htt)
sizeof(struct ath10k_htt_txbuf); sizeof(struct ath10k_htt_txbuf);
dma_free_coherent(htt->ar->dev, size, htt->txbuf.vaddr, dma_free_coherent(htt->ar->dev, size, htt->txbuf.vaddr,
htt->txbuf.paddr); htt->txbuf.paddr);
free_idr_pending_tx: free_idr_pending_tx:
idr_destroy(&htt->pending_tx); idr_destroy(&htt->pending_tx);
return ret; return ret;
} }
...@@ -174,12 +203,7 @@ void ath10k_htt_tx_free(struct ath10k_htt *htt) ...@@ -174,12 +203,7 @@ void ath10k_htt_tx_free(struct ath10k_htt *htt)
htt->txbuf.paddr); htt->txbuf.paddr);
} }
if (htt->frag_desc.vaddr) { ath10k_htt_tx_free_cont_frag_desc(htt);
size = htt->max_num_pending_tx *
sizeof(struct htt_msdu_ext_desc);
dma_free_coherent(htt->ar->dev, size, htt->frag_desc.vaddr,
htt->frag_desc.paddr);
}
} }
void ath10k_htt_htc_tx_complete(struct ath10k *ar, struct sk_buff *skb) void ath10k_htt_htc_tx_complete(struct ath10k *ar, struct sk_buff *skb)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment