Skip to content

Commit

Permalink
wifi: ath12k: Dump PDEV transmit rate HTT stats
Browse files Browse the repository at this point in the history
Support to dump PDEV transmit rate stats through HTT debugfs stats type 9.

Sample output:
-------------------------
echo 9 > /sys/kernel/debug/ath12k/pci-0000\:03\:00.0/mac0/htt_stats_type
cat /sys/kernel/debug/ath12k/pci-0000\:03\:00.0/mac0/htt_stats
HTT_TX_PDEV_RATE_STATS_TLV:
mac_id = 0
tx_ldpc = 1088
ac_mu_mimo_tx_ldpc = 0
ax_mu_mimo_tx_ldpc = 0
ofdma_tx_ldpc = 0
rts_cnt = 941
rts_success = 180
ack_rssi = 4294967168
Legacy CCK Rates: 1 Mbps: 830, 2 Mbps: 0, 5.5 Mbps: 0, 12 Mbps: 0
Legacy OFDM Rates: 6 Mbps: 942, 9 Mbps: 0, 12 Mbps: 0, 18 Mbps: 0
                   24 Mbps: 0, 36 Mbps: 0, 48 Mbps: 0, 54 Mbps: 0
HE LTF: 1x: 0, 2x: 957, 4x: 132
tx_mcs =  0:342, 1:260, 2:171, 3:148, 4:31, 5:34, 6:93, 7:10, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0, 14:0, 15:0
ax_mu_mimo_tx_mcs =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ofdma_tx_mcs =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
tx_nss = 1:754, 2:335, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0
ac_mu_mimo_tx_nss = 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0
ax_mu_mimo_tx_nss = 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0
ofdma_tx_nss = 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0
tx_bw =  0:1089, 1:0, 2:0, 3:0, 4:0
tx_stbc =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
tx_gi[0] = 0:210, 1:260, 2:171, 3:148, 4:31, 5:34, 6:93, 7:10, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
tx_gi[1] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
tx_gi[2] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
tx_gi[3] = 0:132, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ac_mu_mimo_tx_gi[0] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
ac_mu_mimo_tx_gi[1] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
ac_mu_mimo_tx_gi[2] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
ac_mu_mimo_tx_gi[3] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
ax_mu_mimo_tx_gi[0] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ax_mu_mimo_tx_gi[1] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ax_mu_mimo_tx_gi[2] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ax_mu_mimo_tx_gi[3] = 0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ofdma_tx_gi[0] =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ofdma_tx_gi[1] =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ofdma_tx_gi[2] =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
ofdma_tx_gi[3] =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0
tx_su_mcs =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
tx_mu_mcs =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
ac_mu_mimo_tx_mcs =  0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0
ac_mu_mimo_tx_bw =  0:0, 1:0, 2:0, 3:0
ax_mu_mimo_tx_bw =  0:0, 1:0, 2:0, 3:0
ofdma_tx_bw =  0:0, 1:0, 2:0, 3:0
tx_pream =  0:942, 1:830, 2:0, 3:0, 4:1850, 5:0, 6:0
tx_dcm =  0:131, 1:0, 2:0, 3:0, 4:0

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Lingbo Kong <quic_lingbok@quicinc.com>
Reviewed-by: Aditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com>
Link: https://patch.msgid.link/20250113071758.19589-2-quic_lingbok@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
  • Loading branch information
Lingbo Kong authored and Jeff Johnson committed Feb 4, 2025
1 parent 9d13950 commit ba42b22
Show file tree
Hide file tree
Showing 2 changed files with 274 additions and 2 deletions.
206 changes: 205 additions & 1 deletion drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
*/

#include <linux/vmalloc.h>
Expand Down Expand Up @@ -3812,6 +3812,207 @@ ath12k_htt_print_pdev_mbssid_ctrl_frame_stats_tlv(const void *tag_buf, u16 tag_l
stats_req->buf_len = len;
}

static inline void
ath12k_htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf, u16 tag_len,
struct debug_htt_stats_req *stats_req)
{
const struct ath12k_htt_tx_pdev_rate_stats_tlv *htt_stats_buf = tag_buf;
u8 *buf = stats_req->buf;
u32 len = stats_req->buf_len;
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
u8 i, j;
u32 mac_id_word;

if (tag_len < sizeof(*htt_stats_buf))
return;

mac_id_word = le32_to_cpu(htt_stats_buf->mac_id_word);

len += scnprintf(buf + len, buf_len - len, "HTT_TX_PDEV_RATE_STATS_TLV:\n");
len += scnprintf(buf + len, buf_len - len, "mac_id = %u\n",
u32_get_bits(mac_id_word, ATH12K_HTT_STATS_MAC_ID));
len += scnprintf(buf + len, buf_len - len, "tx_ldpc = %u\n",
le32_to_cpu(htt_stats_buf->tx_ldpc));
len += scnprintf(buf + len, buf_len - len, "ac_mu_mimo_tx_ldpc = %u\n",
le32_to_cpu(htt_stats_buf->ac_mu_mimo_tx_ldpc));
len += scnprintf(buf + len, buf_len - len, "ax_mu_mimo_tx_ldpc = %u\n",
le32_to_cpu(htt_stats_buf->ax_mu_mimo_tx_ldpc));
len += scnprintf(buf + len, buf_len - len, "ofdma_tx_ldpc = %u\n",
le32_to_cpu(htt_stats_buf->ofdma_tx_ldpc));
len += scnprintf(buf + len, buf_len - len, "rts_cnt = %u\n",
le32_to_cpu(htt_stats_buf->rts_cnt));
len += scnprintf(buf + len, buf_len - len, "rts_success = %u\n",
le32_to_cpu(htt_stats_buf->rts_success));
len += scnprintf(buf + len, buf_len - len, "ack_rssi = %u\n",
le32_to_cpu(htt_stats_buf->ack_rssi));
len += scnprintf(buf + len, buf_len - len,
"Legacy CCK Rates: 1 Mbps: %u, 2 Mbps: %u, 5.5 Mbps: %u, 12 Mbps: %u\n",
le32_to_cpu(htt_stats_buf->tx_legacy_cck_rate[0]),
le32_to_cpu(htt_stats_buf->tx_legacy_cck_rate[1]),
le32_to_cpu(htt_stats_buf->tx_legacy_cck_rate[2]),
le32_to_cpu(htt_stats_buf->tx_legacy_cck_rate[3]));
len += scnprintf(buf + len, buf_len - len,
"Legacy OFDM Rates: 6 Mbps: %u, 9 Mbps: %u, 12 Mbps: %u, 18 Mbps: %u\n"
" 24 Mbps: %u, 36 Mbps: %u, 48 Mbps: %u, 54 Mbps: %u\n",
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[0]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[1]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[2]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[3]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[4]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[5]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[6]),
le32_to_cpu(htt_stats_buf->tx_legacy_ofdm_rate[7]));
len += scnprintf(buf + len, buf_len - len, "HE LTF: 1x: %u, 2x: %u, 4x: %u\n",
le32_to_cpu(htt_stats_buf->tx_he_ltf[1]),
le32_to_cpu(htt_stats_buf->tx_he_ltf[2]),
le32_to_cpu(htt_stats_buf->tx_he_ltf[3]));

len += print_array_to_buf(buf, len, "tx_mcs", htt_stats_buf->tx_mcs,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, NULL);
for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; j++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
j + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->tx_mcs_ext[j]));
for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA2_MCS_COUNTERS; j++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
j + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS +
ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA2_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->tx_mcs_ext_2[j]));
len += scnprintf(buf + len, buf_len - len, "\n");

len += print_array_to_buf(buf, len, "ax_mu_mimo_tx_mcs",
htt_stats_buf->ax_mu_mimo_tx_mcs,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, NULL);
for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; j++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
j + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->ax_mu_mimo_tx_mcs_ext[j]));
len += scnprintf(buf + len, buf_len - len, "\n");

len += print_array_to_buf(buf, len, "ofdma_tx_mcs",
htt_stats_buf->ofdma_tx_mcs,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, NULL);
for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; j++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
j + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->ofdma_tx_mcs_ext[j]));
len += scnprintf(buf + len, buf_len - len, "\n");

len += scnprintf(buf + len, buf_len - len, "tx_nss =");
for (j = 1; j <= ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
len += scnprintf(buf + len, buf_len - len, " %u:%u,",
j, le32_to_cpu(htt_stats_buf->tx_nss[j - 1]));
len--;
len += scnprintf(buf + len, buf_len - len, "\n");

len += scnprintf(buf + len, buf_len - len, "ac_mu_mimo_tx_nss =");
for (j = 1; j <= ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
len += scnprintf(buf + len, buf_len - len, " %u:%u,",
j, le32_to_cpu(htt_stats_buf->ac_mu_mimo_tx_nss[j - 1]));
len--;
len += scnprintf(buf + len, buf_len - len, "\n");

len += scnprintf(buf + len, buf_len - len, "ax_mu_mimo_tx_nss =");
for (j = 1; j <= ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
len += scnprintf(buf + len, buf_len - len, " %u:%u,",
j, le32_to_cpu(htt_stats_buf->ax_mu_mimo_tx_nss[j - 1]));
len--;
len += scnprintf(buf + len, buf_len - len, "\n");

len += scnprintf(buf + len, buf_len - len, "ofdma_tx_nss =");
for (j = 1; j <= ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
len += scnprintf(buf + len, buf_len - len, " %u:%u,",
j, le32_to_cpu(htt_stats_buf->ofdma_tx_nss[j - 1]));
len--;
len += scnprintf(buf + len, buf_len - len, "\n");

len += print_array_to_buf(buf, len, "tx_bw", htt_stats_buf->tx_bw,
ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS, NULL);
len += scnprintf(buf + len, buf_len - len, ", %u:%u\n",
ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS,
le32_to_cpu(htt_stats_buf->tx_bw_320mhz));

len += print_array_to_buf(buf, len, "tx_stbc",
htt_stats_buf->tx_stbc,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, NULL);
for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; j++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
j + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->tx_stbc_ext[j]));
len += scnprintf(buf + len, buf_len - len, "\n");

for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
len += scnprintf(buf + len, (buf_len - len),
"tx_gi[%u] =", j);
len += print_array_to_buf(buf, len, NULL, htt_stats_buf->tx_gi[j],
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
NULL);
for (i = 0; i < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
i + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->tx_gi_ext[j][i]));
len += scnprintf(buf + len, buf_len - len, "\n");
}

for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
len += scnprintf(buf + len, (buf_len - len),
"ac_mu_mimo_tx_gi[%u] =", j);
len += print_array_to_buf(buf, len, NULL,
htt_stats_buf->ac_mu_mimo_tx_gi[j],
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
"\n");
}

for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
len += scnprintf(buf + len, (buf_len - len),
"ax_mu_mimo_tx_gi[%u] =", j);
len += print_array_to_buf(buf, len, NULL, htt_stats_buf->ax_mimo_tx_gi[j],
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
NULL);
for (i = 0; i < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
i + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->ax_tx_gi_ext[j][i]));
len += scnprintf(buf + len, buf_len - len, "\n");
}

for (j = 0; j < ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
len += scnprintf(buf + len, (buf_len - len),
"ofdma_tx_gi[%u] = ", j);
len += print_array_to_buf(buf, len, NULL, htt_stats_buf->ofdma_tx_gi[j],
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
NULL);
for (i = 0; i < ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS; i++)
len += scnprintf(buf + len, buf_len - len, ", %u:%u",
i + ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS,
le32_to_cpu(htt_stats_buf->ofd_tx_gi_ext[j][i]));
len += scnprintf(buf + len, buf_len - len, "\n");
}

len += print_array_to_buf(buf, len, "tx_su_mcs", htt_stats_buf->tx_su_mcs,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, "\n");
len += print_array_to_buf(buf, len, "tx_mu_mcs", htt_stats_buf->tx_mu_mcs,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, "\n");
len += print_array_to_buf(buf, len, "ac_mu_mimo_tx_mcs",
htt_stats_buf->ac_mu_mimo_tx_mcs,
ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS, "\n");
len += print_array_to_buf(buf, len, "ac_mu_mimo_tx_bw",
htt_stats_buf->ac_mu_mimo_tx_bw,
ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS, "\n");
len += print_array_to_buf(buf, len, "ax_mu_mimo_tx_bw",
htt_stats_buf->ax_mu_mimo_tx_bw,
ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS, "\n");
len += print_array_to_buf(buf, len, "ofdma_tx_bw",
htt_stats_buf->ofdma_tx_bw,
ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS, "\n");
len += print_array_to_buf(buf, len, "tx_pream", htt_stats_buf->tx_pream,
ATH12K_HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES, "\n");
len += print_array_to_buf(buf, len, "tx_dcm", htt_stats_buf->tx_dcm,
ATH12K_HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS, "\n");

stats_req->buf_len = len;
}

static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
u16 tag, u16 len, const void *tag_buf,
void *user_data)
Expand Down Expand Up @@ -4047,6 +4248,9 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
ath12k_htt_print_pdev_mbssid_ctrl_frame_stats_tlv(tag_buf, len,
stats_req);
break;
case HTT_STATS_TX_PDEV_RATE_STATS_TAG:
ath12k_htt_print_tx_pdev_rate_stats_tlv(tag_buf, len, stats_req);
break;
default:
break;
}
Expand Down
70 changes: 69 additions & 1 deletion drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
/*
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
*/

#ifndef DEBUG_HTT_STATS_H
Expand Down Expand Up @@ -129,6 +129,7 @@ enum ath12k_dbg_htt_ext_stats_type {
ATH12K_DBG_HTT_EXT_STATS_PDEV_ERROR = 5,
ATH12K_DBG_HTT_EXT_STATS_PDEV_TQM = 6,
ATH12K_DBG_HTT_EXT_STATS_TX_DE_INFO = 8,
ATH12K_DBG_HTT_EXT_STATS_PDEV_TX_RATE = 9,
ATH12K_DBG_HTT_EXT_STATS_TX_SELFGEN_INFO = 12,
ATH12K_DBG_HTT_EXT_STATS_SRNG_INFO = 15,
ATH12K_DBG_HTT_EXT_STATS_SFM_INFO = 16,
Expand Down Expand Up @@ -173,6 +174,7 @@ enum ath12k_dbg_htt_tlv_tag {
HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG = 25,
HTT_STATS_SFM_CMN_TAG = 26,
HTT_STATS_SRING_STATS_TAG = 27,
HTT_STATS_TX_PDEV_RATE_STATS_TAG = 34,
HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG = 36,
HTT_STATS_TX_SCHED_CMN_TAG = 37,
HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG = 39,
Expand Down Expand Up @@ -387,6 +389,72 @@ struct ath12k_htt_tx_pdev_mu_ppdu_dist_stats_tlv {
__le32 num_ppdu_posted_per_burst[ATH12K_HTT_STATS_MU_PPDU_PER_BURST_WORDS];
} __packed;

#define ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS 12
#define ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS 4
#define ATH12K_HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS 5
#define ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS 4
#define ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
#define ATH12K_HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES 7
#define ATH12K_HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS 4
#define ATH12K_HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
#define ATH12K_HTT_TX_PDEV_STATS_NUM_LTF 4
#define ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS 2
#define ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA2_MCS_COUNTERS 2
#define ATH12K_HTT_TX_PDEV_STATS_NUM_11AX_TRIGGER_TYPES 6

struct ath12k_htt_tx_pdev_rate_stats_tlv {
__le32 mac_id_word;
__le32 tx_ldpc;
__le32 rts_cnt;
__le32 ack_rssi;
__le32 tx_mcs[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 tx_su_mcs[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 tx_mu_mcs[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 tx_nss[ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
__le32 tx_bw[ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
__le32 tx_stbc[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 tx_pream[ATH12K_HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES];
__le32 tx_gi[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 tx_dcm[ATH12K_HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS];
__le32 rts_success;
__le32 tx_legacy_cck_rate[ATH12K_HTT_TX_PDEV_STATS_NUM_LEGACY_CCK_STATS];
__le32 tx_legacy_ofdm_rate[ATH12K_HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
__le32 ac_mu_mimo_tx_ldpc;
__le32 ax_mu_mimo_tx_ldpc;
__le32 ofdma_tx_ldpc;
__le32 tx_he_ltf[ATH12K_HTT_TX_PDEV_STATS_NUM_LTF];
__le32 ac_mu_mimo_tx_mcs[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 ax_mu_mimo_tx_mcs[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 ofdma_tx_mcs[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 ac_mu_mimo_tx_nss[ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
__le32 ax_mu_mimo_tx_nss[ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
__le32 ofdma_tx_nss[ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
__le32 ac_mu_mimo_tx_bw[ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
__le32 ax_mu_mimo_tx_bw[ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
__le32 ofdma_tx_bw[ATH12K_HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
__le32 ac_mu_mimo_tx_gi[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 ax_mimo_tx_gi[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 ofdma_tx_gi[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
__le32 trigger_type_11ax[ATH12K_HTT_TX_PDEV_STATS_NUM_11AX_TRIGGER_TYPES];
__le32 tx_11ax_su_ext;
__le32 tx_mcs_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 tx_stbc_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 tx_gi_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 ax_mu_mimo_tx_mcs_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 ofdma_tx_mcs_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 ax_tx_gi_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 ofd_tx_gi_ext[ATH12K_HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA_MCS_COUNTERS];
__le32 tx_mcs_ext_2[ATH12K_HTT_TX_PDEV_STATS_NUM_EXTRA2_MCS_COUNTERS];
__le32 tx_bw_320mhz;
};

#define ATH12K_HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID GENMASK(7, 0)
#define ATH12K_HTT_TX_PDEV_STATS_SCHED_PER_TXQ_ID GENMASK(15, 8)

Expand Down

0 comments on commit ba42b22

Please sign in to comment.