From f72f76ba4c5726e750feebc323e7f468c99bbf94 Mon Sep 17 00:00:00 2001 From: Himanshu Batra Date: Wed, 19 Oct 2022 19:06:33 +0530 Subject: [PATCH] qcacmn: Update pdev telemetry stats to per AC level Update pdev telemetry stats to per AC level Change-Id: I0f3680875d28b6c4a7e671941373e42ee886cb16 CRs-Fixed: 3316937 --- dp/inc/cdp_txrx_stats_struct.h | 4 ++-- dp/wifi3.0/dp_stats.c | 8 +++---- dp/wifi3.0/monitor/dp_mon.c | 44 ++++++++++++++++++++++++++++++---- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/dp/inc/cdp_txrx_stats_struct.h b/dp/inc/cdp_txrx_stats_struct.h index 2051e32974..294931cadd 100644 --- a/dp/inc/cdp_txrx_stats_struct.h +++ b/dp/inc/cdp_txrx_stats_struct.h @@ -2814,8 +2814,8 @@ struct cdp_soc_stats { * @link_airtime: pdev airtime usage per ac per sec */ struct cdp_pdev_telemetry_stats { - uint32_t tx_mpdu_failed; - uint32_t tx_mpdu_total; + uint32_t tx_mpdu_failed[WME_AC_MAX]; + uint32_t tx_mpdu_total[WME_AC_MAX]; uint32_t link_airtime[WME_AC_MAX]; }; diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 676a1cd849..84b624d312 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -9170,12 +9170,12 @@ dp_get_pdev_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, /* consumption is in micro seconds, convert it to seconds and * then calculate %age per sec */ - for (ac = 0; ac < WME_AC_MAX; ac++) + for (ac = 0; ac < WME_AC_MAX; ac++) { stats->link_airtime[ac] = ((pdev->stats.telemetry_stats.link_airtime[ac] * 100) / 1000000); - stats->tx_mpdu_failed = pdev->stats.telemetry_stats.tx_mpdu_failed; - stats->tx_mpdu_total = pdev->stats.telemetry_stats.tx_mpdu_total; - + stats->tx_mpdu_failed[ac] = pdev->stats.telemetry_stats.tx_mpdu_failed[ac]; + stats->tx_mpdu_total[ac] = pdev->stats.telemetry_stats.tx_mpdu_total[ac]; + } return QDF_STATUS_SUCCESS; } diff --git a/dp/wifi3.0/monitor/dp_mon.c b/dp/wifi3.0/monitor/dp_mon.c index acfaf4908e..8e47c4e4e2 100644 --- a/dp/wifi3.0/monitor/dp_mon.c +++ b/dp/wifi3.0/monitor/dp_mon.c @@ -2084,10 +2084,6 @@ void dp_peer_update_telemetry_stats(struct dp_peer *peer) mon_peer = peer->monitor_peer; if (qdf_likely(mon_peer)) { - DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_failed, - mon_peer->stats.tx.retries); - DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total, - mon_peer->stats.tx.tx_mpdus_tried); for (ac = 0; ac < WME_AC_MAX; ac++) { mon_peer->stats.airtime_consumption[ac].avg_consumption_per_sec = mon_peer->stats.airtime_consumption[ac].consumption; @@ -2732,6 +2728,44 @@ static uint32_t dp_mon_get_ru_width_from_ru_size(uint16_t ru_size) } #endif +#ifdef WLAN_TELEMETRY_STATS_SUPPORT +/* + * dp_pdev_telemetry_stats_update() - Update pdev telemetry stats + * @pdev: Datapath pdev handle + * @ppdu: PPDU Descriptor + * + * Return: None + */ +static void +dp_pdev_telemetry_stats_update( + struct dp_pdev *pdev, + struct cdp_tx_completion_ppdu_user *ppdu) +{ + uint16_t mpdu_tried; + uint16_t mpdu_failed; + uint16_t num_mpdu; + uint8_t ac = 0; + + num_mpdu = ppdu->mpdu_success; + mpdu_tried = ppdu->mpdu_tried_ucast + ppdu->mpdu_tried_mcast; + mpdu_failed = mpdu_tried - num_mpdu; + + ac = TID_TO_WME_AC(ppdu->tid); + + DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_failed[ac], + mpdu_failed); + + DP_STATS_INC(pdev, telemetry_stats.tx_mpdu_total[ac], + mpdu_tried); +} +#else +static inline void +dp_pdev_telemetry_stats_update( + struct dp_pdev *pdev, + struct cdp_tx_completion_ppdu_user *ppdu) +{ } +#endif + /* * dp_tx_stats_update() - Update per-peer statistics * @pdev: Datapath pdev handle @@ -2790,6 +2824,7 @@ dp_tx_stats_update(struct dp_pdev *pdev, struct dp_peer *peer, * mpdu failed equal mpdu tried. */ DP_STATS_INC(mon_peer, tx.retries, mpdu_failed); + dp_pdev_telemetry_stats_update(pdev, ppdu); return; } @@ -2896,6 +2931,7 @@ dp_tx_stats_update(struct dp_pdev *pdev, struct dp_peer *peer, mon_ops->mon_tx_stats_update(mon_peer, ppdu); dp_tx_rate_stats_update(peer, ppdu); + dp_pdev_telemetry_stats_update(pdev, ppdu); dp_peer_stats_notify(pdev, peer);