From 01569fa038b8ddbc567cd5a459d42513e3054d85 Mon Sep 17 00:00:00 2001 From: aloksing Date: Thu, 19 Jan 2023 19:06:33 +0530 Subject: [PATCH] qcacmn: Get channel utilization from dp pdev Set channel util stats to dp pdev from channel stats event CRs-Fixed: 3380939 Change-Id: Ib908946a42077f936402afbe846a835cb91b0a8d --- dp/inc/cdp_txrx_host_stats.h | 27 +++++++++++++++++++++++++++ dp/inc/cdp_txrx_ops.h | 5 +++++ dp/inc/cdp_txrx_stats_struct.h | 14 ++++++++++++++ dp/wifi3.0/dp_internal.h | 13 +++++++++++++ dp/wifi3.0/dp_main.c | 1 + dp/wifi3.0/dp_stats.c | 22 ++++++++++++++++++++++ 6 files changed, 82 insertions(+) diff --git a/dp/inc/cdp_txrx_host_stats.h b/dp/inc/cdp_txrx_host_stats.h index 8e5e2e0b76..5f39a0e7af 100644 --- a/dp/inc/cdp_txrx_host_stats.h +++ b/dp/inc/cdp_txrx_host_stats.h @@ -1088,6 +1088,33 @@ static inline QDF_STATUS cdp_get_peer_deter_stats( return soc->ops->host_stats_ops->txrx_peer_deter_stats( soc, addr, stats); } + +/** + * cdp_update_pdev_chan_util_stats(): function to update pdev channel util stats + * @soc: soc handle + * @pdev_id: pdev id + * @ch_util: pointer to pdev ch util stats + * + * return: status + */ +static inline QDF_STATUS cdp_update_pdev_chan_util_stats( + ol_txrx_soc_handle soc, + uint8_t pdev_id, + struct cdp_pdev_chan_util_stats *ch_util) +{ + 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_update_pdev_chan_util_stats) + return QDF_STATUS_E_FAILURE; + + return soc->ops->host_stats_ops->txrx_update_pdev_chan_util_stats( + soc, pdev_id, ch_util); +} #endif /** diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index a1201cbd29..9b014af532 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -1254,6 +1254,11 @@ struct cdp_host_stats_ops { struct cdp_soc_t *soc, uint8_t *addr, struct cdp_peer_deter_stats *stats); + QDF_STATUS + (*txrx_update_pdev_chan_util_stats)( + struct cdp_soc_t *soc, + uint8_t pdev_id, + struct cdp_pdev_chan_util_stats *ch_util); #endif QDF_STATUS (*txrx_get_peer_extd_rate_link_stats) diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index d5679af347..c81738bffa 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -2961,6 +2961,18 @@ struct cdp_peer_deter_stats { struct cdp_peer_rx_deter rx_det; }; +/** + * struct cdp_pdev_deter_stats- Structure to hold pdev deterministic stats + * @ap_chan_util: Channel utilization + * @ap_tx_util: TX utilization + * @ap_rx_util: RX utilization + */ +struct cdp_pdev_chan_util_stats { + uint8_t ap_chan_util; + uint8_t ap_tx_util; + uint8_t ap_rx_util; +}; + /** * struct cdp_pdev_deter_stats- Structure to hold pdev deterministic stats * @dl_ofdma_usr: num_user counter for dl ofdma @@ -2970,6 +2982,7 @@ struct cdp_peer_deter_stats { * @dl_mode_cnt: DL tx mode counter * @ul_mode_cnt: UL tx mode counter * @ch_access_delay + * @ch_util: channel congestion stats */ struct cdp_pdev_deter_stats { uint64_t dl_ofdma_usr[CDP_MU_MAX_USERS]; @@ -2981,6 +2994,7 @@ struct cdp_pdev_deter_stats { uint32_t ch_access_delay[WME_AC_MAX]; uint64_t trigger_success; uint64_t trigger_fail; + struct cdp_pdev_chan_util_stats ch_util; }; #endif diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 59dd37a02b..0e041bedcc 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -4253,6 +4253,19 @@ dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, QDF_STATUS dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, struct cdp_pdev_deter_stats *stats); + +/* + * dp_update_pdev_chan_util_stats- API to update channel utilization stats + * @soc_hdl: soc handle + * @pdev_id: id of pdev handle + * @ch_util: Pointer to channel util stats + * + * Return: QDF_STATUS_SUCCESS: Success + * QDF_STATUS_E_FAILURE: Error + */ +QDF_STATUS +dp_update_pdev_chan_util_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, + struct cdp_pdev_chan_util_stats *ch_util); #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 62e3155177..31f8d224c5 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -14204,6 +14204,7 @@ static struct cdp_host_stats_ops dp_ops_host_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, + .txrx_update_pdev_chan_util_stats = dp_update_pdev_chan_util_stats, #endif .txrx_get_peer_extd_rate_link_stats = dp_get_peer_extd_rate_link_stats, diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index e0a198798a..059568b843 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -9317,6 +9317,11 @@ dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, stats->trigger_success = pdev->stats.deter_stats.trigger_success; stats->trigger_fail = pdev->stats.deter_stats.trigger_fail; + stats->ch_util.ap_tx_util = pdev->stats.deter_stats.ch_util.ap_tx_util; + stats->ch_util.ap_rx_util = pdev->stats.deter_stats.ch_util.ap_rx_util; + stats->ch_util.ap_chan_util = + pdev->stats.deter_stats.ch_util.ap_chan_util; + return QDF_STATUS_SUCCESS; } @@ -9336,4 +9341,21 @@ dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr, return QDF_STATUS_SUCCESS; } + +QDF_STATUS +dp_update_pdev_chan_util_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, + struct cdp_pdev_chan_util_stats *ch_util) +{ + 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; + + pdev->stats.deter_stats.ch_util.ap_tx_util = ch_util->ap_tx_util; + pdev->stats.deter_stats.ch_util.ap_rx_util = ch_util->ap_rx_util; + pdev->stats.deter_stats.ch_util.ap_chan_util = ch_util->ap_chan_util; + + return QDF_STATUS_SUCCESS; +} #endif