From 4255f08ff54b31f60f8bb0b3e65f17ed3116adf2 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 5 Feb 2025 01:43:05 -0800 Subject: [PATCH] fw-api: CL 28524940 - update fw common interface files Change-Id: Ic3cc32f729c4e20f22126bf7fd6fedced6dd6ebe CRs-Fixed: 3830439 --- fw/htt.h | 4 ++ fw/htt_stats.h | 132 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 1 deletion(-) diff --git a/fw/htt.h b/fw/htt.h index 3b0c0b8ef951..e9d34066ff72 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -840,6 +840,10 @@ typedef enum { HTT_STATS_PDEV_RTT_DELAY_TAG = 205, /* htt_stats_pdev_rtt_delay_tlv */ HTT_STATS_PDEV_AOA_TAG = 206, /* htt_stats_pdev_aoa_tlv */ HTT_STATS_PDEV_FTM_TPCCAL_TAG = 207, /* htt_stats_pdev_ftm_tpccal_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_GRP_STATS_TAG = 208, /* htt_stats_pdev_ulmumimo_grp_stats_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_DENYLIST_STATS_TAG = 209, /* htt_stats_pdev_ulmumimo_denylist_stats_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_SEQ_TERM_STATS_TAG = 210, /* htt_stats_pdev_ulmumimo_seq_term_stats_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_HIST_INELIGIBILITY_TAG = 211, /* htt_stats_pdev_ulmumimo_hist_ineligibility_tlv */ HTT_STATS_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index c0eccd71a494..f3dc39b8dce8 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2017-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. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -818,6 +818,17 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_STATS_PDEV_FTM_TPCCAL = 73, + /** HTT_DBG_EXT_STATS_PDEV_UL_MUMIMO_ELIGIBLE + * PARAMS: + * - No Params + * RESP MSG: + * - htt_stats_pdev_ul_mumimo_grp_stats_tlv + * - htt_stats_pdev_ul_mumimo_denylist_stats_tlv + * - htt_stats_pdev_ul_mumimo_seq_term_stats_tlv + * - htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv + */ + HTT_DBG_EXT_STATS_PDEV_UL_MUMIMO_ELIGIBLE = 74, + /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, @@ -2858,6 +2869,11 @@ typedef enum { HTT_TX_MUMIMO_GRP_INVALID_GROUP_INELIGIBLE, HTT_TX_MUMIMO_GRP_INVALID, HTT_TX_MUMIMO_GRP_INVALID_GROUP_EFF_MU_TPUT_OMBPS, + HTT_TX_MUMIMO_GRP_INVALID_GRP, + HTT_TX_MUMIMO_GRP_INVALID_TOTAL_NSS_LESS_THAN_GROUP_SIZE, + HTT_TX_MUMIMO_GRP_INSUFFICIENT_CANDIDATES_UL_MU_1SS_RATE, + HTT_TX_MUMIMO_GRP_MU_GRP_NOT_NEEDED, + HTT_TX_MUMIMO_GRP_INVALID_MAX_REASON_CODE, } htt_tx_mumimo_grp_invalid_reason_code_stats; @@ -7561,6 +7577,15 @@ typedef struct { A_UINT32 cv_corr_upload_total_num_users[HTT_TX_CV_CORR_MAX_NUM_COLUMNS]; /** number of streams present in uploaded CV Correlation results buffer */ A_UINT32 cv_corr_upload_total_num_streams[HTT_TX_CV_CORR_MAX_NUM_COLUMNS]; + + /** Total number of times lookahead sounding done for DL MU */ + A_UINT32 lookahead_sounding_dl_cnt; + /** Total number of times lookahead sounding done for DL MU based on number of users */ + A_UINT32 lookahead_snd_dl_num_users[HTT_TX_PDEV_STATS_NUM_BE_MUMIMO_USER_STATS]; + /** Total number of times lookahead sounding done for UL MU */ + A_UINT32 lookahead_sounding_ul_cnt; + /** Total number of times lookahead sounding done for UL MU based on number of users */ + A_UINT32 lookahead_snd_ul_num_users[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS]; } htt_stats_tx_sounding_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_sounding_stats_tlv htt_tx_sounding_stats_tlv; @@ -9063,6 +9088,111 @@ typedef struct { A_INT32 phase_in_degree[HTT_STATS_PDEV_AOA_MAX_HISTOGRAM][HTT_STATS_PDEV_AOA_MAX_CHAINS]; } htt_stats_pdev_aoa_tlv; +/* STATS_TYPE: HTT_DBG_EXT_STATS_PDEV_ULMUMIMO_ELIGIBLE + * TLV_TAGS: + * HTT_STATS_PDEV_UL_MUMIMO_GRP_STATS_TAG + * HTT_STATS_PDEV_UL_MUMIMO_DENYLIST_STATS_TAG + * HTT_STATS_PDEV_UL_MUMIMO_SEQ_TERM_STATS_TAG + * HTT_STATS_PDEV_UL_MUMIMO_HIST_INELIGIBILITY_TAG + */ + +typedef enum { + HTT_STATS_CANDIDATE_MU_NOT_COMPATIBLE = 1, + HTT_STATS_CANDIDATE_SKIP_NR_INDEX, + HTT_STATS_CANDIDATE_SKIP_BASIC_CHECKS_INELIGIBLE, + HTT_STATS_CANDIDATE_SKIP_ZERO_NSS, + HTT_STATS_CANDIDATE_SKIP_MCS_THRESHOLD_LIMIT, + HTT_STATS_CANDIDATE_SKIP_POWER_IMBALANCED, + HTT_STATS_CANDIDATE_SKIP_NULL_MU_RC, + HTT_STATS_CANDIDATE_SKIP_CV_CORR_SKIP_PEER, + HTT_STATS_CANDIDATE_SKIP_SEND_BAR_SET_FOR_AC_MUMIMO, + + HTT_STATS_CANDIDATE_SKIP_REASON_MAX +} htt_stats_candidate_sched_compatible_code; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /* Current Pdev id */ + A_UINT32 pdev_id; + /* Group eligibility count */ + A_UINT32 mu_grp_eligible[HTT_STATS_MAX_MUMIMO_GRP_SZ]; + /* Group ineligibility */ + A_UINT32 mu_grp_ineligible[HTT_STATS_MAX_MUMIMO_GRP_SZ]; + /* Group Invalid reason */ + A_UINT32 mu_grp_invalid[HTT_TX_NUM_MUMIMO_GRP_INVALID_WORDS]; + /* mu_grp_candidate_skip: + * Sched_compatibility reason codes as listed by + * htt_stats_candidate_sched_compatible code + */ + A_UINT32 mu_grp_candidate_skip + [HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS] + [HTT_STATS_CANDIDATE_SKIP_REASON_MAX]; + /* Group eligibility count for 1SS grouping */ + A_UINT32 mu_grp_eligible_1ss[HTT_STATS_MAX_MUMIMO_GRP_SZ]; + /* Group ineligibility fpr 1SS grouping */ + A_UINT32 mu_grp_ineligible_1ss[HTT_STATS_MAX_MUMIMO_GRP_SZ]; + /* Group Invalid reason for 1SS grouping */ + A_UINT32 mu_grp_invalid_1ss[HTT_TX_NUM_MUMIMO_GRP_INVALID_WORDS]; + /* Sched_compatibility reason code for 1SS grouping */ + A_UINT32 mu_grp_candidate_skip_1ss + [HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS] + [HTT_STATS_CANDIDATE_SKIP_REASON_MAX]; +} htt_stats_pdev_ulmumimo_grp_stats_tlv; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + /* Num of times peer denylisted for MU-MIMO transmission */ + A_UINT32 num_peer_denylist_cnt; + /* Num of times peer denylisted due to trigger bitmap failure */ + A_UINT32 trig_bitmap_fail_cnt; + /* Num of times peer denylisted due to trigger consecutive failure */ + A_UINT32 trig_consecutive_fail_cnt; +} htt_stats_pdev_ulmumimo_denylist_stats_tlv; + +#define HTT_STATS_SEQ_EFFICIENCY_HISTOGRAM 10 +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + /* Num of times seq terminated for MU-MIMO transmission */ + A_UINT32 num_terminate_seq; + /* Num of sequences terminated due to low qdepth */ + A_UINT32 num_terminate_low_qdepth; + /* Number of sequences terminated due to sequence inefficient */ + A_UINT32 num_terminate_seq_inefficient; + /* Histogram of sequence inefficiency */ + A_UINT32 hist_seq_efficiency[HTT_STATS_SEQ_EFFICIENCY_HISTOGRAM]; +} htt_stats_pdev_ulmumimo_seq_term_stats_tlv; + +#define HTT_STATS_MAX_ULMUMIMO_TRIGGERS 6 +#define HTT_STATS_TXOP_HISTOGRAM_BINS 24 +#define HTT_STATS_ULMUMIMO_DUR_INTERVAL_US 500 +#define HTT_STATS_ULMUMIMO_MIN_PPDU_DUR_US 1000 +#define HTT_STATS_MAX_PPDU_DURATION_BINS 10 +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + /* Number of ULMUMIMO triggers */ + A_UINT32 num_triggers[HTT_STATS_MAX_ULMUMIMO_TRIGGERS]; + /* Txop duration history from 0 to 12 ms with interval of 500us */ + A_UINT32 txop_history [HTT_STATS_TXOP_HISTOGRAM_BINS]; + /* ppdu_duration_hist: + * PPDU Duration History (histogram) + * Num PPDUs from 1 to 6 + * 0 to 6 ms with interval of 500us + */ + A_UINT32 ppdu_duration_hist + [HTT_STATS_MAX_ULMUMIMO_TRIGGERS][HTT_STATS_MAX_PPDU_DURATION_BINS]; + /* Ineligible Count for ULMUMIMO based on avg qdepth and txtime criteria */ + A_UINT32 ineligible_count; + /* history_ineligibility: + * History based ineligibility counter for ULMUMIMO. + * Checks for 8 eligible instances of ULMUMIMO in the past 32 instances. + */ + A_UINT32 history_ineligibility; +} htt_stats_pdev_ulmumimo_hist_ineligibility_tlv; + + /* RTT VREG MASK */ #define HTT_STATS_RTT_CHAN_CAPTURE_MASK 0x00000001 #define HTT_STATS_RTT_HW_FAC_MASK 0x00000002