Skip to content

Commit f647dc6

Browse files
Rajat Sonijeff-t-johnson
authored andcommitted
wifi: ath12k: Support pdev Puncture Stats
Add support to request pdev puncture stats from firmware through HTT stats type 46. These stats give the count of number of subbands used in different wifi standards. Sample output: ------------- echo 46 > /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats_type cat /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats HTT_PDEV_PUNCTURE_STATS_TLV: mac_id = 0 tx_ofdm_su_last_used_pattern_mask = 0x00000001 tx_ofdm_su_num_subbands_used_cnt_01 = 217 tx_ofdm_su_num_subbands_used_cnt_02 = 0 tx_ofdm_su_num_subbands_used_cnt_03 = 0 ..... HTT_PDEV_PUNCTURE_STATS_TLV: mac_id = 0 tx_ax_dl_mu_ofdma_last_used_pattern_mask = 0x00000000 tx_ax_dl_mu_ofdma_num_subbands_used_cnt_01 = 0 tx_ax_dl_mu_ofdma_num_subbands_used_cnt_02 = 0 tx_ax_dl_mu_ofdma_num_subbands_used_cnt_03 = 0 ..... HTT_PDEV_PUNCTURE_STATS_TLV: mac_id = 0 tx_be_dl_mu_ofdma_last_used_pattern_mask = 0x00000000 tx_be_dl_mu_ofdma_num_subbands_used_cnt_01 = 0 tx_be_dl_mu_ofdma_num_subbands_used_cnt_02 = 0 tx_be_dl_mu_ofdma_num_subbands_used_cnt_03 = 0 ..... HTT_PDEV_PUNCTURE_STATS_TLV: mac_id = 0 rx_ax_ul_mu_ofdma_last_used_pattern_mask = 0x00000000 rx_ax_ul_mu_ofdma_num_subbands_used_cnt_01 = 0 rx_ax_ul_mu_ofdma_num_subbands_used_cnt_02 = 0 rx_ax_ul_mu_ofdma_num_subbands_used_cnt_03 = 0 ..... HTT_PDEV_PUNCTURE_STATS_TLV: mac_id = 0 rx_be_ul_mu_ofdma_last_used_pattern_mask = 0x00000000 rx_be_ul_mu_ofdma_num_subbands_used_cnt_01 = 0 rx_be_ul_mu_ofdma_num_subbands_used_cnt_02 = 0 rx_be_ul_mu_ofdma_num_subbands_used_cnt_03 = 0 ..... Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 Signed-off-by: Rajat Soni <[email protected]> Signed-off-by: Roopni Devanathan <[email protected]> Acked-by: Kalle Valo <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jeff Johnson <[email protected]>
1 parent 89699f0 commit f647dc6

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3522,6 +3522,104 @@ ath12k_htt_print_ast_entry_tlv(const void *tag_buf, u16 tag_len,
35223522
stats_req->buf_len = len;
35233523
}
35243524

3525+
static const char*
3526+
ath12k_htt_get_punct_dir_type_str(enum ath12k_htt_stats_direction direction)
3527+
{
3528+
switch (direction) {
3529+
case ATH12K_HTT_STATS_DIRECTION_TX:
3530+
return "tx";
3531+
case ATH12K_HTT_STATS_DIRECTION_RX:
3532+
return "rx";
3533+
default:
3534+
return "unknown";
3535+
}
3536+
}
3537+
3538+
static const char*
3539+
ath12k_htt_get_punct_ppdu_type_str(enum ath12k_htt_stats_ppdu_type ppdu_type)
3540+
{
3541+
switch (ppdu_type) {
3542+
case ATH12K_HTT_STATS_PPDU_TYPE_MODE_SU:
3543+
return "su";
3544+
case ATH12K_HTT_STATS_PPDU_TYPE_DL_MU_MIMO:
3545+
return "dl_mu_mimo";
3546+
case ATH12K_HTT_STATS_PPDU_TYPE_UL_MU_MIMO:
3547+
return "ul_mu_mimo";
3548+
case ATH12K_HTT_STATS_PPDU_TYPE_DL_MU_OFDMA:
3549+
return "dl_mu_ofdma";
3550+
case ATH12K_HTT_STATS_PPDU_TYPE_UL_MU_OFDMA:
3551+
return "ul_mu_ofdma";
3552+
default:
3553+
return "unknown";
3554+
}
3555+
}
3556+
3557+
static const char*
3558+
ath12k_htt_get_punct_pream_type_str(enum ath12k_htt_stats_param_type pream_type)
3559+
{
3560+
switch (pream_type) {
3561+
case ATH12K_HTT_STATS_PREAM_OFDM:
3562+
return "ofdm";
3563+
case ATH12K_HTT_STATS_PREAM_CCK:
3564+
return "cck";
3565+
case ATH12K_HTT_STATS_PREAM_HT:
3566+
return "ht";
3567+
case ATH12K_HTT_STATS_PREAM_VHT:
3568+
return "ac";
3569+
case ATH12K_HTT_STATS_PREAM_HE:
3570+
return "ax";
3571+
case ATH12K_HTT_STATS_PREAM_EHT:
3572+
return "be";
3573+
default:
3574+
return "unknown";
3575+
}
3576+
}
3577+
3578+
static void
3579+
ath12k_htt_print_puncture_stats_tlv(const void *tag_buf, u16 tag_len,
3580+
struct debug_htt_stats_req *stats_req)
3581+
{
3582+
const struct ath12k_htt_pdev_puncture_stats_tlv *stats_buf = tag_buf;
3583+
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
3584+
u32 len = stats_req->buf_len;
3585+
u8 *buf = stats_req->buf;
3586+
const char *direction;
3587+
const char *ppdu_type;
3588+
const char *preamble;
3589+
u32 mac_id__word;
3590+
u32 subband_limit;
3591+
u8 i;
3592+
3593+
if (tag_len < sizeof(*stats_buf))
3594+
return;
3595+
3596+
mac_id__word = le32_to_cpu(stats_buf->mac_id__word);
3597+
subband_limit = min(le32_to_cpu(stats_buf->subband_cnt),
3598+
ATH12K_HTT_PUNCT_STATS_MAX_SUBBAND_CNT);
3599+
3600+
direction = ath12k_htt_get_punct_dir_type_str(le32_to_cpu(stats_buf->direction));
3601+
ppdu_type = ath12k_htt_get_punct_ppdu_type_str(le32_to_cpu(stats_buf->ppdu_type));
3602+
preamble = ath12k_htt_get_punct_pream_type_str(le32_to_cpu(stats_buf->preamble));
3603+
3604+
len += scnprintf(buf + len, buf_len - len, "HTT_PDEV_PUNCTURE_STATS_TLV:\n");
3605+
len += scnprintf(buf + len, buf_len - len, "mac_id = %u\n",
3606+
u32_get_bits(mac_id__word, ATH12K_HTT_STATS_MAC_ID));
3607+
len += scnprintf(buf + len, buf_len - len,
3608+
"%s_%s_%s_last_used_pattern_mask = 0x%08x\n",
3609+
direction, preamble, ppdu_type,
3610+
le32_to_cpu(stats_buf->last_used_pattern_mask));
3611+
3612+
for (i = 0; i < subband_limit; i++) {
3613+
len += scnprintf(buf + len, buf_len - len,
3614+
"%s_%s_%s_num_subbands_used_cnt_%02d = %u\n",
3615+
direction, preamble, ppdu_type, i + 1,
3616+
le32_to_cpu(stats_buf->num_subbands_used_cnt[i]));
3617+
}
3618+
len += scnprintf(buf + len, buf_len - len, "\n");
3619+
3620+
stats_req->buf_len = len;
3621+
}
3622+
35253623
static void
35263624
ath12k_htt_print_dmac_reset_stats_tlv(const void *tag_buf, u16 tag_len,
35273625
struct debug_htt_stats_req *stats_req)
@@ -3933,6 +4031,9 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
39334031
case HTT_STATS_AST_ENTRY_TAG:
39344032
ath12k_htt_print_ast_entry_tlv(tag_buf, len, stats_req);
39354033
break;
4034+
case HTT_STATS_PDEV_PUNCTURE_STATS_TAG:
4035+
ath12k_htt_print_puncture_stats_tlv(tag_buf, len, stats_req);
4036+
break;
39364037
case HTT_STATS_DMAC_RESET_STATS_TAG:
39374038
ath12k_htt_print_dmac_reset_stats_tlv(tag_buf, len, stats_req);
39384039
break;

drivers/net/wireless/ath/ath12k/debugfs_htt_stats.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ enum ath12k_dbg_htt_ext_stats_type {
143143
ATH12K_DBG_HTT_EXT_PDEV_PER_STATS = 40,
144144
ATH12K_DBG_HTT_EXT_AST_ENTRIES = 41,
145145
ATH12K_DBG_HTT_EXT_STATS_SOC_ERROR = 45,
146+
ATH12K_DBG_HTT_DBG_PDEV_PUNCTURE_STATS = 46,
146147
ATH12K_DBG_HTT_EXT_STATS_PDEV_SCHED_ALGO = 49,
147148
ATH12K_DBG_HTT_EXT_STATS_MANDATORY_MUOFDMA = 51,
148149
ATH12K_DGB_HTT_EXT_STATS_PDEV_MBSSID_CTRL_FRAME = 54,
@@ -223,6 +224,7 @@ enum ath12k_dbg_htt_tlv_tag {
223224
HTT_STATS_TXBF_OFDMA_AX_STEER_STATS_TAG = 150,
224225
HTT_STATS_DMAC_RESET_STATS_TAG = 155,
225226
HTT_STATS_PHY_TPC_STATS_TAG = 157,
227+
HTT_STATS_PDEV_PUNCTURE_STATS_TAG = 158,
226228
HTT_STATS_PDEV_SCHED_ALGO_OFDMA_STATS_TAG = 165,
227229
HTT_STATS_TXBF_OFDMA_AX_STEER_MPDU_STATS_TAG = 172,
228230
HTT_STATS_PDEV_MBSSID_CTRL_FRAME_STATS_TAG = 176,
@@ -1311,6 +1313,42 @@ struct ath12k_htt_ast_entry_tlv {
13111313
__le32 info;
13121314
} __packed;
13131315

1316+
enum ath12k_htt_stats_direction {
1317+
ATH12K_HTT_STATS_DIRECTION_TX,
1318+
ATH12K_HTT_STATS_DIRECTION_RX
1319+
};
1320+
1321+
enum ath12k_htt_stats_ppdu_type {
1322+
ATH12K_HTT_STATS_PPDU_TYPE_MODE_SU,
1323+
ATH12K_HTT_STATS_PPDU_TYPE_DL_MU_MIMO,
1324+
ATH12K_HTT_STATS_PPDU_TYPE_UL_MU_MIMO,
1325+
ATH12K_HTT_STATS_PPDU_TYPE_DL_MU_OFDMA,
1326+
ATH12K_HTT_STATS_PPDU_TYPE_UL_MU_OFDMA
1327+
};
1328+
1329+
enum ath12k_htt_stats_param_type {
1330+
ATH12K_HTT_STATS_PREAM_OFDM,
1331+
ATH12K_HTT_STATS_PREAM_CCK,
1332+
ATH12K_HTT_STATS_PREAM_HT,
1333+
ATH12K_HTT_STATS_PREAM_VHT,
1334+
ATH12K_HTT_STATS_PREAM_HE,
1335+
ATH12K_HTT_STATS_PREAM_EHT,
1336+
ATH12K_HTT_STATS_PREAM_RSVD1,
1337+
ATH12K_HTT_STATS_PREAM_COUNT,
1338+
};
1339+
1340+
#define ATH12K_HTT_PUNCT_STATS_MAX_SUBBAND_CNT 32
1341+
1342+
struct ath12k_htt_pdev_puncture_stats_tlv {
1343+
__le32 mac_id__word;
1344+
__le32 direction;
1345+
__le32 preamble;
1346+
__le32 ppdu_type;
1347+
__le32 subband_cnt;
1348+
__le32 last_used_pattern_mask;
1349+
__le32 num_subbands_used_cnt[ATH12K_HTT_PUNCT_STATS_MAX_SUBBAND_CNT];
1350+
} __packed;
1351+
13141352
struct ath12k_htt_dmac_reset_stats_tlv {
13151353
__le32 reset_count;
13161354
__le32 reset_time_lo_ms;

0 commit comments

Comments
 (0)