qcacmn: HW reinjection support for MLO Multicast

Enabling HW based reinjection for MLO Multicast

Change-Id: Ie9663e0e90ae1ae0a07d229fd6d4c66787d4224a
CRs-Fixed: 3142397
This commit is contained in:
Sai Rupesh Chevuru
2022-03-02 18:33:17 +05:30
committed by Madan Koyyalamudi
parent 484198b257
commit f179a624a1
11 changed files with 257 additions and 4 deletions

View File

@@ -4792,6 +4792,49 @@ void dp_tx_prefetch_next_nbuf_data(struct dp_tx_desc_s *next)
}
#endif
/**
* dp_tx_mcast_reinject_handler() - Tx reinjected multicast packets handler
* @soc: core txrx main context
* @desc: software descriptor
*
* Return: true when packet is reinjected
*/
#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) && \
defined(WLAN_MCAST_MLO)
static inline bool
dp_tx_mcast_reinject_handler(struct dp_soc *soc, struct dp_tx_desc_s *desc)
{
struct dp_vdev *vdev = NULL;
if (desc->tx_status == HAL_TX_TQM_RR_MULTICAST_DROP) {
if (!soc->arch_ops.dp_tx_mcast_handler)
return false;
vdev = dp_vdev_get_ref_by_id(soc, desc->vdev_id,
DP_MOD_ID_TX_COMP);
if (qdf_unlikely(!vdev)) {
dp_tx_comp_info_rl("Unable to get vdev ref %d",
desc->id);
return false;
}
DP_STATS_INC_PKT(vdev, tx_i.reinject_pkts, 1,
qdf_nbuf_len(desc->nbuf));
soc->arch_ops.dp_tx_mcast_handler(soc, vdev, desc->nbuf);
dp_tx_desc_release(desc, desc->pool_id);
return true;
}
return false;
}
#else
static inline bool
dp_tx_mcast_reinject_handler(struct dp_soc *soc, struct dp_tx_desc_s *desc)
{
return false;
}
#endif
/**
* dp_tx_comp_process_desc_list() - Tx complete software descriptor handler
* @soc: core txrx main context
@@ -4832,6 +4875,10 @@ dp_tx_comp_process_desc_list(struct dp_soc *soc,
DP_MOD_ID_TX_COMP);
}
if (dp_tx_mcast_reinject_handler(soc, desc)) {
desc = next;
continue;
}
if (qdf_likely(desc->flags & DP_TX_DESC_FLAG_SIMPLE)) {
struct dp_pdev *pdev = desc->pdev;
@@ -4855,6 +4902,7 @@ dp_tx_comp_process_desc_list(struct dp_soc *soc,
desc = next;
continue;
}
hal_tx_comp_get_status(&desc->comp, &ts, soc->hal_soc);
dp_tx_comp_process_tx_status(soc, desc, &ts, txrx_peer,