From 87dac440fd78b95f583211288253f263ed633f8b Mon Sep 17 00:00:00 2001 From: Saket Jha Date: Thu, 2 Apr 2020 14:20:53 -0700 Subject: [PATCH] qcacmn: Dump FW stats for MCS 12/13 Dump additional FW stats for MCS 12/13 due to additions in 4K QAM support. Change-Id: I8cf177cb93f484c69951a758c4542e4530617576 CRs-Fixed: 2656272 --- dp/wifi3.0/dp_main.c | 10 +- dp/wifi3.0/dp_stats.c | 325 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 304 insertions(+), 31 deletions(-) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 440a58298a..5a994c4936 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -348,6 +348,7 @@ const int dp_stats_mapping_table[][STATS_TYPE_MAX] = { {TXRX_FW_STATS_INVALID, TXRX_SOC_INTERRUPT_STATS}, {TXRX_FW_STATS_INVALID, TXRX_SOC_FSE_STATS}, {TXRX_FW_STATS_INVALID, TXRX_HAL_REG_WRITE_STATS}, + {HTT_DBG_EXT_STATS_PDEV_RX_RATE_EXT, TXRX_HOST_STATS_INVALID} }; /* MCL specific functions */ @@ -9432,9 +9433,16 @@ static int dp_fw_stats_process(struct dp_vdev *vdev, req->param0 = HTT_DBG_EXT_STATS_SET_VDEV_MASK(vdev->vdev_id); } - return dp_h2t_ext_stats_msg_send(pdev, stats, req->param0, + if (req->stats == (uint8_t)HTT_DBG_EXT_STATS_PDEV_RX_RATE_EXT) { + return dp_h2t_ext_stats_msg_send(pdev, + HTT_DBG_EXT_STATS_PDEV_RX_RATE_EXT, + req->param0, req->param1, req->param2, + req->param3, 0, 0, mac_id); + } else { + return dp_h2t_ext_stats_msg_send(pdev, stats, req->param0, req->param1, req->param2, req->param3, 0, 0, mac_id); + } } /** diff --git a/dp/wifi3.0/dp_stats.c b/dp/wifi3.0/dp_stats.c index 670ebf4b12..b60be9ea22 100644 --- a/dp/wifi3.0/dp_stats.c +++ b/dp/wifi3.0/dp_stats.c @@ -31,14 +31,19 @@ #define DP_HTT_LOW_WM_HIT_COUNT_LEN HTT_STATS_LOW_WM_BINS #define DP_HTT_HIGH_WM_HIT_COUNT_LEN HTT_STATS_HIGH_WM_BINS #define DP_HTT_TX_MCS_LEN HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS +#define DP_HTT_TX_MCS_EXT_LEN HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS #define DP_HTT_TX_SU_MCS_LEN HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS +#define DP_HTT_TX_SU_MCS_EXT_LEN HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS #define DP_HTT_TX_MU_MCS_LEN HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS +#define DP_HTT_TX_MU_MCS_EXT_LEN HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS #define DP_HTT_TX_NSS_LEN HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS #define DP_HTT_TX_BW_LEN HTT_TX_PDEV_STATS_NUM_BW_COUNTERS #define DP_HTT_TX_PREAM_LEN HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES #define DP_HTT_TX_PDEV_GI_LEN HTT_TX_PDEV_STATS_NUM_GI_COUNTERS #define DP_HTT_TX_DCM_LEN HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS #define DP_HTT_RX_MCS_LEN HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS +#define DP_HTT_RX_MCS_EXT_LEN HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS +#define DP_HTT_RX_PDEV_MCS_LEN_EXT HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS_EXT #define DP_HTT_RX_NSS_LEN HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS #define DP_HTT_RX_DCM_LEN HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS #define DP_HTT_RX_BW_LEN HTT_RX_PDEV_STATS_NUM_BW_COUNTERS @@ -883,7 +888,8 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) (htt_tx_peer_rate_stats_tlv *)tag_buf; uint8_t i, j; uint16_t index = 0; - char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS]; + char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS] = {0}; + char *tx_gi_ext[HTT_TX_PEER_STATS_NUM_GI_COUNTERS] = {0}; char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN); if (!str_buf) { @@ -892,8 +898,14 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) return; } - for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) + for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) { tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); + tx_gi_ext[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); + if (!tx_gi[i] || !tx_gi_ext[i]) { + dp_err("Unable to allocate buffer for tx_gi"); + goto fail1; + } + } DP_PRINT_STATS("HTT_TX_PEER_RATE_STATS_TLV:"); DP_PRINT_STATS("tx_ldpc = %u", @@ -910,6 +922,12 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->tx_mcs[i]); } + for (i = 0; i < DP_HTT_TX_MCS_EXT_LEN; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + DP_HTT_TX_MCS_LEN, + dp_stats_buf->tx_mcs_ext[i]); + } DP_PRINT_STATS("tx_mcs = %s ", str_buf); index = 0; @@ -919,7 +937,15 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->tx_su_mcs[i]); } + for (i = 0; i < DP_HTT_TX_SU_MCS_EXT_LEN; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + DP_HTT_TX_SU_MCS_LEN, + dp_stats_buf->tx_su_mcs_ext[i]); + } DP_PRINT_STATS("tx_su_mcs = %s ", str_buf); + + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); for (i = 0; i < DP_HTT_TX_MU_MCS_LEN; i++) { @@ -927,7 +953,14 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->tx_mu_mcs[i]); } + for (i = 0; i < DP_HTT_TX_MU_MCS_EXT_LEN; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + DP_HTT_TX_MU_MCS_LEN, + dp_stats_buf->tx_mu_mcs_ext[i]); + } DP_PRINT_STATS("tx_mu_mcs = %s ", str_buf); + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); for (i = 0; i < DP_HTT_TX_NSS_LEN; i++) { @@ -946,6 +979,7 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) " %u:%u,", i, dp_stats_buf->tx_bw[i]); } DP_PRINT_STATS("tx_bw = %s ", str_buf); + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) { @@ -953,7 +987,15 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->tx_stbc[i]); } + for (i = 0; i < HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, + dp_stats_buf->tx_stbc_ext[i]); + } DP_PRINT_STATS("tx_stbc = %s ", str_buf); + + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); @@ -975,6 +1017,17 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_PRINT_STATS("tx_gi[%u] = %s ", j, tx_gi[j]); } + for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) { + index = 0; + for (i = 0; i < HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++) { + index += qdf_snprint(&tx_gi_ext[j][index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->tx_gi_ext[j][i]); + } + DP_PRINT_STATS("tx_gi_ext[%u] = %s ", j, tx_gi_ext[j]); + } + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) { @@ -983,9 +1036,14 @@ static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf) " %u:%u,", i, dp_stats_buf->tx_dcm[i]); } DP_PRINT_STATS("tx_dcm = %s\n", str_buf); - for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) - qdf_mem_free(tx_gi[i]); +fail1: + for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) { + if (tx_gi[i]) + qdf_mem_free(tx_gi[i]); + if (tx_gi_ext[i]) + qdf_mem_free(tx_gi_ext[i]); + } qdf_mem_free(str_buf); } @@ -1001,8 +1059,9 @@ static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf) (htt_rx_peer_rate_stats_tlv *)tag_buf; uint8_t i, j; uint16_t index = 0; - char *rssi_chain[DP_HTT_PEER_NUM_SS]; - char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS]; + char *rssi_chain[DP_HTT_PEER_NUM_SS] = {0}; + char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS] = {0}; + char *rx_gi_ext[HTT_RX_PEER_STATS_NUM_GI_COUNTERS] = {0}; char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN); if (!str_buf) { @@ -1011,10 +1070,22 @@ static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf) return; } - for (i = 0; i < DP_HTT_PEER_NUM_SS; i++) + for (i = 0; i < DP_HTT_PEER_NUM_SS; i++) { rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); - for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++) + if (!rssi_chain[i]) { + dp_err("Unable to allocate buffer for rssi_chain"); + goto fail1; + } + } + + for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++) { rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); + rx_gi_ext[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); + if (!rx_gi[i] || !rx_gi_ext[i]) { + dp_err("Unable to allocate buffer for rx_gi"); + goto fail1; + } + } DP_PRINT_STATS("HTT_RX_PEER_RATE_STATS_TLV:"); DP_PRINT_STATS("nsts = %u", @@ -1036,6 +1107,12 @@ static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->rx_mcs[i]); } + for (i = 0; i < DP_HTT_RX_MCS_EXT_LEN; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + DP_HTT_RX_MCS_LEN, + dp_stats_buf->rx_mcs_ext[i]); + } DP_PRINT_STATS("rx_mcs = %s ", str_buf); index = 0; @@ -1065,6 +1142,12 @@ static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->rx_stbc[i]); } + for (i = 0; i < HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS, + dp_stats_buf->rx_stbc_ext[i]); + } DP_PRINT_STATS("rx_stbc = %s ", str_buf); index = 0; @@ -1098,6 +1181,18 @@ static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf) } DP_PRINT_STATS("rx_gi[%u] = %s ", j, rx_gi[j]); } + + for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++) { + index = 0; + for (i = 0; i < HTT_RX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++) { + index += qdf_snprint(&rx_gi_ext[j][index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->rx_gi_ext[j][i]); + } + DP_PRINT_STATS("rx_gi_ext[%u] = %s ", j, rx_gi_ext[j]); + } + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); for (i = 0; i < DP_HTT_RX_PREAM_LEN; i++) { @@ -1107,11 +1202,19 @@ static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf) } DP_PRINT_STATS("rx_pream = %s\n", str_buf); - for (i = 0; i < DP_HTT_PEER_NUM_SS; i++) +fail1: + for (i = 0; i < DP_HTT_PEER_NUM_SS; i++) { + if (!rssi_chain[i]) + break; qdf_mem_free(rssi_chain[i]); - for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++) - qdf_mem_free(rx_gi[i]); + } + for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++) { + if (rx_gi[i]) + qdf_mem_free(rx_gi[i]); + if (rx_gi_ext[i]) + qdf_mem_free(rx_gi_ext[i]); + } qdf_mem_free(str_buf); } @@ -2615,10 +2718,11 @@ static void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) (htt_tx_pdev_rate_stats_tlv *)tag_buf; uint8_t i, j; uint16_t index = 0; - char *tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]; - char *ac_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]; - char *ax_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]; - char *ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]; + char *tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; + char *tx_gi_ext[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; + char *ac_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; + char *ax_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; + char *ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN); if (!str_buf) { @@ -2628,24 +2732,25 @@ static void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) for (i = 0; i < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; i++) { tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); - if (!tx_gi[i]) { + tx_gi_ext[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); + if (!tx_gi[i] || !tx_gi_ext[i]) { dp_err("Unable to allocate buffer for tx_gi"); goto fail1; } ac_mu_mimo_tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); if (!ac_mu_mimo_tx_gi[i]) { dp_err("Unable to allocate buffer for ac_mu_mimo_tx_gi"); - goto fail2; + goto fail1; } ax_mu_mimo_tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); if (!ax_mu_mimo_tx_gi[i]) { dp_err("Unable to allocate buffer for ax_mu_mimo_tx_gi"); - goto fail3; + goto fail1; } ofdma_tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN); if (!ofdma_tx_gi[i]) { dp_err("Unable to allocate buffer for ofdma_tx_gi"); - goto fail4; + goto fail1; } } @@ -2668,6 +2773,13 @@ static void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->tx_mcs[i]); } + + for (i = 0; i < DP_HTT_TX_MCS_EXT_LEN; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + DP_HTT_TX_MCS_LEN, + dp_stats_buf->tx_mcs_ext[i]); + } DP_PRINT_STATS("tx_mcs = %s ", str_buf); index = 0; @@ -2715,6 +2827,12 @@ static void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) DP_MAX_STRING_LEN - index, " %u:%u,", i, dp_stats_buf->tx_stbc[i]); } + for (i = 0; i < HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i + HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, + dp_stats_buf->tx_stbc_ext[i]); + } DP_PRINT_STATS("tx_stbc = %s ", str_buf); index = 0; @@ -2738,6 +2856,18 @@ static void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) DP_PRINT_STATS("tx_gi[%u] = %s ", j, tx_gi[j]); } + for (j = 0; j < DP_HTT_PDEV_TX_GI_LEN; j++) { + index = 0; + qdf_mem_zero(tx_gi_ext[j], DP_MAX_STRING_LEN); + for (i = 0; i < HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++) { + index += qdf_snprint(&tx_gi_ext[j][index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->tx_gi_ext[j][i]); + } + DP_PRINT_STATS("tx_gi_ext[%u] = %s ", j, tx_gi_ext[j]); + } + index = 0; qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) { @@ -2926,20 +3056,151 @@ static void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf) j, ofdma_tx_gi[j]); } - for (i = 0; i < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; i++) - qdf_mem_free(ofdma_tx_gi[i]); +fail1: + for (i = 0; i < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; i++) { + if (tx_gi[i]) + qdf_mem_free(tx_gi[i]); + if (tx_gi_ext[i]) + qdf_mem_free(tx_gi_ext[i]); + if (ac_mu_mimo_tx_gi[i]) + qdf_mem_free(ac_mu_mimo_tx_gi[i]); + if (ax_mu_mimo_tx_gi[i]) + qdf_mem_free(ax_mu_mimo_tx_gi[i]); + if (ofdma_tx_gi[i]) + qdf_mem_free(ofdma_tx_gi[i]); + } + qdf_mem_free(str_buf); +} + +/* + * dp_print_rx_pdev_rate_ext_stats_tlv: display htt_rx_pdev_rate_ext_stats_tlv + * @tag_buf: buffer containing the tlv htt_rx_pdev_rate_ext_stats_tlv + * + * return:void + */ +static void dp_print_rx_pdev_rate_ext_stats_tlv(struct dp_pdev *pdev, + uint32_t *tag_buf) +{ + htt_rx_pdev_rate_ext_stats_tlv *dp_stats_buf = + (htt_rx_pdev_rate_ext_stats_tlv *)tag_buf; + uint8_t i, j; + uint16_t index = 0; + char *rx_gi_ext[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; + char *ul_ofdma_rx_gi_ext[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS] = {0}; + char *str_buf = qdf_mem_malloc(DP_MAX_STRING_LEN); + + if (!str_buf) { + dp_err("Output buffer not allocated"); + return; + } + + for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++) { + rx_gi_ext[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); + if (!rx_gi_ext[i]) { + dp_err("Unable to allocate buffer for rx_gi_ext"); + goto fail1; + } + + ul_ofdma_rx_gi_ext[i] = qdf_mem_malloc(DP_MAX_STRING_LEN); + if (!ul_ofdma_rx_gi_ext[i]) { + dp_err("Unable to allocate buffer for ul_ofdma_rx_gi_ext"); + goto fail1; + } + } + + index = 0; + qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, dp_stats_buf->rx_mcs_ext[i]); + } + DP_PRINT_STATS("rx_mcs_ext = %s ", str_buf); + + index = 0; + qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, dp_stats_buf->rx_stbc_ext[i]); + } + DP_PRINT_STATS("rx_stbc_ext = %s ", str_buf); + + for (j = 0; j < DP_HTT_RX_GI_LEN; j++) { + index = 0; + qdf_mem_zero(rx_gi_ext[j], DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&rx_gi_ext[j][index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->rx_gi_ext[j][i]); + } + DP_PRINT_STATS("rx_gi_ext[%u] = %s ", j, rx_gi_ext[j]); + } + + index = 0; + qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", + i, dp_stats_buf->ul_ofdma_rx_mcs_ext[i]); + } + DP_PRINT_STATS("ul_ofdma_rx_mcs_ext = %s", str_buf); + + for (j = 0; j < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; j++) { + index = 0; + qdf_mem_zero(ul_ofdma_rx_gi_ext[j], DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&ul_ofdma_rx_gi_ext[j][index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf-> + ul_ofdma_rx_gi_ext[j][i]); + } + DP_PRINT_STATS("ul_ofdma_rx_gi_ext[%u] = %s ", + j, ul_ofdma_rx_gi_ext[j]); + } + + index = 0; + qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->rx_11ax_su_txbf_mcs_ext[i]); + } + DP_PRINT_STATS("rx_11ax_su_txbf_mcs_ext = %s ", str_buf); + + index = 0; + qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->rx_11ax_mu_txbf_mcs_ext[i]); + } + DP_PRINT_STATS("rx_11ax_mu_txbf_mcs_ext = %s ", str_buf); + + index = 0; + qdf_mem_zero(str_buf, DP_MAX_STRING_LEN); + for (i = 0; i < DP_HTT_RX_PDEV_MCS_LEN_EXT; i++) { + index += qdf_snprint(&str_buf[index], + DP_MAX_STRING_LEN - index, + " %u:%u,", i, + dp_stats_buf->rx_11ax_dl_ofdma_mcs_ext[i]); + } + DP_PRINT_STATS("rx_11ax_dl_ofdma_mcs_ext = %s ", str_buf); -fail4: - for (i = 0; i < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; i++) - qdf_mem_free(ax_mu_mimo_tx_gi[i]); -fail3: - for (i = 0; i < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; i++) - qdf_mem_free(ac_mu_mimo_tx_gi[i]); -fail2: - for (i = 0; i < HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; i++) - qdf_mem_free(tx_gi[i]); fail1: + for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++) { + if (ul_ofdma_rx_gi_ext[i]) + qdf_mem_free(ul_ofdma_rx_gi_ext[i]); + if (rx_gi_ext[i]) + qdf_mem_free(rx_gi_ext[i]); + } + qdf_mem_free(str_buf); } @@ -3829,6 +4090,10 @@ void dp_htt_stats_print_tag(struct dp_pdev *pdev, dp_print_rx_pdev_rate_stats_tlv(pdev, tag_buf); break; + case HTT_STATS_RX_PDEV_RATE_EXT_STATS_TAG: + dp_print_rx_pdev_rate_ext_stats_tlv(pdev, tag_buf); + break; + case HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG: dp_print_tx_pdev_stats_sched_per_txq_tlv(tag_buf); break;