qcacmn: Add stats on OFDMA and MU-MIMO packet

Add MCS, NSS, MPDU FCS OK, MPDU FCS ERR stats
classified by SU, OFDMA and MU-MIMO.

Change-Id: I3ade03acc06bd924fdeb8dfcaf6b18fb01f01d68
This commit is contained in:
Kai Chen
2019-10-14 17:42:24 -07:00
committed by nshrivas
父節點 7ce41f14c1
當前提交 a8cf59455e
共有 6 個文件被更改,包括 437 次插入150 次删除

查看文件

@@ -56,7 +56,7 @@
#define DP_NSS_LENGTH (6 * SS_COUNT)
#define DP_MU_GROUP_LENGTH (6 * DP_MU_GROUP_SHOW)
#define DP_MU_GROUP_SHOW 16
#define DP_MAX_MCS_STRING_LEN 30
#define DP_MAX_MCS_STRING_LEN 34
#define DP_RXDMA_ERR_LENGTH (6 * HAL_RXDMA_ERR_MAX)
#define DP_REO_ERR_LENGTH (6 * HAL_REO_ERR_MAX)
#define STATS_PROC_TIMEOUT (HZ / 1000)
@@ -153,6 +153,61 @@ static const struct dp_rate_debug dp_rate_string[DOT11_MAX][MAX_MCS] = {
}
};
static const struct dp_rate_debug dp_ppdu_rate_string[DOT11_MAX][MAX_MCS] = {
{
{"HE MCS 0 (BPSK 1/2) ", MCS_VALID},
{"HE MCS 1 (QPSK 1/2) ", MCS_VALID},
{"HE MCS 2 (QPSK 3/4) ", MCS_VALID},
{"HE MCS 3 (16-QAM 1/2) ", MCS_VALID},
{"HE MCS 4 (16-QAM 3/4) ", MCS_VALID},
{"HE MCS 5 (64-QAM 2/3) ", MCS_VALID},
{"HE MCS 6 (64-QAM 3/4) ", MCS_VALID},
{"HE MCS 7 (64-QAM 5/6) ", MCS_VALID},
{"HE MCS 8 (256-QAM 3/4) ", MCS_VALID},
{"HE MCS 9 (256-QAM 5/6) ", MCS_VALID},
{"HE MCS 10 (1024-QAM 3/4)", MCS_VALID},
{"HE MCS 11 (1024-QAM 5/6)", MCS_VALID},
{"INVALID ", MCS_VALID},
}
};
static const struct dp_rate_debug dp_mu_rate_string[RX_TYPE_MU_MAX][MAX_MCS] = {
{
{"HE MU-MIMO MCS 0 (BPSK 1/2) ", MCS_VALID},
{"HE MU-MIMO MCS 1 (QPSK 1/2) ", MCS_VALID},
{"HE MU-MIMO MCS 2 (QPSK 3/4) ", MCS_VALID},
{"HE MU-MIMO MCS 3 (16-QAM 1/2) ", MCS_VALID},
{"HE MU-MIMO MCS 4 (16-QAM 3/4) ", MCS_VALID},
{"HE MU-MIMO MCS 5 (64-QAM 2/3) ", MCS_VALID},
{"HE MU-MIMO MCS 6 (64-QAM 3/4) ", MCS_VALID},
{"HE MU-MIMO MCS 7 (64-QAM 5/6) ", MCS_VALID},
{"HE MU-MIMO MCS 8 (256-QAM 3/4) ", MCS_VALID},
{"HE MU-MIMO MCS 9 (256-QAM 5/6) ", MCS_VALID},
{"HE MU-MIMO MCS 10 (1024-QAM 3/4)", MCS_VALID},
{"HE MU-MIMO MCS 11 (1024-QAM 5/6)", MCS_VALID},
{"INVALID ", MCS_VALID},
},
{
{"HE OFDMA MCS 0 (BPSK 1/2) ", MCS_VALID},
{"HE OFDMA MCS 1 (QPSK 1/2) ", MCS_VALID},
{"HE OFDMA MCS 2 (QPSK 3/4) ", MCS_VALID},
{"HE OFDMA MCS 3 (16-QAM 1/2) ", MCS_VALID},
{"HE OFDMA MCS 4 (16-QAM 3/4) ", MCS_VALID},
{"HE OFDMA MCS 5 (64-QAM 2/3) ", MCS_VALID},
{"HE OFDMA MCS 6 (64-QAM 3/4) ", MCS_VALID},
{"HE OFDMA MCS 7 (64-QAM 5/6) ", MCS_VALID},
{"HE OFDMA MCS 8 (256-QAM 3/4) ", MCS_VALID},
{"HE OFDMA MCS 9 (256-QAM 5/6) ", MCS_VALID},
{"HE OFDMA MCS 10 (1024-QAM 3/4)", MCS_VALID},
{"HE OFDMA MCS 11 (1024-QAM 5/6)", MCS_VALID},
{"INVALID ", MCS_VALID},
},
};
const char *mu_reception_mode[RX_TYPE_MU_MAX] = {
"MU MIMO", "MU OFDMA"
};
#ifdef QCA_ENH_V3_STATS_SUPPORT
const char *fw_to_hw_delay_bucket[CDP_DELAY_BUCKET_MAX + 1] = {
"0 to 10 ms", "11 to 20 ms",
@@ -4790,6 +4845,7 @@ dp_print_common_rates_info(struct cdp_pkt_type *pkt_type_array)
{
uint8_t mcs, pkt_type;
DP_PRINT_STATS("MSDU Count");
for (pkt_type = 0; pkt_type < DOT11_MAX; pkt_type++) {
for (mcs = 0; mcs < MAX_MCS; mcs++) {
if (!dp_rate_string[pkt_type][mcs].valid)
@@ -4804,6 +4860,56 @@ dp_print_common_rates_info(struct cdp_pkt_type *pkt_type_array)
}
}
/**
* dp_print_common_ppdu_rates_info(): Print common rate for tx or rx
* @pkt_type_array: rate type array contains rate info
*
* Return:void
*/
static inline void
dp_print_common_ppdu_rates_info(struct cdp_pkt_type *pkt_type_array)
{
uint8_t mcs;
DP_PRINT_STATS("PPDU Count");
for (mcs = 0; mcs < MAX_MCS; mcs++) {
if (!dp_ppdu_rate_string[0][mcs].valid)
continue;
DP_PRINT_STATS(" %s = %d",
dp_ppdu_rate_string[0][mcs].mcs_type,
pkt_type_array->mcs_count[mcs]);
}
DP_PRINT_STATS("\n");
}
/**
* dp_print_mu_ppdu_rates_info(): Print mu rate for tx or rx
* @rx_mu: rx MU stats array
*
* Return:void
*/
static inline void
dp_print_mu_ppdu_rates_info(struct cdp_rx_mu *rx_mu)
{
uint8_t mcs, pkt_type;
DP_PRINT_STATS("PPDU Count");
for (pkt_type = 0; pkt_type < RX_TYPE_MU_MAX; pkt_type++) {
for (mcs = 0; mcs < MAX_MCS; mcs++) {
if (!dp_mu_rate_string[pkt_type][mcs].valid)
continue;
DP_PRINT_STATS(" %s = %d",
dp_mu_rate_string[pkt_type][mcs].mcs_type,
rx_mu[pkt_type].ppdu.mcs_count[mcs]);
}
DP_PRINT_STATS("\n");
}
}
void dp_print_rx_rates(struct dp_vdev *vdev)
{
struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev;
@@ -4881,6 +4987,26 @@ void dp_print_tx_rates(struct dp_vdev *vdev)
pdev->stats.tx.non_amsdu_cnt);
}
/**
* dp_print_nss(): Print nss count
* @nss: printable nss count array
* @pnss: nss count array
* @ss_count: number of nss
*
* Return:void
*/
static void dp_print_nss(char *nss, uint32_t *pnss, uint32_t ss_count)
{
uint32_t index;
uint8_t i;
index = 0;
for (i = 0; i < ss_count; i++) {
index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
" %d", *(pnss + i));
}
}
void dp_print_peer_stats(struct dp_peer *peer)
{
uint8_t i;
@@ -4889,6 +5015,9 @@ void dp_print_peer_stats(struct dp_peer *peer)
char nss[DP_NSS_LENGTH];
char mu_group_id[DP_MU_GROUP_LENGTH];
struct dp_pdev *pdev;
uint32_t *pnss;
enum cdp_mu_packet_type rx_mu_type;
struct cdp_rx_mu *rx_mu;
pdev = peer->vdev->pdev;
@@ -4972,11 +5101,9 @@ void dp_print_peer_stats(struct dp_peer *peer)
peer->stats.tx.bw[0], peer->stats.tx.bw[1],
peer->stats.tx.bw[2], peer->stats.tx.bw[3]);
index = 0;
for (i = 0; i < SS_COUNT; i++) {
index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
" %d", peer->stats.tx.nss[i]);
}
pnss = &peer->stats.tx.nss[0];
dp_print_nss(nss, pnss, SS_COUNT);
DP_PRINT_STATS("NSS(1-8) = %s", nss);
DP_PRINT_STATS("Transmit Type :");
@@ -5080,21 +5207,53 @@ void dp_print_peer_stats(struct dp_peer *peer)
DP_PRINT_STATS("BW Counts = 20MHZ %d 40MHZ %d 80MHZ %d 160MHZ %d",
peer->stats.rx.bw[0], peer->stats.rx.bw[1],
peer->stats.rx.bw[2], peer->stats.rx.bw[3]);
DP_PRINT_STATS("Reception Type = SU %d MU_MIMO %d MU_OFDMA %d MU_OFDMA_MIMO %d",
DP_PRINT_STATS("MSDU Reception Type");
DP_PRINT_STATS("SU %d MU_MIMO %d MU_OFDMA %d MU_OFDMA_MIMO %d",
peer->stats.rx.reception_type[0],
peer->stats.rx.reception_type[1],
peer->stats.rx.reception_type[2],
peer->stats.rx.reception_type[3]);
DP_PRINT_STATS("PPDU Reception Type");
DP_PRINT_STATS("SU %d MU_MIMO %d MU_OFDMA %d MU_OFDMA_MIMO %d",
peer->stats.rx.ppdu_cnt[0],
peer->stats.rx.ppdu_cnt[1],
peer->stats.rx.ppdu_cnt[2],
peer->stats.rx.ppdu_cnt[3]);
dp_print_common_rates_info(peer->stats.rx.pkt_type);
dp_print_common_ppdu_rates_info(&peer->stats.rx.su_ax_ppdu_cnt);
dp_print_mu_ppdu_rates_info(&peer->stats.rx.rx_mu[0]);
index = 0;
for (i = 0; i < SS_COUNT; i++) {
index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
" %d", peer->stats.rx.nss[i]);
pnss = &peer->stats.rx.nss[0];
dp_print_nss(nss, pnss, SS_COUNT);
DP_PRINT_STATS("MSDU Count");
DP_PRINT_STATS(" NSS(1-8) = %s", nss);
DP_PRINT_STATS("reception mode SU");
pnss = &peer->stats.rx.ppdu_nss[0];
dp_print_nss(nss, pnss, SS_COUNT);
DP_PRINT_STATS(" PPDU Count");
DP_PRINT_STATS(" NSS(1-8) = %s", nss);
DP_PRINT_STATS(" MPDU OK = %d, MPDU Fail = %d",
peer->stats.rx.mpdu_cnt_fcs_ok,
peer->stats.rx.mpdu_cnt_fcs_err);
for (rx_mu_type = 0; rx_mu_type < RX_TYPE_MU_MAX; rx_mu_type++) {
DP_PRINT_STATS("reception mode %s",
mu_reception_mode[rx_mu_type]);
rx_mu = &peer->stats.rx.rx_mu[rx_mu_type];
pnss = &rx_mu->ppdu_nss[0];
dp_print_nss(nss, pnss, SS_COUNT);
DP_PRINT_STATS(" PPDU Count");
DP_PRINT_STATS(" NSS(1-8) = %s", nss);
DP_PRINT_STATS(" MPDU OK = %d, MPDU Fail = %d",
rx_mu->mpdu_cnt_fcs_ok,
rx_mu->mpdu_cnt_fcs_err);
}
DP_PRINT_STATS("NSS(1-8) = %s",
nss);
DP_PRINT_STATS("Aggregation:");
DP_PRINT_STATS(" Msdu's Part of Ampdu = %d",