On 5/28/2024 4:36 PM, Kalle Valo wrote: > Ramya Gnanasekar <quic_rgnanase@xxxxxxxxxxx> writes: > >>>> +static inline void >>>> +ath12k_htt_print_tx_pdev_mu_ppdu_dist_stats_tlv(const void *tag_buf, >>>> + struct debug_htt_stats_req *stats_req) >>>> +{ >>>> + const struct ath12k_htt_tx_pdev_mu_ppdu_dist_stats_tlv >>>> *htt_stats_buf = tag_buf; >>>> + char *mode; >>>> + u8 j, hw_mode, i, str_buf_len; >>>> + u8 *buf = stats_req->buf; >>>> + u32 len = stats_req->buf_len; >>>> + u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE; >>>> + u32 stats_value; >>>> + u8 max_ppdu = ATH12K_HTT_STATS_MAX_NUM_MU_PPDU_PER_BURST; >>>> + u8 max_sched = ATH12K_HTT_STATS_MAX_NUM_SCHED_STATUS; >>>> + char str_buf[ATH12K_HTT_MAX_STRING_LEN]; >>>> + >>>> + hw_mode = le32_to_cpu(htt_stats_buf->hw_mode); >>>> + >>>> + switch (hw_mode) { >>>> + case ATH12K_HTT_STATS_HWMODE_AC: >>>> + len += scnprintf(buf + len, buf_len - len, >>>> + "HTT_TX_PDEV_MU_PPDU_DISTRIBUTION_STATS:\n"); >>>> + mode = "ac"; >>>> + break; >>>> + case ATH12K_HTT_STATS_HWMODE_AX: >>>> + mode = "ax"; >>>> + break; >>>> + case ATH12K_HTT_STATS_HWMODE_BE: >>>> + mode = "be"; >>>> + break; >>>> + default: >>>> + return; >>>> + } >>> >>> Why are we not adding "HTT_TX_PDEV_MU_PPDU_DISTRIBUTION_STATS:\n" with >>> ax and be modes? >>> >> Sorry for the delayed response. I was on OoO for a week. > > No worries. > >> We will receive this TLV for each hw modes. Since >> "HTT_TX_PDEV_MU_PPDU_DISTRIBUTION_STATS:\n" is header and it would be >> suffice to print it once, hence added it inside hw mode ac which will be >> the first hw mode integrated inside the TLV. > > I would have expected that we print that outside of > ath12k_htt_print_tx_pdev_mu_ppdu_dist_stats_tlv(), before the function > is called at all. > Function itself will be called more than once. The overall HTT TLV will be integrated with tag HTT_STATS_MU_PPDU_DIST_TAG (129) for all the hw modes separately.