diff --git a/fw/htt.h b/fw/htt.h index 37e9514f8014..e19ec757edaf 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -251,9 +251,10 @@ * 3.123 Add HTT_OPTION_TLV_TCL_METADATA_V21 def. * 3.124 Add HTT_T2H_MSG_TYPE_PEER_EXTENDED_EVENT def. * 3.125 Expand fisa_aggr_limit bits in fisa_control_bits_v2. + * 3.126 Add HTT_RXDATA_ERR_INVALID_PEER def. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 125 +#define HTT_CURRENT_VERSION_MINOR 126 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -21383,6 +21384,12 @@ typedef enum htt_t2h_rx_data_msdu_err { */ HTT_RXDATA_ERR_ZERO_LEN_MSDU = 7, + /* ERR_INVALID_PEER: + * FW sets this error flag when MSDU is recived from invalid PEER + * HOST decides to send DEAUTH or not, recyles buffer. + */ + HTT_RXDATA_ERR_INVALID_PEER = 8, + /* add new error codes here */ HTT_RXDATA_ERR_MAX = 32 diff --git a/fw/htt_ppdu_stats.h b/fw/htt_ppdu_stats.h index 54dd0b67c1fd..fed6e2d63975 100644 --- a/fw/htt_ppdu_stats.h +++ b/fw/htt_ppdu_stats.h @@ -1057,6 +1057,20 @@ typedef struct { ((_var) |= ((_val) << HTT_PPDU_STATS_USER_COMMON_TLV_CHAIN_ENABLE_BITS_S)); \ } while (0) +#define HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_M 0x00010000 +#define HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_S 16 + +#define HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_M) >> \ + HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_S) + +#define HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_COMMON_TLV_IS_SMART_ULOFDMA_BASIC_TRIG_S)); \ + } while (0) + + #define HTT_PPDU_STATS_USER_COMMON_TLV_TX_PWR_CHAINS_PER_U32 4 #define HTT_PPDU_STATS_USER_COMMON_TLV_TX_PWR_MASK 0x000000ff @@ -1194,10 +1208,15 @@ typedef struct { * Default value: 1 * tx_pwr[0] value is used for all chains if chain_enable_bits field * is set to 1. + * + * is_smart_ulofdma_basic_trig: + * To check if user grouped in UL OFDMA Basic Trigger Frame is + * due to Smart Basic Trigger. */ - A_UINT32 tx_pwr_multiplier : 8, - chain_enable_bits : 8, - reserved2 : 16; + A_UINT32 tx_pwr_multiplier : 8, + chain_enable_bits : 8, + is_smart_ulofdma_basic_trig: 1, + reserved2 : 15; /* * Transmit powers (signed values packed into unsigned bitfields) @@ -1819,6 +1838,19 @@ typedef enum HTT_PPDU_STATS_RESP_PPDU_TYPE HTT_PPDU_STATS_RESP_PPDU_TYPE; ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_EXTRA_EHT_LTF_S)); \ } while (0) +#define HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_M 0x00020000 +#define HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_S 17 + +#define HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_GET(_var) \ + (((_var) & HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_M) >> \ + HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_S) + +#define HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_SET (_var , _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_USER_RATE_TLV_IS_MIN_RATE_S)); \ + } while (0) + typedef enum HTT_PPDU_STATS_RU_SIZE { HTT_PPDU_STATS_RU_26, HTT_PPDU_STATS_RU_52, @@ -2009,7 +2041,8 @@ typedef struct { */ A_UINT32 punc_pattern_bitmap: 16, extra_eht_ltf: 1, - reserved4: 15; + is_min_rate: 1, + reserved4: 14; } htt_ppdu_stats_user_rate_tlv; #define HTT_PPDU_STATS_USR_RATE_VALID_M 0x80000000 @@ -2479,6 +2512,11 @@ typedef struct { * for BW supported by Smart Antenna - 320 MHZ */ A_UINT32 max_rates_ext; + + /* hw_prot_dur_us: + * hw protection frame's FES duration in micro seconds. + */ + A_UINT32 hw_prot_dur_us; } htt_ppdu_stats_user_cmpltn_common_tlv; #define HTT_PPDU_STATS_USER_CMPLTN_BA_BITMAP_TLV_TID_NUM_M 0x000000ff diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 11e67bc1ff6a..650d422b1088 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -555,6 +555,34 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_CODEL_STATS = 58, + /** HTT_DBG_ODD_PDEV_BE_TX_MU_OFDMA_STATS + * PARAMS: + * - No Params + * RESP MSG: + * - htt_tx_pdev_mpdu_stats_tlv + */ + HTT_DBG_ODD_PDEV_BE_TX_MU_OFDMA_STATS = 59, + + /** HTT_DBG_EXT_STATS_PDEV_UL_TRIGGER + * PARAMS: + * - No Params + * RESP MSG: + * - htt_rx_pdev_be_ul_ofdma_user_stats_tlv + */ + HTT_DBG_ODD_UL_BE_OFDMA_STATS = 60, + + /** HTT_DBG_ODD_BE_TXBF_OFDMA_STATS + */ + HTT_DBG_ODD_BE_TXBF_OFDMA_STATS = 61, + + /** HTT_DBG_ODD_STATS_PDEV_BE_UL_MUMIMO_TRIG_STATS + * PARAMS: + * - No Params + * RESP MSG: + * - htt_rx_pdev_be_ul_ofdma_user_stats_tlv + */ + HTT_DBG_ODD_STATS_PDEV_BE_UL_MUMIMO_TRIG_STATS = 62, + /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, @@ -1636,6 +1664,13 @@ typedef struct { #define HTT_PEER_DETAILS_ML_PEER_ID_S 1 #define HTT_PEER_DETAILS_LINK_IDX_M 0x001fe000 #define HTT_PEER_DETAILS_LINK_IDX_S 13 +#define HTT_PEER_DETAILS_USE_PPE_M 0x00200000 +#define HTT_PEER_DETAILS_USE_PPE_S 21 + + +#define HTT_PEER_DETAILS_SRC_INFO_M 0x00000fff +#define HTT_PEER_DETAILS_SRC_INFO_S 0 + #define HTT_PEER_DETAILS_SET(word, httsym, val) \ do { \ @@ -1664,7 +1699,11 @@ typedef struct { A_UINT32 ml_peer_id_valid : 1, /* [0:0] */ ml_peer_id : 12, /* [12:1] */ link_idx : 8, /* [20:13] */ - rsvd : 11; /* [31:21] */ + use_ppe : 1, /* [21:21] */ + rsvd0 : 10; /* [31:22] */ + /* Dword 9 */ + A_UINT32 src_info : 12, /* [11:0] */ + rsvd1 : 20; /* [31:12] */ } htt_peer_details_tlv; typedef struct { @@ -2417,6 +2456,8 @@ typedef enum { #define HTT_TX_NUM_MUMIMO_GRP_INVALID_WORDS \ (HTT_STATS_MAX_MUMIMO_GRP_SZ * HTT_STATS_MAX_INVALID_REASON_CODE) +#define HTT_MAX_NUM_SBT_INTR 4 + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -2469,6 +2510,19 @@ typedef struct { /** 11AX HE MU Standalone Freq. BSRP Trigger completed with error(s) */ A_UINT32 standalone_ax_bsr_trigger_err[HTT_NUM_AC_WMM]; /* END DEPRECATED FIELDS */ + /** smart_basic_trig_sch_histogram: + * Count how many times the interval between predictive basic triggers + * sent to a given STA based on analysis of that STA's traffic patterns + * is within a given range: + * + * smart_basic_trig_sch_histogram[0]: SBT interval <= 10 ms + * smart_basic_trig_sch_histogram[1]: 10 ms < SBT interval <= 20 ms + * smart_basic_trig_sch_histogram[2]: 20 ms < SBT interval <= 30 ms + * smart_basic_trig_sch_histogram[3]: 30 ms < SBT interval <= 40 ms + * + * (Smart basic triggers are only used with intervals <= 40 ms.) + */ + A_UINT32 smart_basic_trig_sch_histogram[HTT_MAX_NUM_SBT_INTR]; } htt_tx_selfgen_cmn_stats_tlv; typedef struct { @@ -6496,12 +6550,15 @@ typedef enum { } htt_txbf_sound_steer_modes; typedef enum { - HTT_TX_AC_SOUNDING_MODE = 0, - HTT_TX_AX_SOUNDING_MODE = 1, - HTT_TX_BE_SOUNDING_MODE = 2, + HTT_TX_AC_SOUNDING_MODE = 0, + HTT_TX_AX_SOUNDING_MODE = 1, + HTT_TX_BE_SOUNDING_MODE = 2, HTT_TX_CMN_SOUNDING_MODE = 3, + HTT_TX_CV_CORR_MODE = 4, } htt_stats_sounding_tx_mode; +#define HTT_TX_CV_CORR_MAX_NUM_COLUMNS 8 + typedef struct { htt_tlv_hdr_t tlv_hdr; A_UINT32 tx_sounding_mode; /* HTT_TX_XX_SOUNDING_MODE */ @@ -6614,6 +6671,65 @@ typedef struct { A_UINT32 adaptive_snd_kicked_in; /** Total number of times we switched back to normal sounding interval */ A_UINT32 adaptive_snd_back_to_default; + + /** + * Below are CV correlation feature related stats. + * This feature is used for DL MU MIMO, but is not available + * from certain legacy targets. + */ + + /** number of CV Correlation triggers for online mode */ + A_UINT32 cv_corr_trigger_online_mode; + /** number of CV Correlation triggers for offline mode */ + A_UINT32 cv_corr_trigger_offline_mode; + /** number of CV Correlation triggers for hybrid mode */ + A_UINT32 cv_corr_trigger_hybrid_mode; + /** number of CV Correlation triggers with computation level 0 */ + A_UINT32 cv_corr_trigger_computation_level_0; + /** number of CV Correlation triggers with computation level 1 */ + A_UINT32 cv_corr_trigger_computation_level_1; + /** number of CV Correlation triggers with computation level 2 */ + A_UINT32 cv_corr_trigger_computation_level_2; + /** number of users for which CV Correlation was triggered */ + A_UINT32 cv_corr_trigger_num_users[HTT_TX_CV_CORR_MAX_NUM_COLUMNS]; + /** number of streams for which CV Correlation was triggered */ + A_UINT32 cv_corr_trigger_num_streams[HTT_TX_CV_CORR_MAX_NUM_COLUMNS]; + /** number of CV Correlation buffers received through IPC tickle */ + A_UINT32 cv_corr_upload_total_buf_received; + /** number of CV Correlation buffers fed back to the IPC ring */ + A_UINT32 cv_corr_upload_total_buf_fed_back; + /** number of CV Correlation buffers for which processing failed */ + A_UINT32 cv_corr_upload_total_processing_failed; + /** + * number of CV Correlation buffers for which processing failed, + * due to no users being present in parsed buffer + */ + A_UINT32 cv_corr_upload_failed_total_users_zero; + /** + * number of CV Correlation buffers for which processing failed, + * due to number of users present in parsed buffer exceeded + * CV_CORR_MAX_NUM_COLUMNS + */ + A_UINT32 cv_corr_upload_failed_total_users_exceeded; + /** + * number of CV Correlation buffers for which processing failed, + * due to peer pointer for parsed peer not available + */ + A_UINT32 cv_corr_upload_failed_peer_not_found; + /** + * number of CV Correlation buffers for which processing encountered, + * Nss of peer exceeding SCHED_ALGO_MAX_SUPPORTED_MUMIMO_NSS + */ + A_UINT32 cv_corr_upload_user_nss_exceeded; + /** + * number of CV Correlation buffers for which processing encountered, + * invalid reverse look up index for fetching CV correlation results + */ + A_UINT32 cv_corr_upload_invalid_lookup_index; + /** number of users present in uploaded CV Correlation results buffer */ + 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]; } htt_tx_sounding_stats_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_TX_SOUNDING_INFO diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 016c7c25e08a..5f7b6616cd86 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -634,6 +634,11 @@ typedef enum { WMI_SERVICE_N_LINK_MLO_SUPPORT = 381, /* Indicate FW supports N MLO link & vdev re-purpose between links */ WMI_SERVICE_ATF_MAX_CLIENT_512_SUPPORT = 382, /* Indicates FW supports maximum of 512 clients when ATF is enabled */ WMI_SERVICE_FISA_DYNAMIC_MSDU_AGGR_SIZE_SUPPORT = 383, /* Indicates FW support for FISA aggregation size up to 64 instead of only 16 */ + WMI_SERVICE_BRIDGE_VDEV_SUPPORT = 384, /* Indicated FW supports Bridge VDEV */ + WMI_SERVICE_MLO_MODE1_RECOVERY_SUPPORTED = 385, /* Indicate fw support for mlo mode1 recovery */ + WMI_SERVICE_TX_PWR_PER_PPDU_STATS_SUPPORT = 386, /* FW support to check tx power stats per PPDU */ + WMI_SERVICE_DISABLE_WDS_PEER_MAP_UNMAP_EVENT_SUPPORT = 387, /* Indicate FW support to disable wds peer map/unmap events */ + WMI_SERVICE_PDEV_WSI_STATS_INFO_SUPPORT = 388, /* Support for WSI Stats Info. */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 624b8449afe2..0f6d8929d3e3 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1392,6 +1392,10 @@ typedef enum { WMITLV_TAG_STRUC_wmi_aux_dev_capabilities, WMITLV_TAG_STRUC_wmi_nan_oem_data_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_nan_oem_data_event_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_enhanced_aoa_phasedelta_evt_fixed_param, + WMITLV_TAG_STRUC_wmi_enhanced_aoa_gain_phase_data_hdr, + WMITLV_TAG_STRUC_wmi_ctrl_path_sta_rrm_stats_struct, + WMITLV_TAG_STRUC_wmi_pdev_wsi_stats_info_cmd_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -1926,6 +1930,7 @@ typedef enum { OP(WMI_MLO_LINK_SET_BSS_PARAMS_CMDID) \ OP(WMI_MLO_LINK_SWITCH_CONF_CMDID) \ OP(WMI_NAN_OEM_DATA_CMDID) \ + OP(WMI_PDEV_WSI_STATS_INFO_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2241,6 +2246,7 @@ typedef enum { OP(WMI_MLO_PRIMARY_LINK_PEER_MIGRATION_EVENTID) \ OP(WMI_MLO_LINK_SWITCH_REQUEST_EVENTID) \ OP(WMI_NAN_OEM_DATA_EVENTID) \ + OP(WMI_PDEV_ENHANCED_AOA_PHASEDELTA_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -5452,6 +5458,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MLO_LINK_SET_BSS_PARAMS_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_link_switch_cnf_fixed_param, wmi_mlo_link_switch_cnf_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_MLO_LINK_SWITCH_CONF_CMDID); +/* WMI CMD used to send WSI stats info. */ +#define WMITLV_TABLE_WMI_PDEV_WSI_STATS_INFO_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_wsi_stats_info_cmd_fixed_param, wmi_pdev_wsi_stats_info_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_WSI_STATS_INFO_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -5725,7 +5736,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STA_KICKOUT_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bpcc_bufp, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_is_my_mgmt_frame, my_frame, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mlo_link_removal_tbtt_count, link_removal_tbtt_count, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mlo_bcast_t2lm_info, mlo_bcast_t2lm_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mlo_bcast_t2lm_info, mlo_bcast_t2lm_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, ie_data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_RX_EVENTID); /* Management Rx FW Consumed Event */ @@ -6916,7 +6928,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STATS_INFO_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_t2lm_stats_struct, ctrl_path_t2lm_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_blanking_stats_struct, ctrl_path_blanking_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_peer_stats_struct, ctrl_path_peer_stats, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_vdev_stats_struct, ctrl_path_vdev_stats, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_vdev_stats_struct, ctrl_path_vdev_stats, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ctrl_path_sta_rrm_stats_struct, ctrl_path_sta_rrm_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_CTRL_PATH_STATS_EVENTID); /* @@ -7224,7 +7237,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_TWT_SESSION_STATS_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, force_active_vdev_bitmap, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, force_inactive_vdev_bitmap, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, force_active_ieee_link_id_bitmap, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, force_inactive_ieee_link_id_bitmap, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, force_inactive_ieee_link_id_bitmap, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, current_active_ieee_link_id_bitmap, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, current_inactive_ieee_link_id_bitmap, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MLO_LINK_SET_ACTIVE_RESP_EVENTID); /* Get DPD status Event */ @@ -7431,6 +7446,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MLO_PRIMARY_LINK_PEER_MIGRATION_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mlo_primary_link_peer_migration_status, primary_link_peer_migration_status, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MLO_PRIMARY_LINK_PEER_MIGRATION_EVENTID); +/* + * Update AOA Phase delta values for all gain tables event + * Below definition shows TLV packing of AOA Phase delta values for all gain tables event + */ +#define WMITLV_TABLE_WMI_PDEV_ENHANCED_AOA_PHASEDELTA_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_enhanced_aoa_phasedelta_evt_fixed_param, wmi_pdev_enhanced_aoa_phasedelta_evt_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_enhanced_aoa_gain_phase_data_hdr, aoa_data_hdr, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, aoa_data_buf, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_ENHANCED_AOA_PHASEDELTA_EVENTID); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 781425119ca2..522d9d9b5be0 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -512,6 +512,8 @@ typedef enum { WMI_PDEV_SET_TGTR2P_TABLE_CMDID, /* WMI cmd to set RF path for PHY */ WMI_PDEV_SET_RF_PATH_CMDID, + /** WSI stats info WMI command */ + WMI_PDEV_WSI_STATS_INFO_CMDID, /* VDEV (virtual device) specific commands */ @@ -1748,6 +1750,8 @@ typedef enum { /* Event to indicate completion on RF path */ WMI_PDEV_SET_RF_PATH_RESP_EVENTID, + /* Event to get AOA phasedelta values for all gain tables from HALPHY */ + WMI_PDEV_ENHANCED_AOA_PHASEDELTA_EVENTID, /* VDEV specific events */ /** VDEV started event in response to VDEV_START request */ @@ -4478,8 +4482,17 @@ typedef struct { * 0 - Primary * 1 - Secondary * Refer to WMI_RSRC_CFG_FLAGS2_RF_PATH_MODE_GET/SET macros. + * Bit 18 - disable_wds_peer_map_unmap_event + * Flag to indicate whether the WDS peer map/unmap event should be + * processed or ignored. + * 0 - leave the WDS peer map/unmap event enabled + * 1 - disable the WDS peer map/unmap event + * This flag shall only be set if the target has set the + * WMI_SERVICE_DISABLE_WDS_PEER_MAP_UNMAP_EVENT_SUPPORT flag. + * Refer to WMI_RSRC_CFG_FLAGS2_DISABLE_WDS_PEER_MAP_UNMAP_EVENT_GET + * and _SET macros. * - * Bits 31:18 - Reserved + * Bits 31:19 - Reserved */ A_UINT32 flags2; /** @brief host_service_flags - can be used by Host to indicate @@ -4945,6 +4958,11 @@ typedef struct { #define WMI_RSRC_CFG_FLAGS2_RF_PATH_MODE_SET(flags2, value) \ WMI_SET_BITS(flags2, 17, 1, value) +#define WMI_RSRC_CFG_FLAGS2_DISABLE_WDS_PEER_MAP_UNMAP_EVENT_GET(flags2) \ + WMI_GET_BITS(flags2, 18, 1) +#define WMI_RSRC_CFG_FLAGS2_DISABLE_WDS_PEER_MAP_UNMAP_EVENT_SET(flags2, value) \ + WMI_SET_BITS(flags2, 18, 1, value) + #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT_GET(host_service_flags) \ WMI_GET_BITS(host_service_flags, 0, 1) @@ -9241,6 +9259,27 @@ typedef enum { * units are microseconds */ WMI_PDEV_PARAM_SLOT_TIME, + + /** VO dedicated time - + * allocate dedicated time slots for VO access category across all + * ATF groups in a pdev. + * Note : + * 1. Per AC airtime per group is already available through + * ATF WMM WMI commands + * 2. The dedicated time slot is applicable per second + * 3. Units are in milli-seconds + */ + WMI_PDEV_PARAM_ATF_VO_DEDICATED_TIME, + + /** VI dedicated time - + * allocate dedicated time slots for VI access category across all + * ATF groups in a pdev. + * Note : + * 1. Per AC airtime per group is already given through ATF WMM WMI cmds + * 2. The dedicated time slot is applicable per second + * 3. Units are in milli-seconds + */ + WMI_PDEV_PARAM_ATF_VI_DEDICATED_TIME, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) @@ -10535,20 +10574,6 @@ typedef enum { WMI_CHAN_WIDTH_MAX, } wmi_channel_width; -/* channel width switch type */ -typedef enum { - WMI_CHAN_WIDTH_SWITCH_TYPE_TXRX = 0, - WMI_CHAN_WIDTH_SWITCH_TYPE_TXONLY = 1, - - WMI_CHAN_WIDTH_SWITCH_TYPE_MAX, -} wmi_chan_width_switch_type; - -#define WMI_VDEV_CHAN_WIDTH_NOTIFY_GET_CHAN_WIDTH(chwidth_notify) WMI_GET_BITS(chwidth_notify, 0, 8) -#define WMI_VDEV_CHAN_WIDTH_NOTIFY_SET_CHAN_WIDTH(chwidth_notify, value) WMI_SET_BITS(chwidth_notify, 0, 8, value) - -#define WMI_VDEV_CHAN_WIDTH_NOTIFY_GET_SWITCH_TYPE(chwidth_notify) WMI_GET_BITS(chwidth_notify, 8, 2) -#define WMI_VDEV_CHAN_WIDTH_NOTIFY_SET_SWITCH_TYPE(chwidth_notify, value) WMI_SET_BITS(chwidth_notify, 8, 2, value) - /* Clear stats */ typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_clear_link_stats_cmd_fixed_param */ @@ -15675,6 +15700,18 @@ typedef struct { #define WMI_VDEV_STATS_IS_MULTI_GROUP_KEY_ENABLED_GET(flag) \ WMI_GET_BITS(flag, 31, 1) +typedef struct { + /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_ctrl_path_sta_rrm_stats_struct */ + A_UINT32 tlv_header; + A_UINT32 dot11GroupTransmittedFrameCount; + A_UINT32 dot11GroupReceivedFrameCount; + A_UINT32 dot11TransmittedFrameCount; + A_UINT32 dot11AckFailureCount; + A_UINT32 dot11FailedCount; + A_UINT32 dot11FCSErrorCount; + A_UINT32 dot11RTSSuccessCount; + A_UINT32 dot11RTSFailureCount; +} wmi_ctrl_path_sta_rrm_stats_struct; /** * peer statistics. @@ -16168,6 +16205,12 @@ typedef enum { * If SW encryption is enabled, key plumbing will not happen in FW. */ #define WMI_UNIFIED_VDEV_START_HW_ENCRYPTION_DISABLED (1<<4) +/** Indicates VAP is used for MLO repurpose. + * This Indicates that vap can be brought up as 11ax or 11be and can be + * repurposed based on the above stack on the fly to change from MLO to + * non MLO, currently we support only 11ax and 11be transition. + */ +#define WMI_UNIFIED_VDEV_START_MLO_REPURPOSE_VAP (1<<5) /* BSS color 0-6 */ #define WMI_HEOPS_COLOR_GET_D2(he_ops) WMI_GET_BITS(he_ops, 0, 6) @@ -18058,11 +18101,7 @@ typedef enum { * Please note incase of STA VDEV only BSS peer gets updated, * associated TDLS peer bandwidth won't be impacted. * - * bit 7:0 the updated bandwidth is specified with - * a wmi_channel_width value - * bit 9:8 the updated bandwidth switch type is specified with - * a wmi_chan_width_switch_type value - * bit 31:10 reserved + * The updated bandwidth is specified with a wmi_channel_width value. */ WMI_VDEV_PARAM_CHWIDTH_WITH_NOTIFY, /* 0xBA */ @@ -18084,6 +18123,18 @@ typedef enum { */ WMI_VDEV_PARAM_RTT_11AZ_TB_MAX_SESSION_EXPIRY, /* 0xBD */ + /* + * WiFi Standard version to be supported. + * Value is from enum WMI_WIFI_STANDARD + */ + WMI_VDEV_PARAM_WIFI_STANDARD_VERSION, /* 0xBE */ + + /* + * Allow to disable TWT on 2G channel + * if corresponding INI is set + */ + WMI_VDEV_PARAM_DISABLE_2G_TWT, /* 0xBF */ + /*=== ADD NEW VDEV PARAM TYPES ABOVE THIS LINE === * The below vdev param types are used for prototyping, and are @@ -19076,6 +19127,12 @@ enum wmi_sta_ps_param_uapsd { WMI_STA_PS_UAPSD_AC3_TRIGGER_EN = (1 << 7), }; +enum wmi_sta_ps_scheme_cfg { + WMI_STA_PS_OPM_CONSERVATIVE = 0, + WMI_STA_PS_OPM_AGGRESSIVE = 1, + WMI_STA_PS_USER_DEF = 2, +}; + enum wmi_sta_powersave_param { /** * Controls how frames are retrievd from AP while STA is sleeping @@ -19121,9 +19178,10 @@ WMI_STA_PS_PARAM_UAPSD = 4, WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT = 5, /** - * Enable QPower + * Enable OPM */ WMI_STA_PS_ENABLE_QPOWER = 6, + WMI_STA_PS_ENABLE_OPM = WMI_STA_PS_ENABLE_QPOWER, /* alias */ /** * Number of TX frames before the entering the Active state @@ -19152,6 +19210,12 @@ WMI_STA_PS_PARAM_MAX_RESET_ITO_COUNT_ON_TIM_NO_TXRX = 10, * in WOW */ WMI_STA_PS_PARAM_ENABLE_PS_OPT_IN_WOW = 11, + +/** + * Speculative interval in ms + */ +WMI_STA_PS_PARAM_SPEC_WAKE_INTERVAL = 12, + }; typedef struct { @@ -20147,6 +20211,8 @@ typedef struct { #define WMI_PEER_FT_ROAMING_PEER_UPDATE 0x29 +#define WMI_PEER_PARAM_DMS_SUPPORT 0x2A + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_set_param_cmd_fixed_param */ /** unique id identifying the VDEV, generated by the caller */ @@ -23202,6 +23268,8 @@ typedef enum wake_reason_e { WOW_REASON_XGAP, /* COEX channel avoid event */ WOW_REASON_COEX_CHAVD, + /* vdev repurpose request event */ + WOW_REASON_VDEV_REPURPOSE, /* add new WOW_REASON_ defs before this line */ WOW_REASON_MAX, @@ -24853,6 +24921,13 @@ typedef enum */ WMI_VENDOR_OUI_ACTION_ENABLE_CTS2SELF_WITH_QOS_NULL = 11, + /* + * Send SMPS frame following OMN frame on VHT conncection if specific + * vendor OUI received in beacon. + */ + WMI_VENDOR_OUI_ACTION_SEND_SMPS_FRAME_WITH_OMN = 12, + + /* Add any action before this line */ WMI_VENDOR_OUI_ACTION_MAX_ACTION_ID } wmi_vendor_oui_action_id; @@ -34624,6 +34699,7 @@ typedef enum { WMI_REQUEST_CTRL_PATH_BLANKING_STAT = 15, WMI_REQUEST_CTRL_PATH_PEER_STAT = 16, WMI_REQUEST_CTRL_PATH_VDEV_DEBUG_STAT = 17, + WMI_REQUEST_CTRL_STA_RRM_STAT = 18, } wmi_ctrl_path_stats_id; typedef enum { @@ -36748,6 +36824,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_MLO_PRIMARY_LINK_PEER_MIGRATION_CMDID); WMI_RETURN_STRING(WMI_MLO_LINK_RECOMMENDATION_CMDID); WMI_RETURN_STRING(WMI_NAN_OEM_DATA_CMDID); + WMI_RETURN_STRING(WMI_PDEV_WSI_STATS_INFO_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -38385,6 +38462,8 @@ typedef enum _WMI_ADD_TWT_STATUS_T { WMI_ADD_TWT_STATUS_DIALOG_ID_BUSY, /* FW is in the process of handling this dialog */ WMI_ADD_TWT_STATUS_BTWT_NOT_ENBABLED, /* Broadcast TWT is not enabled */ WMI_ADD_TWT_STATUS_RTWT_NOT_ENBABLED, /* Restricted TWT is not enabled */ + WMI_ADD_TWT_STATUS_LINK_SWITCH_IN_PROGRESS, /* Link switch is ongoing */ + WMI_ADD_TWT_STATUS_UNSUPPORTED_MODE_MLMR, /* Unsupported in MLMR mode */ } WMI_ADD_TWT_STATUS_T; typedef struct { @@ -40385,6 +40464,131 @@ typedef struct { A_UINT32 perChainIbfCalVal[WMI_MAX_CHAINS_FOR_AOA_RCC]; } wmi_pdev_aoa_phasedelta_evt_fixed_param; +#define WMI_AOA_MAX_SUPPORTED_CHAINS_GET(chain_data) \ + WMI_GET_BITS(chain_data, 0, 16) +#define WMI_AOA_MAX_SUPPORTED_CHAINS_SET(chain_data, value) \ + WMI_SET_BITS(chain_data, 0, 16, value) + +#define WMI_AOA_SUPPORTED_CHAINMASK_GET(chain_data) \ + WMI_GET_BITS(chain_data, 16, 16) +#define WMI_AOA_SUPPORTED_CHAINMASK_SET(chain_data, value) \ + WMI_SET_BITS(chain_data, 16, 16, value) + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_pdev_enhanced_aoa_phasedelta_eventid */ + A_UINT32 tlv_header; + /* Current Operating Channel Frequency in MHz */ + A_UINT32 freq; + /** pdev_id: + * Identify the MAC. + * See macros starting with WMI_PDEV_ID_ for values. + * In non-DBDC case host should set it to 0. + */ + A_UINT32 pdev_id; + /** chain_info: + * B0 -- B15 : Max number of chains supported + * B16 --B31 : Data shared for chainmask - + * indicates the chains to which the data shared. + */ + union { + struct { + A_UINT32 max_supported_chains:16, + data_for_chainmask:16; + }; + A_UINT32 chain_info; + }; + /** XBAR configuration to get RF2BB/BB2RF chain mapping + * Samples of xbar_config, + * If xbar_config is 0xFAC688(hex): + * RF chains 0-7 are connected to BB chains 0-7 + * here, + * bits 0 to 2 = 0, maps BB chain 0 for RF chain 0 + * bits 3 to 5 = 1, maps BB chain 1 for RF chain 1 + * bits 6 to 8 = 2, maps BB chain 2 for RF chain 2 + * bits 9 to 11 = 3, maps BB chain 3 for RF chain 3 + * bits 12 to 14 = 4, maps BB chain 4 for RF chain 4 + * bits 15 to 17 = 5, maps BB chain 5 for RF chain 5 + * bits 18 to 20 = 6, maps BB chain 6 for RF chain 6 + * bits 21 to 23 = 7, maps BB chain 7 for RF chain 7 + * + * If xbar_config is 0x688FAC(hex): + * RF chains 0-3 are connected to BB chains 4-7 + * RF chains 4-7 are connected to BB chains 0-3 + * here, + * bits 0 to 2 = 4, maps BB chain 4 for RF chain 0 + * bits 3 to 5 = 5, maps BB chain 5 for RF chain 1 + * bits 6 to 8 = 6, maps BB chain 6 for RF chain 2 + * bits 9 to 11 = 7, maps BB chain 7 for RF chain 3 + * bits 12 to 14 = 0, maps BB chain 0 for RF chain 4 + * bits 15 to 17 = 1, maps BB chain 1 for RF chain 5 + * bits 18 to 20 = 2, maps BB chain 2 for RF chain 6 + * bits 21 to 23 = 3, maps BB chain 3 for RF chain 7 + */ + A_UINT32 xbar_config; + /** + * IBF cal values: + * Used for final AoA calculation + * [AoAPhase = ( PhaseDeltaValue + IBFcalValue ) % 1024] + */ + A_UINT32 per_chain_ibf_cal_val[WMI_MAX_CHAINS]; + /** + * This TLV is followed by TLV arrays containing + * different types of data header and data buffer TLVs: + * 1. wmi_enhanced_aoa_gain_phase_data_hdr. + * This TLV contains the array of structure fields which indicate + * the type and format of data carried in the following data buffer + * TLV. + * 2. aoa_data_buf[] - Data buffer TLV. + * TLV header contains the total buffer size. + * Data buffer contains the phase_delta_array[Chains][GainEntries] + * in absolute phase values ranging 0-1024 and + * gain_delta_array[Chains][GainEntries] are gain index values. + */ +} wmi_pdev_enhanced_aoa_phasedelta_evt_fixed_param; + +#define WMI_AOA_DATA_TYPE_GET(data_info) \ + WMI_GET_BITS(data_info, 0, 8) +#define WMI_AOA_DATA_TYPE_SET(data_info,value) \ + WMI_SET_BITS(data_info, 0, 8, value) + +#define WMI_AOA_NUM_ENTIRES_GET(data_info) \ + WMI_GET_BITS(data_info, 8, 8) +#define WMI_AOA_NUM_DATA_ENTRIES_SET(data_info,value) \ + WMI_SET_BITS(data_info, 8, 8, value) + +typedef enum _WMI_AOA_EVENT_DATA_TYPE { + WMI_PHASE_DELTA_ARRAY = 0x0, + WMI_GAIN_GROUP_STOP_ARRAY = 0x1, + /* add new types here */ + WMI_MAX_DATA_TYPE_ARRAY, +} WMI_AOA_EVENT_DATA_TYPE; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_pdev_enhanced_aoa_phasedelta_eventid */ + A_UINT32 tlv_header; + /** data_info: + * Data follows the LSB first and MSB second order in a 32bit word + * bit mapping: + * B0 -- B7 : Data type + * B8 -- B15 : Number of entries to be parsed in terms of 32bit word + * + * If data is Phase delta values - Data type is 0x0 + * group stop gain index values - Data type is 0x1 + * + * num_entries - Total number of data entries in uint32 + */ + union { + struct { + A_UINT32 data_type:8, + num_entries:8, + reserved:16; + }; + A_UINT32 data_info; + }; +} wmi_enhanced_aoa_gain_phase_data_hdr; + /* WMI_HALPHY_CAL_LIST: * * Below is the list of HALPHY online CAL currently enabled in @@ -44134,6 +44338,10 @@ typedef struct wmi_mlo_link_set_active_resp_event * If use_ieee_link_id_bitmap equals 1, ieee_link_id_bitmap[] are valid. * A_UINT32 force_active_ieee_link_id_bitmap[]; * A_UINT32 force_inactive_ieee_link_id_bitmap[]; + *--- + * current active ieee link id bitmap & inactive ieee link id bitmap + * A_UINT32 current_active_ieee_link_id_bitmap[]; + * A_UINT32 current_inactive_ieee_link_id_bitmap[]; */ } wmi_mlo_link_set_active_resp_event_fixed_param; @@ -45606,7 +45814,7 @@ typedef struct { struct { A_UINT32 vdev_id:8, /* vdev id for this link */ link_id:8, /* link id defined as in 802.11 BE spec. */ - link_status:2, /* link_status - 0: active, 1: inactive */ + link_status:2, /* link_status - 0: inactive, 1: active */ reserved:14; }; A_UINT32 link_info; @@ -46196,6 +46404,16 @@ typedef struct { A_UINT32 emlsr_pdev_id_map; } wmi_aux_dev_capabilities; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_pdev_wsi_stats_info_cmd_fixed_param + */ + A_UINT32 tlv_header; + A_UINT32 pdev_id; /* for identifying the MAC */ + A_UINT32 wsi_ingress_load_info; + A_UINT32 wsi_egress_load_info; +} wmi_pdev_wsi_stats_info_cmd_fixed_param; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index cd7766461b8a..a3ecaa7fe379 100644 --- a/fw/wmi_version.h +++ b/fw/wmi_version.h @@ -37,7 +37,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 1357 +#define __WMI_REVISION_ 1375 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work