qca-wifi: Provide support for avg. phyrate stats

Provide support for average tx and Rx phyrate statistics

Change-Id: I0fbb4aa7aaf215f49b066fc64a1f77b5c23db4d9
This commit is contained in:
Neha Bisht
2020-09-14 12:50:01 +05:30
committato da Gerrit - the friendly Code Review server
parent 9a16bc08e5
commit 27e1c19f38
4 ha cambiato i file con 440 aggiunte e 16 eliminazioni

Vedi File

@@ -340,6 +340,97 @@ static void dp_peer_tx_rate_stats_print(uint8_t *peer_mac,
return;
}
static void dp_peer_avg_rate_stats_print(uint8_t *peer_mac,
uint64_t peer_cookie,
void *buffer,
uint32_t buffer_len)
{
struct wlan_avg_rate_stats *stats = buffer;
enum wlan_rate_ppdu_type type;
static const char *type2str[] = {
"SU",
"MU-MIMO",
"MU-OFDMA",
"MU-MIMO-OFDMA",
};
uint32_t mpdu;
uint32_t psr;
uint32_t avg_mbps;
uint32_t avg_snr;
PRINT("peer %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx",
peer_mac[0],
peer_mac[1],
peer_mac[2],
peer_mac[3],
peer_mac[4],
peer_mac[5]);
PRINT(" %20s %15s %15s %15s %15s %15s",
"mode",
"rate(mbps)",
"total ppdu",
"snr value",
"snr count",
"psr value");
PRINT("Avg tx stats: ");
for (type = 0; type < WLAN_RATE_MAX; type++) {
psr = 0;
avg_mbps = 0;
avg_snr = 0;
if (stats->tx[type].num_ppdu > 0)
avg_mbps = stats->tx[type].sum_mbps /
stats->tx[type].num_ppdu;
if (stats->tx[type].num_snr > 0)
avg_snr = stats->tx[type].sum_snr /
stats->tx[type].num_snr;
mpdu = stats->tx[type].num_mpdu +
stats->tx[type].num_retry;
if (mpdu > 0)
psr = (100 * stats->tx[type].num_mpdu) / mpdu;
PRINT(" %20s %15u %15u %15u %15u %15u",
type2str[type],
avg_mbps, stats->tx[type].num_ppdu,
avg_snr, stats->tx[type].num_snr,
psr);
}
PRINT("");
PRINT("Avg rx stats: ");
for (type = 0; type < WLAN_RATE_MAX; type++) {
psr = 0;
avg_mbps = 0;
avg_snr = 0;
if (stats->rx[type].num_ppdu > 0)
avg_mbps = stats->rx[type].sum_mbps /
stats->rx[type].num_ppdu;
if (stats->rx[type].num_snr > 0)
avg_snr = stats->rx[type].sum_snr /
stats->rx[type].num_snr;
mpdu = stats->rx[type].num_mpdu +
stats->rx[type].num_retry;
if (mpdu > 0)
psr = (100 * stats->rx[type].num_mpdu) / mpdu;
PRINT(" %20s %15u %15u %15u %15u %15u",
type2str[type],
avg_mbps, stats->rx[type].num_ppdu,
avg_snr, stats->rx[type].num_snr,
psr);
}
PRINT("");
PRINT("");
}
static void dp_peer_tx_link_stats_print(uint8_t *peer_mac,
uint64_t peer_cookie,
void *buffer,
@@ -442,10 +533,14 @@ static void dp_peer_stats_handler(uint32_t cache_type,
{
switch (cache_type) {
case DP_PEER_RX_RATE_STATS:
if (getenv("SKIP_RX_RATE_STATS"))
break;
dp_peer_rx_rate_stats_print(peer_mac, peer_cookie,
buffer, buffer_len);
break;
case DP_PEER_TX_RATE_STATS:
if (getenv("SKIP_TX_RATE_STATS"))
break;
dp_peer_tx_rate_stats_print(peer_mac, peer_cookie,
buffer, buffer_len);
break;
@@ -457,6 +552,12 @@ static void dp_peer_stats_handler(uint32_t cache_type,
dp_peer_rx_link_stats_print(peer_mac, peer_cookie,
buffer, buffer_len);
break;
case DP_PEER_AVG_RATE_STATS:
if (getenv("SKIP_AVG_RATE_STATS"))
break;
dp_peer_avg_rate_stats_print(peer_mac, peer_cookie,
buffer, buffer_len);
break;
}
}