qcacmn: Add support for telemetry agent stats

For telemetry agent, some more statistic support is required.
Hence, add support for telemetry agent required stats.

Change-Id: Ieb2210a4a5dfe6fa0a0dd46a85f2d9ae483bb746
CRs-Fixed: 3210797
This commit is contained in:
Himanshu Batra
2022-04-13 15:19:43 +05:30
committed by Madan Koyyalamudi
parent 422bbf322b
commit 768250e291
10 changed files with 333 additions and 9 deletions

View File

@@ -823,6 +823,17 @@ struct dp_mon_soc {
#endif
};
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
#define MAX_CONSUMPTION_TIME 5 /* in sec */
struct dp_mon_peer_airtime_consumption {
uint32_t consumption;
struct {
uint32_t avg_consumption_per_sec[MAX_CONSUMPTION_TIME];
uint8_t idx;
} avg_consumption;
};
#endif
/**
* struct dp_mon_peer_stats - Monitor peer stats
*/
@@ -830,6 +841,9 @@ struct dp_mon_peer_stats {
#ifdef QCA_ENHANCED_STATS_SUPPORT
dp_mon_peer_tx_stats tx;
dp_mon_peer_rx_stats rx;
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
struct dp_mon_peer_airtime_consumption airtime_consumption;
#endif
#endif
};
@@ -4089,4 +4103,32 @@ dp_lite_mon_rx_mpdu_process(struct dp_pdev *pdev,
return QDF_STATUS_E_FAILURE;
}
#endif
#ifdef WLAN_TELEMETRY_STATS_SUPPORT
static inline
void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,
struct cdp_peer_telemetry_stats *stats)
{
struct dp_mon_peer_stats *mon_peer_stats = NULL;
uint8_t idx = 0;
uint32_t consumption = 0;
if (qdf_unlikely(!peer->monitor_peer))
return;
mon_peer_stats = &peer->monitor_peer->stats;
for (idx = 0; idx < MAX_CONSUMPTION_TIME; idx++)
consumption +=
mon_peer_stats->airtime_consumption.avg_consumption.avg_consumption_per_sec[idx];
/* consumption is in micro seconds, convert it to seconds and
* then calculate %age per 5 sec
*/
stats->airtime_consumption = ((consumption * 100) / (MAX_CONSUMPTION_TIME * 1000000));
stats->tx_mpdu_retried = mon_peer_stats->tx.retries;
stats->tx_mpdu_total = mon_peer_stats->tx.tx_mpdus_tried;
stats->rx_mpdu_retried = mon_peer_stats->rx.mpdu_retry_cnt;
stats->rx_mpdu_total = mon_peer_stats->rx.rx_mpdus;
stats->snr = CDP_SNR_OUT(mon_peer_stats->rx.avg_snr);
}
#endif
#endif /* _DP_MON_H_ */