diff --git a/dp/inc/cdp_txrx_host_stats.h b/dp/inc/cdp_txrx_host_stats.h index 26286d9ebb..8e5e2e0b76 100644 --- a/dp/inc/cdp_txrx_host_stats.h +++ b/dp/inc/cdp_txrx_host_stats.h @@ -1035,6 +1035,33 @@ static inline QDF_STATUS cdp_get_peer_telemetry_stats( soc, addr, stats); } +/** + * cdp_get_pdev_deter_stats(): function to get pdev deterministic stats + * @soc: soc handle + * @pdev_id: pdev id + * @stats: pointer to pdev deterministic stats + * + * return: status + */ +static inline QDF_STATUS cdp_get_pdev_deter_stats( + ol_txrx_soc_handle soc, + uint8_t pdev_id, + struct cdp_pdev_deter_stats *stats) +{ + if (!soc || !soc->ops) { + dp_cdp_debug("Invalid Instance"); + QDF_BUG(0); + return QDF_STATUS_E_FAILURE; + } + + if (!soc->ops->host_stats_ops || + !soc->ops->host_stats_ops->txrx_pdev_deter_stats) + return QDF_STATUS_E_FAILURE; + + return soc->ops->host_stats_ops->txrx_pdev_deter_stats( + soc, pdev_id, stats); +} + /** * cdp_get_peer_deter_stats(): function to get peer deterministic stats * @soc: soc handle diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 1e8a85b4c2..a1201cbd29 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -1244,6 +1244,11 @@ struct cdp_host_stats_ops { struct cdp_soc_t *soc, uint8_t *addr, struct cdp_peer_telemetry_stats *stats); + QDF_STATUS + (*txrx_pdev_deter_stats)( + struct cdp_soc_t *soc, + uint8_t pdev_id, + struct cdp_pdev_deter_stats *stats); QDF_STATUS (*txrx_peer_deter_stats)( struct cdp_soc_t *soc, diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index cbd0c44cee..59dd37a02b 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -4240,6 +4240,19 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, QDF_STATUS dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, struct cdp_peer_deter_stats *stats); + +/* + * dp_get_pdev_deter_stats- API to get pdev deterministic stats + * @soc_hdl: soc handle + * @pdev_id: id of pdev handle + * @stats: pointer to pdev deterministic stats + * + * Return: QDF_STATUS_SUCCESS: Success + * QDF_STATUS_E_FAILURE: Error + */ +QDF_STATUS +dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, + struct cdp_pdev_deter_stats *stats); #endif /* WLAN_TELEMETRY_STATS_SUPPORT */ #ifdef CONNECTIVITY_PKTLOG diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index c4658cdbc4..62e3155177 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -14202,6 +14202,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = { #ifdef WLAN_TELEMETRY_STATS_SUPPORT .txrx_pdev_telemetry_stats = dp_get_pdev_telemetry_stats, .txrx_peer_telemetry_stats = dp_get_peer_telemetry_stats, + .txrx_pdev_deter_stats = dp_get_pdev_deter_stats, .txrx_peer_deter_stats = dp_get_peer_deter_stats, #endif .txrx_get_peer_extd_rate_link_stats = diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index ca37a3cad7..e0a198798a 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -9287,6 +9287,39 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, return QDF_STATUS_SUCCESS; } +QDF_STATUS +dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, + struct cdp_pdev_deter_stats *stats) +{ + struct dp_soc *soc = (struct dp_soc *)soc_hdl; + struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); + + if (!pdev) + return QDF_STATUS_E_FAILURE; + + qdf_mem_copy(stats->dl_ofdma_usr, pdev->stats.deter_stats.dl_ofdma_usr, + sizeof(stats->dl_ofdma_usr[0]) * CDP_MU_MAX_USERS); + qdf_mem_copy(stats->ul_ofdma_usr, pdev->stats.deter_stats.ul_ofdma_usr, + sizeof(stats->ul_ofdma_usr[0]) * CDP_MU_MAX_USERS); + qdf_mem_copy(stats->dl_mimo_usr, pdev->stats.deter_stats.dl_mimo_usr, + sizeof(stats->dl_mimo_usr[0]) * CDP_MU_MAX_USERS); + qdf_mem_copy(stats->ul_mimo_usr, pdev->stats.deter_stats.ul_mimo_usr, + sizeof(stats->ul_mimo_usr[0]) * CDP_MU_MAX_USERS); + + qdf_mem_copy(stats->ul_mode_cnt, pdev->stats.deter_stats.ul_mode_cnt, + sizeof(stats->ul_mode_cnt[0]) * TX_MODE_UL_MAX); + qdf_mem_copy(stats->dl_mode_cnt, pdev->stats.deter_stats.dl_mode_cnt, + sizeof(stats->dl_mode_cnt[0]) * TX_MODE_DL_MAX); + qdf_mem_copy(stats->ch_access_delay, + pdev->stats.deter_stats.ch_access_delay, + sizeof(stats->ch_access_delay[0]) * WME_AC_MAX); + + stats->trigger_success = pdev->stats.deter_stats.trigger_success; + stats->trigger_fail = pdev->stats.deter_stats.trigger_fail; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, struct cdp_peer_deter_stats *stats)