qcacmn: Scan radio special vap stats support

-Add flag to inidicate special vap configuration
-Add frame type counters while processing tlv
 WIFIRX_MPDU_START_E
-Add function to update special vap rx stats
-Add dp pdev param to enable/disable special vap
 stats reset
-Add function to reset special vap stats
-Add fucntion to get special vap stats
-Add CDP function to retreive special vap stats

Change-Id: Ia5de6743e472dc86c9e66b9e789c909a57025e35
CRs-Fixed: 3005425
This commit is contained in:
Jeevan Kukkalli
2021-08-02 14:58:21 +05:30
committed by Madan Koyyalamudi
parent 693dbbdf2f
commit 1665e7c8e5
10 changed files with 215 additions and 0 deletions

View File

@@ -610,6 +610,25 @@ dp_deliver_tx_mgmt(struct cdp_soc_t *cdp_soc, uint8_t pdev_id, qdf_nbuf_t nbuf)
return QDF_STATUS_SUCCESS;
}
/**
* dp_reset_spcl_vap_stats() - reset spcl vap rx stats
* @vdev: Datapath VDEV handle
*
* Return: void
*/
static inline void
dp_reset_spcl_vap_stats(struct dp_vdev *vdev)
{
struct dp_mon_vdev *mon_vdev;
mon_vdev = vdev->monitor_vdev;
if (!mon_vdev)
return;
qdf_mem_zero(&mon_vdev->spcl_vap_stats,
sizeof(mon_vdev->spcl_vap_stats));
}
/**
* dp_vdev_set_monitor_mode() - Set DP VDEV to monitor mode
* @vdev_handle: Datapath VDEV handle
@@ -657,6 +676,10 @@ static QDF_STATUS dp_vdev_set_monitor_mode(struct cdp_soc_t *dp_soc,
goto fail;
}
if (mon_pdev->spcl_vap_configured &&
mon_pdev->reset_spcl_vap_stats_enable)
dp_reset_spcl_vap_stats(vdev);
/*Check if current pdev's monitor_vdev exists */
if (mon_pdev->monitor_configured) {
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
@@ -5251,6 +5274,29 @@ static void dp_iterate_update_peer_list(struct cdp_pdev *pdev_hdl)
}
#endif
static QDF_STATUS
dp_get_spcl_vap_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
struct cdp_spcl_vap_stats *stats)
{
struct dp_mon_vdev *mon_vdev = NULL;
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id,
DP_MOD_ID_CDP);
if (!vdev || !stats)
return QDF_STATUS_E_INVAL;
mon_vdev = vdev->monitor_vdev;
if (!mon_vdev)
return QDF_STATUS_E_INVAL;
qdf_mem_copy(stats, &mon_vdev->spcl_vap_stats,
sizeof(struct cdp_spcl_vap_stats));
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS dp_mon_soc_cfg_init(struct dp_soc *soc)
{
int target_type;
@@ -5670,6 +5716,8 @@ void dp_mon_cdp_ops_register(struct dp_soc *soc)
#ifdef WDI_EVENT_ENABLE
ops->ctrl_ops->txrx_get_pldev = dp_get_pldev;
#endif
ops->host_stats_ops->txrx_get_spcl_vap_stats =
dp_get_spcl_vap_stats;
return;
}