mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
wifi: ath12k: Refactor tx descriptor handling in tx completion handler
Current code uses mac_id and msdu parameters in ath12k_dp_tx_free_txbuf() and ath12k_dp_tx_process_htt_tx_complete(). Since these parameters are already encapsulated by struct ath12k_dp_tx_desc, passing them individually results in redundant arguments. Introduce struct ath12k_tx_desc_params to capture the skb, mac_id, and pass it to the corresponding functions. Refactor these functions to use struct ath12k_tx_desc_params instead, reducing the number of arguments and improving function argument handling efficiency. Additionally, use struct ath12k_tx_desc_params in ath12k_dp_tx_htt_tx_complete_buf() and ath12k_dp_tx_complete_msdu(), which will be utilized for fetching extended skb in a future patch. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Signed-off-by: P Praneesh <praneesh.p@oss.qualcomm.com> Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com> Link: https://patch.msgid.link/20250411060154.1388159-3-praneesh.p@oss.qualcomm.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
parent
37a068fc9d
commit
10ec3d54df
|
|
@ -301,6 +301,11 @@ struct ath12k_tx_desc_info {
|
|||
u8 pool_id;
|
||||
};
|
||||
|
||||
struct ath12k_tx_desc_params {
|
||||
struct sk_buff *skb;
|
||||
u8 mac_id;
|
||||
};
|
||||
|
||||
struct ath12k_spt_info {
|
||||
dma_addr_t paddr;
|
||||
u64 *vaddr;
|
||||
|
|
|
|||
|
|
@ -513,12 +513,13 @@ int ath12k_dp_tx(struct ath12k *ar, struct ath12k_link_vif *arvif,
|
|||
}
|
||||
|
||||
static void ath12k_dp_tx_free_txbuf(struct ath12k_base *ab,
|
||||
struct sk_buff *msdu, u8 mac_id,
|
||||
struct dp_tx_ring *tx_ring)
|
||||
struct dp_tx_ring *tx_ring,
|
||||
struct ath12k_tx_desc_params *desc_params)
|
||||
{
|
||||
struct ath12k *ar;
|
||||
struct sk_buff *msdu = desc_params->skb;
|
||||
struct ath12k_skb_cb *skb_cb;
|
||||
u8 pdev_id = ath12k_hw_mac_id_to_pdev_id(ab->hw_params, mac_id);
|
||||
u8 pdev_id = ath12k_hw_mac_id_to_pdev_id(ab->hw_params, desc_params->mac_id);
|
||||
|
||||
skb_cb = ATH12K_SKB_CB(msdu);
|
||||
ar = ab->pdevs[pdev_id].ar;
|
||||
|
|
@ -536,7 +537,7 @@ static void ath12k_dp_tx_free_txbuf(struct ath12k_base *ab,
|
|||
|
||||
static void
|
||||
ath12k_dp_tx_htt_tx_complete_buf(struct ath12k_base *ab,
|
||||
struct sk_buff *msdu,
|
||||
struct ath12k_tx_desc_params *desc_params,
|
||||
struct dp_tx_ring *tx_ring,
|
||||
struct ath12k_dp_htt_wbm_tx_status *ts)
|
||||
{
|
||||
|
|
@ -546,6 +547,7 @@ ath12k_dp_tx_htt_tx_complete_buf(struct ath12k_base *ab,
|
|||
struct ieee80211_vif *vif;
|
||||
struct ath12k_vif *ahvif;
|
||||
struct ath12k *ar;
|
||||
struct sk_buff *msdu = desc_params->skb;
|
||||
|
||||
skb_cb = ATH12K_SKB_CB(msdu);
|
||||
info = IEEE80211_SKB_CB(msdu);
|
||||
|
|
@ -594,10 +596,9 @@ ath12k_dp_tx_htt_tx_complete_buf(struct ath12k_base *ab,
|
|||
}
|
||||
|
||||
static void
|
||||
ath12k_dp_tx_process_htt_tx_complete(struct ath12k_base *ab,
|
||||
void *desc, u8 mac_id,
|
||||
struct sk_buff *msdu,
|
||||
struct dp_tx_ring *tx_ring)
|
||||
ath12k_dp_tx_process_htt_tx_complete(struct ath12k_base *ab, void *desc,
|
||||
struct dp_tx_ring *tx_ring,
|
||||
struct ath12k_tx_desc_params *desc_params)
|
||||
{
|
||||
struct htt_tx_wbm_completion *status_desc;
|
||||
struct ath12k_dp_htt_wbm_tx_status ts = {0};
|
||||
|
|
@ -613,14 +614,14 @@ ath12k_dp_tx_process_htt_tx_complete(struct ath12k_base *ab,
|
|||
ts.acked = (wbm_status == HAL_WBM_REL_HTT_TX_COMP_STATUS_OK);
|
||||
ts.ack_rssi = le32_get_bits(status_desc->info2,
|
||||
HTT_TX_WBM_COMP_INFO2_ACK_RSSI);
|
||||
ath12k_dp_tx_htt_tx_complete_buf(ab, msdu, tx_ring, &ts);
|
||||
ath12k_dp_tx_htt_tx_complete_buf(ab, desc_params, tx_ring, &ts);
|
||||
break;
|
||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_DROP:
|
||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_TTL:
|
||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_REINJ:
|
||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_INSPECT:
|
||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_VDEVID_MISMATCH:
|
||||
ath12k_dp_tx_free_txbuf(ab, msdu, mac_id, tx_ring);
|
||||
ath12k_dp_tx_free_txbuf(ab, tx_ring, desc_params);
|
||||
break;
|
||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_MEC_NOTIFY:
|
||||
/* This event is to be handled only when the driver decides to
|
||||
|
|
@ -752,7 +753,7 @@ static void ath12k_dp_tx_update_txcompl(struct ath12k *ar, struct hal_tx_status
|
|||
}
|
||||
|
||||
static void ath12k_dp_tx_complete_msdu(struct ath12k *ar,
|
||||
struct sk_buff *msdu,
|
||||
struct ath12k_tx_desc_params *desc_params,
|
||||
struct hal_tx_status *ts)
|
||||
{
|
||||
struct ath12k_base *ab = ar->ab;
|
||||
|
|
@ -762,6 +763,7 @@ static void ath12k_dp_tx_complete_msdu(struct ath12k *ar,
|
|||
struct ath12k_skb_cb *skb_cb;
|
||||
struct ieee80211_vif *vif;
|
||||
struct ath12k_vif *ahvif;
|
||||
struct sk_buff *msdu = desc_params->skb;
|
||||
|
||||
if (WARN_ON_ONCE(ts->buf_rel_source != HAL_WBM_REL_SRC_MODULE_TQM)) {
|
||||
/* Must not happen */
|
||||
|
|
@ -891,11 +893,11 @@ void ath12k_dp_tx_completion_handler(struct ath12k_base *ab, int ring_id)
|
|||
int hal_ring_id = dp->tx_ring[ring_id].tcl_comp_ring.ring_id;
|
||||
struct hal_srng *status_ring = &ab->hal.srng_list[hal_ring_id];
|
||||
struct ath12k_tx_desc_info *tx_desc = NULL;
|
||||
struct sk_buff *msdu;
|
||||
struct hal_tx_status ts = { 0 };
|
||||
struct ath12k_tx_desc_params desc_params;
|
||||
struct dp_tx_ring *tx_ring = &dp->tx_ring[ring_id];
|
||||
struct hal_wbm_release_ring *desc;
|
||||
u8 mac_id, pdev_id;
|
||||
u8 pdev_id;
|
||||
u64 desc_va;
|
||||
|
||||
spin_lock_bh(&status_ring->lock);
|
||||
|
|
@ -949,28 +951,26 @@ void ath12k_dp_tx_completion_handler(struct ath12k_base *ab, int ring_id)
|
|||
continue;
|
||||
}
|
||||
|
||||
msdu = tx_desc->skb;
|
||||
mac_id = tx_desc->mac_id;
|
||||
desc_params.mac_id = tx_desc->mac_id;
|
||||
desc_params.skb = tx_desc->skb;
|
||||
|
||||
/* Release descriptor as soon as extracting necessary info
|
||||
* to reduce contention
|
||||
*/
|
||||
ath12k_dp_tx_release_txbuf(dp, tx_desc, tx_desc->pool_id);
|
||||
if (ts.buf_rel_source == HAL_WBM_REL_SRC_MODULE_FW) {
|
||||
ath12k_dp_tx_process_htt_tx_complete(ab,
|
||||
(void *)tx_status,
|
||||
mac_id, msdu,
|
||||
tx_ring);
|
||||
ath12k_dp_tx_process_htt_tx_complete(ab, (void *)tx_status,
|
||||
tx_ring, &desc_params);
|
||||
continue;
|
||||
}
|
||||
|
||||
pdev_id = ath12k_hw_mac_id_to_pdev_id(ab->hw_params, mac_id);
|
||||
pdev_id = ath12k_hw_mac_id_to_pdev_id(ab->hw_params, desc_params.mac_id);
|
||||
ar = ab->pdevs[pdev_id].ar;
|
||||
|
||||
if (atomic_dec_and_test(&ar->dp.num_tx_pending))
|
||||
wake_up(&ar->dp.tx_empty_waitq);
|
||||
|
||||
ath12k_dp_tx_complete_msdu(ar, msdu, &ts);
|
||||
ath12k_dp_tx_complete_msdu(ar, &desc_params, &ts);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user