diff --git a/fw/htc_services.h b/fw/htc_services.h index 73eb52c32911..3e4fca244b1e 100644 --- a/fw/htc_services.h +++ b/fw/htc_services.h @@ -64,7 +64,9 @@ typedef enum { /* WMI_CONTROL_SVC_WMAC3,4: WMI service for MACs 3 and 4 (where applicable) */ #define WMI_CONTROL_SVC_WMAC3 MAKE_SERVICE_ID(WMI_SERVICE_GROUP,9) #define WMI_CONTROL_SVC_WMAC4 MAKE_SERVICE_ID(WMI_SERVICE_GROUP,10) -#define WMI_MAX_SERVICES 11 +/* SMD high prio service - common for all macs */ +#define WMI_CONTROL_SMD_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,11) +#define WMI_MAX_SERVICES 12 #define NMI_CONTROL_SVC MAKE_SERVICE_ID(NMI_SERVICE_GROUP,0) #define NMI_DATA_SVC MAKE_SERVICE_ID(NMI_SERVICE_GROUP,1) @@ -98,6 +100,13 @@ typedef enum { */ #define HTT_DATA4_MSG_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP,3) +/* H2T - Telemetry channel */ +#define HTT_TELEMETRY_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP,4) +/* T2H - Telemetry channel 1 */ +#define HTT_TELEMETRY1_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP,5) +/* T2H - Telemetry channel 2 */ +#define HTT_TELEMETRY2_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP,6) + /* raw stream service (i.e. flash, tcmd, calibration apps) */ #define HTC_RAW_STREAMS_SVC MAKE_SERVICE_ID(HTC_TEST_GROUP,0) diff --git a/fw/htt.h b/fw/htt.h index b6411c191bd6..7234768e9b81 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -283,9 +283,12 @@ * 3.153 Add passthru_pkt flag in rx_peer_metadata structs. * 3.154 Add T2H PEER_DEL_ALL_GLOBAL_VDEV_ID_UNMAP msg def. * 3.155 Add rxmon hdrlen specs in rx_ring_selection_cfg_t. + * 3.156 Add qdata_consent_pkt flag in rx_peer_metadata_v1a and v2. + * 3.157 Add TCL_METADATA_V3 defs. + * 3.158 Add more fields in htt_tx_monitor_cfg_t. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 155 +#define HTT_CURRENT_VERSION_MINOR 158 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -582,6 +585,7 @@ PREPACK struct htt_option_tlv_support_tx_msdu_desc_ext_t { * should be used: * V1 -> use htt_tx_tcl_metadata struct * V2 -> use htt_tx_tcl_metadata_v2 struct + * V3 -> use htt_tx_tcl_metadata_v3 struct * Old FW will only support V1. * New FW will support V2. New FW will still support V1, at least during * a transition period. @@ -607,11 +611,17 @@ PREPACK struct htt_option_tlv_support_tx_msdu_desc_ext_t { * and the FW will crash in wal_tx_de_fast.c. For version 2.1 and * above we will use htt_tx_tcl_svc_class_id_metadata.ast_index * in TCLV2 command and do the dynamic AST allocations. + * + * Apr 2026: Added HTT_OPTION_TLV_TCL_METADATA_V3. + * This version supports the updated tcl_data_cmd introduced in Boron. + * All fields are identical to V2; however, the field ordering has been + * modified to accommodate MAC requirements. */ enum HTT_OPTION_TLV_TCL_METADATA_VER_VALUES { HTT_OPTION_TLV_TCL_METADATA_V1 = 1, HTT_OPTION_TLV_TCL_METADATA_V2 = 2, - /* values 3-20 reserved */ + HTT_OPTION_TLV_TCL_METADATA_V3 = 3, + /* values 4-20 reserved */ HTT_OPTION_TLV_TCL_METADATA_V21 = 21, }; @@ -864,13 +874,16 @@ 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_PDEV_UL_MUMIMO_GRP_STATS_TAG = 208, /* htt_stats_pdev_ul_mumimo_grp_stats_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_DENYLIST_STATS_TAG = 209, /* htt_stats_pdev_ul_mumimo_denylist_stats_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_SEQ_TERM_STATS_TAG = 210, /* htt_stats_pdev_ul__mumimo_seq_term_stats_tlv */ + HTT_STATS_PDEV_UL_MUMIMO_HIST_INELIGIBILITY_TAG = 211, /* htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv */ HTT_STATS_PHY_PAPRD_PB_TAG = 212, /* htt_stats_phy_paprd_pb_tlv */ HTT_STATS_HDS_PROF_STATS_TAG = 213, /* htt_stat_hds_prof_stats_tlv */ - HTT_STATS_TX_PDEV_MDSB_NUM_USERS_HISTOGRAM_TLV_TAG = 214, /* htt_stats_tx_pdev_mdsb_num_users_histogram_tlv */ + HTT_STATS_TX_PDEV_MDSB_NUM_USERS_HISTOGRAM_TAG = 214, /* htt_stats_tx_pdev_mdsb_num_users_histogram_tlv */ + /* preserve old name as an alias for the corrected name */ + HTT_STATS_TX_PDEV_MDSB_NUM_USERS_HISTOGRAM_TLV_TAG = + HTT_STATS_TX_PDEV_MDSB_NUM_USERS_HISTOGRAM_TAG, HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_TAG = 215, /* htt_stats_tx_pdev_pending_seq_cnt_on_sched_post_hist_tlv */ HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_TAG = 216, /* htt_stats_tx_pdev_pending_seq_cnt_in_hwq_hist_tlv */ HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_TAG = 217, /* htt_stats_tx_pdev_pending_seq_cnt_in_txq_hist_tlv */ @@ -879,8 +892,8 @@ typedef enum { HTT_STATS_TX_SELFGEN_BN_ERR_TAG = 220, /* htt_stats_tx_selfgen_bn_err_tlv, TOPIC=advanced */ HTT_STATS_TX_SELFGEN_BN_TAG = 221, /* htt_stats_tx_selfgen_bn_tlv, TOPIC=advanced */ HTT_STATS_TX_SELFGEN_BN_SCHED_STATUS_TAG = 222, /* htt_stats_tx_selfgen_bn_sched_status_tlv, TOPIC=advanced */ - HTT_STATS_TX_PDEV_BN_DL_MU_OFDMA_STATS_TAG = 223, /* htt_stats_tx_pdev_bn_dl_mu_ofdma_tlv, TOPIC=advanced */ - HTT_STATS_TX_PDEV_BN_UL_MU_OFDMA_STATS_TAG = 224, /* htt_stats_tx_pdev_bn_ul_mu_ofdma_tlv, TOPIC=advanced */ + HTT_STATS_TX_PDEV_BN_DL_MU_OFDMA_STATS_TAG = 223, /* htt_stats_tx_pdev_bn_dl_mu_ofdma_stats_tlv, TOPIC=advanced */ + HTT_STATS_TX_PDEV_BN_UL_MU_OFDMA_STATS_TAG = 224, /* htt_stats_tx_pdev_bn_ul_mu_ofdma_stats_tlv, TOPIC=advanced */ HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_TAG = 225, /* htt_stats_rx_peer_tid_reo_queue_ba_tlv */ HTT_STATS_TXBF_OFDMA_BN_NDPA_TAG = 226, /* htt_stats_txbf_ofdma_bn_ndpa_tlv */ HTT_STATS_TXBF_OFDMA_BN_NDP_TAG = 227, /* htt_stats_txbf_ofdma_bn_ndp_tlv */ @@ -914,16 +927,24 @@ typedef enum { HTT_STATS_REGDB_CTRY_TAG = 247, /* htt_stats_regdb_ctry_tlv */ HTT_STATS_REGDB_REGDOMAIN_TAG = 248, /* htt_stats_regdb_regdomain_tlv */ HTT_STATS_REG_6G_TAG = 249, /* htt_stats_reg_6g_tlv*/ - HTT_STATS_REG_6G_CH_PWR_INFO_TAG = 250, /* htt_stats_reg_6g_ch_power_info_tlv*/ + HTT_STATS_REG_6G_CH_PWR_INFO_TAG = 250, /* htt_stats_reg_6g_ch_power_info_tlv */ HTT_STATS_REG_6G_OOBE_TAG = 251, /* htt_stats_reg_6g_oobe_tlv*/ HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_TAG = 252, /* htt_stats_tx_selfgen_resp_frame_stats_tlv */ HTT_STATS_DPD_HALPHY_TAG = 253, /* htt_stats_dpd_halphy_tlv */ HTT_STATS_DPD_HW_CAL_PARAMS_TAG = 254, /* htt_stats_dpd_hw_cal_params_tlv */ HTT_STATS_DPD_HW_CAL_RESULTS_TAG = 255, /* htt_stats_dpd_hw_cal_results_tlv */ HTT_STATS_TX_PDEV_TXOP_DUR_TAG = 256, /* htt_stats_tx_pdev_txop_dur_tlv */ - HTT_STATS_TXQ_COMBINED_SEQ_STATE_TAG = 257, /* htt_stats_sched_txq_combined_seq_state_tlv */ + HTT_STATS_TXQ_COMBINED_SEQ_STATE_TAG = 257, /* htt_stats_txq_combined_seq_state_tlv */ HTT_STATS_CTL_TAG = 258, /* htt_stats_ctl_tlv */ HTT_STATS_ENHANCED_CTL_TAG = 259, /* htt_stats_enhanced_ctl_tlv */ + HTT_STATS_NPCA_TAG = 260, /* htt_stats_npca_tlv */ + HTT_STATS_SCHED_TXQ_TX_MODE_SIMPLIFIED_TAG = 261, /* htt_stats_sched_txq_tx_mode_simplified_tlv */ + HTT_STATS_SCHED_TXQ_TX_MODE_WINNER_TAG = 262, /* htt_stats_sched_txq_tx_mode_winner_tlv */ + HTT_STATS_DFS_RADAR_HISTORY_TAG = 263, /* htt_stats_dfs_radar_history_tlv */ + HTT_STATS_DFS_INI_TAG = 264, /* htt_stats_dfs_ini_tlv */ + HTT_STATS_DFS_IPC_RING_TAG = 265, /* htt_stats_dfs_ipc_ring_tlv */ + HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_TAG = 266, /* htt_stats_phy_dpd_debug_chain_v1_tlv */ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TAG = 267, /* htt_stats_phy_tpc_debug_chain_v1_tlv */ HTT_STATS_MAX_TAG, } htt_stats_tlv_tag_t; @@ -2946,6 +2967,231 @@ PREPACK struct htt_tx_tcl_metadata_v2 { * End V2 Version of TCL Data Command *-----------------------------------------------------------------*/ + +/*------------------------------------------------------------------ + * V3 Version of TCL Data Command + * V3 Version to support peer_id, vdev_id, svc_class_id and + * MLO global_seq all flavours of TCL Data Cmd. same fields as V2, + * but the ordering of the fields changes. + *-----------------------------------------------------------------*/ + +typedef struct { + A_UINT32 + valid_htt_ext: 1, /* If set, tcl_exit_base->host_meta_info is valid */ + vdev_id: 8, + pdev_id: 2, + host_inspected:1, + rsvd: 2, + /* type: vdev_id based or peer_id or svc_id or global seq based */ + type: 2, + /* padding: these 16 bits cannot be used by FW for the tcl command */ + padding: 16; +} htt_tx_tcl_vdev_metadata_v3; + +typedef struct { + A_UINT32 + valid_htt_ext: 1, /* If set, tcl_exit_base->host_meta_info is valid */ + peer_id: 13, + /* type: vdev_id based or peer_id or svc_id or global seq based */ + type: 2, + /* padding: these 16 bits cannot be used by FW for the tcl command */ + padding: 16; +} htt_tx_tcl_peer_metadata_v3; + +typedef struct { + A_UINT32 + valid_htt_ext: 1, /* If set, tcl_exit_base->host_meta_info is valid */ + svc_class_id: 8, + /* ast_index: + * Indicates to firmware the AST index to be used for AST Override + */ + ast_index: 3, + rsvd: 2, + /* type: vdev_id based or peer_id or svc_id or global seq based */ + type: 2, + /* padding: these 16 bits cannot be used by FW for the tcl command */ + padding: 16; +} htt_tx_tcl_svc_class_id_metadata_v3; + +typedef struct { + A_UINT32 + global_seq_no: 12, + host_inspected: 1, + htt_ext_present:1, + /* type: vdev_id based or peer_id or svc_id or global seq based */ + type: 2, + /* padding: these 16 bits cannot be used by FW for the tcl command */ + padding: 16; +} htt_tx_tcl_global_seq_metadata_v3; + +PREPACK struct htt_tx_tcl_metadata_v3 { + union { + htt_tx_tcl_vdev_metadata_v3 vdev_meta_v3; + htt_tx_tcl_peer_metadata_v3 peer_meta_v3; + htt_tx_tcl_svc_class_id_metadata_v3 svc_class_id_meta_v3; + htt_tx_tcl_global_seq_metadata_v3 global_seq_meta_v3; + }; +} POSTPACK; + +/* ===================================================================== + * Common fields + * ===================================================================== */ + +/* type field */ +#define HTT_TX_TCL_METADATA_TYPE_V3_M 0x0000C000 +#define HTT_TX_TCL_METADATA_TYPE_V3_S 14 + +/* valid htt ext (used by VDEV / PEER / SVC metadata) */ +#define HTT_TX_TCL_METADATA_V3_VALID_HTT_EXT_ID_M 0x00000001 +#define HTT_TX_TCL_METADATA_V3_VALID_HTT_EXT_ID_S 0 + + +/* ===================================================================== + * VDEV V3 metadata + * ===================================================================== */ + +#define HTT_TX_TCL_METADATA_V3_VDEV_ID_M 0x000001FE +#define HTT_TX_TCL_METADATA_V3_VDEV_ID_S 1 + +#define HTT_TX_TCL_METADATA_V3_PDEV_ID_M 0x00000600 +#define HTT_TX_TCL_METADATA_V3_PDEV_ID_S 9 + +#define HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_M 0x00000800 +#define HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_S 11 + + +/* ===================================================================== + * PEER V3 metadata + * ===================================================================== */ + +#define HTT_TX_TCL_METADATA_V3_PEER_ID_M 0x00003FFE +#define HTT_TX_TCL_METADATA_V3_PEER_ID_S 1 + + +/* ===================================================================== + * SVC CLASS ID metadata + * ===================================================================== */ + +#define HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_M 0x000001FE +#define HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_S 1 + +#define HTT_TX_TCL_METADATA_AST_INDEX_M 0x00000E00 +#define HTT_TX_TCL_METADATA_AST_INDEX_S 9 + + +/* ===================================================================== + * Global Sequence Number metadata + * ===================================================================== */ + +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_M 0x00000FFF +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_S 0 + +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_M 0x00001000 +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_S 12 + +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_M 0x00002000 +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_S 13 + +/*----- Get and Set V3 type field in Vdev, Peer, Svc_Class_Id, Global_seq_no */ +#define HTT_TX_TCL_METADATA_TYPE_V3_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_TYPE_V3_M) >> \ + HTT_TX_TCL_METADATA_TYPE_V3_S) +#define HTT_TX_TCL_METADATA_TYPE_V3_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_TYPE_V3, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_TYPE_V3_S)); \ + } while (0) + +#define HTT_TX_TCL_METADATA_V3_VALID_HTT_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_VALID_HTT_EXT_ID_M) >> \ + HTT_TX_TCL_METADATA_V3_VALID_HTT_EXT_ID_S) +#define HTT_TX_TCL_METADATA_V3_VALID_HTT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_VALID_HTT_EXT_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_VALID_HTT_EXT_ID_S)); \ + } while (0) + +/*----- Get and Set V3 type field in Vdev meta fields ----*/ +#define HTT_TX_TCL_METADATA_V3_VDEV_ID_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_VDEV_ID_M) >> \ + HTT_TX_TCL_METADATA_V3_VDEV_ID_S) +#define HTT_TX_TCL_METADATA_V3_VDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_VDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_VDEV_ID_S)); \ + } while (0) + +#define HTT_TX_TCL_METADATA_V3_PDEV_ID_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_PDEV_ID_M) >> \ + HTT_TX_TCL_METADATA_V3_PDEV_ID_S) +#define HTT_TX_TCL_METADATA_V3_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_PDEV_ID_S)); \ + } while (0) + +#define HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_M) >> \ + HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_S) +#define HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_HOST_INSPECTED, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_HOST_INSPECTED_S)); \ + } while (0) + +/*----- Get and Set V3 type field in Peer meta fields ----*/ +#define HTT_TX_TCL_METADATA_V3_PEER_ID_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_PEER_ID_M) >> \ + HTT_TX_TCL_METADATA_V3_PEER_ID_S) +#define HTT_TX_TCL_METADATA_V3_PEER_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_PEER_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_PEER_ID_S)); \ + } while (0) + +/*----- Get and Set V3 type field in Service Class fields ----*/ +#define HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_M) >> \ + HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_S) +#define HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_SVC_CLASS_ID_S)); \ + } while (0) + +/*----- Get and Set V3 type field in Global sequence fields ----*/ +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_M) >> \ + HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_S) +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HOST_INSPECTED_S)); \ + } while (0) + +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_M) >> \ + HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_S) +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_GLBL_SEQ_NO_S)); \ + } while (0) + +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_M) >> \ + HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_S) +#define HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_V3_GLBL_SEQ_HTT_EXT_PRESENT_S)); \ + } while (0) + +/*------------------------------------------------------------------ + * End V3 Version of TCL Data Command + *-----------------------------------------------------------------*/ + + typedef enum { HTT_TX_FW2WBM_TX_STATUS_OK, HTT_TX_FW2WBM_TX_STATUS_DROP, @@ -5997,7 +6243,11 @@ enum htt_srng_ring_id { * newer packet_type_enable_data_flags_* are valid or not * If not set, will use pkt_type_enable_flags for both status * and full pkt buffer configuration. - * b'30:31 - rsvd1: reserved for future use + * b'30 - is_monitor_mode: specify whether monitor mode is enabled. + * Helpful to configure monitor-mode related filters. + * These filters cause throughput dip if enabled in + * non-monitor mode. + * b'31 - rsvd1: reserved for future use * dword1 - b'0:15 - ring_buffer_size: size of bufferes referenced by rx ring, * in byte units. * Valid only for HW_TO_SW_RING and SW_TO_HW_RING @@ -6214,7 +6464,8 @@ PREPACK struct htt_rx_ring_selection_cfg_t { drop_thresh_valid: 1, rx_mon_global_en: 1, packet_type_enable_data: 1, - rsvd1: 2; + is_monitor_mode: 1, + rsvd1: 1; A_UINT32 ring_buffer_size: 16, config_length_mgmt:3, config_length_ctrl:3, @@ -6417,6 +6668,18 @@ enum htt_reg_write_selection { ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_PACKET_TYPE_ENABLE_DATA_S)); \ } while (0) +#define HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_M 0x40000000 +#define HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_S 30 +#define HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_GET(_var) \ + (((_var) & HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_M) >> \ + HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_S) +#define HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE, _val); \ + ((_var) |= ((_val) << HTT_RX_RING_SELECTION_CFG_IS_MONITOR_MODE_S)); \ + } while (0) + + #define HTT_RX_RING_SELECTION_CFG_RING_BUFFER_SIZE_M 0x0000ffff #define HTT_RX_RING_SELECTION_CFG_RING_BUFFER_SIZE_S 0 #define HTT_RX_RING_SELECTION_CFG_RING_BUFFER_SIZE_GET(_var) \ @@ -7853,7 +8116,10 @@ PREPACK struct htt_tx_monitor_cfg_t { pkt_swap: 1, tx_mon_global_en: 1, mac_addr_filter_en: 1, - rsvd1: 4; + addr_filter_peer_bitmap_ppdu_drop: 1, + type_based_mpdu_stat_filter_en: 1, + special_pkt_filtering_en: 1, + pkt_buf_cnt_en: 1; A_UINT32 ring_buffer_size: 16, config_length_mgmt: 3, config_length_ctrl: 3, @@ -7897,6 +8163,23 @@ PREPACK struct htt_tx_monitor_cfg_t { response_end_status_word_mask: 16; A_UINT32 fes_status_prot_word_mask: 11, rsvd6: 21; + A_UINT32 phy_tx_pkt_end: 8, + mac_tx_user_desc_common: 8, + mac_tx_mu_uplink_user_setup: 8, + pdg_response: 8; + A_UINT32 received_response_info: 8, + rx_response_required_info: 8, + ranging_user_details: 8, + mactx_pre_phy_desc: 8; + A_UINT32 ofdma_trigger_details: 16, + tqm_update_tx_mpdu_count_status: 16; + A_UINT32 phytx_location: 16, + rsvd7: 16; + A_UINT32 received_response_info_part2; + A_UINT32 type_en_mgmt; + A_UINT32 type_en_ctrl; + A_UINT32 type_en_data; + A_UINT32 tlv_filter_mask_in4; } POSTPACK; #define HTT_TX_MONITOR_CFG_SZ (sizeof(struct htt_tx_monitor_cfg_t)) @@ -7967,6 +8250,51 @@ PREPACK struct htt_tx_monitor_cfg_t { ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_MAC_ADDR_FILTER_EN_S)); \ } while (0) +#define HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_M 0x10000000 +#define HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_S 28 +#define HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_M) >> \ + HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_S) +#define HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_ADDR_FILTER_PEER_BITMAP_PPDU_DROP_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_M 0x20000000 +#define HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_S 29 +#define HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_M) >> \ + HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_S) +#define HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_TYPE_BASED_MPDU_STAT_FILTER_EN_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_M 0x40000000 +#define HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_S 30 +#define HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_M) >> \ + HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_S) +#define HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_SPECIAL_PKT_FILTERING_EN_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_M 0x80000000 +#define HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_S 31 +#define HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_M) >> \ + HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_S) +#define HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_PKT_BUF_CNT_EN_S)); \ + } while (0) + + #define HTT_TX_MONITOR_CFG_RING_BUFFER_SIZE_M 0x0000ffff #define HTT_TX_MONITOR_CFG_RING_BUFFER_SIZE_S 0 #define HTT_TX_MONITOR_CFG_RING_BUFFER_SIZE_GET(_var) \ @@ -8353,6 +8681,132 @@ PREPACK struct htt_tx_monitor_cfg_t { ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_FES_STATUS_PROT_WORD_MASK_S)); \ } while (0) + +#define HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_M 0x000000ff +#define HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_S 0 +#define HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_M) >> \ + HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_S) +#define HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_PHY_TX_PKT_END, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_PHY_TX_PKT_END_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_M 0x0000ff00 +#define HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_S 8 +#define HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_M) >> \ + HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_S) +#define HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_MAC_TX_USER_DESC_COMMON_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_M 0x00ff0000 +#define HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_S 16 +#define HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_M) >> \ + HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_S) +#define HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_MAC_TX_MU_UPLINK_USER_SETUP_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_PDG_RESPONSE_M 0xff000000 +#define HTT_TX_MONITOR_CFG_PDG_RESPONSE_S 24 +#define HTT_TX_MONITOR_CFG_PDG_RESPONSE_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_PDG_RESPONSE_M) >> \ + HTT_TX_MONITOR_CFG_PDG_RESPONSE_S) +#define HTT_TX_MONITOR_CFG_PDG_RESPONSE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_PDG_RESPONSE, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_PDG_RESPONSE_S)); \ + } while (0) + + +#define HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_M 0x000000ff +#define HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_S 0 +#define HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_M) >> \ + HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_S) +#define HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_RECEIVED_RESPONSE_INFO_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_M 0x0000ff00 +#define HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_S 8 +#define HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_M) >> \ + HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_S) +#define HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_RX_RESPONSE_REQUIRED_INFO_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_M 0x00ff0000 +#define HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_S 16 +#define HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_M) >> \ + HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_S) +#define HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_RANGING_USER_DETAILS_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_M 0xff000000 +#define HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_S 24 +#define HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_M) >> \ + HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_S) +#define HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_MACTX_PRE_PHY_DESC_S)); \ + } while (0) + + +#define HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_M 0x0000ffff +#define HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_S 0 +#define HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_M) >> \ + HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_S) +#define HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_OFDMA_TRIGGER_DETAILS_S)); \ + } while (0) + +#define HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_M 0xffff0000 +#define HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_S 16 +#define HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_M) >> \ + HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_S) +#define HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_TQM_UPDATE_TX_MPDU_COUNT_STATUS_S)); \ + } while (0) + + +#define HTT_TX_MONITOR_CFG_PHYTX_LOCATION_M 0x0000ffff +#define HTT_TX_MONITOR_CFG_PHYTX_LOCATION_S 0 +#define HTT_TX_MONITOR_CFG_PHYTX_LOCATION_GET(_var) \ + (((_var) & HTT_TX_MONITOR_CFG_PHYTX_LOCATION_M) >> \ + HTT_TX_MONITOR_CFG_PHYTX_LOCATION_S) +#define HTT_TX_MONITOR_CFG_PHYTX_LOCATION_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_MONITOR_CFG_PHYTX_LOCATION, _val); \ + ((_var) |= ((_val) << HTT_TX_MONITOR_CFG_PHYTX_LOCATION_S)); \ + } while (0) + + /* * pkt_type_enable_flags */ @@ -22007,14 +22461,14 @@ PREPACK struct htt_rx_peer_metadata_v1 { */ PREPACK struct htt_rx_peer_metadata_v1a { A_UINT32 - peer_id: 13, - ml_peer_valid: 1, - vdev_id: 8, - logical_link_id: 4, - chip_id: 3, - qdata_refill: 1, - passthru_pkt: 1, - reserved2: 1; + peer_id: 13, + ml_peer_valid: 1, + vdev_id: 8, + logical_link_id: 4, + chip_id: 3, + qdata_refill: 1, + passthru_pkt: 1, + qdata_consent_pkt: 1; } POSTPACK; #define HTT_RX_PEER_META_DATA_V1A_PEER_ID_S 0 @@ -22094,6 +22548,17 @@ PREPACK struct htt_rx_peer_metadata_v1a { ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1A_PASSTHRU_PKT_S)); \ } while (0) +#define HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_S 31 +#define HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_M 0x80000000 +#define HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_M) >> HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_S) + +#define HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V1A_QDATA_CONSENT_PKT_S)); \ + } while (0) + /** * @brief target -> RX PEER METADATA V1B format @@ -22201,14 +22666,15 @@ PREPACK struct htt_rx_peer_metadata_v1b { */ PREPACK struct htt_rx_peer_metadata_v2 { A_UINT32 - peer_id: 5, - ml_peer_valid: 1, - vdev_id: 3, - logical_link_id: 3, - qdata_refill: 1, - peer_session_id: 8, - passthru_pkt: 1, - reserved: 10; + peer_id: 5, + ml_peer_valid: 1, + vdev_id: 3, + logical_link_id: 3, + qdata_refill: 1, + peer_session_id: 8, + passthru_pkt: 1, + qdata_consent_pkt: 1, + reserved: 9; } POSTPACK; #define HTT_RX_PEER_META_DATA_V2_PEER_ID_S 0 @@ -22294,6 +22760,17 @@ PREPACK struct htt_rx_peer_metadata_v2 { ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V2_PASSTHRU_PKT_S)); \ } while (0) +#define HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_S 22 +#define HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_M 0x00400000 +#define HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_GET(_var) \ + (((_var) & HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_M) >> HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_S) + +#define HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT, _val); \ + ((_var) |= ((_val) << HTT_RX_PEER_META_DATA_V2_QDATA_CONSENT_PKT_S)); \ + } while (0) + /* generic variables for masks and shifts for various fields */ extern A_UINT32 HTT_RX_PEER_META_DATA_PEER_ID_S; @@ -22333,6 +22810,9 @@ extern void (*HTT_RX_PEER_META_DATA_PEER_SESSION_ID_SET) (A_UINT32 *var, A_UINT3 extern A_UINT32 (*HTT_RX_PEER_META_DATA_DECAP_TYPE_GET) (A_UINT32 var); extern void (*HTT_RX_PEER_META_DATA_DECAP_TYPE_SET) (A_UINT32 *var, A_UINT32 val); +extern A_UINT32 (*HTT_RX_PEER_META_DATA_PASSTHRU_PKT_GET) (A_UINT32 var); +extern void (*HTT_RX_PEER_META_DATA_PASSTHRU_PKT_SET) (A_UINT32 *var, A_UINT32 val); + /* * In some systems, the host SW wants to specify priorities between diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 6324a7b5c015..28d4c2f06ad1 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -927,6 +927,12 @@ enum htt_dbg_ext_stats_type { * RESP Tags: * - htt_stats_ctl_tlv * - htt_stats_enhanced_ctl_tlv + * else if (subtype == HTT_STATS_REGULATORY_SUBTYPE_DFS): + * no params + * RESP Tags: + * - htt_stats_dfs_radar_history_tlv + * - htt_stats_dfs_ini_tlv + * - htt_stats_dfs_ipc_ring_tlv */ HTT_DBG_EXT_STATS_REGULATORY = 83, @@ -948,6 +954,21 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_STATS_DPD = 85, + HTT_DBG_EXT_STATS_NPCA = 86, + + /** HTT_DBG_EXT_STATS_PHY_DPD_TPC_DEBUG + * PARAMS: + * - config_param0: subtype: htt_stats_phy_dpd_tpc_debug_subtype_t + * 0 = DPD debug, 1 = TPC debug + * - config_param1: chain bitmask (0 = default to chain 0 only) + * RESP MSG: + * if (subtype == HTT_STATS_PHY_DPD_TPC_DEBUG_SUBTYPE_DPD): + * - htt_stats_phy_dpd_debug_chain_v1_tlv (one per requested chain) + * if (subtype == HTT_STATS_PHY_DPD_TPC_DEBUG_SUBTYPE_TPC): + * - htt_stats_phy_tpc_debug_chain_v1_tlv (one per requested chain) + */ + HTT_DBG_EXT_STATS_PHY_DPD_TPC_DEBUG = 87, + /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, @@ -1197,7 +1218,9 @@ typedef struct { #define HTT_TX_PDEV_STATS_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_TX_PDEV_STATS_CMN_MAC_ID_M) >> \ HTT_TX_PDEV_STATS_CMN_MAC_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_PDEV_CMN_MAC_ID_GET(_var) \ + HTT_TX_PDEV_STATS_CMN_MAC_ID_GET(_var) #define HTT_TX_PDEV_STATS_CMN_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_PDEV_STATS_CMN_MAC_ID, _val); \ @@ -1621,6 +1644,11 @@ typedef struct { A_UINT32 mu_mimo_num_seq_posted[HTT_STATS_NUM_NR_BINS]; A_UINT32 mu_mimo_num_ppdu_posted_per_burst[HTT_STATS_MAX_NUM_MU_PPDU_PER_BURST_WORDS]; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_mu_ppdu_dist_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_mu_ppdu_dist_tlv htt_pdev_mu_ppdu_dist_tlv_v; @@ -1807,6 +1835,9 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_hw_pdev_errs_tlv htt_hw_stats_pdev_errs_tlv; +#define HTT_STATS_HW_PDEV_ERRS_MAC_ID_GET(word) \ + ((word >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -1836,6 +1867,9 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_whal_tx_tlv htt_hw_stats_whal_tx_tlv; +#define HTT_STATS_WHAL_TX_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -1910,6 +1944,9 @@ typedef struct _htt_pdev_err_stats { #define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_GET(_var) \ (((_var) & HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_M) >> \ HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PEER_MSDU_FLOWQ_TX_FLOW_NUMBER_GET(_var) \ + HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_GET(_var) #define HTT_MSDU_FLOW_STATS_TX_FLOW_NUM_SET(_var, _val) \ do { \ @@ -1920,6 +1957,9 @@ typedef struct _htt_pdev_err_stats { #define HTT_MSDU_FLOW_STATS_TID_NUM_GET(_var) \ (((_var) & HTT_MSDU_FLOW_STATS_TID_NUM_M) >> \ HTT_MSDU_FLOW_STATS_TID_NUM_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PEER_MSDU_FLOWQ_TID_NUM_GET(_var) \ + HTT_MSDU_FLOW_STATS_TID_NUM_GET(_var) #define HTT_MSDU_FLOW_STATS_TID_NUM_SET(_var, _val) \ do { \ @@ -1930,6 +1970,9 @@ typedef struct _htt_pdev_err_stats { #define HTT_MSDU_FLOW_STATS_DROP_GET(_var) \ (((_var) & HTT_MSDU_FLOW_STATS_DROP_M) >> \ HTT_MSDU_FLOW_STATS_DROP_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PEER_MSDU_FLOWQ_DROP_RULE_GET(_var) \ + HTT_MSDU_FLOW_STATS_DROP_GET(_var) #define HTT_MSDU_FLOW_STATS_DROP_SET(_var, _val) \ do { \ @@ -1985,7 +2028,9 @@ typedef htt_stats_peer_msdu_flowq_tlv htt_msdu_flow_stats_tlv; #define HTT_TX_TID_STATS_SW_PEER_ID_GET(_var) \ (((_var) & HTT_TX_TID_STATS_SW_PEER_ID_M) >> \ HTT_TX_TID_STATS_SW_PEER_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TID_DETAILS_SW_PEER_ID_GET(_var) \ + HTT_TX_TID_STATS_SW_PEER_ID_GET(_var) #define HTT_TX_TID_STATS_SW_PEER_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_SW_PEER_ID, _val); \ @@ -1995,7 +2040,9 @@ typedef htt_stats_peer_msdu_flowq_tlv htt_msdu_flow_stats_tlv; #define HTT_TX_TID_STATS_TID_NUM_GET(_var) \ (((_var) & HTT_TX_TID_STATS_TID_NUM_M) >> \ HTT_TX_TID_STATS_TID_NUM_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TID_DETAILS_TID_NUM_GET(_var) \ + HTT_TX_TID_STATS_TID_NUM_GET(_var) #define HTT_TX_TID_STATS_TID_NUM_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_TID_NUM, _val); \ @@ -2011,7 +2058,9 @@ typedef htt_stats_peer_msdu_flowq_tlv htt_msdu_flow_stats_tlv; #define HTT_TX_TID_STATS_NUM_SCHED_PENDING_GET(_var) \ (((_var) & HTT_TX_TID_STATS_NUM_SCHED_PENDING_M) >> \ HTT_TX_TID_STATS_NUM_SCHED_PENDING_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TID_DETAILS_NUM_SCHED_PENDING_GET(_var) \ + HTT_TX_TID_STATS_NUM_SCHED_PENDING_GET(_var) #define HTT_TX_TID_STATS_NUM_SCHED_PENDING_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_NUM_SCHED_PENDING, _val); \ @@ -2021,7 +2070,9 @@ typedef htt_stats_peer_msdu_flowq_tlv htt_msdu_flow_stats_tlv; #define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_GET(_var) \ (((_var) & HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_M) >> \ HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TID_DETAILS_NUM_PPDU_IN_HWQ_GET(_var) \ + HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_GET(_var) #define HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TID_STATS_NUM_PPDU_IN_HWQ, _val); \ @@ -2159,6 +2210,15 @@ typedef struct _htt_tx_tid_stats_v1_tlv { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_tid_details_v1_tlv htt_tx_tid_stats_v1_tlv; +#define HTT_STATS_TX_TID_DETAILS_V1_SW_PEER_ID_GET(word) \ + (((word) >> 0) & 0xffff) +#define HTT_STATS_TX_TID_DETAILS_V1_TID_NUM_GET(word) \ + (((word) >> 16) & 0xffff) +#define HTT_STATS_TX_TID_DETAILS_V1_NUM_SCHED_PENDING_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_TX_TID_DETAILS_V1_NUM_PPDU_IN_HWQ_GET(word) \ + (((word) >> 8) & 0xff) + #define HTT_RX_TID_STATS_SW_PEER_ID_M 0x0000ffff #define HTT_RX_TID_STATS_SW_PEER_ID_S 0 #define HTT_RX_TID_STATS_TID_NUM_M 0xffff0000 @@ -2167,7 +2227,9 @@ typedef htt_stats_tx_tid_details_v1_tlv htt_tx_tid_stats_v1_tlv; #define HTT_RX_TID_STATS_SW_PEER_ID_GET(_var) \ (((_var) & HTT_RX_TID_STATS_SW_PEER_ID_M) >> \ HTT_RX_TID_STATS_SW_PEER_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RX_TID_DETAILS_SW_PEER_ID_GET(_var) \ + HTT_RX_TID_STATS_SW_PEER_ID_GET(_var) #define HTT_RX_TID_STATS_SW_PEER_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_TID_STATS_SW_PEER_ID, _val); \ @@ -2177,7 +2239,9 @@ typedef htt_stats_tx_tid_details_v1_tlv htt_tx_tid_stats_v1_tlv; #define HTT_RX_TID_STATS_TID_NUM_GET(_var) \ (((_var) & HTT_RX_TID_STATS_TID_NUM_M) >> \ HTT_RX_TID_STATS_TID_NUM_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RX_TID_DETAILS_TID_NUM_GET(_var) \ + HTT_RX_TID_STATS_TID_NUM_GET(_var) #define HTT_RX_TID_STATS_TID_NUM_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_TID_STATS_TID_NUM, _val); \ @@ -2438,7 +2502,9 @@ typedef struct { #define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MPDU_CNT_GET(_var) \ (((_var) & HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MPDU_CNT_M) >> \ HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MPDU_CNT_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_CURRENT_MPDU_CNT_GET(_var) \ + HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MPDU_CNT_GET(_var) #define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MPDU_CNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MPDU_CNT, _val); \ @@ -2448,7 +2514,9 @@ typedef struct { #define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MSDU_CNT_GET(_var) \ (((_var) & HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MSDU_CNT_M) >> \ HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MSDU_CNT_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_CURRENT_MSDU_CNT_GET(_var) \ + HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MSDU_CNT_GET(_var) #define HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MSDU_CNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_RX_PEER_TID_REO_QUEUE_BA_MSDU_CNT, _val); \ @@ -2635,8 +2703,14 @@ typedef htt_stats_peer_details_tlv htt_peer_details_tlv; HTT_PEER_DETAILS_GET(word, PEER_PS_EXIT) #define HTT_STATS_PEER_DETAILS_PEER_PSPOLL_TRIGGER_GET(word) \ HTT_PEER_DETAILS_GET(word, PEER_PSPOLL_TRIGGER) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PEER_DETAILS_PEER_PSPOLL_TRIGGER_RECEIVED_GET(word) \ + HTT_STATS_PEER_DETAILS_PEER_PSPOLL_TRIGGER_GET(word) #define HTT_STATS_PEER_DETAILS_PEER_UAPSD_TRIGGER_GET(word) \ HTT_PEER_DETAILS_GET(word, PEER_UAPSD_TRIGGER) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PEER_DETAILS_PEER_UAPSD_TRIGGER_RECEIVED_GET(word) \ + HTT_STATS_PEER_DETAILS_PEER_UAPSD_TRIGGER_GET(word) #define HTT_STATS_PEER_DETAILS_PEER_PS_HISTOGRAM_0_GET(word) \ HTT_PEER_DETAILS_GET(word, PEER_PS_HISTOGRAM_0) #define HTT_STATS_PEER_DETAILS_PEER_PS_HISTOGRAM_1_GET(word) \ @@ -2650,17 +2724,17 @@ typedef struct { A_UINT32 ast_index; htt_mac_addr mac_addr; A_UINT32 - pdev_id : 2, - vdev_id : 8, - next_hop : 1, - mcast : 1, - monitor_direct : 1, - mesh_sta : 1, - mec : 1, - intra_bss : 1, - chip_id : 2, - ml_peer_id : 13, - on_chip : 1; + pdev_id : 2, /* bits 1:0 */ + vdev_id : 8, /* bits 9:2 */ + next_hop : 1, /* bit 10 */ + mcast : 1, /* bit 11 */ + monitor_direct : 1, /* bit 12 */ + mesh_sta : 1, /* bit 13 */ + mec : 1, /* bit 14 */ + intra_bss : 1, /* bit 15 */ + chip_id : 2, /* bit 17:16 */ + ml_peer_id : 13, /* bit 30:18 */ + on_chip : 1; /* bit 31 */ A_UINT32 tx_monitor_override_sta : 1, rx_monitor_override_sta : 1, @@ -2669,6 +2743,34 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_ast_entry_tlv htt_ast_entry_tlv; +#define HTT_STATS_AST_ENTRY_PDEV_ID_GET(word32) \ + ((word32 >> 0) & 0x3) +#define HTT_STATS_AST_ENTRY_VDEV_ID_GET(word32) \ + ((word32 >> 2) & 0xff) +#define HTT_STATS_AST_ENTRY_NEXT_HOP_GET(word32) \ + ((word32 >> 10) & 0x1) +#define HTT_STATS_AST_ENTRY_MCAST_GET(word32) \ + ((word32 >> 11) & 0x1) +#define HTT_STATS_AST_ENTRY_MONITOR_DIRECT_GET(word32) \ + ((word32 >> 12) & 0x1) +#define HTT_STATS_AST_ENTRY_MESH_STA_GET(word32) \ + ((word32 >> 13) & 0x1) +#define HTT_STATS_AST_ENTRY_MEC_GET(word32) \ + ((word32 >> 14) & 0x1) +#define HTT_STATS_AST_ENTRY_INTRA_BSS_GET(word32) \ + ((word32 >> 15) & 0x1) +#define HTT_STATS_AST_ENTRY_CHIP_ID_GET(word32) \ + ((word32 >> 16) & 0x3) +#define HTT_STATS_AST_ENTRY_ML_PEER_ID_GET(word32) \ + ((word32 >> 18) & 0x1fff) +#define HTT_STATS_AST_ENTRY_ON_CHIP_GET(word32) \ + ((word32 >> 31) & 0x1) + +#define HTT_STATS_AST_ENTRY_TX_MONITOR_OVERRIDE_STA_GET(word32) \ + ((word32 >> 0) & 0x1) +#define HTT_STATS_AST_ENTRY_RX_MONITOR_OVERRIDE_STA_GET(word32) \ + ((word32 >> 1) & 0x1) + typedef enum { HTT_STATS_DIRECTION_TX, HTT_STATS_DIRECTION_RX, @@ -3701,6 +3803,9 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_selfgen_cmn_stats_tlv htt_tx_selfgen_cmn_stats_tlv; +#define HTT_STATS_TX_SELFGEN_CMN_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; /** 11AC VHT SU NDPA frame sent over the air */ @@ -3905,6 +4010,11 @@ typedef struct { A_UINT32 standalone_be_ulmumimo_trigger_tried[HTT_NUM_AC_WMM]; /** 11BE EHT MU Standalone UL MU-MIMO Basic Trigger completed with error(s) */ A_UINT32 standalone_be_ulmumimo_trigger_err[HTT_NUM_AC_WMM]; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_selfgen_be_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_selfgen_be_stats_tlv htt_tx_selfgen_be_stats_tlv; @@ -3970,6 +4080,9 @@ typedef struct { A_UINT32 sta_dps_bn_bsr_trigger_err[HTT_NUM_AC_WMM]; /** 11bn UHR MU RTS trigger to DPS client completed with errors(s) */ A_UINT32 sta_dps_bn_mu_rts_trigger_err[HTT_NUM_AC_WMM]; + + /** 11BN UHR UL OFDMA RU allocation mode - trigger error count */ + A_UINT32 bn_basic_trig_ru_alloc_mode_err[HTT_BN_UL_OFDMA_NUM_RU_ALLOC_MODES]; } htt_stats_tx_selfgen_bn_tlv; typedef struct { /* DEPRECATED */ @@ -4713,6 +4826,11 @@ typedef struct { A_UINT32 be_mu_rts_trigger_blocked; /** 11BE EHT MU BSR Trigger frame blocked due to partner link TX/RX(eMLSR) */ A_UINT32 be_bsr_trigger_blocked; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_selfgen_be_err_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_selfgen_be_err_stats_tlv htt_tx_selfgen_be_err_stats_tlv; @@ -4873,6 +4991,11 @@ typedef struct { A_UINT32 be_ulmumimo_trig_sch_status[HTT_TX_PDEV_STATS_NUM_TX_ERR_STATUS]; /** 11BE EHT UL MUMIMO Basic Trigger scheduler error code */ A_UINT32 be_ulmumimo_trig_sch_flag_err[HTT_TX_SELFGEN_NUM_SCH_TSFLAG_ERROR_STATS]; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_selfgen_be_sched_status_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_selfgen_be_sched_status_stats_tlv @@ -4981,6 +5104,11 @@ typedef struct { A_UINT32 be_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_BE_MUMIMO_USER_STATS]; /** Number of 11AC DL MU MIMO schedules posted per group size (4-7) */ A_UINT32 ac_mu_mimo_sch_posted_per_grp_sz_ext[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS]; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_pdev_mu_mimo_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_mu_mimo_stats_tlv htt_tx_pdev_mu_mimo_sch_stats_tlv; @@ -5040,6 +5168,11 @@ typedef struct { A_UINT32 be_mu_mimo_sch_posted_per_grp_sz[HTT_TX_PDEV_STATS_NUM_BE_MUMIMO_USER_STATS]; /** Number of 11AC DL MU MIMO schedules posted per group size (4 - 7)*/ A_UINT32 ac_mu_mimo_sch_posted_per_grp_sz_ext[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS]; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_pdev_dl_mu_mimo_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_dl_mu_mimo_stats_tlv @@ -5067,7 +5200,10 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /** Represents the count for 11BN DL MU OFDMA sequences */ A_UINT32 bn_mu_ofdma_sch_nusers[HTT_TX_PDEV_STATS_NUM_BN_OFDMA_USER_STATS]; -} htt_stats_tx_pdev_bn_dl_mu_ofdma_tlv; +} htt_stats_tx_pdev_bn_dl_mu_ofdma_stats_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_tx_pdev_bn_dl_mu_ofdma_stats_tlv + htt_stats_tx_pdev_bn_dl_mu_ofdma_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -5132,7 +5268,10 @@ typedef struct { /** * TODO_BORON_OFDMA : Add array for BN_BRP number of users */ -} htt_stats_tx_pdev_bn_ul_mu_ofdma_tlv; +} htt_stats_tx_pdev_bn_ul_mu_ofdma_stats_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_tx_pdev_bn_ul_mu_ofdma_stats_tlv + htt_stats_tx_pdev_bn_ul_mu_ofdma_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -5247,6 +5386,11 @@ typedef struct { A_UINT32 user_index; /** HTT_STATS_TX_SCHED_MODE_xxx */ A_UINT32 tx_sched_mode; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_pdev_mpdu_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_mpdu_stats_tlv htt_tx_pdev_mpdu_stats_tlv; @@ -5323,6 +5467,35 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; A_UINT32 htt_stats_type; } htt_stats_error_tlv_v; +/* Multiple TLV tag values + * (HTT_STATS_UNSUPPORTED_ERROR_STATS_TAG, + * HTT_STATS_UNAVAILABLE_ERROR_STATS_TAG) + * correspond to this htt_stats_error_tlv_v struct. + * Provide aliases that have the expected names + * that are consistent with the TLV tag enum names. + */ +typedef htt_stats_error_tlv_v + htt_stats_unsupported_error_stats_tlv; +typedef htt_stats_error_tlv_v + htt_stats_unavailable_error_stats_tlv; + +/* NOTE: Variable length TLV, use length spec to infer array size */ +#define HTT_STATS_SCHED_TXQ_TX_MODE_SIMPLIFIED_TLV_SZ(_num_elems) \ + (sizeof(A_UINT32) * (_num_elems)) +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** Scheduler command posted per tx_mode (length = num tx modes+1) */ + HTT_STATS_VAR_LEN_ARRAY1(A_UINT32, sched_tx_mode_simplified); +} htt_stats_sched_txq_tx_mode_simplified_tlv; + +/* NOTE: Variable length TLV, use length spec to infer array size */ +#define HTT_STATS_SCHED_TXQ_TX_MODE_WINNER_TLV_SZ(_num_elems) \ + (sizeof(A_UINT32) * (_num_elems)) +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** Scheduler command posted per tx_mode (length = num tx modes+1) */ + HTT_STATS_VAR_LEN_ARRAY1(A_UINT32, sched_tx_mode_winner); +} htt_stats_sched_txq_tx_mode_winner_tlv; typedef enum { HTT_SCHED_TID_SKIP_SCHED_MASK_DISABLED = 0, /* Skip the tid when WAL_TID_DISABLE_TX_SCHED_MASK is true */ @@ -5472,7 +5645,10 @@ typedef struct { * Indexed by htt_sched_txq_combined_seq_status_tlv_enum. */ HTT_STATS_VAR_LEN_ARRAY1(A_UINT32, combined_seq_state); -} htt_stats_sched_txq_combined_seq_state_tlv; +} htt_stats_txq_combined_seq_state_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_txq_combined_seq_state_tlv + htt_stats_sched_txq_combined_seq_state_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -5807,7 +5983,9 @@ typedef htt_stats_tx_tqm_pdev_tlv htt_tx_tqm_pdev_stats_tlv_v; #define HTT_TX_TQM_CMN_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_TQM_CMN_STATS_MAC_ID_M) >> \ HTT_TX_TQM_CMN_STATS_MAC_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TQM_CMN_MAC_ID_GET(_var) \ + HTT_TX_TQM_CMN_STATS_MAC_ID_GET(_var) #define HTT_TX_TQM_CMN_STATS_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TQM_CMN_STATS_MAC_ID, _val); \ @@ -5918,7 +6096,9 @@ typedef struct { #define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_TQM_CMDQ_STATUS_MAC_ID_M) >> \ HTT_TX_TQM_CMDQ_STATUS_MAC_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TQM_CMDQ_STATUS_MAC_ID_GET(_var) \ + HTT_TX_TQM_CMDQ_STATUS_MAC_ID_GET(_var) #define HTT_TX_TQM_CMDQ_STATUS_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TQM_CMDQ_STATUS_MAC_ID, _val); \ @@ -5928,7 +6108,9 @@ typedef struct { #define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_GET(_var) \ (((_var) & HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_M) >> \ HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_TQM_CMDQ_STATUS_CMDQ_ID_GET(_var) \ + HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_GET(_var) #define HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_TQM_CMDQ_STATUS_CMDQ_ID, _val); \ @@ -6209,8 +6391,38 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_de_cmn_tlv htt_tx_de_cmn_stats_tlv; +#define HTT_STATS_TX_DE_CMN_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + #define HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) ((dword >> 0) & 0xffff) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_RX_RING_STATS_SW2RXDMA_MAX_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_RXDMA2REO_MAX_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REO2SW1_MAX_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REO2SW4_MAX_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REFILLRINGIPA_MAX_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REFILLRINGHOST_MAX_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_SIZE_NUM_ENTRIES(dword) + #define HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) ((dword >> 16) & 0xffff) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_RX_RING_STATS_SW2RXDMA_CURR_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_RXDMA2REO_CURR_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REO2SW1_CURR_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REO2SW4_CURR_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REFILLRINGIPA_CURR_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) +#define HTT_STATS_RX_RING_STATS_REFILLRINGHOST_CURR_NUM_ENTRIES_GET(dword) \ + HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) /* Rx debug info for status rings */ typedef struct { @@ -6220,12 +6432,54 @@ typedef struct { * (size of the ring in terms of entries) * BIT [16 : 31] :- current number of entries occupied in respective ring */ - A_UINT32 entry_status_sw2rxdma; - A_UINT32 entry_status_rxdma2reo; - A_UINT32 entry_status_reo2sw1; - A_UINT32 entry_status_reo2sw4; - A_UINT32 entry_status_refillringipa; - A_UINT32 entry_status_refillringhost; + union { + A_UINT32 entry_status_sw2rxdma; + struct { + A_UINT32 + max_num_entries: 16, + curr_num_entries: 16; + } sw2rxdma; + }; + union { + A_UINT32 entry_status_rxdma2reo; + struct { + A_UINT32 + max_num_entries: 16, + curr_num_entries: 16; + } rxdma2reo; + }; + union { + A_UINT32 entry_status_reo2sw1; + struct { + A_UINT32 + max_num_entries: 16, + curr_num_entries: 16; + } reo2sw1; + }; + union { + A_UINT32 entry_status_reo2sw4; + struct { + A_UINT32 + max_num_entries: 16, + curr_num_entries: 16; + } reo2sw4; + }; + union { + A_UINT32 entry_status_refillringipa; + struct { + A_UINT32 + max_num_entries: 16, + curr_num_entries: 16; + } refillringipa; + }; + union { + A_UINT32 entry_status_refillringhost; + struct { + A_UINT32 + max_num_entries: 16, + curr_num_entries: 16; + } refillringhost; + }; /** datarate - Moving Average of Number of Entries */ A_UINT32 datarate_refillringipa; A_UINT32 datarate_refillringhost; @@ -6457,6 +6711,9 @@ typedef htt_stats_ring_if_tlv htt_ring_if_stats_tlv; #define HTT_RING_IF_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_RING_IF_CMN_MAC_ID_M) >> \ HTT_RING_IF_CMN_MAC_ID_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RING_IF_CMN_MAC_ID_GET(_var) \ + HTT_RING_IF_CMN_MAC_ID_GET(_var) #define HTT_RING_IF_CMN_MAC_ID_SET(_var, _val) \ do { \ @@ -6543,7 +6800,9 @@ typedef htt_stats_sfm_client_tlv htt_sfm_client_tlv; #define HTT_SFM_CMN_MAC_ID_GET(_var) \ (((_var) & HTT_SFM_CMN_MAC_ID_M) >> \ HTT_SFM_CMN_MAC_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SFM_CMN_MAC_ID_GET(_var) \ + HTT_SFM_CMN_MAC_ID_GET(_var) #define HTT_SFM_CMN_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SFM_CMN_MAC_ID, _val); \ @@ -6622,7 +6881,9 @@ typedef struct { #define HTT_SRING_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_SRING_STATS_MAC_ID_M) >> \ HTT_SRING_STATS_MAC_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_MAC_ID_GET(_var) \ + HTT_SRING_STATS_MAC_ID_GET(_var) #define HTT_SRING_STATS_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_MAC_ID, _val); \ @@ -6632,7 +6893,9 @@ typedef struct { #define HTT_SRING_STATS_RING_ID_GET(_var) \ (((_var) & HTT_SRING_STATS_RING_ID_M) >> \ HTT_SRING_STATS_RING_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_RING_ID_GET(_var) \ + HTT_SRING_STATS_RING_ID_GET(_var) #define HTT_SRING_STATS_RING_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_RING_ID, _val); \ @@ -6642,7 +6905,9 @@ typedef struct { #define HTT_SRING_STATS_ARENA_GET(_var) \ (((_var) & HTT_SRING_STATS_ARENA_M) >> \ HTT_SRING_STATS_ARENA_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_ARENA_GET(_var) \ + HTT_SRING_STATS_ARENA_GET(_var) #define HTT_SRING_STATS_ARENA_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_ARENA, _val); \ @@ -6652,7 +6917,9 @@ typedef struct { #define HTT_SRING_STATS_EP_TYPE_GET(_var) \ (((_var) & HTT_SRING_STATS_EP_TYPE_M) >> \ HTT_SRING_STATS_EP_TYPE_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_EP_GET(_var) \ + HTT_SRING_STATS_EP_TYPE_GET(_var) #define HTT_SRING_STATS_EP_TYPE_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_EP_TYPE, _val); \ @@ -6669,7 +6936,9 @@ typedef struct { #define HTT_SRING_STATS_NUM_AVAIL_WORDS_GET(_var) \ (((_var) & HTT_SRING_STATS_NUM_AVAIL_WORDS_M) >> \ HTT_SRING_STATS_NUM_AVAIL_WORDS_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_NUM_AVAIL_WORDS_GET(_var) \ + HTT_SRING_STATS_NUM_AVAIL_WORDS_GET(_var) #define HTT_SRING_STATS_NUM_AVAIL_WORDS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_NUM_AVAIL_WORDS, _val); \ @@ -6679,7 +6948,9 @@ typedef struct { #define HTT_SRING_STATS_NUM_VALID_WORDS_GET(_var) \ (((_var) & HTT_SRING_STATS_NUM_VALID_WORDS_M) >> \ HTT_SRING_STATS_NUM_VALID_WORDS_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_NUM_VALID_WORDS_GET(_var) \ + HTT_SRING_STATS_NUM_VALID_WORDS_GET(_var) #define HTT_SRING_STATS_NUM_VALID_WORDS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_NUM_VALID_WORDS, _val); \ @@ -6696,7 +6967,9 @@ typedef struct { #define HTT_SRING_STATS_HEAD_PTR_GET(_var) \ (((_var) & HTT_SRING_STATS_HEAD_PTR_M) >> \ HTT_SRING_STATS_HEAD_PTR_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_HEAD_PTR_GET(_var) \ + HTT_SRING_STATS_HEAD_PTR_GET(_var) #define HTT_SRING_STATS_HEAD_PTR_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_HEAD_PTR, _val); \ @@ -6706,7 +6979,9 @@ typedef struct { #define HTT_SRING_STATS_TAIL_PTR_GET(_var) \ (((_var) & HTT_SRING_STATS_TAIL_PTR_M) >> \ HTT_SRING_STATS_TAIL_PTR_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_TAIL_PTR_GET(_var) \ + HTT_SRING_STATS_TAIL_PTR_GET(_var) #define HTT_SRING_STATS_TAIL_PTR_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_TAIL_PTR, _val); \ @@ -6723,7 +6998,9 @@ typedef struct { #define HTT_SRING_STATS_CONSUMER_EMPTY_GET(_var) \ (((_var) & HTT_SRING_STATS_CONSUMER_EMPTY_M) >> \ HTT_SRING_STATS_CONSUMER_EMPTY_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_CONSUMER_EMPTY_GET(_var) \ + HTT_SRING_STATS_CONSUMER_EMPTY_GET(_var) #define HTT_SRING_STATS_CONSUMER_EMPTY_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_CONSUMER_EMPTY, _val); \ @@ -6733,7 +7010,9 @@ typedef struct { #define HTT_SRING_STATS_PRODUCER_FULL_GET(_var) \ (((_var) & HTT_SRING_STATS_PRODUCER_FULL_M) >> \ HTT_SRING_STATS_PRODUCER_FULL_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_PRODUCER_FULL_GET(_var) \ + HTT_SRING_STATS_PRODUCER_FULL_GET(_var) #define HTT_SRING_STATS_PRODUCER_FULL_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_PRODUCER_FULL, _val); \ @@ -6750,7 +7029,9 @@ typedef struct { #define HTT_SRING_STATS_PREFETCH_COUNT_GET(_var) \ (((_var) & HTT_SRING_STATS_PREFETCH_COUNT_M) >> \ HTT_SRING_STATS_PREFETCH_COUNT_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_PREFETCH_COUNT_GET(_var) \ + HTT_SRING_STATS_PREFETCH_COUNT_GET(_var) #define HTT_SRING_STATS_PREFETCH_COUNT_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_PREFETCH_COUNT, _val); \ @@ -6760,7 +7041,9 @@ typedef struct { #define HTT_SRING_STATS_INTERNAL_TP_GET(_var) \ (((_var) & HTT_SRING_STATS_INTERNAL_TP_M) >> \ HTT_SRING_STATS_INTERNAL_TP_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_SRING_STATS_INTERNAL_TAIL_PTR_GET(_var) \ + HTT_SRING_STATS_INTERNAL_TP_GET(_var) #define HTT_SRING_STATS_INTERNAL_TP_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_SRING_STATS_INTERNAL_TP, _val); \ @@ -7191,6 +7474,11 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_rate_stats_tlv htt_tx_pdev_rate_stats_tlv; +#define HTT_STATS_TX_PDEV_RATE_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_TX_PDEV_RATE_STATS_WIFI_VERSION_GET(word) \ + (((word) >> 8) & 0xf) + typedef struct { htt_tlv_hdr_t tlv_hdr; A_UINT32 vdev_id; /* which vdev produced these per-Nss tx stats */ @@ -7218,6 +7506,11 @@ typedef struct { A_UINT32 be_mu_mimo_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_BE_MCS_COUNTERS]; /** 11BE DL MU MIMO LDPC count */ A_UINT32 be_mu_mimo_tx_ldpc; + /** + * Wi-Fi version identifier to differentiate stats while printing + * (contains enum HTT_RX_TX_PDEV_STATS_WIFI_VERSION value). + */ + A_UINT32 wifi_version; } htt_stats_tx_pdev_be_rate_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_be_rate_stats_tlv htt_tx_pdev_rate_stats_be_tlv; @@ -7323,6 +7616,9 @@ typedef htt_stats_tx_pdev_rate_be_bn_ofdma_tlv typedef htt_stats_tx_pdev_rate_be_bn_ofdma_tlv htt_tx_pdev_rate_stats_be_ofdma_tlv; +#define HTT_STATS_TX_PDEV_RATE_BE_BN_OFDMA_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; /** tx_ppdu_dur_hist: @@ -7369,6 +7665,9 @@ typedef struct { #define HTT_TX_PDEV_BN_RATE_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_TX_PDEV_BN_RATE_STATS_MAC_ID_M) >> \ HTT_TX_PDEV_BN_RATE_STATS_MAC_ID_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_PDEV_BN_RATE_MAC_ID_GET(_var) \ + HTT_TX_PDEV_BN_RATE_STATS_MAC_ID_GET(_var) #define HTT_TX_PDEV_BN_RATE_STATS_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_PDEV_BN_RATE_STATS_MAC_ID, _val); \ @@ -7380,6 +7679,9 @@ typedef struct { #define HTT_TX_PDEV_BN_RATE_STATS_WIFI_VERSION_GET(_var) \ (((_var) & HTT_TX_PDEV_BN_RATE_STATS_WIFI_VERSION_M) >> \ HTT_TX_PDEV_BN_RATE_STATS_WIFI_VERSION_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_PDEV_BN_RATE_WIFI_VERSION_GET(_var) \ + HTT_TX_PDEV_BN_RATE_STATS_WIFI_VERSION_GET(_var) #define HTT_TX_PDEV_BN_RATE_STATS_WIFI_VERSION_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_TX_PDEV_BN_RATE_STATS_WIFI_VERSION, _val); \ @@ -7414,7 +7716,6 @@ typedef struct { A_UINT32 tx_11bn_su_elr; } htt_stats_tx_pdev_bn_rate_tlv; - /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_TX_RATE * TLV_TAGS: * - HTT_STATS_TX_PDEV_RATE_STATS_TAG @@ -7696,6 +7997,9 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_rx_pdev_rate_stats_tlv htt_rx_pdev_rate_stats_tlv; +#define HTT_STATS_RX_PDEV_RATE_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; /** Tx PPDU duration histogram **/ @@ -7745,6 +8049,9 @@ typedef struct { #define HTT_RX_EXT_PDEV_RATE_STATS_WIFI_VERSION_GET(_var) \ (((_var) & HTT_RX_EXT_PDEV_RATE_STATS_WIFI_VERSION_M) >> \ HTT_RX_EXT_PDEV_RATE_STATS_WIFI_VERSION_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RX_PDEV_RATE_EXT_STATS_WIFI_VERSION_GET(_var) \ + HTT_RX_EXT_PDEV_RATE_STATS_WIFI_VERSION_GET(_var) #define HTT_RX_EXT_PDEV_RATE_STATS_WIFI_VERSION_SET(_var, _val) \ do { \ @@ -7920,6 +8227,9 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_rx_pdev_ul_trig_stats_tlv htt_rx_pdev_ul_trigger_stats_tlv; +#define HTT_STATS_RX_PDEV_UL_TRIG_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_UL_TRIG_STATS * TLV_TAGS: * - HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG @@ -8063,6 +8373,9 @@ typedef htt_stats_rx_pdev_be_bn_ul_trig_tlv typedef htt_stats_rx_pdev_be_bn_ul_trig_tlv htt_rx_pdev_be_ul_trigger_stats_tlv; +#define HTT_STATS_RX_PDEV_BE_BN_UL_TRIG_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_UL_TRIG_STATS * TLV_TAGS: * - HTT_STATS_RX_PDEV_BE_BN_UL_TRIG_TAG @@ -8248,6 +8561,9 @@ typedef struct { typedef htt_stats_rx_pdev_ul_mumimo_trig_stats_tlv htt_rx_pdev_ul_mumimo_trig_stats_tlv; +#define HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -8310,6 +8626,9 @@ typedef struct { typedef htt_stats_rx_pdev_ul_mumimo_trig_be_stats_tlv htt_rx_pdev_ul_mumimo_trig_be_stats_tlv; +#define HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_BE_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -8368,6 +8687,8 @@ typedef struct { A_UINT32 bn_ul_mumimo_basic_trigger_rx_qos_null_only; } htt_stats_rx_pdev_ul_mumimo_trig_bn_tlv; +#define HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_BN_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_UL_MUMIMO_TRIG_STATS * TLV_TAGS: @@ -8563,7 +8884,9 @@ typedef struct { #define HTT_RX_PDEV_FW_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_RX_PDEV_FW_STATS_MAC_ID_M) >> \ HTT_RX_PDEV_FW_STATS_MAC_ID_S) - +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RX_PDEV_FW_STATS_MAC_ID_GET(_var) \ + HTT_RX_PDEV_FW_STATS_MAC_ID_GET(_var) #define HTT_RX_PDEV_FW_STATS_MAC_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_RX_PDEV_FW_STATS_MAC_ID, _val); \ @@ -8777,6 +9100,9 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_rx_pdev_fw_stats_phy_err_tlv htt_rx_pdev_fw_stats_phy_err_tlv; +#define HTT_STATS_RX_PDEV_FW_STATS_PHY_ERR_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) + #define HTT_RX_PDEV_FW_RING_MPDU_ERR_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ @@ -9869,6 +10195,9 @@ typedef enum { #define HTT_PER_RATE_STATS_WIFI_VERSION_GET(_var) \ (((_var) & HTT_PER_RATE_STATS_WIFI_VERSION_M) >> \ HTT_PER_RATE_STATS_WIFI_VERSION_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PER_RATE_STATS_WIFI_VERSION_GET(_var) \ + HTT_PER_RATE_STATS_WIFI_VERSION_GET(_var) #define HTT_PER_RATE_STATS_WIFI_VERSION_SET(_var, _val) \ do { \ @@ -10959,7 +11288,10 @@ typedef struct { 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; +} htt_stats_pdev_ul_mumimo_grp_stats_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_pdev_ul_mumimo_grp_stats_tlv + htt_stats_pdev_ulmumimo_grp_stats_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -10970,7 +11302,10 @@ typedef struct { 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; +} htt_stats_pdev_ul_mumimo_denylist_stats_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_pdev_ul_mumimo_denylist_stats_tlv + htt_stats_pdev_ulmumimo_denylist_stats_tlv; #define HTT_STATS_SEQ_EFFICIENCY_HISTOGRAM 10 typedef struct { @@ -11007,7 +11342,10 @@ typedef struct { * for low traffic classification */ A_UINT32 num_terminate_seq_low_traffic; -} htt_stats_pdev_ulmumimo_seq_term_stats_tlv; +} htt_stats_pdev_ul_mumimo_seq_term_stats_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_pdev_ul_mumimo_seq_term_stats_tlv + htt_stats_pdev_ulmumimo_seq_term_stats_tlv; #define HTT_STATS_MAX_ULMUMIMO_TRIGGERS 6 #define HTT_STATS_TXOP_HISTOGRAM_BINS 24 @@ -11035,7 +11373,10 @@ typedef struct { * Checks for 8 eligible instances of ULMUMIMO in the past 32 instances. */ A_UINT32 history_ineligibility; -} htt_stats_pdev_ulmumimo_hist_ineligibility_tlv; +} htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv + htt_stats_pdev_ulmumimo_hist_ineligibility_tlv; /* RTT VREG MASK */ @@ -11118,6 +11459,9 @@ typedef struct { #define HTT_STATS_TPCCAL_POSTPROC_CHANNEL_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_POSTPROC_CHANNEL_M) >> \ HTT_STATS_TPCCAL_POSTPROC_CHANNEL_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_POSTPROC_CHANNEL_GET(_var) \ + HTT_STATS_TPCCAL_POSTPROC_CHANNEL_GET(_var) #define HTT_STATS_TPCCAL_POSTPROC_CHAIN_M 0x00ff0000 #define HTT_STATS_TPCCAL_POSTPROC_CHAIN_S 16 @@ -11125,6 +11469,9 @@ typedef struct { #define HTT_STATS_TPCCAL_POSTPROC_CHAIN_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_POSTPROC_CHAIN_M) >> \ HTT_STATS_TPCCAL_POSTPROC_CHAIN_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_POSTPROC_CHAIN_GET(_var) \ + HTT_STATS_TPCCAL_POSTPROC_CHAIN_GET(_var) #define HTT_STATS_TPCCAL_POSTPROC_BAND_M 0xff000000 #define HTT_STATS_TPCCAL_POSTPROC_BAND_S 24 @@ -11132,6 +11479,9 @@ typedef struct { #define HTT_STATS_TPCCAL_POSTPROC_BAND_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_POSTPROC_BAND_M) >> \ HTT_STATS_TPCCAL_POSTPROC_BAND_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_POSTPROC_BAND_GET(_var) \ + HTT_STATS_TPCCAL_POSTPROC_BAND_GET(_var) #define HTT_STATS_TPCCAL_POSTPROC_NUMGAIN_M 0x000000ff #define HTT_STATS_TPCCAL_POSTPROC_NUMGAIN_S 0 @@ -11139,6 +11489,9 @@ typedef struct { #define HTT_STATS_TPCCAL_POSTPROC_NUMGAIN_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_POSTPROC_NUMGAIN_M) >> \ HTT_STATS_TPCCAL_POSTPROC_NUMGAIN_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_POSTPROC_NUMGAIN_GET(_var) \ + HTT_STATS_TPCCAL_POSTPROC_NUMGAIN_GET(_var) #define HTT_STATS_TPCCAL_POSTPROC_CALDBSTATUS_M 0x0000ff00 #define HTT_STATS_TPCCAL_POSTPROC_CALDBSTATUS_S 8 @@ -11146,6 +11499,9 @@ typedef struct { #define HTT_STATS_TPCCAL_POSTPROC_CALDBSTATUS_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_POSTPROC_CALDBSTATUS_M) >> \ HTT_STATS_TPCCAL_POSTPROC_CALDBSTATUS_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_POSTPROC_CALDBSTATUS_GET(_var) \ + HTT_STATS_TPCCAL_POSTPROC_CALDBSTATUS_GET(_var) /* STATS_TYPE : HTT_DBG_EXT_PDEV_STATS_FTM_TPCCAL * TLV_TAGS: @@ -11298,6 +11654,23 @@ typedef struct { } tpcTargets; } htt_stats_pdev_ftm_tpccal_tlv; +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_PDADC_TPCCAL_PDADC_NUMGAIN_GET(word) \ + (((word) >> 0) & 0xff) + +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_PDADC_BAND_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_PDADC_CHANNEL_GET(word) \ + (((word) >> 8) & 0xffff) +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_PDADC_CHAIN_GET(word) \ + (((word) >> 24) & 0xff) + +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_TPCCALRESULT_GAINIDX_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_TPCCALRESULT_PDADC_GET(word) \ + (((word) >> 8) & 0xff) + +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_STATS_TPCCALRESULT_MEASPWR_GET(word) \ + (((word) >> 0) & 0xffff) #define HTT_STATS_TPCCAL_PDADC_LAST_IDX_M 0x000000ff #define HTT_STATS_TPCCAL_PDADC_LAST_IDX_S 0 @@ -11305,6 +11678,12 @@ typedef struct { #define HTT_STATS_TPCCAL_PDADC_LAST_IDX_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_PDADC_LAST_IDX_M) >> \ HTT_STATS_TPCCAL_PDADC_LAST_IDX_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_LAST_IDX_GET(_var) \ + HTT_STATS_TPCCAL_PDADC_LAST_IDX_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_EXT_TPCCAL_PDADC_LAST_IDX_GET(_var) \ + HTT_STATS_TPCCAL_PDADC_LAST_IDX_GET(_var) #define HTT_STATS_TPCCAL_PDADC_NUMGAIN_M 0x000000ff #define HTT_STATS_TPCCAL_PDADC_NUMGAIN_S 0 @@ -11326,6 +11705,9 @@ typedef struct { #define HTT_STATS_TPCCAL_PDADC_CHANNEL_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_PDADC_CHANNEL_M) >> \ HTT_STATS_TPCCAL_PDADC_CHANNEL_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_CHANNEL_GET(_var) \ + HTT_STATS_TPCCAL_PDADC_CHANNEL_GET(_var) #define HTT_STATS_TPCCAL_PDADC_CHAIN_M 0xff000000 #define HTT_STATS_TPCCAL_PDADC_CHAIN_S 24 @@ -11333,6 +11715,9 @@ typedef struct { #define HTT_STATS_TPCCAL_PDADC_CHAIN_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_PDADC_CHAIN_M) >> \ HTT_STATS_TPCCAL_PDADC_CHAIN_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_CHAIN_GET(_var) \ + HTT_STATS_TPCCAL_PDADC_CHAIN_GET(_var) #define HTT_STATS_TPCCAL_RES_PDADC_GAINIDX_M 0x000000ff #define HTT_STATS_TPCCAL_RES_PDADC_GAINIDX_S 0 @@ -11340,6 +11725,9 @@ typedef struct { #define HTT_STATS_TPCCAL_RES_PDADC_GAINIDX_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_RES_PDADC_GAINIDX_M) >> \ HTT_STATS_TPCCAL_RES_PDADC_GAINIDX_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_GAININDEX_GET(_var) \ + HTT_STATS_TPCCAL_RES_PDADC_GAINIDX_GET(_var) #define HTT_STATS_TPCCAL_RES_PDADC_VAL_M 0x0000ff00 #define HTT_STATS_TPCCAL_RES_PDADC_VAL_S 8 @@ -11347,6 +11735,9 @@ typedef struct { #define HTT_STATS_TPCCAL_RES_PDADC_VAL_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_RES_PDADC_VAL_M) >> \ HTT_STATS_TPCCAL_RES_PDADC_VAL_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_PDADC_GET(_var) \ + HTT_STATS_TPCCAL_RES_PDADC_VAL_GET(_var) #define HTT_STATS_TPCCAL_RES_PDADC_MEASPWR_M 0x0000ffff #define HTT_STATS_TPCCAL_RES_PDADC_MEASPWR_S 0 @@ -11354,6 +11745,10 @@ typedef struct { #define HTT_STATS_TPCCAL_RES_PDADC_MEASPWR_GET(_var) \ (((_var) & HTT_STATS_TPCCAL_RES_PDADC_MEASPWR_M) >> \ HTT_STATS_TPCCAL_RES_PDADC_MEASPWR_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_FTM_TPCCAL_TPCCAL_STATS_MEASPWR_GET(_var) \ + HTT_STATS_TPCCAL_RES_PDADC_MEASPWR_GET(_var) + #define HTT_STATS_TPC_CAL_PDADC_BUF_LEN 3 @@ -11829,6 +12224,9 @@ typedef htt_stats_phy_counters_tlv htt_phy_counters_tlv; #define HTT_STATS_ANI_MODE_GET(_var) \ (((_var) & HTT_STATS_ANI_MODE_M) >> \ HTT_STATS_ANI_MODE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_STATS_ANI_MODE_GET(_var) \ + HTT_STATS_ANI_MODE_GET(_var) #define HTT_STATS_ANI_MODE_SET(_var, _val) \ do { \ @@ -11842,6 +12240,9 @@ typedef htt_stats_phy_counters_tlv htt_phy_counters_tlv; #define HTT_STATS_CURR_EANI_MODE_GET(_var) \ (((_var) & HTT_STATS_CURR_EANI_MODE_M) >> \ HTT_STATS_CURR_EANI_MODE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_STATS_CUREANIMODE_GET(_var) \ + HTT_STATS_CURR_EANI_MODE_GET(_var) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -11953,156 +12354,219 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; #define HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED_M) >> \ HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_CALDATA_COMPRESSED_GET(_var) \ + HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED_GET(_var) #define HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_CAL_DATA_COMPRESSED_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_M 0x00000006 #define HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_S 1 #define HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_M) >> \ HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_CALDATASOURCE_GET(_var) \ + HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_GET(_var) #define HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_CAL_DATA_SOURCE, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_CAL_DATA_SOURCE_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_XTALCAL_M 0x00000008 #define HTT_STATS_PHY_RESET_XTALCAL_S 3 #define HTT_STATS_PHY_RESET_XTALCAL_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_XTALCAL_M) >> \ HTT_STATS_PHY_RESET_XTALCAL_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_XTALCAL_GET(_var) \ + HTT_STATS_PHY_RESET_XTALCAL_GET(_var) #define HTT_STATS_PHY_RESET_XTALCAL_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_XTALCAL, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_XTALCAL_S)); \ } while (0) -#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_M 0x00000010 -#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_S 4 -#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_GET(_var) \ - (((_var) & HTT_STATS_PHY_RESET_TPCCAL2GOPC_M) >> \ - HTT_STATS_PHY_RESET_TPCCAL2GOPC_S) -#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_SET(_var, _val) \ - do { \ - HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL2GOPC, _val); \ - ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL2GOPC_S)); \ - } while (0) -#define HTT_STATS_PHY_RESET_TPCCAL2GFPC_M 0x00000020 -#define HTT_STATS_PHY_RESET_TPCCAL2GFPC_S 5 + +#define HTT_STATS_PHY_RESET_TPCCAL2GFPC_M 0x00000010 +#define HTT_STATS_PHY_RESET_TPCCAL2GFPC_S 4 #define HTT_STATS_PHY_RESET_TPCCAL2GFPC_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_TPCCAL2GFPC_M) >> \ HTT_STATS_PHY_RESET_TPCCAL2GFPC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_TPCCAL2GFPC_GET(_var) \ + HTT_STATS_PHY_RESET_TPCCAL2GFPC_GET(_var) #define HTT_STATS_PHY_RESET_TPCCAL2GFPC_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL2GFPC, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL2GFPC_S)); \ } while (0) -#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_M 0x00000040 -#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_S 6 -#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_GET(_var) \ - (((_var) & HTT_STATS_PHY_RESET_TPCCAL5GOPC_M) >> \ - HTT_STATS_PHY_RESET_TPCCAL5GOPC_S) -#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_SET(_var, _val) \ + +#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_M 0x00000020 +#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_S 5 +#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_GET(_var) \ + (((_var) & HTT_STATS_PHY_RESET_TPCCAL2GOPC_M) >> \ + HTT_STATS_PHY_RESET_TPCCAL2GOPC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_TPCCAL2GOPC_GET(_var) \ + HTT_STATS_PHY_RESET_TPCCAL2GOPC_GET(_var) +#define HTT_STATS_PHY_RESET_TPCCAL2GOPC_SET(_var, _val) \ do { \ - HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL5GOPC, _val); \ - ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL5GOPC_S)); \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL2GOPC, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL2GOPC_S)); \ } while (0) -#define HTT_STATS_PHY_RESET_TPCCAL5GFPC_M 0x00000080 -#define HTT_STATS_PHY_RESET_TPCCAL5GFPC_S 7 + +#define HTT_STATS_PHY_RESET_TPCCAL5GFPC_M 0x00000040 +#define HTT_STATS_PHY_RESET_TPCCAL5GFPC_S 6 #define HTT_STATS_PHY_RESET_TPCCAL5GFPC_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_TPCCAL5GFPC_M) >> \ HTT_STATS_PHY_RESET_TPCCAL5GFPC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_TPCCAL5GFPC_GET(_var) \ + HTT_STATS_PHY_RESET_TPCCAL5GFPC_GET(_var) #define HTT_STATS_PHY_RESET_TPCCAL5GFPC_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL5GFPC, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL5GFPC_S)); \ } while (0) -#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_M 0x00000100 -#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_S 8 -#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_GET(_var) \ - (((_var) & HTT_STATS_PHY_RESET_TPCCAL6GOPC_M) >> \ - HTT_STATS_PHY_RESET_TPCCAL6GOPC_S) -#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_SET(_var, _val) \ + +#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_M 0x00000080 +#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_S 7 +#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_GET(_var) \ + (((_var) & HTT_STATS_PHY_RESET_TPCCAL5GOPC_M) >> \ + HTT_STATS_PHY_RESET_TPCCAL5GOPC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_TPCCAL5GOPC_GET(_var) \ + HTT_STATS_PHY_RESET_TPCCAL5GOPC_GET(_var) +#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_SET(_var, _val) \ do { \ - HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL6GOPC, _val); \ - ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL6GOPC_S)); \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL5GOPC, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL5GOPC_S)); \ } while (0) -#define HTT_STATS_PHY_RESET_TPCCAL6GFPC_M 0x00000200 -#define HTT_STATS_PHY_RESET_TPCCAL6GFPC_S 9 + +#define HTT_STATS_PHY_RESET_TPCCAL6GFPC_M 0x00000100 +#define HTT_STATS_PHY_RESET_TPCCAL6GFPC_S 8 #define HTT_STATS_PHY_RESET_TPCCAL6GFPC_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_TPCCAL6GFPC_M) >> \ HTT_STATS_PHY_RESET_TPCCAL6GFPC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_TPCCAL6GFPC_GET(_var) \ + HTT_STATS_PHY_RESET_TPCCAL6GFPC_GET(_var) #define HTT_STATS_PHY_RESET_TPCCAL6GFPC_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL6GFPC, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL6GFPC_S)); \ } while (0) + +#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_M 0x00000200 +#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_S 9 +#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_GET(_var) \ + (((_var) & HTT_STATS_PHY_RESET_TPCCAL6GOPC_M) >> \ + HTT_STATS_PHY_RESET_TPCCAL6GOPC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_TPCCAL6GOPC_GET(_var) \ + HTT_STATS_PHY_RESET_TPCCAL6GOPC_GET(_var) +#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_TPCCAL6GOPC, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL6GOPC_S)); \ + } while (0) + #define HTT_STATS_PHY_RESET_RXGAINCAL2G_M 0x00000400 #define HTT_STATS_PHY_RESET_RXGAINCAL2G_S 10 #define HTT_STATS_PHY_RESET_RXGAINCAL2G_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_RXGAINCAL2G_M) >> \ HTT_STATS_PHY_RESET_RXGAINCAL2G_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_RXGAINCAL2G_GET(_var) \ + HTT_STATS_PHY_RESET_RXGAINCAL2G_GET(_var) #define HTT_STATS_PHY_RESET_RXGAINCAL2G_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_RXGAINCAL2G, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_RXGAINCAL2G_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_RXGAINCAL5G_M 0x00000800 #define HTT_STATS_PHY_RESET_RXGAINCAL5G_S 11 #define HTT_STATS_PHY_RESET_RXGAINCAL5G_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_RXGAINCAL5G_M) >> \ HTT_STATS_PHY_RESET_RXGAINCAL5G_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_RXGAINCAL5G_GET(_var) \ + HTT_STATS_PHY_RESET_RXGAINCAL5G_GET(_var) #define HTT_STATS_PHY_RESET_RXGAINCAL5G_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_RXGAINCAL5G, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_RXGAINCAL5G_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_RXGAINCAL6G_M 0x00001000 #define HTT_STATS_PHY_RESET_RXGAINCAL6G_S 12 #define HTT_STATS_PHY_RESET_RXGAINCAL6G_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_RXGAINCAL6G_M) >> \ HTT_STATS_PHY_RESET_RXGAINCAL6G_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_RXGAINCAL6G_GET(_var) \ + HTT_STATS_PHY_RESET_RXGAINCAL6G_GET(_var) #define HTT_STATS_PHY_RESET_RXGAINCAL6G_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_RXGAINCAL6G, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_RXGAINCAL6G_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_AOACAL2G_M 0x00002000 #define HTT_STATS_PHY_RESET_AOACAL2G_S 13 #define HTT_STATS_PHY_RESET_AOACAL2G_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_AOACAL2G_M) >> \ HTT_STATS_PHY_RESET_AOACAL2G_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_AOACAL2G_GET(_var) \ + HTT_STATS_PHY_RESET_AOACAL2G_GET(_var) #define HTT_STATS_PHY_RESET_AOACAL2G_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_AOACAL2G, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_AOACAL2G_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_AOACAL5G_M 0x00004000 #define HTT_STATS_PHY_RESET_AOACAL5G_S 14 #define HTT_STATS_PHY_RESET_AOACAL5G_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_AOACAL5G_M) >> \ HTT_STATS_PHY_RESET_AOACAL5G_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_AOACAL5G_GET(_var) \ + HTT_STATS_PHY_RESET_AOACAL5G_GET(_var) #define HTT_STATS_PHY_RESET_AOACAL5G_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_AOACAL5G, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_AOACAL5G_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_AOACAL6G_M 0x00008000 #define HTT_STATS_PHY_RESET_AOACAL6G_S 15 #define HTT_STATS_PHY_RESET_AOACAL6G_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_AOACAL6G_M) >> \ HTT_STATS_PHY_RESET_AOACAL6G_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_AOACAL6G_GET(_var) \ + HTT_STATS_PHY_RESET_AOACAL6G_GET(_var) #define HTT_STATS_PHY_RESET_AOACAL6G_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_AOACAL6G, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_AOACAL6G_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_XTAL_FROM_OTP_M 0x00010000 #define HTT_STATS_PHY_RESET_XTAL_FROM_OTP_S 16 #define HTT_STATS_PHY_RESET_XTAL_FROM_OTP_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_XTAL_FROM_OTP_M) >> \ HTT_STATS_PHY_RESET_XTAL_FROM_OTP_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_XTAL_FROM_OTP_GET(_var) \ + HTT_STATS_PHY_RESET_XTAL_FROM_OTP_GET(_var) #define HTT_STATS_PHY_RESET_XTAL_FROM_OTP_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_XTAL_FROM_OTP, _val); \ @@ -12114,26 +12578,37 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; #define HTT_STATS_PHY_RESET_GLUT_LINEARITY_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_GLUT_LINEARITY_M) >> \ HTT_STATS_PHY_RESET_GLUT_LINEARITY_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_GLUT_LINEARITY_GET(_var) \ + HTT_STATS_PHY_RESET_GLUT_LINEARITY_GET(_var) #define HTT_STATS_PHY_RESET_GLUT_LINEARITY_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_GLUT_LINEARITY, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_GLUT_LINEARITY_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_PLUT_LINEARITY_M 0x0000FF00 #define HTT_STATS_PHY_RESET_PLUT_LINEARITY_S 8 #define HTT_STATS_PHY_RESET_PLUT_LINEARITY_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_PLUT_LINEARITY_M) >> \ HTT_STATS_PHY_RESET_PLUT_LINEARITY_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_PLUT_LINEARITY_GET(_var) \ + HTT_STATS_PHY_RESET_PLUT_LINEARITY_GET(_var) #define HTT_STATS_PHY_RESET_PLUT_LINEARITY_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_PLUT_LINEARITY, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_PLUT_LINEARITY_S)); \ } while (0) + #define HTT_STATS_PHY_RESET_WLANDRIVERMODE_M 0x00FF0000 #define HTT_STATS_PHY_RESET_WLANDRIVERMODE_S 16 #define HTT_STATS_PHY_RESET_WLANDRIVERMODE_GET(_var) \ (((_var) & HTT_STATS_PHY_RESET_WLANDRIVERMODE_M) >> \ HTT_STATS_PHY_RESET_WLANDRIVERMODE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_RESET_STATS_WLANDRIVERMODE_GET(_var) \ + HTT_STATS_PHY_RESET_WLANDRIVERMODE_GET(_var) #define HTT_STATS_PHY_RESET_WLANDRIVERMODE_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_PHY_RESET_WLANDRIVERMODE, _val); \ @@ -12653,6 +13128,11 @@ typedef struct { A_UINT32 power_boost_gain[HTT_TX_PDEV_STATS_NUM_BE_BW_COUNTERS][HTT_TX_PDEV_STATS_NUM_BE_MCS_COUNTERS]; } htt_stats_phy_paprd_pb_tlv; +#define HTT_STATS_PHY_PAPRD_PB_IS_DPD_VALID_GET(word) \ + (((word) >> 0) & 0x1) + +#define HTT_STATS_PHY_PAPRD_PB_IS_PB_VALID_GET(word) \ + (((word) >> 1) & 0x1) #define HTT_STATS_HDS_PROF_STATS_CIRCULAR_BUF_LEN 10 @@ -12691,31 +13171,49 @@ typedef struct { #define HTT_STATS_HDS_PROF_BANDWIDTH_MHZ_GET(word) \ ((word) & 0x0000ffff) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_HDS_PROF_STATS_CHANNELCHANGE_STATS_BANDWIDTH_MHZ_GET(word) \ + HTT_STATS_HDS_PROF_BANDWIDTH_MHZ_GET(word) #define HTT_STATS_HDS_PROF_BANDWIDTH_MHZ_SET(word, value) \ ((word) |= ((value) & 0x0000ffff)) #define HTT_STATS_HDS_PROF_BAND_CENTER_FREQ1_GET(word) \ (((word) & 0xffff0000) >> 16) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_HDS_PROF_STATS_CHANNELCHANGE_STATS_BAND_CENTER_FREQ1_GET(word) \ + HTT_STATS_HDS_PROF_BAND_CENTER_FREQ1_GET(word) #define HTT_STATS_HDS_PROF_BAND_CENTER_FREQ1_SET(word, value) \ ((word) |= (((value) << 16) & 0xffff0000)) #define HTT_STATS_HDS_PROF_PHY_MODE_GET(word) \ (((word) & 0x000000ff) >> 0) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_HDS_PROF_STATS_CHANNELCHANGE_STATS_PHYMODE_GET(word) \ + HTT_STATS_HDS_PROF_PHY_MODE_GET(word) #define HTT_STATS_HDS_PROF_PHY_MODE_SET(word, value) \ ((word) |= (((value) << 0) & 0x000000ff)) #define HTT_STATS_HDS_PROF_TX_CHAINMASK_GET(word) \ (((word) & 0x0000ff00) >> 8) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_HDS_PROF_STATS_CHANNELCHANGE_STATS_TXCHAINMASK_GET(word) \ + HTT_STATS_HDS_PROF_TX_CHAINMASK_GET(word) #define HTT_STATS_HDS_PROF_TX_CHAINMASK_SET(word, value) \ ((word) |= (((value) << 8) & 0x0000ff00)) #define HTT_STATS_HDS_PROF_RX_CHAINMASK_GET(word) \ (((word) & 0x00ff0000) >> 16) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_HDS_PROF_STATS_CHANNELCHANGE_STATS_RXCHAINMASK_GET(word) \ + HTT_STATS_HDS_PROF_RX_CHAINMASK_GET(word) #define HTT_STATS_HDS_PROF_RX_CHAINMASK_SET(word, value) \ ((word) |= (((value) << 16) & 0x00ff0000)) #define HTT_STATS_HDS_PROF_SW_PROFILE_GET(word) \ (((word) & 0xff000000) >> 24) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_HDS_PROF_STATS_CHANNELCHANGE_STATS_SWPROFILE_GET(word) \ + HTT_STATS_HDS_PROF_SW_PROFILE_GET(word) #define HTT_STATS_HDS_PROF_SW_PROFILE_SET(word, value) \ ((word) |= (((value) << 24) & 0xff000000)) @@ -12807,122 +13305,194 @@ typedef struct { #define HTT_STATS_OPT_CONF_GET_DYN_CCA(word) \ (((word) & 0x1) >> 0) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_DYN_CCA_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_DYN_CCA(word) #define HTT_STATS_OPT_CONF_SET_DYN_CCA(word, value) \ ((word) = ((word) & ~0x1) | (((value) & 0x1) << 0)) #define HTT_STATS_OPT_CONF_GET_LPI(word) \ (((word) & 0x2) >> 1) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_LPI_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_LPI(word) #define HTT_STATS_OPT_CONF_SET_LPI(word, value) \ ((word) = ((word) & ~0x2) | (((value) & 0x1) << 1)) #define HTT_STATS_OPT_CONF_GET_GTX(word) \ (((word) & 0x4) >> 2) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_GTX_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_GTX(word) #define HTT_STATS_OPT_CONF_SET_GTX(word, value) \ ((word) = ((word) & ~0x4) | (((value) & 0x1) << 2)) #define HTT_STATS_OPT_CONF_GET_ANI(word) \ (((word) & 0x8) >> 3) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_ANI_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_ANI(word) #define HTT_STATS_OPT_CONF_SET_ANI(word, value) \ ((word) = ((word) & ~0x8) | (((value) & 0x1) << 3)) #define HTT_STATS_OPT_CONF_GET_STATIC_ANI(word) \ (((word) & 0x10) >> 4) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_STATIC_ANI_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_STATIC_ANI(word) #define HTT_STATS_OPT_CONF_SET_STATIC_ANI(word, value) \ ((word) = ((word) & ~0x10) | (((value) & 0x1) << 4)) #define HTT_STATS_OPT_CONF_GET_ANN_PBT(word) \ (((word) & 0x20) >> 5) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_ANN_PBT_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_ANN_PBT(word) #define HTT_STATS_OPT_CONF_SET_ANN_PBT(word, value) \ ((word) = ((word) & ~0x20) | (((value) & 0x1) << 5)) #define HTT_STATS_OPT_CONF_GET_EANI(word) \ (((word) & 0x40) >> 6) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_E_ANI_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_EANI(word) #define HTT_STATS_OPT_CONF_SET_EANI(word, value) \ ((word) = ((word) & ~0x40) | (((value) & 0x1) << 6)) #define HTT_STATS_OPT_CONF_GET_SPUR_MIT(word) \ (((word) & 0x80) >> 7) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_SPUR_MIT_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_SPUR_MIT(word) #define HTT_STATS_OPT_CONF_SET_SPUR_MIT(word, value) \ ((word) = ((word) & ~0x80) | (((value) & 0x1) << 7)) #define HTT_STATS_OPT_CONF_GET_MULTIGAIN_RSSI(word) \ (((word) & 0x100) >> 8) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_MULTIGAIN_RSSI_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_MULTIGAIN_RSSI(word) #define HTT_STATS_OPT_CONF_SET_MULTIGAIN_RSSI(word, value) \ ((word) = ((word) & ~0x100) | (((value) & 0x1) << 8)) #define HTT_STATS_OPT_CONF_GET_OLPC_CLPC(word) \ (((word) & 0x200) >> 9) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_OLPC_CLPC_GET(word) \ + HTT_STATS_OPT_CONF_GET_OLPC_CLPC(word) #define HTT_STATS_OPT_CONF_SET_OLPC_CLPC(word, value) \ ((word) = ((word) & ~0x200) | (((value) & 0x1) << 9)) #define HTT_STATS_OPT_CONF_GET_ABI_EN_DIS(word) \ (((word) & 0x400) >> 10) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_ABI_EN_DIS_GET(word) \ + HTT_STATS_OPT_CONF_GET_ABI_EN_DIS(word) #define HTT_STATS_OPT_CONF_SET_ABI_EN_DIS(word, value) \ ((word) = ((word) & ~0x400) | (((value) & 0x1) << 10)) #define HTT_STATS_OPT_CONF_GET_STR_SIG_REC(word) \ (((word) & 0x800) >> 11) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_STR_SIG_REC_GET(word) \ + HTT_STATS_OPT_CONF_GET_STR_SIG_REC(word) #define HTT_STATS_OPT_CONF_SET_STR_SIG_REC(word, value) \ ((word) = ((word) & ~0x800) | (((value) & 0x1) << 11)) #define HTT_STATS_OPT_CONF_GET_VERBOSE(word) \ (((word) & 0x1000) >> 12) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_VERBOSE_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_VERBOSE(word) #define HTT_STATS_OPT_CONF_SET_VERBOSE(word, value) \ ((word) = ((word) & ~0x1000) | (((value) & 0x1) << 12)) #define HTT_STATS_OPT_CONF_GET_DYN_ANT_SEL(word) \ (((word) & 0x2000) >> 13) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_DYN_ANT_SEL_SUPPORTED_GET(word) \ + HTT_STATS_OPT_CONF_GET_DYN_ANT_SEL(word) #define HTT_STATS_OPT_CONF_SET_DYN_ANT_SEL(word, value) \ ((word) = ((word) & ~0x2000) | (((value) & 0x1) << 13)) #define HTT_STATS_OPT_CONF_GET_DFS_PUNC(word) \ (((word) & 0x4000) >> 14) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_DFS_PUNC_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_DFS_PUNC(word) #define HTT_STATS_OPT_CONF_SET_DFS_PUNC(word, value) \ ((word) = ((word) & ~0x4000) | (((value) & 0x1) << 14)) #define HTT_STATS_OPT_CONF_GET_DPD_POW_BO(word) \ (((word) & 0x8000) >> 15) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_DPD_POW_BO_STATUS_GET(word) \ + HTT_STATS_OPT_CONF_GET_DPD_POW_BO(word) #define HTT_STATS_OPT_CONF_SET_DPD_POW_BO(word, value) \ ((word) = ((word) & ~0x8000) | (((value) & 0x1) << 15)) #define HTT_STATS_OPT_CONF_GET_EEPROM_COMPRESSED(word) \ (((word) & 0x10000) >> 16) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_EEPROM_COMPRESSED_GET(word) \ + HTT_STATS_OPT_CONF_GET_EEPROM_COMPRESSED(word) #define HTT_STATS_OPT_CONF_SET_EEPROM_COMPRESSED(word, value) \ ((word) = ((word) & ~0x10000) | (((value) & 0x1) << 16)) #define HTT_STATS_OPT_CONF_GET_RXSOP_ENABLED(word) \ (((word) & 0x1) >> 0) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_RXSOP_ENABLED_GET(word) \ + HTT_STATS_OPT_CONF_GET_RXSOP_ENABLED(word) #define HTT_STATS_OPT_CONF_SET_RXSOP_ENABLED(word, value) \ ((word) = ((word) & ~0x1) | (((value) & 0x1) << 0)) #define HTT_STATS_OPT_CONF_GET_RXSOP_CONFIG_VALUE(word) \ (((word) & 0x1FE) >> 1) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_RXSOP_CONFIG_VALUE_GET(word) \ + HTT_STATS_OPT_CONF_GET_RXSOP_CONFIG_VALUE(word) #define HTT_STATS_OPT_CONF_SET_RXSOP_CONFIG_VALUE(word, value) \ ((word) = ((word) & ~0x1FE) | (((value) & 0xFF) << 1)) #define HTT_STATS_OPT_CONF_GET_HC_PREMCS(word) \ ((word) & 0xFFFF) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_HC_PREMCS_GET(word) \ + HTT_STATS_OPT_CONF_GET_HC_PREMCS(word) #define HTT_STATS_OPT_CONF_SET_HC_PREMCS(word, value) \ ((word) = ((value) & 0xFFFF)) #define HTT_STATS_OPT_CONF_GET_HC_PKT_TYPE(word) \ (((word) & 0xFFFF0000) >> 16) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_HC_PKT_TYPE_GET(word) \ + HTT_STATS_OPT_CONF_GET_HC_PKT_TYPE(word) #define HTT_STATS_OPT_CONF_SET_HC_PKT_TYPE(word, value) \ ((word) = ((word) & ~0xFFFF0000) | (((value) & 0xFFFF) << 16)) #define HTT_STATS_OPT_CONF_GET_HC_NSS_THR(word) \ (((word) & 0x000000FF) >> 0) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_HC_NSS_THR_GET(word) \ + HTT_STATS_OPT_CONF_GET_HC_NSS_THR(word) #define HTT_STATS_OPT_CONF_SET_HC_NSS_THR(word, value) \ ((word) = ((word) & ~0x000000FF) | (((value) & 0xFF) << 0)) #define HTT_STATS_OPT_CONF_GET_IS_RX_GAIN_FORCED(word) \ (((word) & 0x0000FF00) >> 8) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_IS_RX_GAIN_FORCED_GET(word) \ + HTT_STATS_OPT_CONF_GET_IS_RX_GAIN_FORCED(word) #define HTT_STATS_OPT_CONF_SET_IS_RX_GAIN_FORCED(word, value) \ ((word) = ((word) & ~0x0000FF00) | (((value) & 0xFF) << 8)) #define HTT_STATS_OPT_CONF_GET_RX_GAIN_FORCED_VAL(word) \ (((word) & 0x00FF0000) >> 16) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_OPTIONAL_CONFIGS_RX_GAIN_FORCED_VAL_GET(word) \ + HTT_STATS_OPT_CONF_GET_RX_GAIN_FORCED_VAL(word) #define HTT_STATS_OPT_CONF_SET_RX_GAIN_FORCED_VAL(word, value) \ ((word) = ((word) & ~0x00FF0000) | (((value) & 0xFF) << 16)) @@ -13226,6 +13796,52 @@ typedef struct { A_UINT32 bdReadRsp; } htt_stats_ftm_tlv; +#define HTT_STATS_FTM_TX_PARAMS_XTALCAL_GAIN_IDX_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_FTM_TX_PARAMS_INFINITE_BURSTING_MODE_GET(word) \ + (((word) >> 8) & 0xff) +#define HTT_STATS_FTM_TX_PARAMS_FTM_MODE_GET(word) \ + (((word) >> 16) & 0xff) +#define HTT_STATS_FTM_TX_PARAMS_SIFS_US_GET(word) \ + (((word) >> 24) & 0xff) + +#define HTT_STATS_FTM_TX_PARAMS_AGG_STATUS_GET(word) \ + (((word) >> 0) & 0x1) +#define HTT_STATS_FTM_TX_PARAMS_DPDFLAG_GET(word) \ + (((word) >> 1) & 0x1) +#define HTT_STATS_FTM_TX_PARAMS_PPDU_DUR_BUF_LAST_IDX_GET(word) \ + (((word) >> 2) & 0xff) + +#define HTT_STATS_FTM_TX_PARAMS_TARGET_TX_DUTY_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_FTM_TX_PARAMS_PPDUTYPE_GET(word) \ + (((word) >> 8) & 0xff) +#define HTT_STATS_FTM_TX_PARAMS_NUMUSERS_OFDMATONEPLAN_GET(word) \ + (((word) >> 16) & 0xff) +#define HTT_STATS_FTM_TX_PARAMS_NUMUSERS_OFDMATONEPLANEHT_GET(word) \ + (((word) >> 24) & 0xff) + +#define HTT_STATS_FTM_TIMINGSTATS_TLVTIMESTAMPCNTFILLED_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_FTM_TIMINGSTATS_TLVCMDTIMINGINFO_TLVCMD_ENTRY_GET(word) \ + (((word) >> 0) & 0xffff) +#define HTT_STATS_FTM_TIMINGSTATS_TLVCMDTIMINGINFO_TLVCALTYPE_GET(word) \ + (((word) >> 16) & 0xff) + +#define HTT_STATS_FTM_TIMINGSTATS_TLVCMD_ENTRY_GET(word) \ + (((word) >> 0) & 0xffff) +#define HTT_STATS_FTM_TIMINGSTATS_TLVCALTYPE_GET(word) \ + (((word) >> 16) & 0xff) + +#define HTT_STATS_FTM_TLVPARAMS_FLAGTLVCMDPARSING_GET(word) \ + (((word) >> 0) & 0x1) +#define HTT_STATS_FTM_TLVPARAMS_NUMTLVCMDDROPPED_GET(word) \ + (((word) >> 1) & 0xff) + +#define HTT_STATS_FTM_RXGAINCALPARAMS_RXGAINCALMAXNUMCHAN_GET(word) \ + (((word) >> 0) & 0xff) +#define HTT_STATS_FTM_RXGAINCALPARAMS_RXGAINCAL_REFISS_GET(word) \ + (((word) >> 0) & 0xff) typedef struct { union { @@ -13697,6 +14313,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID0_TQM_LINK_ID, _val); \ @@ -13707,6 +14330,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID1_TQM_LINK_ID, _val); \ @@ -13717,6 +14347,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID2_TQM_LINK_ID, _val); \ @@ -13727,6 +14364,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID3_TQM_LINK_ID, _val); \ @@ -13737,6 +14381,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID4_TQM_LINK_ID, _val); \ @@ -13747,6 +14398,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID5_TQM_LINK_ID, _val); \ @@ -13757,6 +14415,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID6_TQM_LINK_ID, _val); \ @@ -13767,6 +14432,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_TID7_TQM_LINK_ID, _val); \ @@ -13777,6 +14449,13 @@ typedef struct { #define HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_GET(_var) \ (((_var) & HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_M) >> \ HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_S) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK0_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK1_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_GET(_var) +#define HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK2_ID_GET(_var) \ + HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_GET(_var) #define HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_PEER_EXT_DETAILS_MLO_MGMT_TID_TQM_LINK_ID, _val); \ @@ -14035,6 +14714,9 @@ typedef htt_stats_ml_peer_ext_details_tlv htt_ml_peer_ext_details_tlv; #define HTT_STATS_ML_LINK_INFO_BRIDGE_PEER_GET(_var) \ (((_var) & HTT_STATS_ML_LINK_INFO_BRIDGE_PEER_M) >> \ HTT_STATS_ML_LINK_INFO_BRIDGE_PEER_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_ML_LINK_INFO_DETAILS_BRIDGE_PEER_GET(_var) \ + HTT_STATS_ML_LINK_INFO_BRIDGE_PEER_GET(_var) #define HTT_STATS_ML_LINK_INFO_BRIDGE_PEER_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_LINK_INFO_BRIDGE_PEER, _val); \ @@ -14074,6 +14756,9 @@ typedef htt_stats_ml_peer_ext_details_tlv htt_ml_peer_ext_details_tlv; #define HTT_STATS_ML_LINK_INFO_PS_STATE_GET(_var) \ (((_var) & HTT_STATS_ML_LINK_INFO_PS_STATE_M) >> \ HTT_STATS_ML_LINK_INFO_PS_STATE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_ML_LINK_INFO_DETAILS_PS_GET(_var) \ + HTT_STATS_ML_LINK_INFO_PS_STATE_GET(_var) #define HTT_STATS_ML_LINK_INFO_PS_STATE_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_ML_LINK_INFO_PS_STATE, _val); \ @@ -14723,6 +15408,8 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_pdev_mbssid_ctrl_frame_stats_tlv htt_pdev_mbssid_ctrl_frame_stats_tlv; +#define HTT_STATS_PDEV_MBSSID_CTRL_FRAME_STATS_MAC_ID_GET(word) \ + (((word) >> 0) & 0xff) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -14795,6 +15482,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; #define HTT_BW_MGR_STATS_MAC_ID_GET(_var) \ (((_var) & HTT_BW_MGR_STATS_MAC_ID_M) >> \ HTT_BW_MGR_STATS_MAC_ID_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_MAC_ID_GET(_var) \ + HTT_BW_MGR_STATS_MAC_ID_GET(_var) #define HTT_BW_MGR_STATS_MAC_ID_SET(_var, _val) \ do { \ @@ -14808,6 +15498,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; HTT_BW_MGR_STATS_PRI20_IDX_S) #define HTT_BW_MGR_STATS_NPCA_PRI20_IDX_GET(_var) \ HTT_BW_MGR_STATS_PRI20_IDX_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_PRI20_IDX_GET(_var) \ + HTT_BW_MGR_STATS_PRI20_IDX_GET(_var) #define HTT_BW_MGR_STATS_PRI20_IDX_SET(_var, _val) \ do { \ @@ -14823,6 +15516,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; HTT_BW_MGR_STATS_PRI20_FREQ_S) #define HTT_BW_MGR_STATS_NPCA_PRI20_FREQ_GET(_var) \ HTT_BW_MGR_STATS_PRI20_FREQ_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_PRI20_FREQ_MHZ_GET(_var) \ + HTT_BW_MGR_STATS_PRI20_FREQ_GET(_var) #define HTT_BW_MGR_STATS_PRI20_FREQ_SET(_var, _val) \ do { \ @@ -14838,6 +15534,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; HTT_BW_MGR_STATS_CENTER_FREQ1_S) #define HTT_BW_MGR_STATS_NPCA_CENTER_FREQ1_GET(_var) \ HTT_BW_MGR_STATS_CENTER_FREQ1_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_CENTRE_FREQ1_GET(_var) \ + HTT_BW_MGR_STATS_CENTER_FREQ1_GET(_var) #define HTT_BW_MGR_STATS_CENTER_FREQ1_SET(_var, _val) \ do { \ @@ -14853,6 +15552,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; HTT_BW_MGR_STATS_CENTER_FREQ2_S) #define HTT_BW_MGR_STATS_NPCA_CENTER_FREQ2_GET(_var) \ HTT_BW_MGR_STATS_CENTER_FREQ2_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_CENTRE_FREQ2_GET(_var) \ + HTT_BW_MGR_STATS_CENTER_FREQ2_GET(_var) #define HTT_BW_MGR_STATS_CENTER_FREQ2_SET(_var, _val) \ do { \ @@ -14868,6 +15570,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; HTT_BW_MGR_STATS_CHAN_PHY_MODE_S) #define HTT_BW_MGR_STATS_CHAN_NPCA_PHY_MODE_GET(_var) \ HTT_BW_MGR_STATS_CHAN_PHY_MODE_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_PHY_MODE_GET(_var) \ + HTT_BW_MGR_STATS_CHAN_PHY_MODE_GET(_var) #define HTT_BW_MGR_STATS_CHAN_PHY_MODE_SET(_var, _val) \ do { \ @@ -14883,6 +15588,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; HTT_BW_MGR_STATS_STATIC_PATTERN_S) #define HTT_BW_MGR_STATS_NPCA_STATIC_PATTERN_GET(_var) \ HTT_BW_MGR_STATS_STATIC_PATTERN_GET(_var) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_STATIC_PATTERN_GET(_var) \ + HTT_BW_MGR_STATS_STATIC_PATTERN_GET(_var) #define HTT_BW_MGR_STATS_STATIC_PATTERN_SET(_var, _val) \ do { \ @@ -14896,6 +15604,9 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; #define HTT_BW_MGR_STATS_WIFI_VERSION_GET(_var) \ (((_var) & HTT_BW_MGR_STATS_WIFI_VERSION_M) >> \ HTT_BW_MGR_STATS_WIFI_VERSION_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PDEV_BW_MGR_STATS_WIFI_VERSION_GET(_var) \ + HTT_BW_MGR_STATS_WIFI_VERSION_GET(_var) #define HTT_BW_MGR_STATS_WIFI_VERSION_SET(_var, _val) \ do { \ @@ -14903,6 +15614,24 @@ typedef htt_stats_pdev_tdma_tlv htt_pdev_tdma_stats_tlv; ((_var) |= ((_val) << HTT_BW_MGR_STATS_WIFI_VERSION_S)); \ } while (0) +#define HTT_STATS_PDEV_BW_MGR_STATS_NPCA_PRI20_IDX_GET(_var) \ + (((_var) >> 8) & 0xff) + +#define HTT_STATS_PDEV_BW_MGR_STATS_NPCA_PRI20_FREQ_MHZ_GET(_var) \ + (((_var) >> 16) & 0xffff) + +#define HTT_STATS_PDEV_BW_MGR_STATS_NPCA_CENTRE_FREQ1_GET(_var) \ + (((_var) >> 0) & 0xffff) + +#define HTT_STATS_PDEV_BW_MGR_STATS_NPCA_CENTRE_FREQ2_GET(_var) \ + (((_var) >> 16) & 0xffff) + +#define HTT_STATS_PDEV_BW_MGR_STATS_NPCA_PHY_MODE_GET(_var) \ + (((_var) >> 0) & 0xff) + +#define HTT_STATS_PDEV_BW_MGR_STATS_NPCA_STATIC_PATTERN_GET(_var) \ + (((_var) >> 8) & 0xffff) + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -15128,6 +15857,61 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_mlo_umac_ssr_mlo_tlv htt_mlo_umac_ssr_mlo_stats_tlv; +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_DISABLE_RXDMA_PREFETCH_GET(word) \ + (((word) >> 0) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_PMACS_HWMLOS_GET(word) \ + (((word) >> 1) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_GLOBAL_WSI_GET(word) \ + (((word) >> 2) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_PMACS_DMAC_GET(word) \ + (((word) >> 3) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_TCL_GET(word) \ + (((word) >> 4) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_TQM_GET(word) \ + (((word) >> 5) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_WBM_GET(word) \ + (((word) >> 6) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_REO_GET(word) \ + (((word) >> 7) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_PRE_RESET_HOST_GET(word) \ + (((word) >> 8) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_RESET_PREREQUISITES_GET(word) \ + (((word) >> 9) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_RESET_PRE_RING_RESET_GET(word) \ + (((word) >> 10) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_RESET_APPLY_SOFT_RESET_GET(word) \ + (((word) >> 11) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_RESET_POST_RING_RESET_GET(word) \ + (((word) >> 12) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_RESET_FW_TQM_CMDQS_GET(word) \ + (((word) >> 13) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_HOST_GET(word) \ + (((word) >> 14) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_UMAC_INTERRUPTS_GET(word) \ + (((word) >> 15) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_WBM_GET(word) \ + (((word) >> 16) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_REO_GET(word) \ + (((word) >> 17) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_TQM_GET(word) \ + (((word) >> 18) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_PMACS_DMAC_GET(word) \ + (((word) >> 19) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_TQM_SYNC_CMD_GET(word) \ + (((word) >> 20) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_GLOBAL_WSI_GET(word) \ + (((word) >> 21) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_PMACS_HWMLOS_GET(word) \ + (((word) >> 22) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_ENABLE_RXDMA_PREFETCH_GET(word) \ + (((word) >> 23) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_TCL_GET(word) \ + (((word) >> 24) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_HOST_ENQ_GET(word) \ + (((word) >> 25) & 0x1) +#define HTT_STATS_MLO_UMAC_SSR_MLO_MLO_DONE_MASK_POST_RESET_VERIFY_UMAC_RECOVERED_GET(word) \ + (((word) >> 26) & 0x1) + /* dword0 - b'0 - PRE_RESET_DISABLE_RXDMA_PREFETCH */ #define HTT_UMAC_RECOVERY_DONE_PRE_RESET_DISABLE_RXDMA_PREFETCH_M 0x1 #define HTT_UMAC_RECOVERY_DONE_PRE_RESET_DISABLE_RXDMA_PREFETCH_S 0 @@ -15744,6 +16528,9 @@ typedef htt_stats_codel_svc_class_tlv htt_codel_svc_class_stats_tlv; #define HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_GET(_var) \ (((_var) & HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_M) >> \ HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_CODEL_MSDUQ_TX_FLOW_NUM_GET(_var) \ + HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_GET(_var) #define HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM, _val); \ @@ -15756,6 +16543,9 @@ typedef htt_stats_codel_svc_class_tlv htt_codel_svc_class_stats_tlv; #define HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_GET(_var) \ (((_var) & HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_M) >> \ HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_CODEL_MSDUQ_SVC_CLASS_ID_GET(_var) \ + HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_GET(_var) #define HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID, _val); \ @@ -15768,6 +16558,9 @@ typedef htt_stats_codel_svc_class_tlv htt_codel_svc_class_stats_tlv; #define HTT_CODEL_MSDUQ_STATS_DROPS_GET(_var) \ (((_var) & HTT_CODEL_MSDUQ_STATS_DROPS_M) >> \ HTT_CODEL_MSDUQ_STATS_DROPS_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_CODEL_MSDUQ_CODEL_DROPS_GET(_var) \ + HTT_CODEL_MSDUQ_STATS_DROPS_GET(_var) #define HTT_CODEL_MSDUQ_STATS_DROPS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_DROPS, _val); \ @@ -15780,6 +16573,9 @@ typedef htt_stats_codel_svc_class_tlv htt_codel_svc_class_stats_tlv; #define HTT_CODEL_MSDUQ_STATS_NO_DROPS_GET(_var) \ (((_var) & HTT_CODEL_MSDUQ_STATS_NO_DROPS_M) >> \ HTT_CODEL_MSDUQ_STATS_NO_DROPS_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_CODEL_MSDUQ_CODEL_NO_DROPS_GET(_var) \ + HTT_CODEL_MSDUQ_STATS_NO_DROPS_GET(_var) #define HTT_CODEL_MSDUQ_STATS_NO_DROPS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_NO_DROPS, _val); \ @@ -15944,12 +16740,65 @@ static INLINE A_UINT8 *htt_ctrl_path_cal_type_id_to_name(A_UINT32 cal_type_id) /*===================== Start GTX stats ====================*/ #define HTT_NUM_MCS_PER_NSS 16 + +#define HTT_NUM_EXTRA_MCS_PER_NSS 4 /* Stores iMCS index 1.1, 3.1, 4.1, 7.1 */ + +#define HTT_STATS_GTX_WIFI_VERSION_M 0x0000000f +#define HTT_STATS_GTX_WIFI_VERSION_S 0 + +#define HTT_STATS_GTX_WIFI_VERSION_GET(_var) \ + (((_var) & HTT_STATS_GTX_WIFI_VERSION_M) >> \ + HTT_STATS_GTX_WIFI_VERSION_S) +#define HTT_STATS_GTX_WIFI_VERSION_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_GTX_WIFI_VERSION, _val); \ + ((_var) |= ((_val) << HTT_STATS_GTX_WIFI_VERSION_S)); \ + } while (0) + typedef struct { htt_tlv_hdr_t tlv_hdr; A_UINT32 gtx_enabled; /* shows whether Green Tx feature is enabled */ - A_INT32 mcs_tpc_min[HTT_NUM_MCS_PER_NSS]; /* shows current MCS's minimum TPC in 0.25dBm units */ - A_INT32 mcs_tpc_max[HTT_NUM_MCS_PER_NSS]; /* shows current MCS's maximum TPC in 0.25dBm units */ - A_UINT32 mcs_tpc_diff[HTT_NUM_MCS_PER_NSS]; /* shows current MCS's difference between maximum and minimum TPC in 0.25dB unit*/ + + /* shows current MCS's minimum TPC in 0.25dBm units */ + A_INT32 mcs_tpc_min[HTT_NUM_MCS_PER_NSS]; + + /* shows current MCS's maximum TPC in 0.25dBm units */ + A_INT32 mcs_tpc_max[HTT_NUM_MCS_PER_NSS]; + + /* + * shows current MCS's difference between maximum and minimum TPC + * in 0.25dB units + */ + A_UINT32 mcs_tpc_diff[HTT_NUM_MCS_PER_NSS]; + /** + * BIT [ 3 : 0] :- wifi_version + * BIT [31 : 4] :- reserved + */ + union { + struct { + A_UINT32 + /* wifi_version: + * Holds a HTT_RX_TX_PDEV_STATS_WIFI_VERSION value. + * Refer to HTT_RX_EXT_PDEV_RATE_STATS_WIFI_VERSION_GET + * / _SET macros for accessing this bitfield. + */ + wifi_version: 4, + reserved: 28; + }; + A_UINT32 wifi_version__word; + }; + + /* shows current MCS's minimum TPC in 0.25dBm units for iMCS cases */ + A_INT32 mcs_tpc_min_ext[HTT_NUM_EXTRA_MCS_PER_NSS]; + + /* shows current MCS's maximum TPC in 0.25dBm units for iMCS cases */ + A_INT32 mcs_tpc_max_ext[HTT_NUM_EXTRA_MCS_PER_NSS]; + + /* + * shows current MCS's difference between maximum and minimum TPC + * in 0.25dB units for iMCS cases + */ + A_UINT32 mcs_tpc_diff_ext[HTT_NUM_EXTRA_MCS_PER_NSS]; } htt_stats_gtx_tlv; /*===================== End GTX stats ====================*/ @@ -16057,31 +16906,49 @@ typedef struct { #define HTT_STATS_RESET_HISTORY_MHZ_GET(word) \ ((word) & 0x0000ffff) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RESET_HISTORY_RESET_HISTORY_MHZ_GET(word) \ + HTT_STATS_RESET_HISTORY_MHZ_GET(word) #define HTT_STATS_RESET_HISTORY_MHZ_SET(word, value) \ ((word) |= ((value) & 0x0000ffff)) #define HTT_STATS_RESET_HISTORY_BAND_CENTER_FREQ1_GET(word) \ (((word) & 0xffff0000) >> 16) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RESET_HISTORY_RESET_HISTORY_BAND_CENTER_FREQ1_GET(word) \ + HTT_STATS_RESET_HISTORY_BAND_CENTER_FREQ1_GET(word) #define HTT_STATS_RESET_HISTORY_BAND_CENTER_FREQ1_SET(word, value) \ ((word) |= (((value) << 16) & 0xffff0000)) #define HTT_STATS_RESET_HISTORY_FLAGS_GET(word) \ ((word) & 0x0000ffff) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RESET_HISTORY_RESET_HISTORY_FLAGS_GET(word) \ + HTT_STATS_RESET_HISTORY_FLAGS_GET(word) #define HTT_STATS_RESET_HISTORY_FLAGS_SET(word, value) \ ((word) |= ((value) & 0x0000ffff)) #define HTT_STATS_RESET_HISTORY_PHY_ID_GET(word) \ (((word) & 0x00ff0000) >> 16) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RESET_HISTORY_RESET_HISTORY_PHY_ID_GET(word) \ + HTT_STATS_RESET_HISTORY_PHY_ID_GET(word) #define HTT_STATS_RESET_HISTORY_PHY_ID_SET(word, value) \ ((word) |= (((value) << 16) & 0x00ff0000)) #define HTT_STATS_RESET_HISTORY_SWPROFILE_GET(word) \ (((word) & 0xff000000) >> 24) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RESET_HISTORY_RESET_HISTORY_SWPROFILE_GET(word) \ + HTT_STATS_RESET_HISTORY_SWPROFILE_GET(word) #define HTT_STATS_RESET_HISTORY_SWPROFILE_SET(word, value) \ ((word) |= (((value) << 24) & 0xff000000)) #define HTT_STATS_RESET_HISTORY_IS_HOME_CHAN_GET(word) \ (((word) & 0x00000001) >> 0) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_RESET_HISTORY_RESET_HISTORY_IS_HOME_CHAN_GET(word) \ + HTT_STATS_RESET_HISTORY_IS_HOME_CHAN_GET(word) #define HTT_STATS_RESET_HISTORY_IS_HOME_CHAN_SET(word, value) \ ((word) |= (((value) << 0) & 0x00000001)) @@ -16092,6 +16959,7 @@ typedef enum { HTT_STATS_REGULATORY_SUBTYPE_REGDB = 0, HTT_STATS_REGULATORY_SUBTYPE_6GHZ = 1, HTT_STATS_REGULATORY_SUBTYPE_CTL = 2, + HTT_STATS_REGULATORY_SUBTYPE_DFS = 3, HTT_STATS_REGULATORY_SUBTYPE_MAX } htt_stats_regulatory_subtype_t; @@ -16125,16 +16993,25 @@ typedef struct { #define HTT_STATS_REGDB_CTRY_GET_MAJOR_VERSION(word) \ HTT_STATS_GET_FIELD(0xFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_CTRY_MAJOR_VERSION_GET(word) \ + HTT_STATS_REGDB_CTRY_GET_MAJOR_VERSION(word) #define HTT_STATS_REGDB_CTRY_SET_MAJOR_VERSION(word,value) \ HTT_STATS_SET_FIELD(0xFF, 0, (word), (value)) #define HTT_STATS_REGDB_CTRY_GET_MINOR_VERSION(word) \ HTT_STATS_GET_FIELD(0xFF00, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_CTRY_MINOR_VERSION_GET(word) \ + HTT_STATS_REGDB_CTRY_GET_MINOR_VERSION(word) #define HTT_STATS_REGDB_CTRY_SET_MINOR_VERSION(word,value) \ HTT_STATS_SET_FIELD(0xFF00, 8, (word), (value)) #define HTT_STATS_REGDB_CTRY_GET_CUSTOM_VERSION(word) \ HTT_STATS_GET_FIELD(0xFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_CTRY_CUSTOM_VERSION_GET(word) \ + HTT_STATS_REGDB_CTRY_GET_CUSTOM_VERSION(word) #define HTT_STATS_REGDB_CTRY_SET_CUSTOM_VERSION(word,value) \ HTT_STATS_SET_FIELD(0xFF0000, 16, (word), (value)) @@ -16272,32 +17149,50 @@ typedef struct { #define HTT_STATS_REGDB_REGDOMAIN_GET_CTL_REGION(word) \ HTT_STATS_GET_FIELD(0xFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_REGDOMAIN_CTL_REGION_GET(word) \ + HTT_STATS_REGDB_REGDOMAIN_GET_CTL_REGION(word) #define HTT_STATS_REGDB_REGDOMAIN_SET_CTL_REGION(word,value) \ HTT_STATS_SET_FIELD(0xFF, 0, (word), (value)) #define HTT_STATS_REGDB_REGDOMAIN_GET_CCA_REGION(word) \ HTT_STATS_GET_FIELD(0xFF00, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_REGDOMAIN_CCA_REGION_GET(word) \ + HTT_STATS_REGDB_REGDOMAIN_GET_CCA_REGION(word) #define HTT_STATS_REGDB_REGDOMAIN_SET_CCA_REGION(word,value) \ HTT_STATS_SET_FIELD(0xFF00, 8, (word), (value)) #define HTT_STATS_REGDB_REGDOMAIN_GET_DFS_REGION(word) \ HTT_STATS_GET_FIELD(0xFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_REGDOMAIN_DFS_REGION_GET(word) \ + HTT_STATS_REGDB_REGDOMAIN_GET_DFS_REGION(word) #define HTT_STATS_REGDB_REGDOMAIN_SET_DFS_REGION(word,value) \ HTT_STATS_SET_FIELD(0xFF0000, 16, (word), (value)) #define HTT_STATS_REGDB_REGDOMAIN_GET_DOMAIN_CTL_INDEX(word) \ HTT_STATS_GET_FIELD(0xFF000000, 24, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_REGDOMAIN_DOMAIN_CTL_INDEX_GET(word) \ + HTT_STATS_REGDB_REGDOMAIN_GET_DOMAIN_CTL_INDEX(word) #define HTT_STATS_REGDB_REGDOMAIN_SET_DOMAIN_CTL_INDEX(word,value) \ HTT_STATS_SET_FIELD(0xFF000000, 24, (word), (value)) #define HTT_STATS_REGDB_REGDOMAIN_GET_NUM_RULES(word) \ HTT_STATS_GET_FIELD(0xFFFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_REGDOMAIN_NUM_RULES_GET(word) \ + HTT_STATS_REGDB_REGDOMAIN_GET_NUM_RULES(word) #define HTT_STATS_REGDB_REGDOMAIN_SET_NUM_RULES(word,value) \ HTT_STATS_SET_FIELD(0xFFFF, 0, (word), (value)) #define HTT_STATS_REGDB_REGDOMAIN_GET_RULE_SIZE(word) \ HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REGDB_REGDOMAIN_RULE_SIZE_GET(word) \ + HTT_STATS_REGDB_REGDOMAIN_GET_RULE_SIZE(word) #define HTT_STATS_REGDB_REGDOMAIN_SET_RULE_SIZE(word,value) \ HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) @@ -16344,44 +17239,68 @@ typedef struct { #define HTT_STATS_REG_6G_GET_DEPLOYMENT_TYPE(word) \ HTT_STATS_GET_FIELD(0x0000FF00, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_DEPLOYMENT_TYPE_GET(word) \ + HTT_STATS_REG_6G_GET_DEPLOYMENT_TYPE(word) #define HTT_STATS_REG_6G_SET_DEPLOYMENT_TYPE(word,value) \ HTT_STATS_SET_FIELD(0x0000FF00, 8, (word), (value)) #define HTT_STATS_REG_6G_GET_POWER_MODE_MASK(word) \ HTT_STATS_GET_FIELD(0x00FF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_POWER_MODE_MASK_GET(word) \ + HTT_STATS_REG_6G_GET_POWER_MODE_MASK(word) #define HTT_STATS_REG_6G_SET_POWER_MODE_MASK(word,value) \ HTT_STATS_SET_FIELD(0x00FF0000, 16, (word), (value)) - #define HTT_STATS_REG_6G_GET_SET_TPC_COUNT(word) \ HTT_STATS_GET_FIELD(0xFFFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_SET_TPC_COUNT_GET(word) \ + HTT_STATS_REG_6G_GET_SET_TPC_COUNT(word) #define HTT_STATS_REG_6G_SET_SET_TPC_COUNT(word,value) \ HTT_STATS_SET_FIELD(0xFFFF, 0, (word), (value)) #define HTT_STATS_REG_6G_GET_SET_TPC_PASS_COUNT(word) \ HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_SET_TPC_PASS_COUNT_GET(word) \ + HTT_STATS_REG_6G_GET_SET_TPC_PASS_COUNT(word) #define HTT_STATS_REG_6G_SET_SET_TPC_PASS_COUNT(word,value) \ HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) #define HTT_STATS_REG_6G_GET_CURRENT_POWER_MODE(word) \ HTT_STATS_GET_FIELD(0xF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CURRENT_POWER_MODE_GET(word) \ + HTT_STATS_REG_6G_GET_CURRENT_POWER_MODE(word) #define HTT_STATS_REG_6G_SET_CURRENT_POWER_MODE(word,value) \ HTT_STATS_SET_FIELD(0xF, 0, (word), (value)) #define HTT_STATS_REG_6G_GET_LAST_BEST_POWER_MODE(word) \ HTT_STATS_GET_FIELD(0xF0, 4, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_LAST_BEST_POWER_MODE_GET(word) \ + HTT_STATS_REG_6G_GET_LAST_BEST_POWER_MODE(word) #define HTT_STATS_REG_6G_SET_LAST_BEST_POWER_MODE(word,value) \ HTT_STATS_SET_FIELD(0xF0, 4, (word), (value)) #define HTT_STATS_REG_6G_GET_IS_CURRENT_POWER_MODE_BEST(word) \ HTT_STATS_GET_FIELD(0x100, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_IS_CURRENT_MODE_BEST_POWER_MODE_GET(word) \ + HTT_STATS_REG_6G_GET_IS_CURRENT_POWER_MODE_BEST(word) #define HTT_STATS_REG_6G_SET_IS_CURRENT_POWER_MODE_BEST(word,value) \ HTT_STATS_SET_FIELD(0x100, 8, (word), (value)) #define HTT_STATS_REG_6G_GET_BEST_POWER_MODE_COUNT(word) \ HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_BEST_POWER_MODE_COUNT_GET(word) \ + HTT_STATS_REG_6G_GET_BEST_POWER_MODE_COUNT(word) #define HTT_STATS_REG_6G_SET_BEST_POWER_MODE_COUNT(word,value) \ HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) + #define HTT_STATS_REG_POWER_INFO_6G_MAX_SUBBANDS 16 @@ -16401,14 +17320,29 @@ typedef struct { #define HTT_STATS_REG_FREQ_POWER_PAIR_GET_FREQ_VALUE(word) \ HTT_STATS_GET_FIELD(0xFFFF, 0, (word)) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_TX_POWER_FREQ_PAIR_FREQ_GET(word) \ + HTT_STATS_REG_FREQ_POWER_PAIR_GET_FREQ_VALUE(word) +#define HTT_STATS_REG_6G_CH_PWR_INFO_PSD_POWER_FREQ_PAIR_FREQ_GET(word) \ + HTT_STATS_REG_FREQ_POWER_PAIR_GET_FREQ_VALUE(word) +#define HTT_STATS_REG_6G_CH_PWR_INFO_EIRP_POWER_FREQ_PAIR_FREQ_GET(word) \ + HTT_STATS_REG_FREQ_POWER_PAIR_GET_FREQ_VALUE(word) #define HTT_STATS_REG_FREQ_POWER_PAIR_SET_FREQ_VALUE(word,value) \ HTT_STATS_SET_FIELD(0xFFFF, 0, (word), (value)) #define HTT_STATS_REG_FREQ_POWER_PAIR_GET_POWER_VALUE(word) \ HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +/* provide alias macros that use preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_TX_POWER_FREQ_PAIR_POWER_GET(word) \ + HTT_STATS_REG_FREQ_POWER_PAIR_GET_POWER_VALUE(word) +#define HTT_STATS_REG_6G_CH_PWR_INFO_PSD_POWER_FREQ_PAIR_POWER_GET(word) \ + HTT_STATS_REG_FREQ_POWER_PAIR_GET_POWER_VALUE(word) +#define HTT_STATS_REG_6G_CH_PWR_INFO_EIRP_POWER_FREQ_PAIR_POWER_GET(word) \ + HTT_STATS_REG_FREQ_POWER_PAIR_GET_POWER_VALUE(word) #define HTT_STATS_REG_FREQ_POWER_PAIR_SET_POWER_VALUE(word,value) \ HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) + typedef struct { htt_tlv_hdr_t tlv_hdr; A_UINT32 index; @@ -16438,40 +17372,64 @@ typedef struct { psd_power_freq_pair[HTT_STATS_REG_POWER_INFO_6G_MAX_SUBBANDS]; htt_stats_reg_freq_power_pair_t eirp_power_freq_pair[HTT_STATS_REG_POWER_INFO_6G_MAX_SUBBANDS]; -} htt_stats_reg_6g_ch_power_info_tlv; +} htt_stats_reg_6g_ch_pwr_info_tlv; +/* preserve old name alias for new name consistent with the tag name */ +typedef htt_stats_reg_6g_ch_pwr_info_tlv + htt_stats_reg_6g_ch_power_info_tlv; #define HTT_STATS_REG_6G_GET_POWER_TYPE(word) \ HTT_STATS_GET_FIELD(0xFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_POWER_TYPE_6GHZ_GET(word) \ + HTT_STATS_REG_6G_GET_POWER_TYPE(word) #define HTT_STATS_REG_6G_SET_POWER_TYPE(word,value) \ HTT_STATS_SET_FIELD(0xFF, 0, (word), (value)) #define HTT_STATS_REG_6G_GET_EIRP_POWER(word) \ HTT_STATS_GET_FIELD(0xFF00, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_EIRP_POWER_GET(word) \ + HTT_STATS_REG_6G_GET_EIRP_POWER(word) #define HTT_STATS_REG_6G_SET_EIRP_POWER(word,value) \ HTT_STATS_SET_FIELD(0xFF00, 8, (word), (value)) #define HTT_STATS_REG_6G_GET_IS_PSD(word) \ HTT_STATS_GET_FIELD(0x10000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_IS_PSD_POWER_GET(word) \ + HTT_STATS_REG_6G_GET_IS_PSD(word) #define HTT_STATS_REG_6G_SET_IS_PSD(word,value) \ HTT_STATS_SET_FIELD(0x10000, 16, (word), (value)) #define HTT_STATS_REG_6G_GET_BOTH_PSD_EIRP_SUPPORT(word) \ HTT_STATS_GET_FIELD(0x20000, 17, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_BOTH_PSD_EIRP_SUPPORT_GET(word) \ + HTT_STATS_REG_6G_GET_BOTH_PSD_EIRP_SUPPORT(word) #define HTT_STATS_REG_6G_SET_BOTH_PSD_EIRP_SUPPORT(word,value) \ HTT_STATS_SET_FIELD(0x20000, 17, (word), (value)) #define HTT_STATS_REG_6G_GET_NUM_POWER_LEVELS(word) \ HTT_STATS_GET_FIELD(0xFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_NUM_POWER_LEVELS_GET(word) \ + HTT_STATS_REG_6G_GET_NUM_POWER_LEVELS(word) #define HTT_STATS_REG_6G_SET_NUM_POWER_LEVELS(word,value) \ HTT_STATS_SET_FIELD(0xFF, 0, (word), (value)) #define HTT_STATS_REG_6G_GET_NUM_PSD_LEVELS(word) \ HTT_STATS_GET_FIELD(0xFF00, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_NUM_PSD_LEVELS_GET(word) \ + HTT_STATS_REG_6G_GET_NUM_PSD_LEVELS(word) #define HTT_STATS_REG_6G_SET_NUM_PSD_LEVELS(word,value) \ HTT_STATS_SET_FIELD(0xFF00, 8, (word), (value)) #define HTT_STATS_REG_6G_GET_NUM_EIRP_LEVELS(word) \ HTT_STATS_GET_FIELD(0xFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_CH_PWR_INFO_NUM_EIRP_LEVELS_GET(word) \ + HTT_STATS_REG_6G_GET_NUM_EIRP_LEVELS(word) #define HTT_STATS_REG_6G_SET_NUM_EIRP_LEVELS(word,value) \ HTT_STATS_SET_FIELD(0xFF0000, 16, (word), (value)) @@ -16490,11 +17448,17 @@ typedef struct { #define HTT_STATS_REG_6G_GET_OOBE_LIMIT_OFFSET(word) \ HTT_STATS_GET_FIELD(0xFFFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_OOBE_OOBE_LIMIT_OOBE_LIMIT_OFFSET_GET(word) \ + HTT_STATS_REG_6G_GET_OOBE_LIMIT_OFFSET(word) #define HTT_STATS_REG_6G_SET_OOBE_LIMIT_OFFSET(word,value) \ HTT_STATS_SET_FIELD(0xFFFF, 0, (word), (value)) #define HTT_STATS_REG_6G_GET_OOBE_LIMIT_PSD(word) \ HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_REG_6G_OOBE_OOBE_LIMIT_OOBE_LIMIT_PSD_GET(word) \ + HTT_STATS_REG_6G_GET_OOBE_LIMIT_PSD(word) #define HTT_STATS_REG_6G_SET_OOBE_LIMIT_PSD(word,value) \ HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) @@ -16517,11 +17481,17 @@ typedef struct { #define HTT_STATS_CTL_GET_REG_RULE_INDEX(word) \ HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_CTL_REGRULEINDEX_GET(word) \ + HTT_STATS_CTL_GET_REG_RULE_INDEX(word) #define HTT_STATS_CTL_SET_REG_RULE_INDEX(word,value) \ HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (value)) #define HTT_STATS_CTL_GET_POWER_RULE_INDEX(word) \ HTT_STATS_GET_FIELD(0x00FF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_CTL_POWERRULEINDEX_GET(word) \ + HTT_STATS_CTL_GET_POWER_RULE_INDEX(word) #define HTT_STATS_CTL_SET_POWER_RULE_INDEX(word,value) \ HTT_STATS_SET_FIELD(0x00FF0000, 16, (word), (value)) @@ -16544,25 +17514,278 @@ typedef struct { #define HTT_STATS_ENHANCED_CTL_GET_ENHANCED_CTL_ENABLE(word) \ HTT_STATS_GET_FIELD(0x00000001, 0, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_ENHANCED_CTL_ENHANCEDCTLENABLE_GET(word) \ + HTT_STATS_ENHANCED_CTL_GET_ENHANCED_CTL_ENABLE(word) #define HTT_STATS_ENHANCED_CTL_SET_ENHANCED_CTL_ENABLE(word,value) \ HTT_STATS_SET_FIELD(0x00000001, 0, (word), (value)) #define HTT_STATS_ENHANCED_CTL_GET_DOMAIN_CTL_INDEX(word) \ HTT_STATS_GET_FIELD(0x0000FF00, 8, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_ENHANCED_CTL_DOMAINCTLINDEX_GET(word) \ + HTT_STATS_ENHANCED_CTL_GET_DOMAIN_CTL_INDEX(word) #define HTT_STATS_ENHANCED_CTL_SET_DOMAIN_CTL_INDEX(word,value) \ HTT_STATS_SET_FIELD(0x0000FF00, 8, (word), (value)) #define HTT_STATS_ENHANCED_CTL_GET_ARRAY_GAIN_CAP_CTL_REGION(word) \ HTT_STATS_GET_FIELD(0x00FF0000, 16, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_ENHANCED_CTL_ARRAY_GAIN_CAP_CTLREGION_GET(word) \ + HTT_STATS_ENHANCED_CTL_GET_ARRAY_GAIN_CAP_CTL_REGION(word) #define HTT_STATS_ENHANCED_CTL_SET_ARRAY_GAIN_CAP_CTL_REGION(word,value) \ HTT_STATS_SET_FIELD(0x00FF0000, 16, (word), (value)) #define HTT_STATS_ENHANCED_CTL_GET_EXCEPTION_CTL_REGION(word) \ HTT_STATS_GET_FIELD(0xFF000000, 24, (word)) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_ENHANCED_CTL_EXCEPTIONCTLREGION_GET(word) \ + HTT_STATS_ENHANCED_CTL_GET_EXCEPTION_CTL_REGION(word) #define HTT_STATS_ENHANCED_CTL_SET_EXCEPTION_CTL_REGION(word,value) \ HTT_STATS_SET_FIELD(0xFF000000, 24, (word), (value)) +#define HTT_STATS_DFS_RADAR_HISTORY_MAX_ENTRIES 5 + +/** + * @brief TLV structure for wifistats 83 (radar history) + * This structure holds the last 5 radar history detected. + */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + struct { + union { + A_UINT32 freq_det_info; + struct { + A_UINT32 chan_freq:16, /* MHz units */ + detector_id:8, + is_chirp:1, /* Chirp radar pulse detected */ + rsvd1:7; + }; + }; + union { + A_UINT32 rssi_pulse_info; + struct { + A_UINT32 rf_pulseid:16, + radar_rssi_dbm:8, + rsvd2:8; + }; + }; + union { + A_UINT32 domain_type_info; + struct { + A_UINT32 domain:8, + type:8, + rf_radar_type:8, + rsvd3:8; + }; + }; + union { + A_UINT32 sidx_freq_info; + struct { + A_UINT32 sidx:16, + freq_offset:16; + }; + }; + union { + A_UINT32 dur_info; + struct { + A_UINT32 rf_mindur:16, /* us */ + rf_maxdur:16; /* us */ + }; + }; + union { + A_UINT32 threshold_info; + struct { + A_UINT32 rf_threshold:16, /* units = dBm */ + rsvd4:16; + }; + }; + union { + A_UINT32 pri_info; + struct { + A_UINT32 rf_minpri:16, /* us */ + rf_maxpri:16; /* us */ + }; + }; + } radar_entry_stats[HTT_STATS_DFS_RADAR_HISTORY_MAX_ENTRIES]; + A_UINT32 idx; /* next write position */ + A_UINT32 count; /* valid entries in buffer */ +} htt_stats_dfs_radar_history_tlv; + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * freq_det_info (word 0) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_CHAN_FREQ_GET(word) \ + HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_CHAN_FREQ_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_DETECTOR_ID_GET(word) \ + HTT_STATS_GET_FIELD(0x00FF0000, 16, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_DETECTOR_ID_SET(word, value) \ + HTT_STATS_SET_FIELD(0x00FF0000, 16, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_IS_CHIRP_GET(word) \ + HTT_STATS_GET_FIELD(0x01000000, 24, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_IS_CHIRP_SET(word, value) \ + HTT_STATS_SET_FIELD(0x01000000, 24, (word), (value)) + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * rssi_pulse_info (word 1) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_PULSEID_GET(word) \ + HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_PULSEID_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RADAR_RSSI_DBM_GET(word) \ + ((A_INT8)HTT_STATS_GET_FIELD(0x00FF0000, 16, (word))) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RADAR_RSSI_DBM_SET(word, value) \ + HTT_STATS_SET_FIELD(0x00FF0000, 16, (word), (A_UINT8)(value)) + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * domain_type_info (word 2) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_DOMAIN_GET(word) \ + HTT_STATS_GET_FIELD(0x000000FF, 0, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_DOMAIN_SET(word, value) \ + HTT_STATS_SET_FIELD(0x000000FF, 0, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_TYPE_GET(word) \ + HTT_STATS_GET_FIELD(0x0000FF00, 8, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_TYPE_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FF00, 8, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_RADAR_TYPE_GET(word) \ + HTT_STATS_GET_FIELD(0x00FF0000, 16, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_RADAR_TYPE_SET(word, value) \ + HTT_STATS_SET_FIELD(0x00FF0000, 16, (word), (value)) + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * sidx_freq_info (word 3) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_SIDX_GET(word) \ + ((A_INT16)HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word))) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_SIDX_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (A_UINT16)(value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_FREQ_OFFSET_GET(word) \ + ((A_INT16)HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word))) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_FREQ_OFFSET_SET(word, value) \ + HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (A_UINT16)(value)) + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * dur_info (word 4) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MINDUR_GET(word) \ + HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MINDUR_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MAXDUR_GET(word) \ + HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MAXDUR_SET(word, value) \ + HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * threshold_info (word 5) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_THRESHOLD_GET(word) \ + HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_THRESHOLD_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (value)) + +/* + * Accessor macros for htt_stats_dfs_radar_history_tlv.radar_entry_stats + * pri_info (word 6) + */ +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MINPRI_GET(word) \ + HTT_STATS_GET_FIELD(0x0000FFFF, 0, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MINPRI_SET(word, value) \ + HTT_STATS_SET_FIELD(0x0000FFFF, 0, (word), (value)) + +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MAXPRI_GET(word) \ + HTT_STATS_GET_FIELD(0xFFFF0000, 16, (word)) +#define HTT_STATS_DFS_RADAR_HISTORY_RADAR_ENTRY_STATS_RF_MAXPRI_SET(word, value) \ + HTT_STATS_SET_FIELD(0xFFFF0000, 16, (word), (value)) + +/* + * Sign-extend helper for signed bitfields in DFS radar entries. + * Used for radar_rssi_dbm (8-bit), sidx (16-bit), freq_offset (16-bit). + */ +#define HTT_STATS_SIGN_EXT(val, nbits) \ + (((val) & (1u << ((nbits)-1))) ? \ + ((val) | (~0u << (nbits))) : (val)) + +/* + * Indices into htt_stats_dfs_ini_tlv.reg_val[] + * (same order as wfax_dfs_common[]) + */ +enum htt_stats_dfs_ini_reg_idx { + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_RADAR_POW_DET_L = 0, /* offset 0xBC0 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_RADAR_DETECTION_U = 1, /* offset 0xBB4 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_RADAR_PULSE_THR_L = 2, /* offset 0xBF8 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_RADAR_POW_DET_U = 3, /* offset 0xBC4 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_RADAR_PULSE_THR_U = 4, /* offset 0xBFC */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_SRCH_FFT_CTRL2_0_L = 5, /* offset 0xBD8 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_SRCH_FFT_CTRL1_U = 6, /* offset 0xBD4 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_SRCH_FFT_CTRL2_1_L = 7, /* offset 0xBE0 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_RADAR_DETECTION_L = 8, /* offset 0xBB0 */ + HTT_STATS_DFS_INI_WFAX_RXTD_DET0_SRCH_FFT_CTRL2_1_U = 9, /* offset 0xBE4 */ + + HTT_STATS_DFS_INI_NUM_REGS = 10 +}; + + +/* + * htt_stats_dfs_ini_tlv - DFS common register + * + * Captures current live values of the 10 wfax_dfs_common HW registers. + * reg_val[i]: current value read from hardware + * + * Use enum htt_stats_dfs_ini_reg_idx for reg_val[] index interpretation. + */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + A_UINT32 reg_val[HTT_STATS_DFS_INI_NUM_REGS]; +} htt_stats_dfs_ini_tlv; + + +/* ======================= End DFS Channel Register Snapshot TLV ========== } */ + +/* ======================= DFS IPC Ring Stats TLV ========================= { + * Head/tail index state for the 3 DFS IPC rings read at stats query time. + * Use enum htt_stats_dfs_ipc_ring_idx for ipc_ring_stats[] index + * interpretation. + */ + +/* Indices into htt_stats_dfs_ipc_ring_tlv.ipc_ring_stats[] */ +enum htt_stats_dfs_ipc_ring_idx { + HTT_STATS_DFS_IPC_RING_DFS0 = 0, /* IPC_DFS0_RINGID (2) */ + HTT_STATS_DFS_IPC_RING_DFS1 = 1, /* IPC_DFS1_RINGID (3) */ + HTT_STATS_DFS_IPC_RING_DFS2 = 2, /* IPC_DFS2_RINGID (4) */ + + HTT_STATS_DFS_IPC_RING_COUNT = 3 /* DFS0, DFS1, DFS2 */ +}; + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + struct { + A_UINT32 head_idx; + A_UINT32 shadow_head_idx; + A_UINT32 tail_idx; + A_UINT32 shadow_tail_idx; + } ipc_ring_stats[HTT_STATS_DFS_IPC_RING_COUNT]; +} htt_stats_dfs_ipc_ring_tlv; + + /*======================= End Regulatory stats ==================== } */ /* @@ -16666,6 +17889,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_PKT_TYPE_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_PKT_TYPE_M) >> \ HTT_STATS_WHAL_SELFGEN_PKT_TYPE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_PKT_TYPE_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_PKT_TYPE_GET(_var) #define HTT_STATS_WHAL_SELFGEN_PKT_TYPE_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_PKT_TYPE, _val); \ @@ -16675,6 +17901,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_NSS_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_NSS_M) >> \ HTT_STATS_WHAL_SELFGEN_NSS_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_NSS_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_NSS_GET(_var) #define HTT_STATS_WHAL_SELFGEN_NSS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_NSS, _val); \ @@ -16684,6 +17913,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_RATE_MCS_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_RATE_MCS_M) >> \ HTT_STATS_WHAL_SELFGEN_RATE_MCS_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_RATE_MCS_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_RATE_MCS_GET(_var) #define HTT_STATS_WHAL_SELFGEN_RATE_MCS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_RATE_MCS, _val); \ @@ -16693,6 +17925,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_BANDWIDTH_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_BANDWIDTH_M) >> \ HTT_STATS_WHAL_SELFGEN_BANDWIDTH_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_BANDWIDTH_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_BANDWIDTH_GET(_var) #define HTT_STATS_WHAL_SELFGEN_BANDWIDTH_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_BANDWIDTH, _val); \ @@ -16702,6 +17937,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_CHAIN_MASK_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_CHAIN_MASK_M) >> \ HTT_STATS_WHAL_SELFGEN_CHAIN_MASK_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_CHAIN_MASK_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_CHAIN_MASK_GET(_var) #define HTT_STATS_WHAL_SELFGEN_CHAIN_MASK_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_CHAIN_MASK, _val); \ @@ -16711,6 +17949,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_ALT_CHAIN_MASK_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_ALT_CHAIN_MASK_M) >> \ HTT_STATS_WHAL_SELFGEN_ALT_CHAIN_MASK_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_ALT_CHAIN_MASK_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_ALT_CHAIN_MASK_GET(_var) #define HTT_STATS_WHAL_SELFGEN_ALT_CHAIN_MASK_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_ALT_CHAIN_MASK, _val); \ @@ -16730,6 +17971,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_TX_PWR_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_TX_PWR_M) >> \ HTT_STATS_WHAL_SELFGEN_TX_PWR_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_TX_PWR_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_TX_PWR_GET(_var) #define HTT_STATS_WHAL_SELFGEN_TX_PWR_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_TX_PWR, _val); \ @@ -16739,6 +17983,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_TX_PWR_1_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_TX_PWR_1_M) >> \ HTT_STATS_WHAL_SELFGEN_TX_PWR_1_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_TX_PWR_1_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_TX_PWR_1_GET(_var) #define HTT_STATS_WHAL_SELFGEN_TX_PWR_1_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_TX_PWR_1, _val); \ @@ -16748,6 +17995,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_M) >> \ HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_ALT_TX_PWR_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_GET(_var) #define HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR, _val); \ @@ -16757,6 +18007,9 @@ typedef struct { #define HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_1_GET(_var) \ (((_var) & HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_1_M) >> \ HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_1_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_FRAME_DATA_ALT_TX_PWR_1_GET(_var) \ + HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_1_GET(_var) #define HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_1_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_ALT_TX_PWR_1, _val); \ @@ -16801,6 +18054,8 @@ typedef struct { (((_var).channel_context.channel_info & \ HTT_STATS_WHAL_SELFGEN_CHANNEL_MHZ_M) >> \ HTT_STATS_WHAL_SELFGEN_CHANNEL_MHZ_S) +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_CHANNEL_CONTEXT_MHZ_GET(word) \ + (((word) >> 0) & 0xffff) #define HTT_STATS_WHAL_SELFGEN_CHANNEL_MHZ_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_CHANNEL_MHZ, _val); \ @@ -16812,6 +18067,8 @@ typedef struct { (((_var).channel_context.channel_info & \ HTT_STATS_WHAL_SELFGEN_CHANNEL_FLAGS_M) >> \ HTT_STATS_WHAL_SELFGEN_CHANNEL_FLAGS_S) +#define HTT_STATS_TX_SELFGEN_RESP_FRAME_STATS_CHANNEL_CONTEXT_FLAGS_GET(word) \ + (((word) >> 16) & 0xffff) #define HTT_STATS_WHAL_SELFGEN_CHANNEL_FLAGS_SET(_var, _val) \ do { \ HTT_CHECK_SET_VAL(HTT_STATS_WHAL_SELFGEN_CHANNEL_FLAGS, _val); \ @@ -16894,5 +18151,995 @@ typedef struct { A_INT32 nmse_chain[HTT_STATS_MAX_CHAINS][HTT_STATS_NUM_DPD_CAL_TABLE]; } htt_stats_dpd_hw_cal_results_tlv; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + A_UINT32 mu_rts_tx_success; + A_UINT32 mu_rts_tx_fail; + A_UINT32 mu_rts_rx_success; + A_UINT32 bsrp_ntb_tx_success; + A_UINT32 bsrp_ntb_tx_fail; + A_UINT32 bsrp_ntb_rx_success; + A_UINT32 bsrp_tx_success; + A_UINT32 bsrp_tx_fail; + A_UINT32 bsrp_rx_success; + A_UINT32 npca_tx_bw[HTT_TX_PDEV_STATS_NUM_BN_BW_COUNTERS]; + A_UINT32 npca_su_tx_punctured_mode[HTT_TX_PDEV_STATS_NUM_PUNCTURED_MODE_COUNTERS]; + A_UINT32 npca_rx_bw[HTT_TX_PDEV_STATS_NUM_BN_BW_COUNTERS]; + A_UINT32 npca_su_rx_punctured_mode[HTT_TX_PDEV_STATS_NUM_BN_BW_COUNTERS]; + A_UINT32 schd_cmd_result_npca[HTT_STATS_MAX_SCH_CMD_RESULT]; + htt_tx_rate_stats_t npca_per_bw[HTT_TX_PDEV_STATS_NUM_BN_BW_COUNTERS]; + htt_tx_rate_stats_t npca_per_tx_su_punctured_mode[HTT_TX_PDEV_STATS_NUM_PUNCTURED_MODE_COUNTERS]; +} htt_stats_npca_tlv; + + +/*===================== Start PHY DPD/TPC Debug stats ==================== { */ + +typedef enum { + HTT_STATS_PHY_DPD_TPC_DEBUG_SUBTYPE_DPD = 0, + HTT_STATS_PHY_DPD_TPC_DEBUG_SUBTYPE_TPC = 1, + HTT_STATS_PHY_DPD_TPC_DEBUG_SUBTYPE_MAX +} htt_stats_phy_dpd_tpc_debug_subtype_t; + +/* + * htt_stats_phy_dpd_debug_params_v1 + * Per-table DPD debug parameters. All fields packed into A_UINT32 words. + * + * Word 0: dpd_out_nmse_x10 (signed 32-bit, 1/10 dB units) + * Word 1: pa_max_avg_tx (unsigned 32-bit, dBm units) + * Word 2: dpd_training_cnt (unsigned 32-bit) + * Word 3: dpd_scaling (unsigned 32-bit) + * Word 4: BIT[15:0] dpd_training_power_db8 (signed 16-bit, 1/8 dB units) + * BIT[31:16] dpd_out_sq (unsigned 16-bit) + * Word 5: BIT[ 7:0] dpd_state + * BIT[15:8] dpd_in_glut + * BIT[23:16] dpd_in_tx_gain + * BIT[31:24] dpd_out_train_dac_gain (signed 8-bit) + * Word 6: BIT[ 7:0] dpd_in_gc (signed 8-bit) + * BIT[15:8] dpd_out_sq_idx + * BIT[23:16] dpd_out_train_rx_gain_idx + * BIT[31:24] dpd_in_kernel_sel + */ +typedef struct { + A_INT32 dpd_out_nmse_x10; + A_UINT32 pa_max_avg_tx; + A_UINT32 dpd_training_cnt; + A_UINT32 dpd_scaling; + union { + A_UINT32 dpd_training_power_db8__dpd_out_sq; + struct { + A_UINT32 + dpd_training_power_db8: 16, + dpd_out_sq: 16; + }; + }; + union { + A_UINT32 dpd_state__dpd_in_glut__dpd_in_tx_gain__dpd_out_train_dac_gain; + struct { + A_UINT32 + dpd_state: 8, + dpd_in_glut: 8, + dpd_in_tx_gain: 8, + dpd_out_train_dac_gain: 8; + }; + }; + union { + A_UINT32 dpd_in_gc__dpd_out_sq_idx__dpd_out_train_rx_gain_idx__dpd_in_kernel_sel; + struct { + A_UINT32 + dpd_in_gc: 8, + dpd_out_sq_idx: 8, + dpd_out_train_rx_gain_idx: 8, + dpd_in_kernel_sel: 8; + }; + }; +} htt_stats_phy_dpd_debug_params_v1; + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_M 0x0000ffff +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_S 0 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_M 0xffff0000 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_S 16 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_M 0x000000ff +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_S 0 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_M 0x0000ff00 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_S 8 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_M 0x00ff0000 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_S 16 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_M 0xff000000 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_S 24 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_M 0x000000ff +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_S 0 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_M 0x0000ff00 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_S 8 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_M 0x00ff0000 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_S 16 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_M 0xff000000 +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_S 24 + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_TRAINING_POWER_DB8_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_TRAINING_POWER_DB8_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_OUT_SQ_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_STATE_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_STATE_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_IN_GLUT_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GLUT_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_IN_TX_GAIN_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_TX_GAIN_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_OUT_TRAIN_DAC_GAIN_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_DAC_GAIN_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_IN_GC_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_GET(_var) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_GC_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_OUT_SQ_IDX_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_SQ_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_OUT_TRAIN_RX_GAIN_IDX_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_OUT_TRAIN_RX_GAIN_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_S) +/* provide alias macro that uses preferred naming convention */ +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_DPD_DEBUG_PARAMS_DPD_IN_KERNEL_SEL_GET(_var) \ + HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_GET(_var) +#define HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_PARAMS_IN_KERNEL_SEL_S)); \ + } while (0) + +/* + * htt_stats_phy_dpd_debug_chain_v1_tlv + * One TLV per chain. chain_idx identifies which chain this TLV carries. + * + * Word 0 (after tlv_hdr): + * BIT[ 7: 0] - chain_idx + * BIT[15: 8] - version + * BIT[31:16] - chainmask + * Word 1: + * BIT[ 7: 0] - num_gain_idx + * BIT[31: 8] - reserved + */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + union { + A_UINT32 chain_idx__version__chainmask; + struct { + A_UINT32 + chain_idx: 8, + version: 8, + chainmask: 16; + }; + }; + union { + A_UINT32 num_gain_idx__reserved; + struct { + A_UINT32 + num_gain_idx: 8, + reserved: 24; + }; + }; + htt_stats_phy_dpd_debug_params_v1 dpd_debug_params[HTT_STATS_NUM_DPD_CAL_TABLE]; +} htt_stats_phy_dpd_debug_chain_v1_tlv; + +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_M 0x000000ff +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_S 0 +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_M 0x0000ff00 +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_S 8 +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_M 0xffff0000 +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_S 16 + +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_M 0x000000ff +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_S 0 + +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_S) +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAIN_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_S) +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_VERSION_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_S) +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_CHAINMASK_S)); \ + } while (0) + +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_M) >> \ + HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_S) +#define HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_DPD_DEBUG_CHAIN_V1_NUM_GAIN_IDX_S)); \ + } while (0) + +/* + * htt_stats_phy_tpc_debug_chain_v1_tlv + * One TLV per chain. All sub-byte/sub-word fields packed into A_UINT32 words. + * + * Word 0 (after tlv_hdr): + * BIT[ 7: 0] - chain_idx + * BIT[15: 8] - version + * BIT[31:16] - chainmask + * + * Words 1-11: TPC per-chain debug params (all A_UINT32) + */ +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /* + * Word 0: BIT[ 7: 0]=chain_idx + * BIT[15: 8]=version + * BIT[31:16]=chainmask + */ + union { + A_UINT32 chain_idx__version__chainmask; + struct { + A_UINT32 + chain_idx: 8, + version: 8, + chainmask: 16; + }; + }; + /* + * Word 1: BIT[7:0]=lat_glut_idx, + * BIT[15:8]=lat_tx_gain_idx, + * BIT[23:16]=lat_dac_gain(s8), + * BIT[31:24]=lat_target_power(s8) + */ + union { + A_UINT32 lat_glut_idx__lat_tx_gain_idx__lat_dac_gain__lat_target_power; + struct { + A_UINT32 + lat_glut_idx: 8, + lat_tx_gain_idx: 8, + lat_dac_gain: 8, + lat_target_power: 8; + }; + }; + /* + * Word 2: BIT[15:0]=lat_acc_clpc_error(s16), + * BIT[31:16]=lat_clpc_err(s16) + */ + union { + A_UINT32 lat_acc_clpc_error__lat_clpc_err; + struct { + A_UINT32 + lat_acc_clpc_error: 16, + lat_clpc_err: 16; + }; + }; + /* + * Word 3: BIT[15:0]=lat_meas_pwr(s16), + * BIT[23:16]=lat_wsi_temp_valid, + * BIT[31:24]=lat_wsi_full_pkt_pwr_valid + */ + union { + A_UINT32 lat_meas_pwr__lat_wsi_temp_valid__lat_wsi_full_pkt_pwr_valid; + struct { + A_UINT32 + lat_meas_pwr: 16, + lat_wsi_temp_valid: 8, + lat_wsi_full_pkt_pwr_valid: 8; + }; + }; + /* + * Word 4: BIT[7:0]=lat_wsi_pream_pwr_valid, + * BIT[23:8]=lat_wsi_temp(s16), + * BIT[31:24]=lat_wsi_full_pkt_pwr + */ + union { + A_UINT32 lat_wsi_pream_pwr_valid__lat_wsi_temp__lat_wsi_full_pkt_pwr; + struct { + A_UINT32 + lat_wsi_pream_pwr_valid: 8, + lat_wsi_temp: 16, + lat_wsi_full_pkt_pwr: 8; + }; + }; + /* + * Word 5: BIT[7:0]=lat_wsi_pream_pwr, + * BIT[15:8]=lat_wsi_tx_gain_idx, + * BIT[23:16]=lat_wsi_tpc_pdet_gain_idx, + * BIT[31:24]=lat_wsi_tpc_attn + */ + union { + A_UINT32 lat_wsi_pream_pwr__lat_wsi_tx_gain_idx__lat_wsi_tpc_pdet_gain_idx__lat_wsi_tpc_attn; + struct { + A_UINT32 + lat_wsi_pream_pwr: 8, + lat_wsi_tx_gain_idx: 8, + lat_wsi_tpc_pdet_gain_idx: 8, + lat_wsi_tpc_attn: 8; + }; + }; + /* + * Word 6: BIT[7:0]=glut_dac_gain_cal(s8), + * BIT[15:8]=glut_max_dac_gain_cal(s8), + * BIT[23:16]=dpd_dac_gain_cal(s8), + * BIT[31:24]=dpd_tx_gain_idx_cal + */ + union { + A_UINT32 glut_dac_gain_cal__glut_max_dac_gain_cal__dpd_dac_gain_cal__dpd_tx_gain_idx_cal; + struct { + A_UINT32 + glut_dac_gain_cal: 8, + glut_max_dac_gain_cal: 8, + dpd_dac_gain_cal: 8, + dpd_tx_gain_idx_cal: 8; + }; + }; + /* + * Word 7: BIT[7:0]=target_pwr_clpc_thr_corr(s8), + * BIT[15:8]=olpc_mode, + * BIT[23:16]=wsi_timeout, + * BIT[31:24]=target_pwr_clpc_thr_update(s8) + */ + union { + A_UINT32 target_pwr_clpc_thr_corr__olpc_mode__wsi_timeout__target_pwr_clpc_thr_update; + struct { + A_UINT32 + target_pwr_clpc_thr_corr: 8, + olpc_mode: 8, + wsi_timeout: 8, + target_pwr_clpc_thr_update: 8; + }; + }; + /* + * Word 8: BIT[7:0]=ro_temp_valid, + * BIT[15:8]=ro_full_pkt_pwr_valid, + * BIT[23:16]=ro_pream_pwr_valid, + * BIT[31:24]=reserved + */ + union { + A_UINT32 ro_temp_valid__ro_full_pkt_pwr_valid__ro_pream_pwr_valid; + struct { + A_UINT32 + ro_temp_valid: 8, + ro_full_pkt_pwr_valid: 8, + ro_pream_pwr_valid: 8, + reserved: 8; + }; + }; + /* + * Word 9: BIT[15:0]=ro_temp(s16), + * BIT[23:16]=ro_full_pkt_pwr, + * BIT[31:24]=ro_pream_pwr + */ + union { + A_UINT32 ro_temp__ro_full_pkt_pwr__ro_pream_pwr; + struct { + A_UINT32 + ro_temp: 16, + ro_full_pkt_pwr: 8, + ro_pream_pwr: 8; + }; + }; + /* + * Word 10: BIT[7:0]=ro_tpc_fe_sel, + * BIT[15:8]=ro_full_pkt_avg_out, + * BIT[23:16]=ro_lat_dc, + * BIT[31:24]=ro_pdacc_avg_out + */ + union { + A_UINT32 ro_tpc_fe_sel__ro_full_pkt_avg_out__ro_lat_dc__ro_pdacc_avg_out; + struct { + A_UINT32 + ro_tpc_fe_sel: 8, + ro_full_pkt_avg_out: 8, + ro_lat_dc: 8, + ro_pdacc_avg_out: 8; + }; + }; + /* + * Word 11: BIT[15:0]=temp_per_chain, + * BIT[23:16]=cal_cmd, + * BIT[31:24]=cal_time + */ + union { + A_UINT32 temp_per_chain__cal_cmd__cal_time; + struct { + A_UINT32 + temp_per_chain: 16, + cal_cmd: 8, + cal_time: 8; + }; + }; + /* + * Word 12: BIT[7:0]=cal_result, + * BIT[31:8]=reserved + */ + union { + A_UINT32 cal_result__reserved; + struct { + A_UINT32 + cal_result: 8, + reserved2: 24; + }; + }; +} htt_stats_phy_tpc_debug_chain_v1_tlv; + +/* TPC chain header GET/SET macros */ +/* word 0 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_M 0xffff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_S 16 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAIN_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_VERSION_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CHAINMASK_S)); \ + } while (0) + +/* word 1 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_GLUT_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TX_GAIN_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_DAC_GAIN_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_TARGET_POWER_S)); \ + } while (0) + +/* word 2 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_M 0x0000ffff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_M 0xffff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_S 16 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_ACC_CLPC_ERROR_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_CLPC_ERR_S)); \ + } while (0) + +/* word 3 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_M 0x0000ffff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_MEAS_PWR_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_VALID_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_VALID_S)); \ + } while (0) + +/* word 4 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_M 0x00ffff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_VALID_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TEMP_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_FULL_PKT_PWR_S)); \ + } while (0) + +/* word 5 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_PREAM_PWR_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TX_GAIN_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_PDET_GAIN_IDX_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_LAT_WSI_TPC_ATTN_S)); \ + } while (0) + +/* word 6 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_DAC_GAIN_CAL_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_GLUT_MAX_DAC_GAIN_CAL_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_DAC_GAIN_CAL_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_DPD_TX_GAIN_IDX_CAL_S)); \ + } while (0) + +/* word 7 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_CORR_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_OLPC_MODE_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_WSI_TIMEOUT_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TARGET_PWR_CLPC_THR_UPDATE_S)); \ + } while (0) + +/* word 8 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_S 16 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_VALID_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_VALID_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_VALID_S)); \ + } while (0) + +/* word 9 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_M 0x0000ffff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TEMP_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_PWR_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PREAM_PWR_S)); \ + } while (0) + +/* word 10 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_M 0x0000ff00 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_S 8 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_TPC_FE_SEL_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_FULL_PKT_AVG_OUT_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_LAT_DC_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_RO_PDACC_AVG_OUT_S)); \ + } while (0) + +/* word 11 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_M 0x0000ffff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_S 0 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_M 0x00ff0000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_S 16 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_M 0xff000000 +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_S 24 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_TEMP_PER_CHAIN_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_CMD_S)); \ + } while (0) + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_TIME_S)); \ + } while (0) + +/* word 12 */ +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_M 0x000000ff +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_S 0 + +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_GET(_var) \ + (((_var) & HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_M) >> \ + HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_S) +#define HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT, _val); \ + ((_var) |= ((_val) << HTT_STATS_PHY_TPC_DEBUG_CHAIN_V1_CAL_RESULT_S)); \ + } while (0) + +/*===================== End PHY DPD/TPC Debug stats ==================== } */ + #endif /* __HTT_STATS_H__ */ diff --git a/fw/wmi_services.h b/fw/wmi_services.h index dcd795d1710f..18acd1f63fd7 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -778,6 +778,85 @@ typedef enum { WMI_SERVICE_IDLE_POWER_INDICATE_SUPPORT = 498, /* Indicates FW support to add Radar type and domain in WMI radar event */ WMI_SERVICE_RADAR_FLAGS_TYPE_SUPPORT = 499, + /* Indicates FW support to perform Master migration when master peer gets deleted */ + WMI_SERVICE_ML_PEER_MASTER_MIGRATION_SUPPORT = 500, + WMI_SERVICE_NAN_AP_ASSISTED_DFS_OPERATION_SUPPORT = 501, /* Indicates FW supports NAN DFS operation */ + /* + * Indicates FW supports TDLS Stats command/event, + * used for sending TDLS connect info and TDLS data stats + */ + WMI_SERVICE_TDLS_STATS_SUPPORT = 502, + WMI_SERVICE_L3_HEADER_PADDING_ENABLE = 503, + + /* Indicates FW supports Extended OUI Action IDs */ + WMI_SERVICE_SUPPORTED_EXT_OUI_ACTION_IDS = 504, + + /* + * Indicates FW supports cloud based control for whitelist or blacklist + * AP configuration + */ + WMI_SERVICE_SUPPORT_WHITELIST_BLACKLIST_AP_CONFIG = 505, + /* + * Indicate FW support for PASSTHRU VDEV AMPDU Aggregation + * and Rate Adaptation + */ + WMI_SERVICE_PASSTHRU_VDEV_AMPDU_RA_SUPPORT = 506, + /* FW supports CalDB transmission over WMI */ + WMI_SERVICE_CALDB_OVER_WMI = 507, + /* Indicates FW Supports RTT Proximity Detection (USD ranging) */ + WMI_SERVICE_RTT_PD = 508, + /* Indicates FW support for Channel Hopping Status Report*/ + WMI_SERVICE_VDEV_CHAN_HOP_STATUS_REPORT = 509, + /* Indicates FW support for Predictive roaming */ + WMI_SERVICE_ROAMING_PREDICTIVE = 510, + + /* Services related to MAPC / C-TDMA (802.11bn) */ + WMI_SERVICE_CO_AP_CTDMA_SUPPORT = 511, + WMI_SERVICE_UHR_CO_AP_CTDMA_TB_PPDU_SUPPORT = 512, + WMI_SERVICE_UHR_CO_AP_CTDMA_TXOP_RETURN_SUPPORT = 513, + + /* + * Indicates FW supports cloud based control for Uplink Tx Beamformer + * AP configuration + */ + WMI_SERVICE_SUPPORT_UL_TX_BEAMFORMER_AP_CONFIG = 514, + + /* Indicates FW supports enable/disable TWT per vdev */ + WMI_SERVICE_STA_TWT_EN_DIS_VDEV_SUPPORT = 515, + + /* + * Indicates FW supports AWGN interference status request via + * WMI_PDEV_PARAM_AWGN_INT_STATUS_REQUEST, allowing host to query + * the current AWGN CCA segment bitmap (awgn_prev_int_seg) which + * is sent back immediately via WMI_DCS_INTERFERENCE_EVENTID. + */ + WMI_SERVICE_AWGN_INT_STATUS_REQUEST_SUPPORT = 516, + + WMI_SERVICE_WMI_ANOMALY_REPORTING = 517, + + /* + * Indicates that FW supports C-TAS power indication reporting and + * power limit enquiring through cmds WMI_SET_MODIFY_TX_PLIM_CMDID, + * WMI_GET_AVG_TX_POWER_CMDID and WMI_GET_TX_POWER_CALLING_CMDID. + */ + WMI_SERVICE_CTAS_PLIM_INDICATION_SUPPORT = 518, + + /* + * Indicates FW supports NAN in offload mode + * (supplicant-based NAN offload mode architecture). + */ + WMI_SERVICE_NAN_OFFLOAD_MODE_SUPPORT = 519, + + /* WMI_SERVICE_PDEV_SET_CUMAC_CHIP_CMD_SUPPORT: + * FW supports handling WMI_PDEV_SET_CUMAC_CHIP_CMDID. + * When this service bit is set in wmi_service_ready, the host can + * set WMI_RSRC_CFG_HOST_SERVICE_FLAG_CUMAC_CMD_SUPPORT in + * wmi_resource_config.host_service_flags to indicate it will send + * WMI_PDEV_SET_CUMAC_CHIP_CMDID to trigger wal_mlo_cumac_init(). + * If the host does not set this flag, FW will call wal_mlo_cumac_init() + * from wal_mlo_soc_init() with the default chip id. + */ + WMI_SERVICE_PDEV_SET_CUMAC_CHIP_CMD_SUPPORT = 520, WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index a5e7b230197e..05e4a9aaa6c5 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1613,6 +1613,51 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_set_cumac_chip_id_confirmation_event_fixed_param, WMITLV_TAG_STRUC_wmi_iface_ipi_stats, WMITLV_TAG_STRUC_wmi_peer_uhr_npca_op_params, + WMITLV_TAG_STRUC_wmi_ndp_channel_info_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_uhr_omp_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_uhr_omp_npca_params, + WMITLV_TAG_STRUC_wmi_nan_dfs_channel_availability_ind_event_fixed_param, + WMITLV_TAG_STRUC_wmi_request_tdls_stats_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_tdls_stats_event_fixed_param, + WMITLV_TAG_STRUC_wmi_tdls_connect_info_stats, + WMITLV_TAG_STRUC_wmi_tdls_data_stats, + WMITLV_TAG_STRUC_wmi_get_chipset_logging_stats_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_get_chipset_logging_stats_event_fixed_param, + WMITLV_TAG_STRUC_wmi_anomaly_report_hdr, + WMITLV_TAG_STRUC_wmi_anomaly_entry_t, + WMITLV_TAG_STRUC_wmi_peer_uhr_omp_sta_dps_params, + WMITLV_TAG_STRUC_wmi_rtt_peer_meas_capabilities, + WMITLV_TAG_STRUC_wmi_rtt_peer_meas_req_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_rtt_peer_meas_req_peer_info, + WMITLV_TAG_STRUC_wmi_rtt_peer_meas_cancel_meas_cmd_fix_param, + WMITLV_TAG_STRUC_wmi_rtt_peer_meas_report_event_fixed_param, + WMITLV_TAG_STRUC_wmi_rtt_peer_meas_report_peer_meas_result_info, + WMITLV_TAG_STRUC_wmi_vdev_get_chan_hop_status_report_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_chan_hop_slot_status, + WMITLV_TAG_STRUC_wmi_vdev_chan_hop_status_report_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_set_mapc_params_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mapc_cmn_params, + WMITLV_TAG_STRUC_wmi_mapc_cotdma_params, + WMITLV_TAG_STRUC_wmi_mapc_cosr_params, + WMITLV_TAG_STRUC_wmi_mapc_cobf_params, + WMITLV_TAG_STRUC_wmi_mapc_cortwt_params, + WMITLV_TAG_STRUC_wmi_lpi_scan_result_ind_fixed_param, + WMITLV_TAG_STRUC_wmi_lpi_ap_info_t, + WMITLV_TAG_STRUC_wmi_nan_disc_service_rsp_event_fixed_param, + WMITLV_TAG_STRUC_wmi_nan_disc_match_event_fixed_param, + WMITLV_TAG_STRUC_wmi_nan_disc_service_req_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_nan_disc_cancel_service_req_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_nan_disc_service_req_terminated_event_fixed_param, + WMITLV_TAG_STRUC_wmi_set_modify_tx_plim_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_get_avg_tx_power_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_get_tx_power_calling_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_modify_tx_plim_event_fixed_param, + WMITLV_TAG_STRUC_wmi_avg_tx_power_event_fixed_param, + WMITLV_TAG_STRUC_wmi_avg_tx_power_region_per_antenna_chain, + WMITLV_TAG_STRUC_wmi_plimit_table_event_fixed_param, + WMITLV_TAG_STRUC_wmi_tx_power_per_antenna_chain, + WMITLV_TAG_STRUC_wmi_athdiag_read_write_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_athdiag_read_write_event_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2217,6 +2262,19 @@ typedef enum { OP(WMI_TWT_ADD_CH_USAGE_CMDID) \ OP(WMI_COEX_GET_POLICY_STATS_CMDID) \ OP(WMI_PDEV_SET_CUMAC_CHIP_CMDID) \ + OP(WMI_PEER_UHR_OMP_CMDID) \ + OP(WMI_REQUEST_TDLS_STATS_CMDID) \ + OP(WMI_GET_CHIPSET_LOGGING_STATS_CMDID) \ + OP(WMI_RTT_PEER_MEAS_REQ_CMDID) \ + OP(WMI_RTT_PEER_MEAS_CANCEL_CMDID) \ + OP(WMI_VDEV_GET_CHAN_HOP_STATUS_REPORT_CMDID) \ + OP(WMI_PEER_SET_MAPC_PARAMS_CMDID) \ + OP(WMI_NAN_DISC_SERVICE_REQ_CMDID) \ + OP(WMI_NAN_DISC_CANCEL_SERVICE_REQ_CMDID) \ + OP(WMI_SET_MODIFY_TX_PLIM_CMDID) \ + OP(WMI_GET_AVG_TX_POWER_CMDID) \ + OP(WMI_GET_TX_POWER_CALLING_CMDID) \ + OP(WMI_ATHDIAG_READ_WRITE_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2580,6 +2638,21 @@ typedef enum { OP(WMI_VDEV_CURRENT_OPERATING_PARAM_EVENTID) \ OP(WMI_COEX_GET_POLICY_STATS_EVENTID) \ OP(WMI_PDEV_SET_CUMAC_CHIP_ID_CONFIRMATION_EVENTID) \ + OP(WMI_NDP_CHANNEL_INFO_EVENTID) \ + OP(WMI_NAN_DFS_CHANNEL_AVAILABILITY_IND_EVENTID) \ + OP(WMI_TDLS_STATS_EVENTID) \ + OP(WMI_GET_CHIPSET_LOGGING_STATS_EVENTID) \ + OP(WMI_ANOMALY_REPORT_EVENTID) \ + OP(WMI_RTT_PEER_MEAS_REPORT_EVENTID) \ + OP(WMI_VDEV_CHAN_HOP_STATUS_REPORT_EVENTID) \ + OP(WMI_LPI_SCAN_RESULT_EVENTID_V2) \ + OP(WMI_NAN_DISC_SERVICE_RSP_EVENTID) \ + OP(WMI_NAN_DISC_MATCH_EVENTID) \ + OP(WMI_NAN_DISC_SERVICE_REQ_TERMINATED_EVENTID) \ + OP(WMI_MODIFY_TX_PLIM_EVENTID) \ + OP(WMI_AVG_TX_POWER_EVENTID) \ + OP(WMI_PLIMIT_TABLE_EVENTID) \ + OP(WMI_ATHDIAG_READ_WRITE_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2993,8 +3066,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_WMM_PARAMS_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_channel, dbw_chan, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dbw_chan_info, dbw_chan_info, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_smd_params, smd_params, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_uhr_config, uhr_config, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_smd_params, smd_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_uhr_config, uhr_config, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_uhr_ap_npca_params, npca_params, WMITLV_SIZE_VAR) /* NOTE: * Any new TLV addition in WMI_VDEV_START_REQUEST_CMDID needs to be included as * TLV in WMI_VDEV_UNIFIED_CONNECT_CMDID as well to maintain compatibility. @@ -3184,6 +3258,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_V2_CMDID); +#define WMITLV_TABLE_WMI_PEER_UHR_OMP_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_uhr_omp_cmd_fixed_param, wmi_peer_uhr_omp_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_uhr_omp_npca_params, peer_omp_npca_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_uhr_omp_sta_dps_params, peer_omp_dps_params, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_UHR_OMP_CMDID); + /* Peer Set Rate Report Condition Cmd */ #define WMITLV_TABLE_WMI_PEER_SET_RATE_REPORT_CONDITION_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_set_rate_report_condition_fixed_param, wmi_peer_set_rate_report_condition_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -3404,6 +3484,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_UNIFIED_LL_GET_STA_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_WLM_STATS_CMDID); +/* Get chipset debug log stats Cmd */ +#define WMITLV_TABLE_WMI_GET_CHIPSET_LOGGING_STATS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_chipset_logging_stats_cmd_fixed_param, wmi_get_chipset_logging_stats_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_GET_CHIPSET_LOGGING_STATS_CMDID); + /* Network list offload config Cmd */ #define WMITLV_TABLE_WMI_NETWORK_LIST_OFFLOAD_CONFIG_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nlo_config_cmd_fixed_param, wmi_nlo_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ @@ -4373,15 +4459,22 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_PREAUTH_START_EVENTID); WMITLV_CREATE_PARAM_STRUC(WMI_LPI_RESULT_EVENTID); /* LPI Status Event */ -#define WMITLV_TABLE_WMI_LPI_STATUS_EVENTID(id,op,buf,len) \ +#define WMITLV_TABLE_WMI_LPI_STATUS_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_status_event_fixed_param, wmi_lpi_status_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_LPI_STATUS_EVENTID); /* LPI Handoff Event */ -#define WMITLV_TABLE_WMI_LPI_HANDOFF_EVENTID(id,op,buf,len) \ +#define WMITLV_TABLE_WMI_LPI_HANDOFF_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_handoff_event_fixed_param, wmi_lpi_handoff_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_LPI_HANDOFF_EVENTID); +/* LPI Scan Result Indication Event */ +#define WMITLV_TABLE_WMI_LPI_SCAN_RESULT_EVENTID_V2(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_lpi_scan_result_ind_fixed_param, wmi_lpi_scan_result_ind_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, freq_list, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_lpi_ap_info_t, ap_array, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_LPI_SCAN_RESULT_EVENTID_V2); + /* Thermal Manager Params*/ #define WMITLV_TABLE_WMI_THERMAL_MGMT_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_thermal_mgmt_cmd_fixed_param, wmi_thermal_mgmt_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -4423,7 +4516,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_NAN_ENABLE_CMDID); #define WMITLV_TABLE_WMI_NAN_CONFIG_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_config_cmd_fixed_param, wmi_nan_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_nan_ctrl_config_param, nan_ctrl_config, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_nan_disc_band_config_param, nan_disc_band_config, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_nan_disc_band_config_param, nan_disc_band_config, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, nan_availability_attributes_data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_NAN_CONFIG_CMDID); /* NAN Disable Command */ @@ -4451,6 +4545,92 @@ WMITLV_CREATE_PARAM_STRUC(WMI_NAN_PEER_SCHEDULE_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_caps_ie_data, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_NAN_PEER_PARAMS_CMDID); +/** + * NAN Discovery Service Request Command + * (NL80211_CMD_ADD_NAN_FUNCTION equivalent) + * + * Carries all parameters needed to register a NAN Publish, Subscribe, or + * Follow-up function with the firmware in offload mode. + * + * TLV layout (in order): + * + * [0] wmi_nan_disc_service_req_cmd_fixed_param fixed_param + * All fixed scalar fields: vdev_id, service_req_type, instance_id, ttl, + * publish_type, followup_instance_id, followup_requestor_id, + * followup_dest, sdea_ctrl, pairing_bootstrap_methods, srf_bf_idx, + * srf_include, service_req_flags, and all _len / _num count fields. + * + * [1] A_UINT8 service_id[] + * 6-byte NAN Service ID (SHA-256 of service name, first 6 bytes), + * zero-padded to 8 bytes for 4-byte WMI alignment. + * Maps to: NL80211_ATTR_NAN_FUNC_SERVICE_ID / cfg80211_nan_func.service_id + * + * [2] A_UINT8 serv_spec_info[] + * Service Specific Info — opaque application payload, max 255 bytes. + * Valid byte count given by fixed_param.serv_spec_info_len. + * Maps to: NL80211_ATTR_NAN_FUNC_SERVICE_INFO / + * cfg80211_nan_func.serv_spec_info + * + * [3] A_UINT8 srf_bf[] + * SRF (Service Range Filter) Bloom filter data. + * Valid byte count given by fixed_param.srf_bf_len. + * Maps to: NL80211_ATTR_NAN_FUNC_SRF_BF / cfg80211_nan_func.srf_bf + * + * [4] wmi_mac_addr srf_macs[] + * SRF MAC address filter list (WMITLV_TAG_ARRAY_FIXED_STRUC). + * Entry count given by fixed_param.num_srf_macs. + * Maps to: NL80211_ATTR_NAN_FUNC_SRF_MAC_ADDRS / + * cfg80211_nan_func.srf_macs + * + * [5] A_UINT8 rx_match_filter[] + * RX match filter byte stream (ieee80211 protocol order). + * Valid byte count given by fixed_param.rx_match_filter_len. + * Maps to: NL80211_ATTR_NAN_FUNC_RX_MATCH_FILTER / + * cfg80211_nan_func.rx_filters + * + * [6] A_UINT8 tx_match_filter[] + * TX match filter byte stream (ieee80211 protocol order). + * Valid byte count given by fixed_param.tx_match_filter_len. + * Maps to: NL80211_ATTR_NAN_FUNC_TX_MATCH_FILTER / + * cfg80211_nan_func.tx_filters + * + * [7] A_UINT32 cipher_suites[] + * Array of supported NAN cipher suite IDs (CSIDs). + * Entry count given by fixed_param.num_cipher_suites. + * Maps to: NL80211_ATTR_NAN_FUNC_CIPHER_SUITES / + * cfg80211_nan_func.cipher_suites + * + * [8] A_UINT8 nd_pmk[] + * NAN Data Path PMK, exactly 32 bytes when present. + * Present and valid only when + * WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_ND_PMK_VALID( + * fixed_param.service_req_flags) == 1; + * zero-length TLV otherwise. + * Maps to: NL80211_ATTR_NAN_FUNC_ND_PMK / cfg80211_nan_func.nd_pmk + */ +#define WMITLV_TABLE_WMI_NAN_DISC_SERVICE_REQ_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_disc_service_req_cmd_fixed_param, wmi_nan_disc_service_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, service_id, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, serv_spec_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, srf_bf, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_FIXED_STRUC, wmi_mac_addr, srf_macs, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, rx_match_filter, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, tx_match_filter, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, cipher_suites, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, nd_pmk, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, extra_nan_attrs, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DISC_SERVICE_REQ_CMDID); + +/** NAN Discovery Delete Function Cmd + * + * TLV (tag length value) parameters follow the + * wmi_nan_disc_cancel_service_req_cmd_fixed_param structure. The TLV's are: + * wmi_nan_disc_cancel_service_req_cmd_fixed_param fixed_param; + */ +#define WMITLV_TABLE_WMI_NAN_DISC_CANCEL_SERVICE_REQ_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_disc_cancel_service_req_cmd_fixed_param, wmi_nan_disc_cancel_service_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DISC_CANCEL_SERVICE_REQ_CMDID); + /* NAN Data Get Capabilities Cmd */ #define WMITLV_TABLE_WMI_NDI_GET_CAP_REQ_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_ndi_get_cap_req_fixed_param, wmi_ndi_get_cap_req_fixed_param_PROTOTYPE, fixed_param, WMITLV_SIZE_FIX) @@ -4924,7 +5104,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_BPF_GET_VDEV_WORK_MEMORY_CMDID); /* Enable/Disable Smart Antenna */ #define WMITLV_TABLE_WMI_PDEV_SMART_ANT_ENABLE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_smart_ant_enable_cmd_fixed_param, wmi_pdev_smart_ant_enable_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_smart_ant_gpio_handle, gpio_handle, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_smart_ant_gpio_handle, gpio_handle, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, pdev_smart_ant_param, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SMART_ANT_ENABLE_CMDID); /* Set Smart Antenna RX antenna */ @@ -5228,6 +5409,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_CTRL_PATH_STATS_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_FIXED_STRUC, wmi_mac_addr, mac_addr_list, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID); +/* Request TDLS Stats cmd enabling the monitoring of TDLS stats */ +#define WMITLV_TABLE_WMI_REQUEST_TDLS_STATS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_request_tdls_stats_cmd_fixed_param, wmi_request_tdls_stats_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_TDLS_STATS_CMDID); + /* Host sets the current country code */ #define WMITLV_TABLE_WMI_SET_CURRENT_COUNTRY_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_set_current_country_cmd_fixed_param, wmi_set_current_country_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -5280,7 +5466,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_MESH_RX_FILTER_ENABLE_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, preferred_tx_stream_list, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, preferred_rx_stream_list, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_channel, dbw_chan, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dbw_chan_info, dbw_chan_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dbw_chan_info, dbw_chan_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_uhr_ap_npca_params, npca_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_MULTIPLE_VDEV_RESTART_REQUEST_CMDID); #define WMITLV_TABLE_WMI_PDEV_UPDATE_PKT_ROUTING_CMDID(id,op,buf,len) \ @@ -6189,6 +6376,18 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_POWER_BOOST_MEM_ADDR_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_scan_cache_result_cmd_fixed_param, wmi_get_scan_cache_result_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_GET_SCAN_CACHE_RESULT_CMDID); +#define WMITLV_TABLE_WMI_SET_MODIFY_TX_PLIM_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_set_modify_tx_plim_cmd_fixed_param, wmi_set_modify_tx_plim_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_SET_MODIFY_TX_PLIM_CMDID); + +#define WMITLV_TABLE_WMI_GET_AVG_TX_POWER_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_avg_tx_power_cmd_fixed_param, wmi_get_avg_tx_power_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_GET_AVG_TX_POWER_CMDID); + +#define WMITLV_TABLE_WMI_GET_TX_POWER_CALLING_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_tx_power_calling_cmd_fixed_param, wmi_get_tx_power_calling_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_GET_TX_POWER_CALLING_CMDID); + #define WMITLV_TABLE_WMI_SAWF_EZMESH_HOP_COUNT_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_sawf_ezmesh_hop_count_cmd_fixed_param, wmi_sawf_ezmesh_hop_count_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_SAWF_EZMESH_HOP_COUNT_CMDID); @@ -6413,6 +6612,21 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_smd_roam_peer_tid_info, smd_roam_peer_tid_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_SMD_ROAM_CONFIG_CMDID); +/* WMI commad to config MAPC params used for co-ordinated AP features in 11bn */ +#define WMITLV_TABLE_WMI_PEER_SET_MAPC_PARAMS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_set_mapc_params_cmd_fixed_param, wmi_peer_set_mapc_params_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + /*--- Common MAPC params ---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mapc_cmn_params, mapc_cmn_params, WMITLV_SIZE_VAR) \ + /*--- Co-TDMA scheme params ---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mapc_cotdma_params, cotdma_params, WMITLV_SIZE_VAR) \ + /*--- Co-SR scheme params (future) ---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mapc_cosr_params, cosr_params, WMITLV_SIZE_VAR) \ + /*--- Co-BF scheme params (future) ---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mapc_cobf_params, cobf_params, WMITLV_SIZE_VAR) \ + /*--- Co-rTWT scheme params (future) ---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mapc_cortwt_params, cortwt_params, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_SET_MAPC_PARAMS_CMDID); + /* WMI Command for Energy management OEM cmd data */ #define WMITLV_TABLE_WMI_ENERGY_MGMT_OEM_DATA_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_oem_data_fixed_param, wmi_energy_mgmt_oem_data_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ @@ -6440,6 +6654,30 @@ WMITLV_CREATE_PARAM_STRUC(WMI_COEX_GET_POLICY_STATS_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_cumac_chip_id_cmd_fixed_param, wmi_pdev_set_cumac_chip_id_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_CUMAC_CHIP_CMDID); +/* RTT Peer measurement start request */ +#define WMITLV_TABLE_WMI_RTT_PEER_MEAS_REQ_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rtt_peer_meas_req_cmd_fixed_param, wmi_rtt_peer_meas_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rtt_peer_meas_req_peer_info, peer_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PEER_MEAS_REQ_CMDID); + +/* RTT Peer measurement cancel request */ +#define WMITLV_TABLE_WMI_RTT_PEER_MEAS_CANCEL_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rtt_peer_meas_cancel_meas_cmd_fix_param, wmi_rtt_peer_meas_cancel_meas_cmd_fix_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PEER_MEAS_CANCEL_CMDID); + +#define WMITLV_TABLE_WMI_VDEV_GET_CHAN_HOP_STATUS_REPORT_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_get_chan_hop_status_report_cmd_fixed_param, wmi_vdev_get_chan_hop_status_report_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_GET_CHAN_HOP_STATUS_REPORT_CMDID); + +/* Athdiag read/write command: fixed_param + optional write data TLV */ +#define WMITLV_TABLE_WMI_ATHDIAG_READ_WRITE_CMDID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, \ + WMITLV_TAG_STRUC_wmi_athdiag_read_write_cmd_fixed_param, \ + wmi_athdiag_read_write_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id, op, buf, len, \ + WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_ATHDIAG_READ_WRITE_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -6505,7 +6743,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_wifi_radar_ltf_length_capabilities, wr_ltf_caps, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_wifi_radar_chain_capabilities, wr_chain_caps, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_MAC_PHY_CAPABILITIES_EXT2, mac_phy_caps2, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_shared_mem_model_tbtt_count_down_config, shared_mem_model_tbtt_count_down_config, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_shared_mem_model_tbtt_count_down_config, shared_mem_model_tbtt_count_down_config, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rtt_peer_meas_capabilities, rtt_peer_meas_caps, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT2_EVENTID); #define WMITLV_TABLE_WMI_SPECTRAL_CAPABILITIES_EVENTID(id,op,buf,len) \ @@ -7358,6 +7597,52 @@ WMITLV_CREATE_PARAM_STRUC(WMI_NAN_JOINED_CLUSTER_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_enable_rsp_event_fixed_param, wmi_nan_enable_rsp_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_NAN_ENABLE_RSP_EVENTID); +/** NAN Discovery Service Response Event + * + * TLV (tag length value) parameters follow the + * wmi_nan_disc_service_rsp_event_fixed_param structure. The TLV's are: + * wmi_nan_disc_service_rsp_event_fixed_param fixed_param; + */ +#define WMITLV_TABLE_WMI_NAN_DISC_SERVICE_RSP_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_disc_service_rsp_event_fixed_param, wmi_nan_disc_service_rsp_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DISC_SERVICE_RSP_EVENTID); + +/** NAN Discovery Match Event (NL80211_CMD_NAN_MATCH equivalent) + * + * Unified event covering subscriber match, publisher replied, and follow-up + * received scenarios, discriminated by the type field in fixed_param. + * + * TLV (tag length value) parameters follow the + * wmi_nan_disc_match_event_fixed_param structure. The TLV's are: + * wmi_mac_addr peer_addr[]; + * A_UINT8 service_id[]; + * A_UINT8 serv_spec_info[]; + * A_UINT32 cipher_suites[]; + * A_UINT8 scid[]; + * A_UINT8 extra_info[]; + * A_UINT8 ies[]; + */ +#define WMITLV_TABLE_WMI_NAN_DISC_MATCH_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_disc_match_event_fixed_param, wmi_nan_disc_match_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_FIXED_STRUC, wmi_mac_addr, peer_addr, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, service_id, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, serv_spec_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, cipher_suites, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, scid, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, extra_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, ies, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DISC_MATCH_EVENTID); + +/** NAN Discovery Service Request Terminated Event + * + * TLV (tag length value) parameters follow the + * wmi_nan_disc_service_req_terminated_event_fixed_param structure. The TLV's are: + * wmi_nan_disc_service_req_terminated_event_fixed_param fixed_param; + */ +#define WMITLV_TABLE_WMI_NAN_DISC_SERVICE_REQ_TERMINATED_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_disc_service_req_terminated_event_fixed_param, wmi_nan_disc_service_req_terminated_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DISC_SERVICE_REQ_TERMINATED_EVENTID); + /* NAN Next DW Info Event */ #define WMITLV_TABLE_WMI_NAN_NEXT_DW_INFO_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_next_dw_info_fixed_param, wmi_nan_next_dw_info_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -7388,6 +7673,14 @@ WMITLV_CREATE_PARAM_STRUC(WMI_NAN_PEER_SCHEDULE_CNF_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_peer_params_cnf_event_fixed_param, wmi_nan_peer_params_cnf_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_NAN_PEER_PARAMS_CNF_EVENTID); +/* NDP Channel Info Event */ +#define WMITLV_TABLE_WMI_NDP_CHANNEL_INFO_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_ndp_channel_info_event_fixed_param, wmi_ndp_channel_info_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_channel, channel_list, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, nss_list, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ndp_channel_info, channel_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_NDP_CHANNEL_INFO_EVENTID); + /* Coex report antenna isolation event */ #define WMITLV_TABLE_WMI_COEX_REPORT_ANTENNA_ISOLATION_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_coex_report_isolation_event_fixed_param, wmi_coex_report_isolation_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -8126,6 +8419,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_HALPHY_CTRL_PATH_STATS_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_radio_chan_stats, radio_chan_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_RADIO_CHAN_STATS_EVENTID); +#define WMITLV_TABLE_WMI_TDLS_STATS_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tdls_stats_event_fixed_param, wmi_tdls_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tdls_connect_info_stats, tdls_connect_info_stats, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tdls_data_stats, tdls_data_stats, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_TDLS_STATS_EVENTID); + #define WMITLV_TABLE_WMI_PKGID_EVENTID(id, op, buf, len) \ WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_pkgid_event_fixed_param, wmi_pkgid_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PKGID_EVENTID); @@ -8718,12 +9017,36 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_POWER_BOOST_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_scan_cache_info, scan_cache_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_SCAN_CACHE_RESULT_EVENTID); +#define WMITLV_TABLE_WMI_MODIFY_TX_PLIM_EVENTID(id, op , buf, len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_modify_tx_plim_event_fixed_param, wmi_modify_tx_plim_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MODIFY_TX_PLIM_EVENTID); + +#define WMITLV_TABLE_WMI_AVG_TX_POWER_EVENTID(id, op , buf, len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_avg_tx_power_event_fixed_param, wmi_avg_tx_power_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_avg_tx_power_region_per_antenna_chain, avg_tx_power_region_per_antenna_chain, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_AVG_TX_POWER_EVENTID); + +#define WMITLV_TABLE_WMI_PLIMIT_TABLE_EVENTID(id, op , buf, len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_plimit_table_event_fixed_param, wmi_plimit_table_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tx_power_per_antenna_chain, tx_power_per_antenna_chain, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PLIMIT_TABLE_EVENTID); + /* pdev per-vdev queue depth report event */ #define WMITLV_TABLE_WMI_PDEV_MULTI_VDEV_AC_QUEUE_DEPTH_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_multi_vdev_ac_queue_depth_event_fixed_param, wmi_pdev_multi_vdev_ac_queue_depth_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_ac_info, vdev_ac_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_MULTI_VDEV_AC_QUEUE_DEPTH_EVENTID); +/* WMI Anomaly Report Event */ +#define WMITLV_TABLE_WMI_ANOMALY_REPORT_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, \ + WMITLV_TAG_STRUC_wmi_anomaly_report_hdr, \ + wmi_anomaly_report_hdr, hdr, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, \ + WMITLV_TAG_ARRAY_STRUC, \ + wmi_anomaly_entry_t, entries, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_ANOMALY_REPORT_EVENTID); + #define WMITLV_TABLE_WMI_PDEV_SET_TX_CHAINMASK_COMP_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_tx_chainmask_comp_event_fixed_param, wmi_pdev_set_tx_chainmask_comp_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_TX_CHAINMASK_COMP_EVENTID); @@ -8814,6 +9137,37 @@ WMITLV_CREATE_PARAM_STRUC(WMI_COEX_GET_POLICY_STATS_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_cumac_chip_id_confirmation_event_fixed_param, wmi_pdev_set_cumac_chip_id_confirmation_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_CUMAC_CHIP_ID_CONFIRMATION_EVENTID); +/* NAN DFS Channel Availability Indication Event */ +#define WMITLV_TABLE_WMI_NAN_DFS_CHANNEL_AVAILABILITY_IND_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_dfs_channel_availability_ind_event_fixed_param, wmi_nan_dfs_channel_availability_ind_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DFS_CHANNEL_AVAILABILITY_IND_EVENTID); + +/* Chipset debug log stats event */ +#define WMITLV_TABLE_WMI_GET_CHIPSET_LOGGING_STATS_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_chipset_logging_stats_event_fixed_param, wmi_get_chipset_logging_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_GET_CHIPSET_LOGGING_STATS_EVENTID); + +/* RTT Peer measurement report event */ +#define WMITLV_TABLE_WMI_RTT_PEER_MEAS_REPORT_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rtt_peer_meas_report_event_fixed_param, wmi_rtt_peer_meas_report_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rtt_peer_meas_report_peer_meas_result_info, peer_meas_result_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PEER_MEAS_REPORT_EVENTID); + +#define WMITLV_TABLE_WMI_VDEV_CHAN_HOP_STATUS_REPORT_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_chan_hop_status_report_event_fixed_param, wmi_vdev_chan_hop_status_report_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_chan_hop_slot_status, slot_status, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_CHAN_HOP_STATUS_REPORT_EVENTID); + +/* Athdiag read/write event: fixed_param + optional read data TLV */ +#define WMITLV_TABLE_WMI_ATHDIAG_READ_WRITE_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, \ + WMITLV_TAG_STRUC_wmi_athdiag_read_write_event_fixed_param, \ + wmi_athdiag_read_write_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id, op, buf, len, \ + WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_ATHDIAG_READ_WRITE_EVENTID); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index f2d05d577272..9c221dab3851 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -374,6 +374,8 @@ typedef enum { WMI_GRP_MANUAL_UL_TRIG, /* 0x4d Manual UL OFDMA Trigger */ WMI_GRP_ENERGY_MGMT, /* 0x4e energy management */ WMI_GRP_SMD, /* 0x4f SMD Roaming */ + WMI_GRP_CHIPSET_LOG, /* 0x50 Chipset Debug Logging */ + WMI_GRP_MAPC, /* 0x51 MAPC for co-ordinated features */ } WMI_GRP_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -782,6 +784,8 @@ typedef enum { /** WMI cmd for Channel Hopping Schedule */ WMI_VDEV_CHANNEL_HOPPING_SCHEDULE_CMDID, + /** WMI cmd to request channel hopping per-slot status report */ + WMI_VDEV_GET_CHAN_HOP_STATUS_REPORT_CMDID, /* peer specific commands */ @@ -919,7 +923,11 @@ typedef enum { /* WMI_PEER_ASSOC_V2_CMDID: extended alternative for WMI_PEER_ASSOC_CMDID */ WMI_PEER_ASSOC_V2_CMDID, - /* beacon/management specific commands */ + /* WMI_PEER_UHR_OMP_CMDID for UHR OMP frame*/ + WMI_PEER_UHR_OMP_CMDID, + + + /*--- beacon/management specific commands ---*/ /** transmit beacon by reference . used for transmitting beacon on low latency interface like pcie */ WMI_BCN_TX_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MGMT), @@ -1207,6 +1215,10 @@ typedef enum { WMI_RTT_PASN_AUTH_STATUS_CMD, /** RTT 11az PASN deauthentication cmd */ WMI_RTT_PASN_DEAUTH_CMD, + /** request to start peer measurement */ + WMI_RTT_PEER_MEAS_REQ_CMDID, + /** request to cancel an ongoing peer measurement */ + WMI_RTT_PEER_MEAS_CANCEL_CMDID, /** spectral scan command */ /** configure spectral scan */ @@ -1265,6 +1277,8 @@ typedef enum { /** request for HALPHY stats through ctrl path */ WMI_REQUEST_HALPHY_CTRL_PATH_STATS_CMDID, + /** request for TDLS connect info and TDLS data stats */ + WMI_REQUEST_TDLS_STATS_CMDID, /** ARP OFFLOAD REQUEST*/ WMI_SET_ARP_NS_OFFLOAD_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_ARP_NS_OFL), @@ -1427,6 +1441,15 @@ typedef enum { /** WMI command to get scan cached result */ WMI_GET_SCAN_CACHE_RESULT_CMDID, + WMI_SET_MODIFY_TX_PLIM_CMDID, + + WMI_GET_AVG_TX_POWER_CMDID, + + WMI_GET_TX_POWER_CALLING_CMDID, + + /** WMI command for athdiag memory/register read or write */ + WMI_ATHDIAG_READ_WRITE_CMDID, + /* Offload 11k related requests */ WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD), @@ -1565,7 +1588,26 @@ typedef enum { * negotiation etc.). */ WMI_NAN_PEER_PARAMS_CMDID, - + /** + * Command to request for NAN service discovery operations i.e. + * Publish, Subscribe, Followup to be handled by FW. + * This command carries the full NAN function parameters equivalent + * to NL80211_CMD_ADD_NAN_FUNCTION / cfg80211_nan_func, including + * service ID, SRF filters, match filters, SDEA control, security + * (cipher suites, ND-PMK), and NAN3 pairing configuration. + */ + WMI_NAN_DISC_SERVICE_REQ_CMDID, + /** + * Command to cancel an active NAN discovery service request + * (Publish or Subscribe). + * Equivalent of NL80211_CMD_DEL_NAN_FUNCTION in the cfg80211 + * offload interface. + * Host identifies the service request by instance_id (offload path) + * or cookie (standard path); FW frees the service request and sends + * WMI_NAN_DISC_SERVICE_REQ_TERMINATED_EVENTID if the service request + * was active. + */ + WMI_NAN_DISC_CANCEL_SERVICE_REQ_CMDID, /** Modem power state command */ WMI_MODEM_POWER_STATE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_COEX), @@ -1854,6 +1896,12 @@ typedef enum { * (Combine PeerCreate,Assoc, Key Install) */ WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID, + + /** WMI command for host to request chipset debug log stats from FW */ + WMI_GET_CHIPSET_LOGGING_STATS_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_CHIPSET_LOG), + + /** WMI cmds for MAPC (Multi-AP Coordination) */ + WMI_PEER_SET_MAPC_PARAMS_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MAPC), } WMI_CMD_ID; typedef enum { @@ -2171,6 +2219,8 @@ typedef enum { WMI_VDEV_UNIFIED_DISCONNECT_EVENTID, /** WMI event for sending vdev operating params */ WMI_VDEV_CURRENT_OPERATING_PARAM_EVENTID, + /** channel hopping per-slot status report event */ + WMI_VDEV_CHAN_HOP_STATUS_REPORT_EVENTID, /* peer specific events */ /** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */ @@ -2369,6 +2419,8 @@ typedef enum { WMI_RTT_PASN_PEER_CREATE_REQ_EVENTID, /** RTT 11az PASN peer delete event */ WMI_RTT_PASN_PEER_DELETE_EVENTID, + /** RTT peer (Proximity Detection) measurement report */ + WMI_RTT_PEER_MEAS_REPORT_EVENTID, /*STATS specific events*/ /** txrx stats event requested by host */ @@ -2435,6 +2487,12 @@ typedef enum { /** FW IPA link stats Event */ WMI_IPA_LINK_STATS_EVENTID, + /* TDLS Stats event having TDLS connect info and data stats */ + WMI_TDLS_STATS_EVENTID, + + /** WMI Anomaly Report Event — single event ID for all FW anomaly types */ + WMI_ANOMALY_REPORT_EVENTID, + /* NLO specific events */ /** NLO match event after the first match */ @@ -2597,6 +2655,15 @@ typedef enum { /** WMI event for FW diagnostic data sent to host */ WMI_OPT_DP_DIAG_EVENTID, + WMI_MODIFY_TX_PLIM_EVENTID, + + WMI_AVG_TX_POWER_EVENTID, + + WMI_PLIMIT_TABLE_EVENTID, + + /** WMI event to deliver athdiag read data or write completion status */ + WMI_ATHDIAG_READ_WRITE_EVENTID, + /* GPIO Event */ WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), @@ -2665,6 +2732,33 @@ typedef enum { WMI_NAN_PEER_SCHEDULE_CNF_EVENTID, /* Confirmation event that FW has received WMI_NAN_PEER_PARAMS_CMDID */ WMI_NAN_PEER_PARAMS_CNF_EVENTID, + /* Indicate negotiated committed NDP channels information. */ + WMI_NDP_CHANNEL_INFO_EVENTID, + /* Event to indicate availability of STA AP connection on DFS channel */ + WMI_NAN_DFS_CHANNEL_AVAILABILITY_IND_EVENTID, + /** + * Event response to NAN discovery service request command + * (WMI_NAN_DISC_SERVICE_REQ_CMDID); + * carries the instance_id assigned by FW and a status code indicating + * whether the Publish / Subscribe service request was accepted + */ + WMI_NAN_DISC_SERVICE_RSP_EVENTID, + /** + * NAN discovery match event; covers two match scenarios: + * subscriber found publisher (type=PUBLISH), publisher received subscribe + * (type=SUBSCRIBE). + * Equivalent of NL80211_CMD_NAN_MATCH in the cfg80211 + * offload interface. + */ + WMI_NAN_DISC_MATCH_EVENTID, + /** + * NAN discovery service request terminated event; sent when a Publish or + * Subscribe service request is cancelled by the host, expires (TTL), or is + * terminated by FW due to an error. + * Equivalent of NL80211_CMD_DEL_NAN_FUNCTION (EVENT: terminated) + * in the cfg80211 offload interface. + */ + WMI_NAN_DISC_SERVICE_REQ_TERMINATED_EVENTID, /* Coex Event */ WMI_COEX_REPORT_ANTENNA_ISOLATION_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_COEX), @@ -2678,6 +2772,11 @@ typedef enum { WMI_LPI_RESULT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_LPI), WMI_LPI_STATUS_EVENTID, WMI_LPI_HANDOFF_EVENTID, + /* + * New EVTID added for FW->LOWI intra-LPASS direct scan result delivery - + * replaces QMI path when LOWI-on-FW capability is enabled. + */ + WMI_LPI_SCAN_RESULT_EVENTID_V2, /* ExtScan events */ WMI_EXTSCAN_START_STOP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_EXTSCAN), @@ -2843,6 +2942,9 @@ typedef enum { WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID, WMI_ENERGY_MGMT_OEM_DATA_EVENTID =WMI_CMD_GRP_START_ID(WMI_GRP_ENERGY_MGMT), + + /** WMI event to send chipset debug log stats to host */ + WMI_GET_CHIPSET_LOGGING_STATS_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_CHIPSET_LOG), } WMI_EVT_ID; /* defines for OEM message sub-types */ @@ -3220,8 +3322,15 @@ typedef struct _wmi_ppe_threshold { #define WMI_MAX_EHTCAP_MAC_SIZE 2 #define WMI_MAX_EHTCAP_PHY_SIZE 3 +/* WMI_MAX_UHRCAP_MAC_SIZE: + * Kept as 4 for backwards compatibility, elements [2] and [3] are reserved. + */ #define WMI_MAX_UHRCAP_MAC_SIZE 4 #define WMI_MAX_UHRCAP_PHY_SIZE 8 /* as per spec recommendation */ +/* WMI_MAX_UHRCAP_DBE_SIZE: + * B0-B7 header + up to 24+24 bits EHT-MCS maps + */ +#define WMI_MAX_UHRCAP_DBE_SIZE 2 /* * 0 – index indicated EHT-MCS map for 20Mhz only sta (4 bytes valid) @@ -4231,6 +4340,14 @@ typedef struct { */ A_UINT32 uhr_cap_mac_info[WMI_MAX_UHRCAP_MAC_SIZE]; + /* + * UHR DBE Capability Parameters: + * total WMI_MAX_UHRCAP_DBE_SIZE * A_UINT32 bits + * Present only when DBE Support bit (B10) in uhr_cap_mac_info is set. + * Carries DBE Maximum Supported Bandwidth and optional EHT-MCS Maps. + */ + A_UINT32 uhr_cap_dbe_info[WMI_MAX_UHRCAP_DBE_SIZE]; + /* Followed by next TLVs: * WMI_DMA_RING_CAPABILITIES dma_ring_caps[]; * wmi_spectral_bin_scaling_params wmi_bin_scaling_params[]; @@ -4260,6 +4377,7 @@ typedef struct { * WMI_MAC_PHY_CAPABILITIES_EXT2 mac_phy_caps2[]; * wmi_shared_mem_model_tbtt_count_down_config * wmi_shared_mem_model_tbtt_count_down_config[]; + * wmi_rtt_peer_meas_capabilities rtt_peer_meas_caps[]; */ } wmi_service_ready_ext2_event_fixed_param; @@ -5233,10 +5351,13 @@ typedef struct { * Bit 29 - enable ipi_stats feature: * 0 -> disable the feature * 1 -> enable the feature - * Refer to below WMI_RSRC_CFG_FLAGS2_IPI_STATS_ENABLED_GET/SET - * macros. + * Refer to below WMI_RSRC_CFG_FLAGS2_IPI_STATS_ENABLED_GET/SET macros. + * Bit 30 - enable pcie_oob_wakeup feature: + * 0 -> disable the feature + * 1 -> enable the feature + * Refer to below WMI_RSRC_CFG_FLAGS2_PCIE_OOB_WAKEUP_GET/SET macros. * - * Bits 31:30 - Reserved + * Bit 31 - Reserved */ A_UINT32 flags2; /** @brief host_service_flags - can be used by Host to indicate @@ -5408,8 +5529,21 @@ typedef struct { * Refer to the below definitions of * WMI_RSRC_CFG_HOST_SERVICE_FLAG_SMD_BSS_TRANSITION_GET and _SET * macros. + * Bit 26 + * This bit will be set by host to inform FW that the rx management + * path directly to the host is enabled, so the FW need not forward + * rx mgmt frames to the host. + * Refer to the below definitions of + * WMI_RSRC_CFG_HOST_SERVICE_FLAG_HOST_RX_MGMT_DIRECT_ENABLE_GET and + * _SET macros. + * Bit 27 + * This bit will be set by host to inform FW that the CUMAC_CMD_ID + * will come post WMI_INIT_CMDID and the MLO_SRNG setup has to be + * done as part of this cmd. + * Refer to the below definitions of + * WMI_RSRC_CFG_HOST_SERVICE_FLAG_CUMAC_CMD_SUPPORT_GET and SET_macros. * - * Bits 31:26 - Reserved + * Bits 31:28 - Reserved */ A_UINT32 host_service_flags; @@ -5563,7 +5697,11 @@ typedef struct { struct { A_UINT32 dw_notif_lead_time: 8, - reserved2: 24; + /* enable supplicant based NAN offload mode */ + enable_nan_ofld_mode: 1, + /* disable/enable temporal IOT mode */ + enable_temporal_iot_mode: 1, + reserved2: 22; }; }; } wmi_resource_config; @@ -5574,9 +5712,40 @@ typedef struct { WMI_SET_BITS(word32, 0, 1, value) #define WMI_RSRC_CFG_NAN_CONFIG_DW_NOTIF_LEAD_TIME_GET(word32) \ - WMI_GET_BITS(word32, 0, 8) + WMI_GET_BITS(word32, 0, 8) #define WMI_RSRC_CFG_NAN_CONFIG_DW_NOTIF_LEAD_TIME_SET(word32, value) \ - WMI_SET_BITS(word32, 0, 8, value) + WMI_SET_BITS(word32, 0, 8, value) + +#define WMI_RSRC_CFG_NAN_CONFIG_ENABLE_NAN_OFLD_MODE_GET(word32) \ + WMI_GET_BITS(word32, 8, 1) +#define WMI_RSRC_CFG_NAN_CONFIG_ENABLE_NAN_OFLD_MODE_SET(word32, value) \ + WMI_SET_BITS(word32, 8, 1, value) + +#define WMI_RSRC_CFG_NAN_CONFIG_ENABLE_NAN_TEMPORAL_IOT_MODE_GET(word32) \ + WMI_GET_BITS(word32, 9, 1) +#define WMI_RSRC_CFG_NAN_CONFIG_ENABLE_NAN_TEMPORAL_IOT_MODE_SET(word32, value) \ + WMI_SET_BITS(word32, 9, 1, value) + + +/* + * WMI_NAN_DISC_COOKIE_GET / WMI_NAN_DISC_COOKIE_SET + * + * Accessor macros for the 64-bit cookie value split across + * cookie_low32 and cookie_high32 fields in WMI NAN disc structs. + * + * Usage (read): + * A_UINT64 c = WMI_NAN_DISC_COOKIE_GET(p->cookie_low32, p->cookie_high32); + * + * Usage (write): + * WMI_NAN_DISC_COOKIE_SET(p->cookie_low32, p->cookie_high32, my_cookie); + */ +#define WMI_NAN_DISC_COOKIE_GET(low32, high32) \ + (((A_UINT64)(high32) << 32) | (A_UINT64)(low32)) +#define WMI_NAN_DISC_COOKIE_SET(low32, high32, cookie64) \ + do { \ + (low32) = (A_UINT32)((cookie64) & 0xFFFFFFFFUL); \ + (high32) = (A_UINT32)(((cookie64) >> 32) & 0xFFFFFFFFUL); \ + } while (0) #define WMI_MSDU_FLOW_AST_ENABLE_GET(msdu_flow_config0, ast_x) \ (((ast_x) == 0) ? 1 : ((msdu_flow_config0) & (1 << ((ast_x) - 1)))) @@ -5885,6 +6054,12 @@ typedef struct { #define WMI_RSRC_CFG_FLAGS2_IPI_STATS_ENABLED_SET(flags2, value) \ WMI_SET_BITS(flags2, 29, 1, value) +#define WMI_RSRC_CFG_FLAGS2_PCIE_OOB_WAKEUP_GET(flags2) \ + WMI_GET_BITS(flags2, 30, 1) +#define WMI_RSRC_CFG_FLAGS2_PCIE_OOB_WAKEUP_SET(flags2, value) \ + WMI_SET_BITS(flags2, 30, 1, value) + + #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT_GET(host_service_flags) \ WMI_GET_BITS(host_service_flags, 0, 1) #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT_SET(host_service_flags, val) \ @@ -6037,6 +6212,24 @@ typedef struct { #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_SMD_BSS_TRANSITION_SET(host_service_flags, value) \ WMI_SET_BITS(host_service_flags, 25, 1, value) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_HOST_RX_MGMT_DIRECT_ENABLE_GET(host_service_flags) \ + WMI_GET_BITS(host_service_flags, 26, 1) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_HOST_RX_MGMT_DIRECT_ENABLE_SET(host_service_flags, value) \ + WMI_SET_BITS(host_service_flags, 26, 1, value) + +/* + * Bit 27: Host supports WMI_PDEV_SET_CUMAC_CHIP_CMDID. + * When set, FW will call the MLO CUMAC init function from the + * WMI_PDEV_SET_CUMAC_CHIP_CMDID handler instead of the MLO SoC init function. + * Requires WMI_SERVICE_PDEV_SET_CUMAC_CHIP_CMD_SUPPORT to be set in + * wmi_service_ready before the host sets this bit. + */ +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_CUMAC_CMD_SUPPORT_GET(host_service_flags) \ + WMI_GET_BITS(host_service_flags, 27, 1) +#define WMI_RSRC_CFG_HOST_SERVICE_FLAG_CUMAC_CMD_SUPPORT_SET(host_service_flags, val) \ + WMI_SET_BITS(host_service_flags, 27, 1, val) + + #define WMI_RSRC_CFG_CARRIER_CFG_CHARTER_ENABLE_GET(carrier_config) \ WMI_GET_BITS(carrier_config, 0, 1) #define WMI_RSRC_CFG_CARRIER_CFG_CHARTER_ENABLE_SET(carrier_config, val) \ @@ -10630,6 +10823,43 @@ typedef enum { /* Set TAS mode after boot up */ WMI_PDEV_PARAM_SET_TAS_MODE, + + WMI_PDEV_PARAM_L3_HEADER_PADDING_ENABLE, + + /* To enable/ disable beacon LIO update based on screen on/off */ + WMI_PDEV_PARAM_BEACON_LIO_UPDATE_ON_SCREEN_ON_OFF, + + /** + * Configure the CSA wait timeout (in ms) before blocking TX + * after radar detection + */ + WMI_PDEV_PARAM_DFS_NOL_CSA_WAIT_TIMEOUT, + + /** + * Smart antenna MPDU MCS params config. + * bit | purpose + * ------|--------- + * 0:9 | Max MPDU count for training + * 10 | MCS margin enable (0: disable, 1: enable) + * 11:13 | MCS margin value + * 14:31 | Reserved + */ + WMI_PDEV_PARAM_SMART_ANTENNA_CONFIG_MPDU_MCS_PARAMS, + + /** On-demand AWGN interference status request. + * FW reads awgn_prev_int_seg and sends WMI_DCS_INTERFERENCE_EVENTID + * with interference_type=ATH_CAP_DCS_AGWNIM only if interference is + * currently detected (bitmap != 0). A bitmap of 0 means no interference. + * param_value is reserved (set to 1 to trigger the request). + */ + WMI_PDEV_PARAM_AWGN_INT_STATUS_REQUEST, + + /** + * Disable L3 validity check in offload manager. + * 0 - L3_valid check enabled (default) + * 1 - L3_valid check disabled (frames not dropped on L3_valid=false) + */ + WMI_PDEV_PARAM_ENABLE_OFFLD_L3_VALID_CHECK, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) @@ -10736,6 +10966,22 @@ typedef enum { #define WMI_PDEV_RATE_MAX_NSS_PROBE_INTERVAL_GET(value) WMI_GET_BITS(value, 16, 16) #define WMI_PDEV_RATE_MAX_NSS_PROBE_INTERVAL_SET(_value, value) WMI_SET_BITS(_value, 16, 16, value) +/* WMI GET/SET macros for WMI_PDEV_PARAM_SMART_ANTENNA_CONFIG_MPDU_MCS_PARAMS */ +#define WMI_PDEV_SMART_ANT_MPDU_MCS_PARAMS_MAX_TRAIN_MPDU_GET(param) \ + WMI_GET_BITS(param, 0, 10) +#define WMI_PDEV_SMART_ANT_MPDU_MCS_PARAMS_MAX_TRAIN_MPDU_SET(_param, value) \ + WMI_SET_BITS(_param, 0, 10, value) + +#define WMI_PDEV_SMART_ANT_MPDU_MCS_PARAMS_MCS_MARGIN_EN_GET(param) \ + WMI_GET_BITS(param, 10, 1) +#define WMI_PDEV_SMART_ANT_MPDU_MCS_PARAMS_MCS_MARGIN_EN_SET(_param, value) \ + WMI_SET_BITS(_param, 10, 1, value) + +#define WMI_PDEV_SMART_ANT_MPDU_MCS_PARAMS_MCS_MARGIN_VAL_GET(param) \ + WMI_GET_BITS(param, 11, 3) +#define WMI_PDEV_SMART_ANT_MPDU_MCS_PARAMS_MCS_MARGIN_VAL_SET(_param, value) \ + WMI_SET_BITS(_param, 11, 3, value) + #define WMI_MBSSID_CTRL_FRAME_BASIC_TRIGGER ((A_UINT32) 1 << 0) #define WMI_MBSSID_CTRL_FRAME_BSR_TRIGGER ((A_UINT32) 1 << 1) #define WMI_MBSSID_CTRL_FRAME_MU_RTS_TRIGGER ((A_UINT32) 1 << 2) @@ -14781,11 +15027,6 @@ typedef struct { */ A_UINT32 payload_clear_count; - /* - * Received payload count from HOST - */ - A_UINT32 payload_received_count; - /* * payload parsing failure count due to platform memory alloc failure */ @@ -16127,6 +16368,109 @@ typedef struct { */ } wmi_radio_chan_stats_event_fixed_param; +typedef enum { + WMI_TDLS_CHANNEL_SWITCH_FRAME_TX_RX = 0x0, + WMI_TDLS_BT_COEX_INDICATION = 0x1, +} wmi_tdls_connect_info_stats_reason_code; + +typedef enum { + WMI_TDLS_FRAME_SUBTYPE_REQUEST = 0x0, + WMI_TDLS_FRAME_SUBTYPE_RESPONSE = 0x1, +} wmi_tdls_connect_info_stats_subtype; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_tdls_connect_info_stats */ + A_UINT32 tlv_header; + /* type: + * Type of frame sent to the Peer, will be having value 4, + * i.e TDLS State change + */ + A_UINT32 type; + /* subtype: + * SubType of frame sent to the Peer, eg. req/resp, + * Takes values from enum wmi_tdls_connect_info_stats_subtype. + */ + A_UINT32 subtype; + /* status: + * Completion status of this frame, required only for Tx frames + * to know if frame is sent out successfully + * 0 - status is success + * 1 - status is failure + */ + A_UINT32 status; + /* reason_code: + * Reason code for the reason of sending this TLV, eg. for TDLS + * channel switch req/resp or for BT running indication + * Takes values from enum wmi_tdls_connect_info_stats_reason_code. + */ + A_UINT32 reason_code; + /* tx_rx: + * Indicates whether we are sender or receiver of this frame, + * 1 value means Tx, 0 value means Rx. + */ + A_UINT32 tx_rx; + /* Current operating channel frequency */ + A_UINT32 op_freq_mhz; + /* Peer MAC address for which this stats is being logged */ + wmi_mac_addr peer_mac_addr; + /* The timestamp at which the WMI event is reported. */ + A_UINT32 timestamp; + /* Last known RSSI */ + A_INT32 rssi; /* dBm units */ + /* Peer Dialog token */ + A_UINT32 peer_dialog_token; +} wmi_tdls_connect_info_stats; + +/* max MCS counters supported for enhance stats */ +#define WMI_ENHANCE_STATS_MAX_MCS_COUNTERS 16 + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_tdls_data_stats */ + A_UINT32 tlv_header; + /* Current operating channel frequency */ + A_UINT32 op_freq_mhz; + /* Peer MAC address for which this stats is being logged */ + wmi_mac_addr peer_mac_addr; + /* The timestamp at which the WMI event is reported. */ + A_UINT32 timestamp; + /* Last known RSSI */ + A_INT32 rssi; /* dBm units */ + /* Last Tx Data rate */ + A_UINT32 data_rate; + /* tx_ppdus_cumulative: + * Total PPDUs Tx-ed combining all the MCS rates over the last 15 secs + */ + A_UINT32 tx_ppdus_cumulative; + /* tx_mcs_data_ppdu: + * PPDUs Txed over each MCS rate for all the supported MCS + * over the last 15 secs + */ + A_UINT32 tx_mcs_data_ppdu[WMI_ENHANCE_STATS_MAX_MCS_COUNTERS]; + /* Total PPDU Tx failures seen over the last 15 secs */ + A_UINT32 tx_ppdu_failures; + /* Total PPDUs Rx-ed combining all the MCS rates over the last 15 secs */ + A_UINT32 rx_ppdus_cumulative; + /* rx_mcs_data_ppdu: + * PPDUs Rxed over each MCS rate for all the supported MCS + * over the last 15 secs + */ + A_UINT32 rx_mcs_data_ppdu[WMI_ENHANCE_STATS_MAX_MCS_COUNTERS]; + /* Total Rx PPDU failures seen over the last 15 secs */ + A_UINT32 rx_ppdu_failures; +} wmi_tdls_data_stats; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_tdls_stats_event_fixed_param */ + A_UINT32 tlv_header; + /** VDEV identifier */ + A_UINT32 vdev_id; + /* Total TDLS Peers this VDEV is connected to */ + A_UINT32 peer_cnt; +} wmi_tdls_stats_event_fixed_param; + /** * PDEV statistics * @@ -19221,6 +19565,8 @@ typedef struct { * optional TLV used for SMD * wmi_vdev_start_uhr_config uhr_config_info * optional TLV used if VAP is 11BN + * wmi_uhr_ap_npca_params npca_params + * optional TLV used to update NPCA information */ } wmi_vdev_start_request_cmd_fixed_param; @@ -19264,6 +19610,10 @@ enum WMI_VDEV_UP_FLAGS { * Valid only for VBSS subtype vaps. */ WMI_VDEV_UP_FLAG_VBSS_PASSIVE = 0x00000004, + /** REDUCE_OFF_DIAGONAL_NULL_THR + * The flag will be set to reduce off diagonal nulling threshold. + */ + WMI_VDEV_UP_FLAG_REDUCE_OFF_DIAGONAL_NULL_THR = 0x00000008, }; typedef struct{ @@ -22255,6 +22605,7 @@ enum wmi_peer_type { WMI_PEER_TYPE_TRANS_BSS = 5, /* For creating BSS peer when connecting with non-transmit AP */ WMI_PEER_TYPE_PASN = 6, /* Peer is used for Pre-Association Security Negotiation */ WMI_PEER_TYPE_BRIDGE = 7, /* For creating Dummy Peer in case of 4 Link MLO */ + WMI_PEER_TYPE_MAPC = 8, /* Peer is a MAPC Co-ordinated AP */ WMI_PEER_TYPE_HOST_MAX = 127, /* Host <-> Target Peer type is assigned up to 127 */ /* Reserved from 128 - 255 for target internal use.*/ WMI_PEER_TYPE_ROAMOFFLOAD_TEMP = 128, /* Temporarily created during offload roam */ @@ -23001,6 +23352,8 @@ typedef struct { #define WMI_PEER_EXT_IS_MESH_NODE 0x00000020 /* Indicates if the peer connecting is a mesh node */ #define WMI_PEER_EXT_PROTECTED_TWT 0x00000040 /* Protected TWT operation Support field in Extended RSN Capabilities element */ #define WMI_PEER_EXT_UHR 0x00000080 /* UHR enabled */ +#define WMI_PEER_EXT_2XLDPC 0x00000100 /* Peer supports 2x LDPC (3888-bit codeword) */ + #define WMI_PEER_EXT_F_CRIT_PROTO_HINT_ENABLED 0x40000000 #define WMI_PEER_EXT_SMD_ASSOC 0x80000000 @@ -23564,6 +23917,13 @@ typedef struct { */ wmi_ppe_threshold peer_uhr_ppet; + /** peer_uhr_cap_dbe: + * UHR DBE Capability Parameters from BSS beacon UHR cap IE, + * total WMI_MAX_UHRCAP_DBE_SIZE*A_UINT32 bits. + * Valid only when DBE Support bit (B10) in peer_uhr_cap_mac is set. + */ + A_UINT32 peer_uhr_cap_dbe[WMI_MAX_UHRCAP_DBE_SIZE]; + /* Following this struct are the TLV's: * A_UINT8 peer_legacy_rates[]; * A_UINT8 peer_ht_rates[]; @@ -23751,6 +24111,178 @@ typedef struct { A_UINT32 npca_op_param1; } wmi_peer_uhr_npca_op_params; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_uhr_omp_cmd_fixed_param */ + A_UINT32 sw_peer_id; + A_UINT32 pdev_id; + + /* + * Variable-length TLV arrays follow this fixed param: + * wmi_peer_uhr_omp_npca_params peer_omp_npca_params[]; + * Place Holder for other TLVs + */ +} wmi_peer_uhr_omp_cmd_fixed_param; + +typedef struct{ + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_uhr_omp_npca_params */ + /* + * Bit0:3: NPCA hw_link_id + * WMI_OMP_NPCA_HW_LINK_ID_GET / _SET + * Bit4: Enable/Disable NPCA params + * WMI_OMP_NPCA_ENABLE_GET / _SET + * Bit5: Update NPCA params + * WMI_OMP_NPCA_UPDATE_GET / _SET + * Bit6:31: Reserved + */ + A_UINT32 omp_npca_caps; + /* + * Bit0:5: NPCA Switch Delay + * The time needed by an NPCA STA to switch from the + * BSS primary channel to the NPCA primary channel, + * in units of 4 us. + * WMI_OMP_NPCA_SWITCH_DELAY_GET / _SET + * + * Bit6:11: NPCA Switch Back Delay + * The time needed by an NPCA STA to switch from the + * NPCA primary channel to the BSS primary channel, + * in units of 4 + * WMI_OMP_NPCA_SWITCH_BACK_DELAY_GET / _SET + * + * Bit12:31: Reserved + */ + A_UINT32 omp_npca_param; +} wmi_peer_uhr_omp_npca_params; + +#define WMI_OMP_NPCA_HW_LINK_ID_GET(_var) WMI_GET_BITS(_var, 0, 4) +#define WMI_OMP_NPCA_HW_LINK_ID_SET(_var, _val) WMI_SET_BITS(_var, 0, 4, _val) + +#define WMI_OMP_NPCA_ENABLE_GET(_var) WMI_GET_BITS(_var, 4, 1) +#define WMI_OMP_NPCA_ENABLE_SET(_var, _val) WMI_SET_BITS(_var, 4, 1, _val) + +#define WMI_OMP_NPCA_UPDATE_GET(_var) WMI_GET_BITS(_var, 5, 1) +#define WMI_OMP_NPCA_UPDATE_SET(_var, _val) WMI_SET_BITS(_var, 5, 1, _val) + +#define WMI_OMP_NPCA_SWITCH_DELAY_GET(_var) \ + WMI_GET_BITS(_var, 0, 6) +#define WMI_OMP_NPCA_SWITCH_DELAY_SET(_var, _val) \ + WMI_SET_BITS(_var, 0, 6, _val) + +#define WMI_OMP_NPCA_SWITCH_BACK_DELAY_GET(_var) \ + WMI_GET_BITS(_var, 6, 6) +#define WMI_OMP_NPCA_SWITCH_BACK_DELAY_SET(_var, _val) \ + WMI_SET_BITS(_var, 6, 6, _val) + + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_uhr_omp_sta_dps_params */ + + /* + * Bit0:3: STA DPS hw_link_id + * WMI_OMP_STA_DPS_HW_LINK_ID_GET / _SET + * Bit4: Enable/Disable STA DPS params + * WMI_OMP_STA_DPS_ENABLE_GET / _SET + * Bit5: Update STA DPS params + * WMI_OMP_STA_DPS_UPDATE_GET / _SET + * Bit6:31: Reserved + */ + A_UINT32 omp_sta_dps_caps; + + /* + * Bit0:5: STA DPS Padding Delay + * WMI_OMP_STA_DPS_PADDING_DELAY_GET / _SET + * + * Bit6:7: Reserved + * + * Bit8:13: STA DPS Transition Delay + * WMI_OMP_STA_DPS_TRANSITION_DELAY_GET / _SET + * + * Bit14:15: Reserved + * + * Bit16: ICF Required + * WMI_OMP_STA_DPS_ICF_REQUIRED_GET / _SET + * + * Bit17: Parameterized Mode + * WMI_OMP_STA_DPS_PARAMETERIZED_MODE_GET / _SET + * + * Bit18:20: LC Mode Bandwidth + * WMI_OMP_STA_DPS_LC_MODE_BANDWIDTH_GET / _SET + * 0 : 20 MHz + * 1 : 40 MHz + * 2 : 80 MHz + * 3 : 160 MHz + * 4 : 320 MHz + * 5-7: Reserved + * + * Bit21:24: LC Mode NSS + * WMI_OMP_STA_DPS_LC_MODE_NSS_GET / _SET + * + * Bit25:28: LC Mode MCS + * WMI_OMP_STA_DPS_LC_MODE_MCS_GET / _SET + * + * Bit29: Mobile AP STA DPS Static HCM + * WMI_OMP_STA_DPS_MOBILE_AP_STATIC_HCM_GET / _SET + * + * Bit30:31: Reserved + */ + A_UINT32 omp_sta_dps_param; +} wmi_peer_uhr_omp_sta_dps_params; + +#define WMI_OMP_STA_DPS_HW_LINK_ID_GET(_var) \ + WMI_GET_BITS(_var, 0, 4) +#define WMI_OMP_STA_DPS_HW_LINK_ID_SET(_var, _val) \ + WMI_SET_BITS(_var, 0, 4, _val) + +#define WMI_OMP_STA_DPS_ENABLE_GET(_var) \ + WMI_GET_BITS(_var, 4, 1) +#define WMI_OMP_STA_DPS_ENABLE_SET(_var, _val) \ + WMI_SET_BITS(_var, 4, 1, _val) + +#define WMI_OMP_STA_DPS_UPDATE_GET(_var) \ + WMI_GET_BITS(_var, 5, 1) +#define WMI_OMP_STA_DPS_UPDATE_SET(_var, _val) \ + WMI_SET_BITS(_var, 5, 1, _val) + +#define WMI_OMP_STA_DPS_PADDING_DELAY_GET(_var) \ + WMI_GET_BITS(_var, 0, 6) +#define WMI_OMP_STA_DPS_PADDING_DELAY_SET(_var, _val) \ + WMI_SET_BITS(_var, 0, 6, _val) + +#define WMI_OMP_STA_DPS_TRANSITION_DELAY_GET(_var) \ + WMI_GET_BITS(_var, 8, 6) +#define WMI_OMP_STA_DPS_TRANSITION_DELAY_SET(_var, _val) \ + WMI_SET_BITS(_var, 8, 6, _val) + +#define WMI_OMP_STA_DPS_ICF_REQUIRED_GET(_var) \ + WMI_GET_BITS(_var, 16, 1) +#define WMI_OMP_STA_DPS_ICF_REQUIRED_SET(_var, _val) \ + WMI_SET_BITS(_var, 16, 1, _val) + +#define WMI_OMP_STA_DPS_PARAMETERIZED_MODE_GET(_var) \ + WMI_GET_BITS(_var, 17, 1) +#define WMI_OMP_STA_DPS_PARAMETERIZED_MODE_SET(_var, _val) \ + WMI_SET_BITS(_var, 17, 1, _val) + +#define WMI_OMP_STA_DPS_LC_MODE_BANDWIDTH_GET(_var) \ + WMI_GET_BITS(_var, 18, 3) +#define WMI_OMP_STA_DPS_LC_MODE_BANDWIDTH_SET(_var, _val) \ + WMI_SET_BITS(_var, 18, 3, _val) + +#define WMI_OMP_STA_DPS_LC_MODE_NSS_GET(_var) \ + WMI_GET_BITS(_var, 21, 4) +#define WMI_OMP_STA_DPS_LC_MODE_NSS_SET(_var, _val) \ + WMI_SET_BITS(_var, 21, 4, _val) + +#define WMI_OMP_STA_DPS_LC_MODE_MCS_GET(_var) \ + WMI_GET_BITS(_var, 25, 4) +#define WMI_OMP_STA_DPS_LC_MODE_MCS_SET(_var, _val) \ + WMI_SET_BITS(_var, 25, 4, _val) + +#define WMI_OMP_STA_DPS_MOBILE_AP_STATIC_HCM_GET(_var) \ + WMI_GET_BITS(_var, 29, 1) +#define WMI_OMP_STA_DPS_MOBILE_AP_STATIC_HCM_SET(_var, _val) \ + WMI_SET_BITS(_var, 29, 1, _val) + + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_get_ap_oper_bw_cmd_fixed_param */ A_UINT32 vdev_id; @@ -25808,8 +26340,14 @@ typedef struct { enum wlan_roam_invoke_reason { ROAM_INVOKE_REASON_UNDEFINED = 0, /* FW will use default parameters to do roam scan, ignore other parameters like WLM, etc. */ - ROAM_INVOKE_REASON_NUD_FAILURE, /* Neighbor Unreachable Detection */ + + /* Neighbor Unreachable Detection */ + ROAM_INVOKE_REASON_NUD_FAILURE, + ROAM_INVOKE_REASON_USER_SPACE, + + /* Trigger for Out-Of-Quality (OOQ) roaming */ + ROAM_INVOKE_REASON_PREDICTIVE, }; /** WMI_ROAM_INVOKE_CMD: command to invoke roaming forcefully @@ -26653,6 +27191,18 @@ typedef enum { /* WoW error if close to TBTT */ WMI_WOW_NON_ACK_REASON_CLOSE_TO_TBTT = 12, + + /* WoW error if platform not ready */ + WMI_WOW_NON_ACK_REASON_PLATFORM = 13, + + /* WoW error if resume n processs */ + WMI_WOW_NON_ACK_RESUME_IN_PROCESS = 14, + + /* WoW error UT command */ + WMI_WOW_NON_ACK_REASON_UNIT_TEST_CMD = 15, + + /* WoW error if MCC lite mode active */ + WMI_WOW_NON_ACK_REASON_MCC_LITE = 16, } WMI_WOW_NACK_STATUS; typedef struct { @@ -27492,6 +28042,22 @@ typedef struct { A_UINT32 req_type; } wmi_aggr_state_trig_event_fixed_param; +/* + * WMI_KEY_FIPS_STATUS + * + * Reported to the host in WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID via + * bits[4:5] of key_flags. Use WMI_KEY_FLAGS_FIPS_COMPLIANT_GET/SET macros. + */ +typedef enum { + WMI_KEY_FIPS_NOT_APPROVED = 1, + WMI_KEY_FIPS_APPROVED = 2, +} WMI_KEY_FIPS_STATUS; + +#define WMI_KEY_FLAGS_FIPS_COMPLIANT_GET(key_flags) \ + WMI_GET_BITS(key_flags, 4, 2) +#define WMI_KEY_FLAGS_FIPS_COMPLIANT_SET(key_flags, val) \ + WMI_SET_BITS(key_flags, 4, 2, val) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_install_key_complete_event_fixed_param */ /** unique id identifying the VDEV, generated by the caller */ @@ -27500,7 +28066,19 @@ typedef struct { wmi_mac_addr peer_macaddr; /** key index */ A_UINT32 key_ix; - /** key flags */ + /** key flags — bit definitions (see KEY_USAGE enum in wmi.h): + * bit[0]: key usage type + * 0 = PAIRWISE_USAGE — unicast/pairwise key + * 1 = GROUP_USAGE — broadcast/multicast group key + * bit[1]: TX_USAGE (0x02) — default Tx key (static WEP only) + * bit[2]: PMK_USAGE (0x04) — PMK cache entry + * bit[3]: LTF_USAGE (0x08) — LTF key seed + * bits[4:5]: FIPS compliance status (WMI_KEY_FIPS_STATUS enum) + * 1 = WMI_KEY_FIPS_NOT_APPROVED (WEP, TKIP, WAPI) + * 2 = WMI_KEY_FIPS_APPROVED (AES-CCM/GCM/CMAC/GMAC) + * Use WMI_KEY_FLAGS_FIPS_COMPLIANT_GET/SET to access. + * bits[6:31]: reserved + */ A_UINT32 key_flags; /** Event status */ A_UINT32 status; @@ -28179,6 +28757,10 @@ typedef struct { #define WMI_MAX_VENDOR_OUI_ACTION_SUPPORTED_PER_ACTION 10 #define WMI_MAX_VENDOR_OUI_DATA_LENGTH 20 +#define WMI_MAX_EXT_ACTION_ID_OUI_COUNT_FOR_ALLOW_DISALLOW_NSS 30 +#define WMI_MAX_EXT_ACTION_ID_OUI_COUNT_FOR_UL_TX_BEAMFORMER 30 +#define WMI_MAX_VENDOR_OUI_EXT_DATA_LENGTH 64 + typedef enum { WMI_VENDOR_OUI_ACTION_CONNECTION_1X1 = 0, /* Connect in 1X1 only */ @@ -28270,7 +28852,27 @@ typedef enum /* Add any action before this line */ - WMI_VENDOR_OUI_ACTION_MAX_ACTION_ID + WMI_VENDOR_OUI_ACTION_MAX_ACTION_ID, + + + /* + * 0-127 is reserved for action IDs for which the data is static. + * Size of the data is fixed and is not configurable. + */ + + /* Dynamic length OUIs starts below */ + + /* connection in 4 x 4 */ + WMI_VENDOR_OUI_ACTION_ALLOW_NSS_GREATER_THAN_2 = 128, + + /* connection in 2 x 2 */ + WMI_VENDOR_OUI_ACTION_DISALLOW_NSS_GREATER_THAN_2 = 129, + + WMI_VENDOR_OUI_ACTION_ENABLE_UL_TX_BEAMFORMER = 130, + + + /* Add any new dynamic length action ID before this line */ + WMI_VENDOR_OUI_ACTION_MAX_EXT_ACTION_ID } wmi_vendor_oui_action_id; typedef struct { @@ -28280,6 +28882,25 @@ typedef struct { A_UINT32 total_num_vendor_oui; /* total number of OUI present in ini for all actions. ** For first command, this value will be used for allocating memory in FW accordingly */ A_UINT32 num_vendor_oui_ext; /* the number of wmi_vendor_oui_ext for action_id */ + /* total_num_vendor_oui_ext: + * Max possible OUIs which HOST can support for all the extended + * ACTION IDs: WMI_MAX_EXT_ACTION_ID_OUI_COUNT_FOR_*. + * The max ext action id should be less than + * WMI_VENDOR_OUI_ACTION_MAX_EXT_ACTION_ID and greater than + * WMI_VENDOR_OUI_ACTION_MAX_ACTION_ID + */ + A_UINT32 total_num_vendor_oui_ext; + /* num_vendor_oui_ext2: + * The number of wmi_vendor_oui_ext_2 for action_id + * (The number of OUIs that HOST could accomodate in current WMI cmd) + */ + A_UINT32 num_vendor_oui_ext2; + /* + * More data indicates that for this action_id, there are more data + * pending to be sent via the next WMI command. + */ + A_UINT32 more_data; + /* followed by TLVs, an array of structure of type wmi_vendor_oui_ext ** wmi_vendor_oui_ext vendor_oui_ext[num_vendor_oui_ext]; */ @@ -28344,7 +28965,10 @@ typedef struct _wmi_vendor_oui_ext { /* oui_data_length: * Length of oui_data to compare in beacon which follows OUI header. - * Max length is capped to WMI_MAX_VENDOR_OUI_DATA_LENGTH bytes. + * Max length is capped to WMI_MAX_VENDOR_OUI_DATA_LENGTH bytes, + * for action ids < 127. + * Max length is capped to WMI_MAX_VENDOR_OUI_EXT_DATA_LENGTH bytes, + * for action ids > 127. */ A_UINT32 oui_data_length; @@ -30116,6 +30740,11 @@ typedef struct { A_UINT32 ie_len; /** Scan control flags extended (see WMI_SCAN_FLAG_EXT_xxx) */ A_UINT32 scan_ctrl_flags_ext; + /** + * dwell time in msec on active 5 GHz channels. + * If 0, dwell_time_active is used for 5 GHz channels as well. + */ + A_UINT32 dwell_time_active_5ghz; /** * TLV (tag length value) parameters follow the scan_cmd @@ -30127,6 +30756,388 @@ typedef struct { */ } wmi_lpi_start_scan_cmd_fixed_param; + +/* WMI_LPI_SCAN_RESULT_EVENTID_V2 + * TLV (tag length value) parameters follow the fixed_param structure: + * wmi_lpi_scan_result_ind_fixed_param fixed_param; + * uint32_t scanned_freq_list[]; + * wmi_lpi_ap_info_t ap_array[]; + */ + +/** + * Maximum number of AP entries accumulated in LOWI per scan + * (across all batched events). + * FW sends ~7 APs per WMI_LPI_RESULT_EVENTID event + * (limited by LPI_RESULT_EVENT_SIZE=1200 bytes); + * LOWI accumulates batches until scan_is_completed is set. + */ +#define WMI_LPI_MAX_AP_NUM 35 +/** Number of radio chains reported per AP in rssi_chain[] */ +#define WMI_LPI_MAX_RADIO_CHAIN 5 +/** Number of A_UINT32 words used to pack the 12-byte MSAP field */ +#define WMI_LPI_MAX_MSAP_LEN_W 3 + +/** + * wmi_lpi_ap_info_t - Per-AP scan record; element type for TLV #3 + * (WMITLV_TAG_ARRAY_STRUC). + * Since this is a TLV struct (starts with tlv_header), new fields can be + * appended at the end in future versions without breaking older receivers. + * + * ap_info field layout: + * bits [3:0] = ap_flags: cur_connected[0], wifi_802_11_mc[1], + * msap_supported[2], is_active[3] + * bits [16:4] = valid_mask (13 bits); + * indicates which optional fields are present + * bits [23:17] = reserved (must be set to 0 by sender; ignored by receiver) + * bits [31:24] = phy_mode (8 bits); contains a WLAN_PHY_MODE value + * (refer enum WLAN_PHY_MODE defined in wlan_defs.h) + * + * scan_info field layout: + * bits [7:0] = scan_module_id; + * identifies which scan module produced this record: + * 0 = WLS_SCAN_MODID_ANY (any/default) + * 1 = WLS_SCAN_MODID_MGMT_RX_HDR_EXTSCAN (extscan module) + * 2 = WLS_SCAN_MODID_MGMT_RX_HDR_ENLO (ENLO module) + * bits [15:8] = scan_id + * bits [23:16] = flags + * bits [31:24] = scan_cache + * + * ESS_and_SEC_info field layout: + * bits [15:0] = ess + * bits [23:16] = sec_mode; + * bitmask of security modes (WLS_AP_SECUTIRY_MODE_* values): + * 0x00=UNKNOWN + * 0x01=OPEN + * 0x02=WEP + * 0x04=PSK(WPA/WPA2) + * 0x08=EAP(Enterprise) + * 0x10=WPA3_SAE + * 0x20=WPA3_SuiteB + * 0x40=WPA3_OWE + * bits [31:24] = reserved + * + * MCS_and_NSS_info field layout: + * bits [7:0] = tx_nss + * bits [15:8] = tx_mcs + * bits [23:16] = rx_nss + * bits [31:24] = rx_mcs + */ + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_lpi_ap_info_t */ + A_UINT32 tlv_header; + /** 6-byte BSSID; uses existing wmi_mac_addr type */ + wmi_mac_addr bssid; + /** ssid: + * length + up to 32 bytes packed as 8 x A_UINT32; + * uses existing wmi_ssid type + */ + wmi_ssid ssid; + /** Primary channel frequency in MHz */ + A_UINT32 frequency; + /** RSSI in dBm */ + A_INT32 rssi; + /** Packed: + * ap_flags[3:0] | + * valid_mask[16:4] | + * phy_mode[31:24] (WLAN_PHY_MODE value); + * use WMI_LPI_AP_INFO_* macros + */ + A_UINT32 ap_info; + /** Actual dwell time on this channel in milliseconds */ + A_UINT32 dwell_time_ms; + /** TSF offset: local TSF minus AP TSF */ + A_UINT32 tsf_offset; + /** Packed: + * scan_module_id[7:0] | + * scan_id[15:8] | + * flags[23:16] | + * scan_cache[31:24]; use WMI_LPI_SCAN_INFO_* macros + */ + A_UINT32 scan_info; + /** Packed: + * ess[15:0] | + * sec_mode[23:16]; use WMI_LPI_ESS_SEC_* macros + */ + A_UINT32 ESS_and_SEC_info; + /** Packed: + * tx_nss[7:0] | + * tx_mcs[15:8] | + * rx_nss[23:16] | + * rx_mcs[31:24]; use WMI_LPI_MCS_NSS_* macros + */ + A_UINT32 MCS_and_NSS_info; + /** Bitmask of active radio chains used to discover this AP */ + A_UINT32 radio_chain_mask; + /** RSSI per radio chain in dBm; 0 if chain not active */ + A_INT32 rssi_chain[WMI_LPI_MAX_RADIO_CHAIN]; + /** TX power in dBm; valid when WMI_LPI_VALID_TX_POWER set in valid_mask */ + A_UINT32 tx_power; + /** TX rate in Mbps; valid when WMI_LPI_VALID_TX_RATE set in valid_mask */ + A_UINT32 tx_rate; + /** + * TSF timestamp bits [31:0]; + * valid when WMI_LPI_VALID_TSF set in valid_mask + */ + A_UINT32 tsf_lo; + /** + * TSF timestamp bits [63:32]; + * valid when WMI_LPI_VALID_TSF set in valid_mask + */ + A_UINT32 tsf_hi; + /** Age of measurement in milliseconds; valid when WMI_LPI_VALID_AGE set in valid_mask */ + A_UINT32 age; + /** + * MSAP data: 12 bytes packed as 3 x A_UINT32; + * valid when WMI_LPI_VALID_MSAP set in valid_mask + */ + A_UINT32 msap[WMI_LPI_MAX_MSAP_LEN_W]; + /** + * Band center frequency 1 in MHz; + * valid when WMI_LPI_VALID_CNT_FREQ1 set in valid_mask + */ + A_UINT32 band_center_freq_1; + /** + * Band center frequency 2 in MHz; + * valid when WMI_LPI_VALID_CNT_FREQ2 set in valid_mask + */ + A_UINT32 band_center_freq_2; + /** Venue info per IEEE 802.11u Table 9-62: + * bits[7:0] = venue_type (e.g. 0=unspecified, 1=assembly, 2=business, + * 3=educational, 4=factory, 5=institutional, 6=mercantile, + * 7=residential, 8=storage, 9=utility, 10=vehicular, + * 11=outdoor) + * bits[15:8] = venue_info + * (venue group/subtype per IEEE 802.11u Table 9-62) + * valid when WMI_LPI_VALID_VENUE set in valid_mask */ + A_UINT32 venue_type_and_info; +} wmi_lpi_ap_info_t; + + +/** + * wmi_lpi_scan_result_ind_fixed_param - + * Fixed params for TLV #1 of WMI_LPI_SCAN_RESULT_EVENTID_V2. + * Tag: WMITLV_TAG_STRUC_wmi_lpi_scan_result_ind_fixed_param. + * TLV #2 (freq_list) and TLV #3 (ap_array) follow this struct + * in the event buffer. + * Scan completion is signalled by WMI_LPI_STATUS_EVENTID (unchanged); + */ +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_lpi_scan_result_ind_fixed_param */ + A_UINT32 tlv_header; + /** + * Request ID echoed from the triggering scan request. + * For snoop scans, WLS substitutes the snoop subscriber's req_id. + */ + A_UINT32 req_id; + /** + * Country code from scanned_freq_list: 4 ASCII bytes packed little-endian + */ + A_UINT32 country_code; + /** Scan type performed: 0=passive, 1=active, 2=active+passive DFS */ + A_UINT32 scan_type_performed; + /** + * Radio chain preference used for this scan: + * 0=default, 1=low-latency, 2=low-power, 3=hi-accuracy + */ + A_UINT32 radio_chain_pref; +/** + * TLV (tag length value) parameters follow the fixed_param structure: + * A_UINT32 freq_list[]; // scanned frequencies in MHz; one per word + * wmi_lpi_ap_info_t ap_array[]; // per-AP scan records; + * // max WMI_LPI_MAX_AP_NUM entries + */ +} wmi_lpi_scan_result_ind_fixed_param; + +/* ---- ap_info field bit positions ---- */ +#define WMI_LPI_AP_INFO_CUR_CONNECTED_S 0 +#define WMI_LPI_AP_INFO_WIFI_MC_S 1 +#define WMI_LPI_AP_INFO_MSAP_SUPPORTED_S 2 +#define WMI_LPI_AP_INFO_IS_ACTIVE_S 3 +/* 13-bit valid_mask starts at bit 4 */ +#define WMI_LPI_AP_INFO_VALID_MASK_S 4 +/* 7-bit reserved field at bits [23:17] */ +#define WMI_LPI_AP_INFO_RESERVED_S 17 +/* 8-bit phy_mode at bits [31:24] */ +#define WMI_LPI_AP_INFO_PHY_MODE_S 24 + +/* ap_info: cur_connected (bit 0) */ +#define WMI_LPI_AP_INFO_SET_CUR_CONNECTED(pap, val) do { \ + (pap)->ap_info |= (((val) & 0x1) << WMI_LPI_AP_INFO_CUR_CONNECTED_S); \ + } while (0) +#define WMI_LPI_AP_INFO_GET_CUR_CONNECTED(pap) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_CUR_CONNECTED_S) & 0x1) + +/* ap_info: wifi_802_11_mc (bit 1) */ +#define WMI_LPI_AP_INFO_SET_WIFI_MC(pap, val) do { \ + (pap)->ap_info |= (((val) & 0x1) << WMI_LPI_AP_INFO_WIFI_MC_S); \ + } while (0) +#define WMI_LPI_AP_INFO_GET_WIFI_MC(pap) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_WIFI_MC_S) & 0x1) + +/* ap_info: msap_supported (bit 2) */ +#define WMI_LPI_AP_INFO_SET_MSAP_SUPPORTED(pap, val) do { \ + (pap)->ap_info |= (((val) & 0x1) << WMI_LPI_AP_INFO_MSAP_SUPPORTED_S); \ + } while (0) +#define WMI_LPI_AP_INFO_GET_MSAP_SUPPORTED(pap) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_MSAP_SUPPORTED_S) & 0x1) + +/* ap_info: is_active (bit 3) */ +#define WMI_LPI_AP_INFO_SET_IS_ACTIVE(pap, val) do { \ + (pap)->ap_info |= (((val) & 0x1) << WMI_LPI_AP_INFO_IS_ACTIVE_S); \ + } while (0) +#define WMI_LPI_AP_INFO_GET_IS_ACTIVE(pap) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_IS_ACTIVE_S) & 0x1) + +/* ap_info: valid_mask (bits [16:4], 13 bits) */ +#define WMI_LPI_AP_INFO_SET_VALID_MASK(pap, val) do { \ + (pap)->ap_info |= (((val) & 0x1FFF) << WMI_LPI_AP_INFO_VALID_MASK_S); \ + } while (0) +#define WMI_LPI_AP_INFO_GET_VALID_MASK(pap) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_VALID_MASK_S) & 0x1FFF) + +/* + * ap_info: reserved (bits [23:17], 7 bits) + * Sender must write 0. Receiver must ignore. + * Reserved for future per-AP flag extensions. + */ + +/* ap_info: phy_mode (bits [31:24], 8 bits) */ +#define WMI_LPI_AP_INFO_SET_PHY_MODE(pap, val) do { \ + (pap)->ap_info |= (((val) & 0xFF) << WMI_LPI_AP_INFO_PHY_MODE_S); \ + } while (0) +#define WMI_LPI_AP_INFO_GET_PHY_MODE(pap) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_PHY_MODE_S) & 0xFF) + +/* Helper: test a valid_mask bit directly in ap_info (valid_mask is at +4) */ +#define WMI_LPI_AP_INFO_VALID(pap, mask) \ + (((pap)->ap_info >> WMI_LPI_AP_INFO_VALID_MASK_S) & (mask)) + +/* valid_mask bit values (13-bit field in ap_info[16:4]) */ +#define WMI_LPI_VALID_TX_POWER 0x0001 /* tx_power field present */ +#define WMI_LPI_VALID_TX_RATE 0x0002 /* tx_rate field present */ +#define WMI_LPI_VALID_TSF 0x0004 /* tsf_lo/tsf_hi fields present */ +#define WMI_LPI_VALID_AGE 0x0008 /* age field present */ +#define WMI_LPI_VALID_WIFI_MC 0x0010 /* wifi_802_11_mc value in ap_info[1]*/ +#define WMI_LPI_VALID_MSAP 0x0020 /* msap[] field present */ +#define WMI_LPI_VALID_CNT_FREQ1 0x0040 /* band_center_freq_1 present */ +#define WMI_LPI_VALID_CNT_FREQ2 0x0080 /* band_center_freq_2 present */ +#define WMI_LPI_VALID_VENUE 0x0100 /* venue_type_and_info present */ +#define WMI_LPI_VALID_HT_SCO_BIT0 0x0200 /* HT SCO bit 0 */ +#define WMI_LPI_VALID_HT_SCO_BIT1 0x0400 /* HT SCO bit 1 */ +#define WMI_LPI_VALID_LOC_CIVIC 0x0800 /* Location Civic supported */ +#define WMI_LPI_VALID_LCI 0x1000 /* LCI supported */ + +/* ---- scan_info field bit positions ---- */ +#define WMI_LPI_SCAN_INFO_MODULE_ID_S 0 /* scan_module_id bits [7:0] */ +#define WMI_LPI_SCAN_INFO_SCAN_ID_S 8 /* scan_id bits [15:8] */ +#define WMI_LPI_SCAN_INFO_FLAGS_S 16 /* flags bits [23:16] */ +#define WMI_LPI_SCAN_INFO_CACHE_S 24 /* scan_cache bits [31:24] */ + +/* scan_info: scan_module_id (bits [7:0]) */ +#define WMI_LPI_SCAN_INFO_SET_MODULE_ID(pap, val) do { \ + (pap)->scan_info |= (((val) & 0xFF) << WMI_LPI_SCAN_INFO_MODULE_ID_S); \ + } while (0) +#define WMI_LPI_SCAN_INFO_GET_MODULE_ID(pap) \ + (((pap)->scan_info >> WMI_LPI_SCAN_INFO_MODULE_ID_S) & 0xFF) + +/* scan_info: scan_id (bits [15:8]) */ +#define WMI_LPI_SCAN_INFO_SET_SCAN_ID(pap, val) do { \ + (pap)->scan_info |= (((val) & 0xFF) << WMI_LPI_SCAN_INFO_SCAN_ID_S); \ + } while (0) +#define WMI_LPI_SCAN_INFO_GET_SCAN_ID(pap) \ + (((pap)->scan_info >> WMI_LPI_SCAN_INFO_SCAN_ID_S) & 0xFF) + +/* scan_info: flags (bits [23:16]) */ +#define WMI_LPI_SCAN_INFO_SET_FLAGS(pap, val) do { \ + (pap)->scan_info |= (((val) & 0xFF) << WMI_LPI_SCAN_INFO_FLAGS_S); \ + } while (0) +#define WMI_LPI_SCAN_INFO_GET_FLAGS(pap) \ + (((pap)->scan_info >> WMI_LPI_SCAN_INFO_FLAGS_S) & 0xFF) + +/* scan_info: scan_cache (bits [31:24]) */ +#define WMI_LPI_SCAN_INFO_SET_CACHE(pap, val) do { \ + (pap)->scan_info |= (((val) & 0xFF) << WMI_LPI_SCAN_INFO_CACHE_S); \ + } while (0) +#define WMI_LPI_SCAN_INFO_GET_CACHE(pap) \ + (((pap)->scan_info >> WMI_LPI_SCAN_INFO_CACHE_S) & 0xFF) + +/* ---- ESS_and_SEC_info field bit positions ---- */ +#define WMI_LPI_ESS_SEC_ESS_S 0 /* ess bits [15:0] */ +#define WMI_LPI_ESS_SEC_SEC_MODE_S 16 /* sec_mode bits [23:16] */ + +/* ESS_and_SEC_info: ess (bits [15:0]) */ +#define WMI_LPI_ESS_SEC_SET_ESS(pap, val) do { \ + (pap)->ESS_and_SEC_info |= (((val) & 0xFFFF) << WMI_LPI_ESS_SEC_ESS_S); \ + } while (0) +#define WMI_LPI_ESS_SEC_GET_ESS(pap) \ + (((pap)->ESS_and_SEC_info >> WMI_LPI_ESS_SEC_ESS_S) & 0xFFFF) + +/* ESS_and_SEC_info: sec_mode (bits [23:16]) */ +#define WMI_LPI_ESS_SEC_SET_SEC_MODE(pap, val) do { \ + (pap)->ESS_and_SEC_info |= (((val) & 0xFF) << WMI_LPI_ESS_SEC_SEC_MODE_S); \ + } while (0) +#define WMI_LPI_ESS_SEC_GET_SEC_MODE(pap) \ + (((pap)->ESS_and_SEC_info >> WMI_LPI_ESS_SEC_SEC_MODE_S) & 0xFF) + +/* ---- MCS_and_NSS_info field bit positions ---- */ +#define WMI_LPI_MCS_NSS_TX_NSS_S 0 /* tx_nss bits [7:0] */ +#define WMI_LPI_MCS_NSS_TX_MCS_S 8 /* tx_mcs bits [15:8] */ +#define WMI_LPI_MCS_NSS_RX_NSS_S 16 /* rx_nss bits [23:16] */ +#define WMI_LPI_MCS_NSS_RX_MCS_S 24 /* rx_mcs bits [31:24] */ + +/* MCS_and_NSS_info: tx_nss (bits [7:0]) */ +#define WMI_LPI_MCS_NSS_SET_TX_NSS(pap, val) do { \ + (pap)->MCS_and_NSS_info |= (((val) & 0xFF) << WMI_LPI_MCS_NSS_TX_NSS_S); \ + } while (0) +#define WMI_LPI_MCS_NSS_GET_TX_NSS(pap) \ + (((pap)->MCS_and_NSS_info >> WMI_LPI_MCS_NSS_TX_NSS_S) & 0xFF) + +/* MCS_and_NSS_info: tx_mcs (bits [15:8]) */ +#define WMI_LPI_MCS_NSS_SET_TX_MCS(pap, val) do { \ + (pap)->MCS_and_NSS_info |= (((val) & 0xFF) << WMI_LPI_MCS_NSS_TX_MCS_S); \ + } while (0) +#define WMI_LPI_MCS_NSS_GET_TX_MCS(pap) \ + (((pap)->MCS_and_NSS_info >> WMI_LPI_MCS_NSS_TX_MCS_S) & 0xFF) + +/* MCS_and_NSS_info: rx_nss (bits [23:16]) */ +#define WMI_LPI_MCS_NSS_SET_RX_NSS(pap, val) do { \ + (pap)->MCS_and_NSS_info |= (((val) & 0xFF) << WMI_LPI_MCS_NSS_RX_NSS_S); \ + } while (0) +#define WMI_LPI_MCS_NSS_GET_RX_NSS(pap) \ + (((pap)->MCS_and_NSS_info >> WMI_LPI_MCS_NSS_RX_NSS_S) & 0xFF) + +/* MCS_and_NSS_info: rx_mcs (bits [31:24]) */ +#define WMI_LPI_MCS_NSS_SET_RX_MCS(pap, val) do { \ + (pap)->MCS_and_NSS_info |= (((val) & 0xFF) << WMI_LPI_MCS_NSS_RX_MCS_S); \ + } while (0) +#define WMI_LPI_MCS_NSS_GET_RX_MCS(pap) \ + (((pap)->MCS_and_NSS_info >> WMI_LPI_MCS_NSS_RX_MCS_S) & 0xFF) + + +/* ---- venue_type_and_info field bit positions ---- */ +#define WMI_LPI_VENUE_TYPE_S 0 /* venue_type bits [7:0] */ +#define WMI_LPI_VENUE_INFO_S 8 /* venue_info bits [15:8] */ + +/* venue_type_and_info: venue_type (bits [7:0]) */ +#define WMI_LPI_VENUE_SET_TYPE(pap, val) do { \ + (pap)->venue_type_and_info |= (((val) & 0xFF) << WMI_LPI_VENUE_TYPE_S); \ + } while (0) +#define WMI_LPI_VENUE_GET_TYPE(pap) \ + (((pap)->venue_type_and_info >> WMI_LPI_VENUE_TYPE_S) & 0xFF) + +/* venue_type_and_info: venue_info (bits [15:8]) */ +#define WMI_LPI_VENUE_SET_INFO(pap, val) do { \ + (pap)->venue_type_and_info |= (((val) & 0xFF) << WMI_LPI_VENUE_INFO_S); \ + } while (0) +#define WMI_LPI_VENUE_GET_INFO(pap) \ + (((pap)->venue_type_and_info >> WMI_LPI_VENUE_INFO_S) & 0xFF) + +/* ========================================================================= + * End of WMI_LPI_SCAN_RESULT_EVENTID_V2 definitions + * ====================================================================== */ + + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stop_scan_cmd_fixed_param */ /** Scan requestor ID */ @@ -31492,6 +32503,13 @@ typedef struct { A_UINT32 nan_ctrl_flags; /* 32-bit control flags word */ }; A_UINT32 supp_disc_bands; /* Possible values are enum WMI_NAN_DISC_BANDS */ + /* warmup_timer_value: + * NANWarmUp timer value in seconds, to be used when starting + * a NAN cluster as part of NAN enablement. + * If warmup_timer_value == 0, target needs to use default 120 sec, + * as mentioned in spec. + */ + A_UINT32 warmup_timer_value; /* * TLVs following this structure: * wmi_nan_disc_band_config_param nan_disc_band_config[]; @@ -31571,10 +32589,21 @@ typedef struct { * specific parameter defined in WMI_NAN_CONFIG_CHANGE_PARAM. */ A_UINT32 nan_conf_change_bitmap; + /* nan_availability_attributes_len: + * number of valid bytes (i.e. excluding final alignment-padding) + * in the TLV nan_availability_attributes_data[] + */ + A_UINT32 nan_availability_attributes_len; /* * TLVs following this structure: * wmi_nan_ctrl_config_param nan_ctrl_config[]; * wmi_nan_disc_band_config_param nan_disc_band_config[]; + * A_UINT8 nan_availability_attributes_data[]: + * NAN availability attributes sent down (along with header) + * are sent in stream of bytes (ieee80211 protocol order). + * The host must manually byteswap these bytes within each 4-byte word + * if the host's endianness doesn't match the target's, to ensure the + * expected byte order is maintained. */ } wmi_nan_config_cmd_fixed_param; @@ -31685,6 +32714,250 @@ typedef struct { */ } wmi_nan_peer_params_cmd_fixed_param; +/* + * NAN service request type values for + * wmi_nan_disc_service_req_cmd_fixed_param.service_req_type. + * Maps to NL80211_NAN_FUNC_PUBLISH / SUBSCRIBE / FOLLOW_UP. + */ +typedef enum { + WMI_NAN_DISC_SERVICE_REQ_PUBLISH = 1, + WMI_NAN_DISC_SERVICE_REQ_SUBSCRIBE = 2, + WMI_NAN_DISC_SERVICE_REQ_FOLLOW_UP = 3, +} WMI_NAN_DISC_SERVICE_REQ_TYPE; + +/* + * Publish type values for + * wmi_nan_disc_service_req_cmd_fixed_param.publish_type. + * Valid only when service_req_type == WMI_NAN_DISC_SERVICE_REQ_PUBLISH. + * Maps to NL80211_NAN_FUNC_PUBLISH_TYPE. + */ +typedef enum { + WMI_NAN_DISC_PUBLISH_UNSOLICITED = 0, + WMI_NAN_DISC_PUBLISH_SOLICITED = 1, + WMI_NAN_DISC_PUBLISH_UNSOLICITED_SOLICITED = 2, +} WMI_NAN_DISC_PUBLISH_TYPE; + +/* + * NAN discovery service request termination reason values for + * wmi_nan_disc_service_req_terminated_event_fixed_param.reason. + * Maps to nl80211_nan_func_term_reason. + */ +typedef enum { + /** + * Service request was cancelled by an explicit host request + * (WMI_NAN_DISC_CANCEL_SERVICE_REQ_CMDID). + * Maps to NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST = 0 + */ + WMI_NAN_DISC_SERVICE_REQ_TERM_REASON_USER_REQUEST = 0, + /** + * Service request lifetime (TTL) elapsed; + * FW auto-expired the service request. + * Maps to NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED = 1 + */ + WMI_NAN_DISC_SERVICE_REQ_TERM_REASON_TTL_EXPIRED = 1, + /** + * FW encountered an internal error and could not maintain + * the service request. + * Also covers NAN_TERMINATED_REASON_COUNT_REACHED from the HAL path. + * Maps to NL80211_NAN_FUNC_TERM_REASON_ERROR = 2 + */ + WMI_NAN_DISC_SERVICE_REQ_TERM_REASON_ERROR = 2, +} WMI_NAN_DISC_SERVICE_REQ_TERM_REASON; + +/* + * SDEA (Service Descriptor Extension Attribute) control field bit accessors. + * Maps to NL80211_ATTR_NAN_FUNC_SDEA_CTRL / cfg80211_nan_func.sdea_ctrl. + * Bit 2 : Data Path Required + * Bit 6 : Security Required + */ +#define WMI_NAN_DISC_SDEA_CTRL_GET_DATA_PATH_REQ(sdea) \ + WMI_GET_BITS(sdea, 2, 1) +#define WMI_NAN_DISC_SDEA_CTRL_SET_DATA_PATH_REQ(sdea, v) \ + WMI_SET_BITS(sdea, 2, 1, v) +#define WMI_NAN_DISC_SDEA_CTRL_GET_SECURITY_REQ(sdea) \ + WMI_GET_BITS(sdea, 6, 1) +#define WMI_NAN_DISC_SDEA_CTRL_SET_SECURITY_REQ(sdea, v) \ + WMI_SET_BITS(sdea, 6, 1, v) + +/* + * service_req_flags field bit accessors for + * wmi_nan_disc_service_req_cmd_fixed_param.service_req_flags. + * Packs all boolean cfg80211_nan_func fields into one A_UINT32. + * + * Bit 0 : close_range — match only with close-range peers + * (NL80211_ATTR_NAN_FUNC_CLOSE_RANGE) + * Bit 1 : publish_bcast — send in broadcast discovery beacons; + * valid only for Publish + * (NL80211_ATTR_NAN_FUNC_PUBLISH_BCAST) + * Bit 2 : subscribe_active — send active subscribe queries; + * valid only for Subscribe + * (NL80211_ATTR_NAN_FUNC_SUBSCRIBE_ACTIVE) + * Bit 3 : gtk_required — group temporal key required for + * multicast data + * (NL80211_ATTR_NAN_FUNC_GTK_REQUIRED) + * Bit 4 : pairing_setup — enable initial NAN3 pairing setup + * (NL80211_ATTR_NAN_FUNC_PAIRING_SETUP) + * Bit 5 : pairing_cache — enable persistent NAN3 pairing cache + * (NL80211_ATTR_NAN_FUNC_PAIRING_CACHE) + * Bit 6 : pairing_verify — enable NAN3 pairing re-verification + * (NL80211_ATTR_NAN_FUNC_PAIRING_VERIFY) + * Bit 7 : nd_pmk_valid — nd_pmk TLV is populated and valid + * (NL80211_ATTR_NAN_FUNC_ND_PMK) + * Bits 8-31 : reserved, must be set to 0 + */ +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_CLOSE_RANGE(f) \ + WMI_GET_BITS(f, 0, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_CLOSE_RANGE(f, v) \ + WMI_SET_BITS(f, 0, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_PUBLISH_BCAST(f) \ + WMI_GET_BITS(f, 1, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_PUBLISH_BCAST(f, v) \ + WMI_SET_BITS(f, 1, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_SUBSCRIBE_ACTIVE(f) \ + WMI_GET_BITS(f, 2, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_SUBSCRIBE_ACTIVE(f, v) \ + WMI_SET_BITS(f, 2, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_GTK_REQUIRED(f) \ + WMI_GET_BITS(f, 3, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_GTK_REQUIRED(f, v) \ + WMI_SET_BITS(f, 3, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_PAIRING_SETUP(f) \ + WMI_GET_BITS(f, 4, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_PAIRING_SETUP(f, v) \ + WMI_SET_BITS(f, 4, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_PAIRING_CACHE(f) \ + WMI_GET_BITS(f, 5, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_PAIRING_CACHE(f, v) \ + WMI_SET_BITS(f, 5, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_PAIRING_VERIFY(f) \ + WMI_GET_BITS(f, 6, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_PAIRING_VERIFY(f, v) \ + WMI_SET_BITS(f, 6, 1, v) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET_ND_PMK_VALID(f) \ + WMI_GET_BITS(f, 7, 1) +#define WMI_NAN_DISC_SERVICE_REQ_FLAGS_SET_ND_PMK_VALID(f, v) \ + WMI_SET_BITS(f, 7, 1, v) + +/** + * WMI command to add a NAN discovery function + * (Publish / Subscribe / Follow-up). + * WMI equivalent of NL80211_CMD_ADD_NAN_FUNCTION / cfg80211_nan_func. + */ +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_nan_disc_service_req_cmd_fixed_param */ + A_UINT32 tlv_header; + /** Unique id identifying the NMI VDEV */ + A_UINT32 vdev_id; + /** + * NAN service request type: + * 1=Publish, 2=Subscribe, 3=Follow-up; + * refer to WMI_NAN_DISC_SERVICE_REQ_TYPE + */ + A_UINT32 service_req_type; + /** + * Unique cookie assigned by cfg80211 for this function. + * Split into two A_UINT32 words for endian portability. + * Use WMI_NAN_DISC_COOKIE_GET/SET macros to access as A_UINT64. + */ + A_UINT32 cookie_low32; /* lower 32 bits of 64-bit cookie value */ + A_UINT32 cookie_high32; /* upper 32 bits of 64-bit cookie value */ + /** + * Function lifetime in Discovery Windows; + * 0 = active until explicitly deleted + */ + A_UINT32 ttl; + /** + * Publish transmission mode; + * valid only when service_req_type == WMI_NAN_DISC_SERVICE_REQ_PUBLISH; + * refer to WMI_NAN_DISC_PUBLISH_TYPE + */ + A_UINT32 publish_type; + /** + * Local function instance ID to which this follow-up is associated; + * valid only when service_req_type == WMI_NAN_DISC_SERVICE_REQ_FOLLOW_UP + */ + A_UINT32 followup_instance_id; + /** + * Requestor instance ID from the prior match event; + * valid only when service_req_type == WMI_NAN_DISC_SERVICE_REQ_FOLLOW_UP + */ + A_UINT32 followup_requestor_id; + /** + * NMI MAC address of the peer to send the follow-up to; + * valid only when service_req_type == WMI_NAN_DISC_SERVICE_REQ_FOLLOW_UP + */ + wmi_mac_addr followup_dest; + /** + * SDEA control field bitmap; use WMI_NAN_DISC_SDEA_CTRL_GET/SET macros; + * bit2=Data Path Required, bit6=Security Required + */ + A_UINT32 sdea_ctrl; + /** + * Bitmap of supported NAN3 pairing bootstrap methods; + * bit0=Opportunistic, bit1=PIN + */ + A_UINT32 pairing_bootstrap_methods; + /** + * Bloom filter index for the SRF; + * valid only when TLV srf_bf[] is non-empty + */ + A_UINT32 srf_bf_idx; + /** + * SRF filter mode: + * 0=exclude listed entries, 1=include only listed entries + */ + A_UINT32 srf_include; + /** + * Packed boolean flags; use WMI_NAN_DISC_SERVICE_REQ_FLAGS_GET/SET macros; + * bit0=close_range, bit1=publish_bcast, bit2=subscribe_active, + * bit3=gtk_required, bit4=pairing_setup, bit5=pairing_cache, + * bit6=pairing_verify, bit7=nd_pmk_valid, bits8-31=reserved + */ + A_UINT32 service_req_flags; + /** Actual number of bytes in TLV serv_spec_info[]; max 255 */ + A_UINT32 serv_spec_info_len; + /** Actual number of bytes in TLV srf_bf[] */ + A_UINT32 srf_bf_len; + /** Actual number of bytes in TLV rx_match_filter[] */ + A_UINT32 rx_match_filter_len; + /** Actual number of bytes in TLV tx_match_filter[] */ + A_UINT32 tx_match_filter_len; + /** extra_nan_attrs_len: + * number of valid bytes (i.e. excluding final alignment-padding) + * in the TLV extra_nan_attrs[] + */ + A_UINT32 extra_nan_attrs_len; + /** + * TLV (tag length value) parameters follow this structure: + * A_UINT8 service_id[]; 6-byte NAN Service ID, + * zero-padded to 8 bytes + * A_UINT8 serv_spec_info[]; Service Specific Info, max 255 bytes + * A_UINT8 srf_bf[]; SRF Bloom filter data + * wmi_mac_addr srf_macs[]; SRF MAC address filter list + * A_UINT8 rx_match_filter[]; RX match filter byte stream + * A_UINT8 tx_match_filter[]; TX match filter byte stream + * A_UINT32 cipher_suites[]; NAN cipher suite ID array + * A_UINT8 nd_pmk[]; NAN Data Path PMK, 32 bytes; + * present only when bit7 of + * service_req_flags is set + * A_UINT8 extra_nan_attrs[]; extra NAN attrs like Device Cap, + * Shared Key Desc, CSIA cap etc. + * are sent in stream of bytes + * (ieee80211 protocol order). + * The host must manually byteswap + * these bytes within each 4-byte word + * if the host's endianness doesn’t + * match the target’s, to ensure the + * expected byte order is maintained. + */ +} wmi_nan_disc_service_req_cmd_fixed_param; + +typedef enum { + WMI_NAN_STATUS_NO_NAN_AVAIL_DFS_CHANNEL_DETECTED = 0x1, + WMI_NAN_STATUS_NO_DFS_BEACONS_RECEIVED = 0x2, + WMI_NAN_STATUS_STA_DISCONNECTED_FROM_DFS = 0x3, +} WMI_NAN_DFS_CHANNEL_AVAILABILITY_STATUS_TYPE; + #define WMI_NAN_GET_RANGING_INITIATOR_ROLE(flag) WMI_GET_BITS(flag, 0, 1) #define WMI_NAN_SET_RANGING_INITIATOR_ROLE(flag, val) WMI_SET_BITS(flag, 0, 1, val) #define WMI_NAN_GET_RANGING_RESPONDER_ROLE(flag) WMI_GET_BITS(flag, 1, 1) @@ -31813,6 +33086,213 @@ typedef struct { A_UINT32 mac_id; /* MAC ID associated with NAN primary discovery channel */ } wmi_nan_enable_rsp_event_fixed_param; +/** + * WMI event response to WMI_NAN_DISC_SERVICE_REQ_CMDID. + * Sent by FW for each Publish / Subscribe / Follow-up function registration. + */ +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_nan_disc_service_rsp_event_fixed_param */ + A_UINT32 tlv_header; + /** Unique id identifying the NMI VDEV */ + A_UINT32 vdev_id; + /** + * Opaque cookie assigned by the driver; monotonically increasing per rdev. + * Host must store this and include it in every subsequent match event + * correlation. Equivalent of NL80211_ATTR_COOKIE in the CFG response. + * Split into two A_UINT32 words for endian portability. + * Use WMI_NAN_DISC_COOKIE_GET/SET macros to access as A_UINT64. + */ + A_UINT32 cookie_low32; /* lower 32 bits of 64-bit cookie value */ + A_UINT32 cookie_high32; /* upper 32 bits of 64-bit cookie value */ + /** + * FW/device-assigned service instance ID (1-255). + * Used in SDF frames and match events. + * Equivalent of NL80211_NAN_FUNC_INSTANCE_ID in the CFG response. + */ + A_UINT32 instance_id; + /** + * NAN service request type of the registered service request; + * refer to WMI_NAN_DISC_SERVICE_REQ_TYPE: + * 1 = WMI_NAN_DISC_SERVICE_REQ_PUBLISH + * 2 = WMI_NAN_DISC_SERVICE_REQ_SUBSCRIBE + * 3 = WMI_NAN_DISC_SERVICE_REQ_FOLLOW_UP + */ + A_UINT32 service_req_type; + /** Status code returned by FW: 0 = success, non-zero = failure */ + A_UINT32 status; +} wmi_nan_disc_service_rsp_event_fixed_param; + +/** + * WMI command to cancel an active NAN discovery service request. + * WMI equivalent of NL80211_CMD_DEL_NAN_FUNCTION / cfg80211 offload interface. + */ +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_nan_disc_cancel_service_req_cmd_fixed_param */ + A_UINT32 tlv_header; + /** Unique id identifying the NMI VDEV */ + A_UINT32 vdev_id; + /** + * NAN service request type being cancelled; + * refer to WMI_NAN_DISC_SERVICE_REQ_TYPE: + * 1 = WMI_NAN_DISC_SERVICE_REQ_PUBLISH + * 2 = WMI_NAN_DISC_SERVICE_REQ_SUBSCRIBE + */ + A_UINT32 service_req_type; + /** + * Instance ID of the service request to cancel (offload path); range 1-255. + * FW resolves instance_id to the internal service request object. + * Equivalent of NL80211_NAN_FUNC_INSTANCE_ID in + * NL80211_CMD_DEL_NAN_FUNCTION + */ + A_UINT32 instance_id; + /** + * Opaque cookie of the service request to cancel (standard path). + * Used when instance_id is not available; + * FW resolves cookie to service request. + * Equivalent of NL80211_ATTR_COOKIE in NL80211_CMD_DEL_NAN_FUNCTION. + * Set to 0 when instance_id is used instead. + * Split into two A_UINT32 words for endian portability. + * Use WMI_NAN_DISC_COOKIE_GET/SET macros to access as A_UINT64. + */ + A_UINT32 cookie_low32; /* lower 32 bits of 64-bit cookie value */ + A_UINT32 cookie_high32; /* upper 32 bits of 64-bit cookie value */ +} wmi_nan_disc_cancel_service_req_cmd_fixed_param; + +/** + * WMI event indicating a NAN discovery service request has been terminated. + * WMI equivalent of NL80211_CMD_DEL_NAN_FUNCTION (EVENT: terminated). + * Sent by FW when a Publish or Subscribe service request is cancelled by the + * host, expires due to TTL, or is terminated by FW due to an error. + */ +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_nan_disc_service_req_terminated_event_fixed_param */ + A_UINT32 tlv_header; + /** Unique id identifying the NMI VDEV */ + A_UINT32 vdev_id; + /** + * Opaque cookie of the terminated service request; assigned by FW in + * WMI_NAN_DISC_SERVICE_RSP_EVENTID. + * Equivalent of NL80211_ATTR_COOKIE in the terminated event. + * Split into two A_UINT32 words for endian portability. + * Use WMI_NAN_DISC_COOKIE_GET/SET macros to access as A_UINT64. + */ + A_UINT32 cookie_low32; /* lower 32 bits of 64-bit cookie value */ + A_UINT32 cookie_high32; /* upper 32 bits of 64-bit cookie value */ + /** + * Instance ID of the terminated service request (1-255). + * Equivalent of NL80211_NAN_FUNC_INSTANCE_ID in the terminated event + */ + A_UINT32 instance_id; + /** + * NAN service request type that was terminated; + * refer to WMI_NAN_DISC_SERVICE_REQ_TYPE: + * 1 = WMI_NAN_DISC_SERVICE_REQ_PUBLISH + * 2 = WMI_NAN_DISC_SERVICE_REQ_SUBSCRIBE + */ + A_UINT32 service_req_type; + /** + * Termination reason; refer to WMI_NAN_DISC_SERVICE_REQ_TERM_REASON enum: + * WMI_NAN_DISC_SERVICE_REQ_TERM_REASON_USER_REQUEST (0) — + * cancelled by host + * WMI_NAN_DISC_SERVICE_REQ_TERM_REASON_TTL_EXPIRED (1) — + * TTL elapsed + * WMI_NAN_DISC_SERVICE_REQ_TERM_REASON_ERROR (2) — + * FW internal error + */ + A_UINT32 reason; +} wmi_nan_disc_service_req_terminated_event_fixed_param; + +/** +* WMI NAN discovery match event (NL80211_CMD_NAN_MATCH equivalent). + * Covers two match scenarios, discriminated by the type field: + * type = WMI_NAN_DISC_SERVICE_REQ_PUBLISH — + * subscriber found a matching publisher + * type = WMI_NAN_DISC_SERVICE_REQ_SUBSCRIBE — + * publisher received a subscribe frame + */ +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_nan_disc_match_event_fixed_param */ + A_UINT32 tlv_header; + /** Unique id identifying the NMI VDEV */ + A_UINT32 vdev_id; + /** + * Cookie assigned by the driver in the + * WMI_NAN_DISC_SERVICE_RSP_EVENTID response; + * host uses this to correlate the match to the originating function. + * Split into two A_UINT32 words for endian portability. + * Use WMI_NAN_DISC_COOKIE_GET/SET macros to access as A_UINT64. + */ + A_UINT32 cookie_low32; /* lower 32 bits of 64-bit cookie value */ + A_UINT32 cookie_high32; /* upper 32 bits of 64-bit cookie value */ + /** Local function instance ID that triggered the match */ + A_UINT32 inst_id; + /** Peer's function instance ID */ + A_UINT32 peer_inst_id; + /** + * NAN service request type discriminating the match scenario; + * refer to WMI_NAN_DISC_SERVICE_REQ_TYPE: + * 1 = WMI_NAN_DISC_SERVICE_REQ_PUBLISH (subscriber matched a publisher) + * 2 = WMI_NAN_DISC_SERVICE_REQ_SUBSCRIBE (publisher received a subscribe) + */ + A_UINT32 type; + /** + * SDEA control field from peer; use WMI_NAN_DISC_SDEA_CTRL_GET macros; + * bit2=Data Path Required, bit6=Security Required + */ + A_UINT32 sdea_ctrl; + /** Peer's pairing bootstrap methods bitmap */ + A_UINT32 bootstrap_methods; + /** 1 = peer requires NDP (derived from SDEA bit 2); 0 = no NDP required */ + A_UINT32 data_path; + /** + * 1 = GTK protection required (derived from SDEA bit 10); + * 0 = not required + */ + A_UINT32 gtk_required; + /** 1 = peer supports pairing setup; 0 = not supported */ + A_UINT32 pairing_setup; + /** 1 = peer supports pairing cache; 0 = not supported */ + A_UINT32 pairing_cache; + /** 1 = peer supports pairing verify; 0 = not supported */ + A_UINT32 pairing_verify; + /** + * Received signal strength indicator (RSSI) in dBm; + * valid only when rssi_valid == 1 + */ + A_INT32 rssi; + /** 1 = rssi field is valid; 0 = rssi not populated */ + A_UINT32 rssi_valid; + /** Actual number of bytes in TLV peer_addr[] (always 6) */ + A_UINT32 peer_addr_len; + /** Actual number of bytes in TLV service_id[] (always 6) */ + A_UINT32 service_id_len; + /** Actual number of bytes in TLV serv_spec_info[] */ + A_UINT32 serv_spec_info_len; + /** Actual number of bytes in TLV scid[] */ + A_UINT32 scid_len; + /** + * Actual number of bytes in TLV extra_info[]; + * relevant when peer includes Extended SSI attribute + */ + A_UINT32 extra_info_len; + /** + * Actual number of bytes in TLV ies[]; + * raw IE blob parsed by supplicant: NPBA→bootstrap handler, + * Shared Key Descriptor→NIK exchange + */ + A_UINT32 ies_len; + /** + * TLV (tag length value) parameters follow this structure: + * wmi_mac_addr peer_addr[]; peer NMI address, 6 bytes (padded to 8) + * A_UINT8 service_id[]; local service ID, 6 bytes + * A_UINT8 serv_spec_info[]; service specific info from peer + * A_UINT32 cipher_suites[]; peer's NAN cipher suite ID array + * A_UINT8 scid[]; secure context ID; present when security_required == 1 + * A_UINT8 extra_info[]; extended SSI; present when extra_info_len > 0 + * A_UINT8 ies[]; raw IEs blob; present when ies_len > 0 + */ +} wmi_nan_disc_match_event_fixed_param; + typedef struct { /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_nan_next_dw_info_fixed_param */ A_UINT32 tlv_header; @@ -31865,6 +33345,35 @@ typedef struct { A_UINT32 status; } wmi_nan_peer_params_cnf_event_fixed_param; +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_nan_dfs_channel_availability_ind_event_fixed_param */ + A_UINT32 vdev_id; + /** status: + * Status code; see WMI_NAN_DFS_CHANNEL_AVAILABILITY_STATUS_TYPE + */ + A_UINT32 status; +} wmi_nan_dfs_channel_availability_ind_event_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_ndp_channel_info_event_fixed_param */ + + A_UINT32 vdev_id; /* Virtual device ID used for NDP operations (NDI VDEV) */ + /** peer NDI MAC address */ + wmi_mac_addr peer_ndi_macaddr; + /** Number of channels on this peer */ + A_UINT32 num_ndp_channels; + /** + * TLV (tag length value) parameters follow the ndp_confirm + * structure. The TLV's are: + * wmi_channel ndp_channel_list[]; + * A_UINT32 nss_list[]; // Nss indexing should match with channel indexing, + * // since Nss is associated with the channel. + * wmi_ndp_channel_info channel_info[]; // Indexing should match with + * // channel indexing. + */ +} wmi_ndp_channel_info_event_fixed_param; + typedef enum { WMI_NDP_BAND_CAP_2GHZ = 0x01, WMI_NDP_BAND_CAP_5GHZ = 0x02, @@ -34813,6 +36322,7 @@ typedef struct { /* picks protocol type from WMI_USD_SERVICE_PROTOCOL_TYPE */ A_UINT32 protocol_type; wmi_mac_addr device_mac_addr; + wmi_mac_addr multicast_addr; } wmi_usd_service_cmd_fixed_param; typedef struct { @@ -36876,11 +38386,29 @@ typedef struct { A_UINT32 rx_antenna; /* rx antenna */ A_UINT32 tx_default_antenna; /* tx default antenna */ /* - * Following this structure is the TLV: - * wmi_pdev_smart_ant_gpio_handle + * Following this structure are the TLVs: + * - wmi_pdev_smart_ant_gpio_handle + * + * - A_UINT32 pdev_smart_ant_param[] + * bit 0 : enable separate antenna for RTS (1:enable, 0:disable) + * Refer to WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_GET/SET + * bit 1-31: reserved */ } wmi_pdev_smart_ant_enable_cmd_fixed_param; +/* + * Bit field definitions for pdev_smart_ant_param A_UINT32 + * within WMI_PDEV_SMART_ANT_ENABLE_CMDID + */ +#define WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_BIT_POS 0 +#define WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_NUM_BITS 1 + +#define WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_GET(enable_field) \ + WMI_GET_BITS(enable_field, WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_BIT_POS, WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_NUM_BITS) + +#define WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_SET(enable_field, value) \ + WMI_SET_BITS(enable_field, WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_BIT_POS, WMI_PDEV_SMART_ANT_ENABLE_SEPARATE_RTS_ANT_NUM_BITS, value) + /** GPIO pins/function values to control antennas */ typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_smart_ant_gpio_handle */ @@ -36949,15 +38477,35 @@ typedef struct { #define WMI_PER_MIN_TX_PKTS_SET(per_threshold, value) \ WMI_SET_BITS(per_threshold, WMI_PER_MIN_TX_PKTS_BIT_POS, WMI_PER_MIN_TX_PKTS_NUM_BITS, value) +#define WMI_SA_TRAIN_LATENCY_TRAFFIC_BIT_POS 25 +#define WMI_SA_TRAIN_LATENCY_TRAFFIC_NUM_BITS 1 + +#define WMI_GET_SA_TRAIN_LATENCY_TRAFFIC(per_threshold) \ + WMI_GET_BITS(per_threshold, WMI_SA_TRAIN_LATENCY_TRAFFIC_BIT_POS, WMI_SA_TRAIN_LATENCY_TRAFFIC_NUM_BITS) + +#define WMI_SET_SA_TRAIN_LATENCY_TRAFFIC(per_threshold, value) \ + WMI_SET_BITS(per_threshold, WMI_SA_TRAIN_LATENCY_TRAFFIC_BIT_POS, WMI_SA_TRAIN_LATENCY_TRAFFIC_NUM_BITS, value) + +#define WMI_SA_TRAIN_USING_QOS_NULL_BIT_POS 26 +#define WMI_SA_TRAIN_USING_QOS_NULL_NUM_BITS 1 + +#define WMI_GET_SA_TRAIN_USING_QOS_NULL(per_threshold) \ + WMI_GET_BITS(per_threshold, WMI_SA_TRAIN_USING_QOS_NULL_BIT_POS, WMI_SA_TRAIN_USING_QOS_NULL_NUM_BITS) + +#define WMI_SET_SA_TRAIN_USING_QOS_NULL(per_threshold, value) \ + WMI_SET_BITS(per_threshold, WMI_SA_TRAIN_USING_QOS_NULL_BIT_POS, WMI_SA_TRAIN_USING_QOS_NULL_NUM_BITS, value) + + #define WMI_RATE_SERIES_320_BIT_POS 0 #define WMI_RATE_SERIES_320_NUM_BITS 16 #define WMI_GET_RATE_SERIES_320(train_rate_series_ext) \ WMI_GET_BITS(train_rate_series_ext, WMI_RATE_SERIES_320_BIT_POS, WMI_RATE_SERIES_320_NUM_BITS) -#define WMI_SET_RATE_SERIES_320(train_rate_series_ext) \ +#define WMI_SET_RATE_SERIES_320(train_rate_series_ext, value) \ WMI_SET_BITS(train_rate_series_ext, WMI_RATE_SERIES_320_BIT_POS, WMI_RATE_SERIES_320_NUM_BITS, value) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_smart_ant_set_train_antenna_param */ /* rate array */ @@ -37000,7 +38548,9 @@ typedef struct { * 0 | PER Threshold is valid * 1:8 | Per Threshold * 9:24 | min_tx_pkts Minimum number of pkts need to be checked - * 25:31 | Reserved + * 25 | enable_training_for_latency_traffic + * 26 | train_using_qos_null + * 27:31 | Reserved */ A_UINT32 per_threshold; /* @@ -38408,9 +39958,13 @@ typedef enum { } WMI_PDEV_POWER_DATAPATH_STATS_OPERATION; typedef enum { - WMI_PDEV_POWER_STATS_TYPE = 0x00000001, - WMI_PDEV_DATAPATH_STATS_TYPE = 0x00000002, - WMI_PDEV_POWER_DATAPATH_STATS_ALL = 0x00000003, + WMI_PDEV_POWER_STATS_TYPE = 0x00000001, + WMI_PDEV_DATAPATH_STATS_TYPE = 0x00000002, + WMI_PDEV_POWER_DATAPATH_STATS_ALL = 0x00000003, + WMI_PDEV_SOC_POWER_STATS_TYPE = 0x00000004, + WMI_PDEV_SOC_POWER_DATAPATH_STATS_ALL = 0x00000005, + + WMI_PDEV_STATS_TYPE_MAX, } WMI_PDEV_POWER_DATAPATH_STATS_TYPE; @@ -38661,47 +40215,58 @@ typedef struct { /* Power stats in event payload*/ typedef struct { - /** Power Statistics */ - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_power_stats_info */ + /** Power Statistics */ + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_power_stats_info */ - /** Common element - core_index (PDEV ID) */ - A_UINT32 core_index; + /** Common element - core_index (PDEV ID) */ + A_UINT32 core_index; - A_UINT32 radio_on_time; /* Time radio was on (ms) */ - A_UINT32 radio_off_time; /* Time radio was off (ms) */ - A_UINT32 wlan_pwr_on_time; /* WLAN power on time (ms) */ - /* tx_time: - * ms duration the radio is in a continuous transmit state - * encompassing all packet types (management, data, action frames) - */ - A_UINT32 tx_time; - /* rx_time: - * ms duration the radio is in a continuous receiving data state - * Including all Rx packets instead of only collecting for my BSS data - */ - A_UINT32 rx_time; + A_UINT32 radio_on_time; /* Time radio was on (ms) */ + A_UINT32 radio_off_time; /* Time radio was off (ms) */ + A_UINT32 wlan_pwr_on_time; /* WLAN power on time (ms) */ + /* tx_time: + * ms duration the radio is in a continuous transmit state + * encompassing all packet types (management, data, action frames) + */ + A_UINT32 tx_time; + /* rx_time: + * ms duration the radio is in a continuous receiving data state + * Including all Rx packets instead of only collecting for my BSS data + */ + A_UINT32 rx_time; - /* Number of sleep levels being sent to the host */ - A_UINT32 sleep_levels_num; - A_UINT32 sleep_time_per_levels[WMI_MAX_SLEEP_LEVELS]; /* ms */ + /* Number of sleep levels being sent to the host */ + A_UINT32 sleep_levels_num; + A_UINT32 sleep_time_per_levels[WMI_MAX_SLEEP_LEVELS]; /* ms */ } wmi_pdev_power_stats_info; typedef struct { - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_power_datapath_stats_event_fixed_param */ + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_power_datapath_stats_event_fixed_param */ - /** Status of the operation */ - A_UINT32 status; /* 0 = success, non-zero = error */ + /** Status of the operation */ + A_UINT32 status; /* 0 = success, non-zero = error */ - /** Stats type bitmap indicating which stats are included */ - A_UINT32 stats_type_bitmap; + /** Stats type bitmap indicating which stats are included */ + A_UINT32 stats_type_bitmap; - /* - * Following this structure are the TLVs: - * wmi_pdev_power_stats_info[num_cores]; - * wmi_pdev_tx_rate_info[num_tx_rate_info] - * where num_cores and num_tx_rate_info are determined from the TLV array - * (i.e. array size / array element size) - */ + A_UINT32 wlan_soc_pwr_on_time; /* WLAN power on time (ms) */ + + /* wlan_soc_sleep_levels_num: + * Number of sleep levels supported. + * Could be less than WMI_MAX_SLEEP_LEVELS based on the chip. + */ + A_UINT32 wlan_soc_sleep_levels_num; + + /** soc sleep level. Same WMI_MAX_SLEEP_LEVELS is used for sizing */ + A_UINT32 wlan_soc_sleep_time_per_level[WMI_MAX_SLEEP_LEVELS]; /* ms */ + + /* + * Following this structure are the TLVs: + * wmi_pdev_power_stats_info[num_cores]; + * wmi_pdev_tx_rate_info[num_tx_rate_info] + * where num_cores and num_tx_rate_info are determined from the TLV array + * (i.e. array size / array element size) + */ } wmi_pdev_power_datapath_stats_event_fixed_param; @@ -39694,6 +41259,16 @@ typedef struct { A_UINT32 reset_after_request; } wmi_request_radio_chan_stats_cmd_fixed_param; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_request_tdls_stats_cmd_fixed_param */ + A_UINT32 tlv_header; + /** VDEV identifier */ + A_UINT32 vdev_id; + /* flag to enable or disable this feature of getting TDLS stats */ + A_UINT32 enable; +} wmi_request_tdls_stats_cmd_fixed_param; + typedef struct { /** TLV tag and len; tag equals * WMITLV_TAG_STRUC_wmi_rmc_set_leader_cmd_fixed_param */ @@ -40462,6 +42037,13 @@ typedef struct { reserved2: 24; }; }; + + /* + * UHR DBE Capability Parameters of 802.11bn + * (conditional on DBE Support bit) + */ + A_UINT32 uhr_cap_dbe_info_2G[WMI_MAX_UHRCAP_DBE_SIZE]; + A_UINT32 uhr_cap_dbe_info_5G[WMI_MAX_UHRCAP_DBE_SIZE]; } WMI_MAC_PHY_CAPABILITIES_EXT2; #define WMI_CAP_EXT2_PDEV_TO_LINK_MAP_PDEV_ID_GET(pdev_to_link_map_word32) \ @@ -40488,40 +42070,40 @@ typedef struct { #define WMI_UHRCAP_PHY_MAX_NSS_DL_MU_80_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 1, 1, value) -/* Bit 2: Max Nss Rx for sounding NDP (≤ 160 MHz) */ +/* Bit 2: Max Nss Rx for sounding NDP (= 160 MHz) */ #define WMI_UHRCAP_PHY_MAX_NSS_RX_160_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 2, 1) #define WMI_UHRCAP_PHY_MAX_NSS_RX_160_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 2, 1, value) -/* Bit 3: Max Nss,total Rx for DL MU-MIMO (≤ 160 MHz) */ +/* Bit 3: Max Nss,total Rx for DL MU-MIMO (= 160 MHz) */ #define WMI_UHRCAP_PHY_MAX_NSS_DL_MU_160_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 3, 1) #define WMI_UHRCAP_PHY_MAX_NSS_DL_MU_160_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 3, 1, value) -/* Bit 4: Max Nss Rx for sounding NDP (≤ 320 MHz) */ +/* Bit 4: Max Nss Rx for sounding NDP (= 320 MHz) */ #define WMI_UHRCAP_PHY_MAX_NSS_RX_320_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 4, 1) #define WMI_UHRCAP_PHY_MAX_NSS_RX_320_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 4, 1, value) -/* Bit 5: Max Nss,total Rx for DL MU-MIMO (≤ 320 MHz) */ +/* Bit 5: Max Nss,total Rx for DL MU-MIMO (= 320 MHz) */ #define WMI_UHRCAP_PHY_MAX_NSS_DL_MU_320_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 5, 1) #define WMI_UHRCAP_PHY_MAX_NSS_DL_MU_320_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 5, 1, value) -/* Bit 6: ELR Rx Support */ -#define WMI_UHRCAP_PHY_ELR_RX_GET(uhr_cap_phy) \ +/* Bit 6: ELR Tx Support */ +#define WMI_UHRCAP_PHY_ELR_TX_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 6, 1) -#define WMI_UHRCAP_PHY_ELR_RX_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_ELR_TX_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 6, 1, value) -/* Bit 7: ELR Tx Support */ -#define WMI_UHRCAP_PHY_ELR_TX_GET(uhr_cap_phy) \ +/* Bit 7: ELR Rx Support */ +#define WMI_UHRCAP_PHY_ELR_RX_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 7, 1) -#define WMI_UHRCAP_PHY_ELR_TX_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_ELR_RX_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 7, 1, value) /* Bit 8: Partial BW DL MU-MIMO support */ @@ -40536,128 +42118,126 @@ typedef struct { #define WMI_UHRCAP_PHY_PARTIAL_BW_UL_MU_MIMO_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 9, 1, value) -/* Bit 10: COBF support */ -#define WMI_UHRCAP_PHY_COBF_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 10: MCS 15 support */ +#define WMI_UHRCAP_PHY_MCS_15_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 10, 1) -#define WMI_UHRCAP_PHY_COBF_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_MCS_15_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 10, 1, value) -/* Bit 11: COBF Joint Sounding Support */ -#define WMI_UHRCAP_PHY_COBF_JOINT_SOUNDING_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 11: 2XLDPC Tx Support */ +#define WMI_UHRCAP_PHY_2XLDPC_TX_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 11, 1) -#define WMI_UHRCAP_PHY_COBF_JOINT_SOUNDING_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_2XLDPC_TX_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 11, 1, value) -/* Bit 12: COSR Mode 1 Support */ -#define WMI_UHRCAP_PHY_COSR_MODE_1_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 12: 2XLDPC Rx Support */ +#define WMI_UHRCAP_PHY_2XLDPC_RX_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 12, 1) -#define WMI_UHRCAP_PHY_COSR_MODE_1_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_2XLDPC_RX_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 12, 1, value) -/* Bit 13: COSR Mode 2 Support */ -#define WMI_UHRCAP_PHY_COSR_MODE_2_SUPPORT_GET(uhr_cap_phy) \ - WMI_GET_BITS(uhr_cap_phy[0], 13, 1) -#define WMI_UHRCAP_PHY_COSR_MODE_2_SUPPORT_SET(uhr_cap_phy, value) \ - WMI_SET_BITS(uhr_cap_phy[0], 13, 1, value) - -/* Bits 14-15: UEQM Tx Max NSS Tx Support */ +/* Bits 13-14: UEQM Tx Support and Max NSS Tx */ #define WMI_UHRCAP_PHY_UEQM_TX_MAX_NSS_TX_SUPPORT_GET(uhr_cap_phy) \ - WMI_GET_BITS(uhr_cap_phy[0], 14, 2) + WMI_GET_BITS(uhr_cap_phy[0], 13, 2) #define WMI_UHRCAP_PHY_UEQM_TX_MAX_NSS_TX_SUPPORT_SET(uhr_cap_phy, value) \ - WMI_SET_BITS(uhr_cap_phy[0], 14, 2, value) + WMI_SET_BITS(uhr_cap_phy[0], 13, 2, value) -/* Bits 16-17:UEQM Rx Max NSS Rx Support */ +/* Bits 15-16: UEQM Rx Support and Max NSS Rx */ #define WMI_UHRCAP_PHY_UEQM_RX_MAX_NSS_RX_SUPPORT_GET(uhr_cap_phy) \ - WMI_GET_BITS(uhr_cap_phy[0], 16, 2) + WMI_GET_BITS(uhr_cap_phy[0], 15, 2) #define WMI_UHRCAP_PHY_UEQM_RX_MAX_NSS_RX_SUPPORT_SET(uhr_cap_phy, value) \ - WMI_SET_BITS(uhr_cap_phy[0], 16, 2, value) + WMI_SET_BITS(uhr_cap_phy[0], 15, 2, value) -/* Bit 18: UEQM LT 242ToneRU support */ -#define WMI_UHRCAP_PHY_UEQM_LT_242TONERU_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 17: Reserved */ + +/* Bit 18: Co-BF joint sounding support */ +#define WMI_UHRCAP_PHY_COBF_JOINT_SOUNDING_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 18, 1) -#define WMI_UHRCAP_PHY_UEQM_LT_242TONERU_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_COBF_JOINT_SOUNDING_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 18, 1, value) -/* Bit 19: DRU DBW 20 PWB 20 support */ -#define WMI_UHRCAP_PHY_DRU_DBW_20_PWB_20_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 19: IM pilots tx support */ +#define WMI_UHRCAP_PHY_IM_PILOTS_TX_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 19, 1) -#define WMI_UHRCAP_PHY_DRU_DBW_20_PWB_20_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_IM_PILOTS_TX_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 19, 1, value) -/* Bit 20: DRU DBW 40 PWB 40 support */ -#define WMI_UHRCAP_PHY_DRU_DBW_40_PWB_40_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 20: IM pilots rx support */ +#define WMI_UHRCAP_PHY_IM_PILOTS_RX_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 20, 1) -#define WMI_UHRCAP_PHY_DRU_DBW_40_PWB_40_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_IM_PILOTS_RX_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 20, 1, value) -/* Bit 21: DRU DBW 80 PWB 80 support */ -#define WMI_UHRCAP_PHY_DRU_DBW_80_PWB_80_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 21: COSR mode 1 support */ +#define WMI_UHRCAP_PHY_COSR_MODE_1_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 21, 1) -#define WMI_UHRCAP_PHY_DRU_DBW_80_PWB_80_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_COSR_MODE_1_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 21, 1, value) -/* Bit 22: DRU DBW 20 PWB 80 support */ -#define WMI_UHRCAP_PHY_DRU_DBW_20_PWB_80_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 22: COSR mode 2 support */ +#define WMI_UHRCAP_PHY_COSR_MODE_2_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 22, 1) -#define WMI_UHRCAP_PHY_DRU_DBW_20_PWB_80_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_COSR_MODE_2_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 22, 1, value) -/* Bit 23: DRU DBW 40 PWB 80 support */ -#define WMI_UHRCAP_PHY_DRU_DBW_40_PWB_80_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 23: DRU DBW 20 in PBW 20 support */ +#define WMI_UHRCAP_PHY_DRU_DBW_20_PBW_20_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 23, 1) -#define WMI_UHRCAP_PHY_DRU_DBW_40_PWB_80_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_20_PBW_20_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 23, 1, value) -/* Bit 24: DRU DBW 60 PWB 80 support */ -#define WMI_UHRCAP_PHY_DRU_DBW_60_PWB_80_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 24: DRU DBW 40 in PBW 40 support */ +#define WMI_UHRCAP_PHY_DRU_DBW_40_PBW_40_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 24, 1) -#define WMI_UHRCAP_PHY_DRU_DBW_60_PWB_80_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_40_PBW_40_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 24, 1, value) -/* Bit 25: DRU RRU HYBRID support */ -#define WMI_UHRCAP_PHY_DRU_RRU_HYBRID_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 25: DRU DBW 80 in PBW 80 support */ +#define WMI_UHRCAP_PHY_DRU_DBW_80_PBW_80_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 25, 1) -#define WMI_UHRCAP_PHY_DRU_RRU_HYBRID_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_80_PBW_80_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 25, 1, value) -/* Bit 26: 2XLDPC Tx Support */ -#define WMI_UHRCAP_PHY_2XLDPC_TX_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 26: DRU DBW 80 in PBW 160 MHz support */ +#define WMI_UHRCAP_PHY_DRU_DBW_80_PBW_160_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 26, 1) -#define WMI_UHRCAP_PHY_2XLDPC_TX_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_80_PBW_160_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 26, 1, value) -/* Bit 27: 2XLDPC Rx Support */ -#define WMI_UHRCAP_PHY_2XLDPC_RX_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 27: DRU DBW 80 in PBW 320 MHz support */ +#define WMI_UHRCAP_PHY_DRU_DBW_80_PBW_320_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 27, 1) -#define WMI_UHRCAP_PHY_2XLDPC_RX_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_80_PBW_320_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 27, 1, value) -/* Bit 28: IM Pilots Tx Support */ -#define WMI_UHRCAP_PHY_IM_PILOTS_TX_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 28: DRU DBW 20 in PBW >= 80 MHz support */ +#define WMI_UHRCAP_PHY_DRU_DBW_20_PBW_80_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 28, 1) -#define WMI_UHRCAP_PHY_IM_PILOTS_TX_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_20_PBW_80_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 28, 1, value) -/* Bit 29: IM Pilots Rx Support */ -#define WMI_UHRCAP_PHY_IM_PILOTS_RX_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 29: DRU DBW 40 in PBW >= 80 MHz support */ +#define WMI_UHRCAP_PHY_DRU_DBW_40_PBW_80_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 29, 1) -#define WMI_UHRCAP_PHY_IM_PILOTS_RX_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_40_PBW_80_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 29, 1, value) -/* Bit 30: MCS 15 Support */ -#define WMI_UHRCAP_PHY_MCS_15_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 30: DRU DBW 60 in PBW >= 80 MHz support */ +#define WMI_UHRCAP_PHY_DRU_DBW_60_PBW_80_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 30, 1) -#define WMI_UHRCAP_PHY_MCS_15_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_DBW_60_PBW_80_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 30, 1, value) -/* Bit 31: Intermediate MCS Support */ -#define WMI_UHRCAP_PHY_INTERMEDIATE_MCS_SUPPORT_GET(uhr_cap_phy) \ +/* Bit 31: DRU+RRU hybrid mode support */ +#define WMI_UHRCAP_PHY_DRU_RRU_HYBRID_SUPPORT_GET(uhr_cap_phy) \ WMI_GET_BITS(uhr_cap_phy[0], 31, 1) -#define WMI_UHRCAP_PHY_INTERMEDIATE_MCS_SUPPORT_SET(uhr_cap_phy, value) \ +#define WMI_UHRCAP_PHY_DRU_RRU_HYBRID_SUPPORT_SET(uhr_cap_phy, value) \ WMI_SET_BITS(uhr_cap_phy[0], 31, 1, value) +/* Bits 32-39: Reserved */ + /* - * ToDo: Bits 32-63 + * ToDo: Bits 40-63 */ /* @@ -40706,11 +42286,7 @@ typedef struct { #define WMI_UHRCAP_MAC_DPS_AP_HCM_SET(uhr_cap_mac, value) \ WMI_SET_BITS(uhr_cap_mac[0], 2, 1, value) -/* Bit 3: Multi Link Power Management support */ -#define WMI_UHRCAP_MAC_MULTI_LINK_PM_GET(uhr_cap_mac) \ - WMI_GET_BITS(uhr_cap_mac[0], 3, 1) -#define WMI_UHRCAP_MAC_MULTI_LINK_PM_SET(uhr_cap_mac, value) \ - WMI_SET_BITS(uhr_cap_mac[0], 3, 1, value) +/* Bit 3: Reserved */ /* Bit 4: NPCA support */ #define WMI_UHRCAP_MAC_NPCA_GET(uhr_cap_mac) \ @@ -40875,46 +42451,73 @@ typedef struct { #define WMI_UHRCAP_MAC_BTM_ASSURANCE_SET(uhr_cap_mac, value) \ WMI_SET_BITS(uhr_cap_mac[1], 4, 1, value) -/* Bits 36-63 --- Reserved */ +/* Bit 36: Co-BF Support */ +#define WMI_UHRCAP_MAC_COBF_SUPPORT_GET(uhr_cap_mac) \ + WMI_GET_BITS(uhr_cap_mac[1], 5, 1) +#define WMI_UHRCAP_MAC_COBF_SUPPORT_SET(uhr_cap_mac, value) \ + WMI_SET_BITS(uhr_cap_mac[1], 5, 1, value) -/* To be decided spec not provided clear bits */ +/* Bits 37-63 --- Reserved */ - -/* Bit 64-66: DBE Capabilities Params */ -#define WMI_UHRCAP_MAC_DBE_MAX_SUP_BW_GET(uhr_cap_mac) \ - WMI_GET_BITS(uhr_cap_mac[2], 0, 3) -#define WMI_UHRCAP_MAC_DBE_MAX_SUP_BW_SET(uhr_cap_mac, value) \ - WMI_SET_BITS(uhr_cap_mac[2], 0, 3, value) - - -/* Bit 67: EHT-MCS Map (BW=160 MHz) Present */ -#define WMI_UHRCAP_MAC_EHT_MCS_160_PRESENT_GET(uhr_cap_mac) \ - WMI_GET_BITS(uhr_cap_mac[2], 3, 1) -#define WMI_UHRCAP_MAC_EHT_MCS_160_PRESENT_SET(uhr_cap_mac, value) \ - WMI_SET_BITS(uhr_cap_mac[2], 3, 1, value) - -/* Bit 68: EHT-MCS Map (BW=320 MHz) Present */ -#define WMI_UHRCAP_MAC_EHT_MCS_320_PRESENT_GET(uhr_cap_mac) \ - WMI_GET_BITS(uhr_cap_mac[2], 4, 1) -#define WMI_UHRCAP_MAC_EHT_MCS_320_PRESENT_SET(uhr_cap_mac, value) \ - WMI_SET_BITS(uhr_cap_mac[2], 4, 1, value) - -/* Bit 69-71: Reserved */ - -/* Bit 72 to 95: EHT-MCS Map (BW=160 MHz) */ -#define WMI_UHRCAP_MAC_EHT_MCS_MAP_160_GET(uhr_cap_mac) \ - WMI_GET_BITS(uhr_cap_mac[2], 8, 24) -#define WMI_UHRCAP_MAC_EHT_MCS_MAP_160_SET(uhr_cap_mac, value) \ - WMI_SET_BITS(uhr_cap_mac[2], 8, 24, value) - -/* Bit 96 to 121: EHT-MCS Map (BW=320 MHz) */ -#define WMI_UHRCAP_MAC_EHT_MCS_MAP_320_GET(uhr_cap_mac) \ - WMI_GET_BITS(uhr_cap_mac[3], 0, 24) -#define WMI_UHRCAP_MAC_EHT_MCS_MAP_320_SET(uhr_cap_mac, value) \ - WMI_SET_BITS(uhr_cap_mac[3], 0, 24, value) +/* + * NOTE: uhr_cap_mac[2] and uhr_cap_mac[3] (bits 64-127) are reserved. + * WMI_MAX_UHRCAP_MAC_SIZE is kept at 4 for backward compatibility. + * DBE Capability Parameters are carried in the separate uhr_cap_dbe[] + * array using WMI_UHRCAP_DBE_* macros below. + */ /****** End of 11BN UHR MAC Capabilities Information field ******/ /* } */ +/****** 11BN UHR DBE Capability Parameters field ******/ /* { */ + +/* Bits B0-B2: DBE Maximum Supported Bandwidth + * + * DBE Maximum Supported Bandwidth Lookup Table + * + * +------------------+-----------------------------+ + * | Sub-field Value | DBE Bandwidth | + * +------------------+-----------------------------+ + * | 0 | Reserved | + * | 1 | 40 MHz DBE bandwidth | + * | 2 | 80 MHz DBE bandwidth | + * | 3 | 160 MHz DBE bandwidth | + * | 4 | 320 MHz DBE bandwidth | + * | 5 to 7 | Reserved | + * +------------------+-----------------------------+ + */ +#define WMI_UHRCAP_DBE_MAX_SUP_BW_GET(uhr_cap_dbe) \ + WMI_GET_BITS(uhr_cap_dbe[0], 0, 3) +#define WMI_UHRCAP_DBE_MAX_SUP_BW_SET(uhr_cap_dbe, value) \ + WMI_SET_BITS(uhr_cap_dbe[0], 0, 3, value) + +/* Bit B3: EHT-MCS Map (BW=160 MHz) Present */ +#define WMI_UHRCAP_DBE_EHT_MCS_160_PRESENT_GET(uhr_cap_dbe) \ + WMI_GET_BITS(uhr_cap_dbe[0], 3, 1) +#define WMI_UHRCAP_DBE_EHT_MCS_160_PRESENT_SET(uhr_cap_dbe, value) \ + WMI_SET_BITS(uhr_cap_dbe[0], 3, 1, value) + +/* Bit B4: EHT-MCS Map (BW=320 MHz) Present */ +#define WMI_UHRCAP_DBE_EHT_MCS_320_PRESENT_GET(uhr_cap_dbe) \ + WMI_GET_BITS(uhr_cap_dbe[0], 4, 1) +#define WMI_UHRCAP_DBE_EHT_MCS_320_PRESENT_SET(uhr_cap_dbe, value) \ + WMI_SET_BITS(uhr_cap_dbe[0], 4, 1, value) + +/* Bits B5-B7: Reserved */ + +/* Bits B8-B31: EHT-MCS Map (BW=160 MHz) — present only if B3 is set (0 or 24 bits) */ +#define WMI_UHRCAP_DBE_EHT_MCS_MAP_160_GET(uhr_cap_dbe) \ + WMI_GET_BITS(uhr_cap_dbe[0], 8, 24) +#define WMI_UHRCAP_DBE_EHT_MCS_MAP_160_SET(uhr_cap_dbe, value) \ + WMI_SET_BITS(uhr_cap_dbe[0], 8, 24, value) + +/* Bits B32-B55: EHT-MCS Map (BW=320 MHz) — present only if B4 is set (0 or 24 bits) */ +#define WMI_UHRCAP_DBE_EHT_MCS_MAP_320_GET(uhr_cap_dbe) \ + WMI_GET_BITS(uhr_cap_dbe[1], 0, 24) +#define WMI_UHRCAP_DBE_EHT_MCS_MAP_320_SET(uhr_cap_dbe, value) \ + WMI_SET_BITS(uhr_cap_dbe[1], 0, 24, value) + +/****** End of 11BN UHR DBE Capability Parameters field ******/ /* } */ + #define WMI_CAP_EXT2_NPCA_ENABLED_GET(npca_capability) \ WMI_GET_BITS(npca_capability, 0, 1) #define WMI_CAP_EXT2_NPCA_ENABLED_SET(npca_capability, value) \ @@ -42411,6 +44014,16 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_ENERGY_MGMT_OEM_DATA_CMDID); WMI_RETURN_STRING(WMI_TWT_ADD_CH_USAGE_CMDID); WMI_RETURN_STRING(WMI_COEX_GET_POLICY_STATS_CMDID); + WMI_RETURN_STRING(WMI_PEER_UHR_OMP_CMDID); + WMI_RETURN_STRING(WMI_REQUEST_TDLS_STATS_CMDID); + WMI_RETURN_STRING(WMI_GET_CHIPSET_LOGGING_STATS_CMDID); + WMI_RETURN_STRING(WMI_VDEV_GET_CHAN_HOP_STATUS_REPORT_CMDID); + WMI_RETURN_STRING(WMI_NAN_DISC_SERVICE_REQ_CMDID); + WMI_RETURN_STRING(WMI_NAN_DISC_CANCEL_SERVICE_REQ_CMDID); + WMI_RETURN_STRING(WMI_SET_MODIFY_TX_PLIM_CMDID); + WMI_RETURN_STRING(WMI_GET_AVG_TX_POWER_CMDID); + WMI_RETURN_STRING(WMI_GET_TX_POWER_CALLING_CMDID); + WMI_RETURN_STRING(WMI_ATHDIAG_READ_WRITE_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -43588,6 +45201,8 @@ typedef struct { * optional TLV for dbw_chan * wmi_dbw_chan_info dbw_chan_info * optional TLV used for dbw_chan_info + * wmi_uhr_ap_npca_params npca_params + * optional TLV used to update NPCA information */ } wmi_pdev_multiple_vdev_restart_request_cmd_fixed_param; @@ -44141,11 +45756,32 @@ typedef struct { #define TWT_EN_DIS_FLAGS_SET_DIS_BTWT_AUTO_DELETE(flag, val) \ WMI_SET_BITS(flag, 7, 1, val) +/* + * Bit 8: indicates whether pdev_id is valid or vdev_id is valid. + * 0: pdev_id is valid (MAC-level TWT enable/disable) + * 1: vdev_id is valid (STA vdev-level TWT enable/disable) + */ +#define TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flag) WMI_GET_BITS(flag, 8, 1) +#define TWT_EN_DIS_FLAGS_SET_VDEV_SUPPORT(flag, val) WMI_SET_BITS(flag, 8, 1, val) + +/* bits 9-31: unused / reserved */ + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_twt_enable_cmd_fixed_param */ - /** pdev_id for identifying the MAC. See macros starting with WMI_PDEV_ID_ for values. In non-DBDC case host should set it to 0 + /** + * pdev_id or vdev_id depending on bit 8 of flags. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 0: + * pdev_id identifies the MAC. + * See macros starting with WMI_PDEV_ID_ for values. + * In non-DBDC case host should set it to 0. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 1: + * vdev_id is for STA vdev-level TWT enable. + * TWT enable applies only to that specific STA vdev. */ - A_UINT32 pdev_id; + union { + A_UINT32 pdev_id; + A_UINT32 vdev_id; + }; A_UINT32 sta_cong_timer_ms; /* STA TWT congestion timer TO value in terms of ms */ A_UINT32 mbss_support; /* Reserved */ A_UINT32 default_slot_size; /* This is the default value for the TWT slot setup by AP (units = microseconds) */ @@ -44188,23 +45824,70 @@ typedef enum _WMI_ENABLE_TWT_STATUS_T { typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_twt_enable_complete_event_fixed_param */ - /** pdev_id for identifying 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; + /** + * pdev_id or vdev_id depending on bit 8 of flags. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 0: + * pdev_id identifies the MAC. + * See macros starting with WMI_PDEV_ID_ for values. + * In non-DBDC case host should set it to 0. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 1: + * vdev_id is for STA vdev-level TWT enable. + * TWT enable applies only to that specific STA vdev. + */ + union { + A_UINT32 pdev_id; + A_UINT32 vdev_id; + }; A_UINT32 status; /* WMI_ENABLE_TWT_STATUS_T */ + /* flags: + * mirrors TWT_EN_DIS_FLAGS_* from the enable command; + * bit 8 indicates pdev vs vdev + */ + A_UINT32 flags; } wmi_twt_enable_complete_event_fixed_param; typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_twt_disable_cmd_fixed_param */ - /** pdev_id for identifying 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; /* host should never set it to WMI_PDEV_ID_SOC */ + /** + * pdev_id or vdev_id depending on bit 8 of flags. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 0: + * pdev_id identifies the MAC. + * See macros starting with WMI_PDEV_ID_ for values. + * In non-DBDC case host should set it to 0. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 1: + * vdev_id is for STA vdev-level TWT disable. + * TWT disable applies only to that specific STA vdev. + */ + union { + A_UINT32 pdev_id; /* host should never set it to WMI_PDEV_ID_SOC */ + A_UINT32 vdev_id; + }; A_UINT32 flags; /* enable/disable flags, refer to MACROs TWT_EN_DIS_FLAGS_* (TWT_EN_DIS_FLAGS_GET_BTWT etc.) */ A_UINT32 reason_code; /* refer to WMI_DISABLE_TWT_REASON_T */ } wmi_twt_disable_cmd_fixed_param; typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_twt_disable_complete_event_fixed_param */ - A_UINT32 pdev_id; + /** + * pdev_id or vdev_id depending on bit 8 of flags. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 0: + * pdev_id identifies the MAC. + * See macros starting with WMI_PDEV_ID_ for values. + * In non-DBDC case host should set it to 0. + * When TWT_EN_DIS_FLAGS_GET_VDEV_SUPPORT(flags) == 1: + * vdev_id is for STA vdev-level TWT disable. + * TWT disable applies only to that specific STA vdev. + */ + union { + A_UINT32 pdev_id; /* host should never set it to WMI_PDEV_ID_SOC */ + A_UINT32 vdev_id; + }; A_UINT32 status; /* refer to WMI_DISABLE_TWT_STATUS_T enum */ + /* flags: + * mirrors TWT_EN_DIS_FLAGS_* from the enable command; + * bit 8 indicates pdev vs vdev + */ + A_UINT32 flags; } wmi_twt_disable_complete_event_fixed_param; typedef struct { @@ -46786,7 +48469,7 @@ typedef enum { WMI_6GHZ_REG_PWRMODE_C2C = 4, /*C2C client mode for AP and client products*/ WMI_6GHZ_REG_PWRMODE_GVP = 5, /* GVP mode for AP and client products */ - WMI_6GHZ_REG_PWRMODE_MAX = 5 + WMI_6GHZ_REG_PWRMODE_MAX = 6 } WMI_6GHZ_REG_PWRMODE_TYPE; typedef struct { @@ -49207,9 +50890,6 @@ typedef struct { /* max beacon bmiss bitmask array size, in 32-bit words */ #define WMI_MAX_BCN_BMISS_HISTORY_LENGTH 8 -/* max MCS counters supported for enhance stats */ -#define WMI_ENHANCE_STATS_MAX_MCS_COUNTERS 16 - typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_beacon_stats */ A_UINT32 vdev_id; /* ID of the vdev these beacon stats are from */ @@ -53048,6 +54728,7 @@ typedef struct { #define WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_2G_RATE_NUM_EXT 8 #define WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_5G_6G_RATE_NUM 24 +#define WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_5G_RATE_NUM_EXT 4 typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_custom_tx_power_per_mcs_cmd_fixed_param */ @@ -53073,22 +54754,22 @@ typedef struct { */ A_UINT32 bitmap_of_2GHz_band[WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_CHAIN_NUM]; - /* 5GHz band has 4 chains and each chain has 24 rates. + /* 5GHz band has 4 chains and each chain has 24 rates and 4 extended rates. * bitmap_of_5GHz_band[0] -> chain 0 bitmap: - * |bit 0|bit 1|......|bit 23| - * |rate 0|rate 1|......|rate 23| + * |bit 0|bit 1|......|bit 23| bit 24 |......| bit 27 | + * |rate 0|rate 1|......|rate 23|ext rate 0|......|ext rate 3| * * bitmap_of_5GHz_band[1] -> chain 1 bitmap: - * |bit 0|bit 1|......|bit 23| - * |rate 0|rate 1|......|rate 23| + * |bit 0|bit 1|......|bit 23| bit 24 |......| bit 27 | + * |rate 0|rate 1|......|rate 23|ext rate 0|......|ext rate 3| * * bitmap_of_5GHz_band[2] -> chain 2 bitmap: - * |bit 0|bit 1|......|bit 23| - * |rate 0|rate 1|......|rate 23| + * |bit 0|bit 1|......|bit 23| bit 24 |......| bit 27 | + * |rate 0|rate 1|......|rate 23|ext rate 0|......|ext rate 3| * * bitmap_of_5GHz_band[3] -> chain 3 bitmap: - * |bit 0|bit 1|......|bit 23| - * |rate 0|rate 1|......|rate 23| + * |bit 0|bit 1|......|bit 23| bit 24 |......| bit 27 | + * |rate 0|rate 1|......|rate 23|ext rate 0|......|ext rate 3| */ A_UINT32 bitmap_of_5GHz_band[WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_CHAIN_NUM]; @@ -54461,6 +56142,35 @@ typedef struct { A_UINT32 tlv_header; } wmi_get_scan_cache_result_cmd_fixed_param; +typedef enum { + WMI_PLIM_DIRECTION_NONE = 0, + WMI_PLIM_DIRECTION_INCREASE, + WMI_PLIM_DIRECTION_DECREASE +} wmi_plim_direction_type; + +typedef struct { + /* WMITLV_TAG_STRUC_wmi_set_modify_tx_plim_cmd_fixed_param */ + A_UINT32 tlv_header; + /* Requested level for future enhancement, default value shall be 1 */ + A_UINT32 multiplier; + /* takes values from enum wmi_plim_direction_type */ + A_UINT32 direction; +} wmi_set_modify_tx_plim_cmd_fixed_param; + +typedef struct { + /* WMITLV_TAG_STRUC_wmi_get_avg_tx_power_cmd_fixed_param */ + A_UINT32 tlv_header; + /* Current active DSI (device state index) */ + A_UINT32 dsi_id; +} wmi_get_avg_tx_power_cmd_fixed_param; + +typedef struct { + /* WMITLV_TAG_STRUC_wmi_get_tx_power_calling_cmd_fixed_param */ + A_UINT32 tlv_header; + /* DSI index for which power limit info is to be fetched */ + A_UINT32 dsi_id; +} wmi_get_tx_power_calling_cmd_fixed_param; + /* Element ID 61 (HT Operation) is present (see HT 7.3.2) */ #define WIFI_CACHED_SCAN_RESULT_FLAGS_HT_OPS_PRESENT_GET(flags) WMI_GET_BITS(flags, 0, 1) #define WIFI_CACHED_SCAN_RESULT_FLAGS_HT_OPS_PRESENT_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) @@ -54522,6 +56232,66 @@ typedef struct { */ } wmi_scan_cache_result_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_modify_tx_plim_event_fixed_param */ + + A_UINT32 status; /* 0 = success, 1 = failure */ +} wmi_modify_tx_plim_event_fixed_param; + +typedef enum { + /* Invalid Chain combination */ + WMI_POWER_REGION_INVALID = 0, + + /* Avg. tx power <= PowerLimit-backoff */ + WMI_POWER_REGION_LOW = 1, + + /* PowerLimit-backoff < Avg. tx power <= PowerLimit */ + WMI_POWER_REGION_MEDIUM = 2, + + /* PowerLimit < Avg. tx power <= PowerLimit+Boost */ + WMI_POWER_REGION_HIGH = 3, + + /* Avg. tx power > PowerLimit+Boost */ + WMI_POWER_REGION_EXTRA_HIGH = 4, + +} wmi_phyrf_tas_chain_power_region_type; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_avg_tx_power_region_per_antenna_chain */ + /* Valid chain number for which chain_power_region is filled */ + A_UINT32 chain_no; + A_UINT32 chain_operating_band; /* 0: 2GHz, 1: 5GHz, 2: 6GHz */ + /* takes values from enum wmi_phyrf_tas_chain_power_region_type */ + A_UINT32 chain_power_region; +} wmi_avg_tx_power_region_per_antenna_chain; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_avg_tx_power_event_fixed_param */ + A_UINT32 status; /* 0 = success, 1 = failure */ + /* Exposure window over which TX power is averaged */ + A_UINT32 time_window_in_sec; + /* The below TLVs follow this TLV + * struct wmi_avg_tx_power_region_per_antenna_chain[]; + */ +} wmi_avg_tx_power_event_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_power_per_antenna_chain */ + A_UINT32 chain_no; /* Valid chain number for which power is filled */ + A_UINT32 chain_operating_band; /* 0: 2GHz, 1: 5GHz, 2: 6GHz */ + A_INT32 power; /* Power limit in units of 0.25 dBm */ +} wmi_tx_power_per_antenna_chain; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_plimit_table_event_fixed_param */ + A_UINT32 status; /* 0 = success, 1 = failure */ + A_UINT32 dsi_id; /* DSI index for which below entries are filled */ + /* The below TLVs follow this TLV + * struct wmi_tx_power_per_antenna_chain[]; + */ +} wmi_plimit_table_event_fixed_param; + + #define WMI_POWER_BOOST_CAPABILITIES_PHY_ID_GET(word32) WMI_GET_BITS(word32, 0, 4) #define WMI_POWER_BOOST_CAPABILITIES_PHY_ID_SET(word32, value) WMI_SET_BITS(word32, 0, 4, value) #define WMI_POWER_BOOST_CAPABILITIES_POWER_BOOST_ENABLE_GET(word32) WMI_GET_BITS(word32, 4, 1) @@ -55081,13 +56851,13 @@ typedef struct { * The time needed by an NPCA STA to switch from the * BSS primary channel to the NPCA primary channel, * in units of 4 us. - * WMI_NPCA_AP_CAP_SWT_DELAY_GET / _SET + * WMI_NPCA_AP_CAP_SWITCH_DELAY_GET / _SET * * Bit18:23: NPCA Switch Back Delay * The time needed by an NPCA STA to switch from the * NPCA primary channel to the BSS primary channel, * in units of 4 us. - * WMI_NPCA_AP_CAP_SWTB_DELAY_GET / _SET + * WMI_NPCA_AP_CAP_SWITCH_BACK_DELAY_GET / _SET * * Bit24:25: The Initial NPCA QSRC field indicates the value * that is used to initialize the EDCAF QSRC[AC] variables @@ -55465,6 +57235,46 @@ typedef struct { A_UINT32 role; /* holds wmi_channel_hopping_role enum value */ } wmi_channel_hopping_channel_params; +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_get_chan_hop_status_report_cmd_fixed_param */ + A_UINT32 tlv_header; + A_UINT32 vdev_id; +} wmi_vdev_get_chan_hop_status_report_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_chan_hop_slot_status */ + A_UINT32 tlv_header; + A_UINT32 role; /* holds wmi_channel_hopping_role enum value */ + A_UINT32 chan_mhz; + /* + * TSF of the most recent actual frequency transition leading into + * slot. Carried forward for consecutive same-frequency slots. + */ + A_UINT32 channel_switch_tsf; + A_UINT32 channel_start_tsf; /* TSF when this slot's active period began. */ + A_UINT32 channel_end_tsf; /* TSF when this slot's active period ended. */ + /** + * tx_traffic_index = (tx_duration_us / channel_spent_us) * 100 + * Range: 0 - 100 + */ + A_UINT32 tx_traffic_index; + /** + * rx_traffic_index = (rx_duration_us / channel_spent_us) * 100 + * Range: 0 - 100 + */ + A_UINT32 rx_traffic_index; +} wmi_vdev_chan_hop_slot_status; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_chan_hop_status_report_event_fixed_param */ + A_UINT32 tlv_header; + A_UINT32 vdev_id; + /** TSF timestamp of the current channel hopping request */ + A_UINT32 hopping_request_tsf; + /* Index of the current channel in the channel hopping list */ + A_UINT32 current_channel_index; +} wmi_vdev_chan_hop_status_report_event_fixed_param; + typedef enum { WMI_SMD_ROAM_CONFIG_ROLE_SERVING_AP = 1, WMI_SMD_ROAM_CONFIG_ROLE_TARGET_AP, @@ -55504,6 +57314,8 @@ typedef struct { offset: 16; }; }; + A_UINT32 tx_buffer_size; /* tx block ack window size */ + A_UINT32 rx_buffer_size; /* rx block ack window size */ } wmi_smd_roam_peer_tid_info; #define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_GET_ROLE(cmd_flags) WMI_GET_BITS(mlo_flags, 0, 4) @@ -55634,6 +57446,102 @@ typedef struct { A_UINT32 status; /** wmi_smd_peer_setup_status_type */ } wmi_smd_roam_peer_unified_setup_complete_event_fixed_param; +/* ================================================================ */ +/* WMI_PEER_SET_MAPC_PARAMS_CMDID structures */ +/* ================================================================ */ + +/* Scheme enable bitmap — indicates which scheme TLVs are present */ +#define WMI_MAPC_SCHEME_COBF (1 << 0) /* Co-BF */ +#define WMI_MAPC_SCHEME_COSR (1 << 1) /* Co-SR */ +#define WMI_MAPC_SCHEME_COTDMA (1 << 2) /* Co-TDMA */ +#define WMI_MAPC_SCHEME_CORTWT (1 << 3) /* Co-rTWT */ +#define WMI_MAPC_SCHEME_COCR (1 << 4) /* Co-CR */ + +/* + * wmi_peer_set_mapc_params_cmd_fixed_param: + * Identity + routing hint for WMI_PEER_SET_MAPC_PARAMS_CMDID. + * mapc_scheme_enable_bitmap indicates which scheme TLVs follow. + * Sent after WMI_PEER_CREATE_CMDID (peer_type=WMI_PEER_TYPE_MAPC) + * and after each MAPC Negotiation Agreement Establishment/Update. + */ +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_peer_set_mapc_params_cmd_fixed_param */ + A_UINT32 vdev_id; + wmi_mac_addr peer_macaddr; + A_UINT32 mapc_scheme_enable_bitmap; /* WMI_MAPC_SCHEME_* bitmask */ +} wmi_peer_set_mapc_params_cmd_fixed_param; + +/* + * wmi_mapc_cmn_params: + * Common MAPC params shared across all schemes. + */ +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_mapc_cmn_params */ + + /* peer's advertised MAPC capability bitmap */ + A_UINT32 mapc_capability_bitmap; + + /* APID assigned by local AP to remote C-AP */ + A_UINT32 apid_to_neighbor_peer; + + /* APID assigned by remote C-AP to local AP */ + A_UINT32 apid_from_neighbor_peer; + + /* Vendor Q2Q APID assigned to remote peer */ + A_UINT32 q2q_apid_to_neighbor_peer; + + /* Vendor Q2Q APID assigned by remote peer */ + A_UINT32 q2q_apid_from_neighbor_peer; +} wmi_mapc_cmn_params; + +/* + * wmi_mapc_cotdma_params: mapc_ctdma_profile + mapc_txop_sharing_policy + * Co-TDMA per-peer policy parameters. + */ +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_mapc_cotdma_params */ + + /* Channel info — mapc_ctdma_profile */ + A_UINT32 channel_width; /* operating channel width (MHz) */ + A_UINT32 ccfs; /* center channel frequency segment index */ + A_UINT32 bss_color; /* 802.11ax/be BSS color */ + + /* 1 = peer supports RX-driven TXOP return */ + A_UINT32 rx_txop_return_support; + + A_UINT32 disable_subchannel_bitmap; /* subchannels to disable */ + + /* TXOP sharing policy — mapc_txop_sharing_policy */ + A_UINT32 primary_ac; /* primary AC: VO=0 VI=1 BE=2 BK=3 */ + A_UINT32 nbr_ap_prio; /* Cotroller set nbr shared ap prio */ + A_UINT32 latency_sensitive_threshold_us; + A_UINT32 service_start_time; /* TSF-relative service window start (us) */ + A_UINT32 service_interval; /* periodicity (us); 0 = always available */ + A_UINT32 service_end_time; /* TSF-relative service window end (us) */ + A_UINT32 critical_traffic_dur_thresh_us; + A_UINT32 max_shared_txop_dur_us; /* per-AC max shared TXOP */ + A_UINT32 min_shared_txop_dur_us; /* per-AC min TXOP to trigger C-TDMA */ +} wmi_mapc_cotdma_params; + +/* + * Stub structures for future MAPC coordination schemes. + * Included now to reserve TLV slots in WMI_PEER_SET_MAPC_PARAMS_CMDID so that + * the TLV layout remains stable when these schemes are implemented. Host must + * send 0 array entries for each stub; FW ignores them until the feature lands. + */ + +/* Co-SR (Coordinated Spatial Reuse, 802.11bn): allows coordinated BSS-color / + * OBSS_PD threshold negotiation between C-APs to improve spatial reuse. */ +typedef struct { A_UINT32 tlv_header; } wmi_mapc_cosr_params; + +/* Co-BF (Coordinated Beamforming, 802.11bn): enables joint beamforming vector + * coordination between C-APs to suppress inter-BSS interference. */ +typedef struct { A_UINT32 tlv_header; } wmi_mapc_cobf_params; + +/* Co-rTWT (Coordinated restricted-TWT, 802.11bn): allows C-APs to align their + * restricted-TWT service periods to avoid overlapping transmissions. */ +typedef struct { A_UINT32 tlv_header; } wmi_mapc_cortwt_params; + typedef enum { WMI_PDEV_SET_CUMAC_CHIP_ID_SUCCESS = 0, @@ -55678,6 +57586,705 @@ typedef struct { A_UINT32 rx_chains; } wmi_vdev_current_operating_param_event_fixed_param; +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_get_chipset_logging_stats_cmd_fixed_param */ + /** unique id identifying the request */ + A_UINT32 request_id; +} wmi_get_chipset_logging_stats_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_get_chipset_logging_stats_event_fixed_param */ + /** unique id identifying the request */ + A_UINT32 request_id; + /** length in bytes of the chipset log stats data */ + A_UINT32 data_len; + /** + * Following this structure is the TLV: + * A_UINT8 data[]; <-- chipset log stats data, length given by data_len + */ +} wmi_get_chipset_logging_stats_event_fixed_param; + +/* ----------------------------------------------------------------------- + * TLV #1 — Message-level header + * ----------------------------------------------------------------------- */ +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_anomaly_report_hdr */ + A_UINT32 pdev_id; /* PDEV ID (common for all entries in batch) */ +} wmi_anomaly_report_hdr; + +/* ----------------------------------------------------------------------- + * Per-Anomaly Context Sub-Structures (all fields A_UINT32 per WMI convention) + * ----------------------------------------------------------------------- */ + +/* + * Context for WMI_ANOMALY_ID_VDEV_DELETE_REQUESTED_BEFORE_STOP + * (ID 0000–0999) + */ +typedef struct { + A_UINT32 vdev_state; /* Internal VDEV state at time of fault */ + A_UINT32 vdev_type; /* VDEV type (AP/STA/IBSS/etc.) */ +} wmi_anomaly_vdev_ctx_t; + +/* + * Context for WMI_ANOMALY_ID_DELETE_VDEV_BEFORE_DELETING_ALL_PEERS + * (ID 1000–1999) + */ +typedef struct { + A_UINT32 peer_count; /* Number of peers still associated */ + /* MAC address of first offending peer (lower 32 bits) */ + A_UINT32 peer_mac_addr_lo; + /* MAC address of first offending peer (upper 16 bits) */ + A_UINT32 peer_mac_addr_hi; + A_UINT32 peer_state; /* Internal peer state at time of fault */ +} wmi_anomaly_peer_ctx_t; + +/* + * Context for WMI_ANOMALY_ID_BEACON_TEMPLATE_SANITY_FAILED + * (ID 2000–2999) + */ +typedef struct { + A_UINT32 bcn_buf_len; /* Beacon buffer length that was received */ + A_UINT32 max_allowed_len; /* Maximum allowed beacon buffer length */ + A_UINT32 ie_offset; /* IE offset at which sanity failed */ + A_UINT32 fail_reason; /* Internal reason code for the failure */ +} wmi_anomaly_beacon_ctx_t; + +/* + * Context for halPhy bucket groups + * (ID 5000–9999) + */ +typedef struct { + A_UINT32 phy_err_code; /* Hardware PHY error code at fault time */ + A_UINT32 chain_mask; /* Active RX/TX chain mask at fault time */ + A_UINT32 cal_step; /* Calibration step index; 0 if not applicable */ + A_UINT32 hw_status; /* Raw hardware status register snapshot */ +} wmi_anomaly_halphy_ctx_t; + +/* + * Context for uCode bucket groups + * (ID 10000–14999) + */ +typedef struct { + A_UINT32 ucode_pc; /* uCode program counter at fault time */ + A_UINT32 sched_state; /* Scheduler state machine value at fault time */ + A_UINT32 txrx_status; /* TX/RX pipeline status register snapshot */ + A_UINT32 watchdog_count; /* Watchdog expiry count since last reset */ +} wmi_anomaly_ucode_ctx_t; + +/* ----------------------------------------------------------------------- + * TLV #2 — Per-Anomaly Entry (ARRAY_STRUC element) + * anomaly_id is the discriminant — tells host which union member is valid. + * ----------------------------------------------------------------------- */ +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_anomaly_entry_t */ + A_UINT32 anomaly_id; /* [31:1]=WMI_ANOMALY_ID [0]=type(0=A/1=E) */ + A_UINT32 vdev_id; /* Virtual Device ID (0xFFFFFFFF if N/A) */ + A_UINT32 priority; /* WMI_ANOMALY_PRIORITY */ + A_UINT32 related_cmd_id; /* WMI_CMD_ID (0 if N/A) */ + A_UINT32 reserved[2]; /* for future use when needed */ + union { + wmi_anomaly_vdev_ctx_t vdev; /* ID 0000–0999 */ + wmi_anomaly_peer_ctx_t peer; /* ID 1000–1999 */ + wmi_anomaly_beacon_ctx_t beacon; /* ID 2000–2999 */ + wmi_anomaly_halphy_ctx_t halphy; /* ID 5000–9999 */ + wmi_anomaly_ucode_ctx_t ucode; /* ID 10000–14999 */ + } ctx; + /* NOTE: + * No new fields can be added here - this restriction allows new fields + * to be added to the end of the wmi_anomaly_xxx_ctx_t structs instead. + */ +} wmi_anomaly_entry_t; + + +/* RTT Peer Measurement (Proximity Detection/Ranging) capabilities */ + +/* + * macros to set/get bitfields within + * wmi_rtt_peer_meas_capabilities + */ + +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_REPORT_AP_TSF_GET(flags) WMI_GET_BITS(flags, 0, 1) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_REPORT_AP_TSF_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_RANDOMIZE_MAC_GET(flags) WMI_GET_BITS(flags, 1, 1) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_RANDOMIZE_MAC_SET(flags, value) WMI_SET_BITS(flags, 1, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_PD_SUPPORT_GET(flags) WMI_GET_BITS(flags, 2, 1) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_PD_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 2, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_PD_CONCURRENT_GET(flags) WMI_GET_BITS(flags, 3, 1) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_PD_CONCURRENT_SET(flags, value) WMI_SET_BITS(flags, 3, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_PD_RANDOM_MAC_CONNECTED_GET(flags) WMI_GET_BITS(flags, 4, 1) +#define WMI_RTT_PEER_MEAS_CAPS_SUPPORT_PD_RANDOM_MAC_CONNECTED_SET(flags, value) WMI_SET_BITS(flags, 4, 1, value) + +#define WMI_RTT_PEER_MEAS_CAPS_PD_MAX_PEERS_ISTA_ROLE_GET(flags) WMI_GET_BITS(flags, 0, 16) +#define WMI_RTT_PEER_MEAS_CAPS_PD_MAX_PEERS_ISTA_ROLE_SET(flags, value) WMI_SET_BITS(flags, 0, 16, value) +#define WMI_RTT_PEER_MEAS_CAPS_PD_MAX_PEERS_RSTA_ROLE_GET(flags) WMI_GET_BITS(flags, 16, 16) +#define WMI_RTT_PEER_MEAS_CAPS_PD_MAX_PEERS_RSTA_ROLE_SET(flags, value) WMI_SET_BITS(flags, 16, 16, value) + +#define WMI_RTT_PEER_MEAS_CAPS_FTM_SUPPORT_GET(flags) WMI_GET_BITS(flags, 0, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_ASAP_SUPPORT_GET(flags) WMI_GET_BITS(flags, 1, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_ASAP_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 1, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_NON_ASAP_SUPPORT_GET(flags) WMI_GET_BITS(flags, 2, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_NON_ASAP_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 2, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_REQ_LCI_SUPPORT_GET(flags) WMI_GET_BITS(flags, 3, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_REQ_LCI_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 3, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_REQ_CIVICLOC_SUPPORT_GET(flags) WMI_GET_BITS(flags, 4, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_REQ_CIVICLOC_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 4, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_TB_RANGING_SUPPORT_GET(flags) WMI_GET_BITS(flags, 5, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_TB_RANGING_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 5, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_NTB_RANGING_SUPPORT_GET(flags) WMI_GET_BITS(flags, 6, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_NTB_RANGING_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 6, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_6GHZ_SUPPORT_GET(flags) WMI_GET_BITS(flags, 7, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_6GHZ_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 7, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_RSTA_ROLE_SUPPORT_GET(flags) WMI_GET_BITS(flags, 8, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_RSTA_ROLE_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 8, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_EDCA_RESPONDER_SUPPORT_GET(flags) WMI_GET_BITS(flags, 9, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_EDCA_RESPONDER_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 9, 1, value) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_RANGE_REPORT_SUPPORT_GET(flags) WMI_GET_BITS(flags, 10, 1) +#define WMI_RTT_PEER_MEAS_CAPS_FTM_RANGE_REPORT_SUPPORT_SET(flags, value) WMI_SET_BITS(flags, 10, 1, value) + +#define WMI_RTT_PEER_MEAS_CAPS_MAX_BURST_EXPONENTS_GET(caps) WMI_GET_BITS(caps, 0, 8) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_BURST_EXPONENTS_SET(caps, value) WMI_SET_BITS(caps, 0, 8, value) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_FTM_PER_BURST_GET(caps) WMI_GET_BITS(caps, 8, 8) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_FTM_PER_BURST_SET(caps, value) WMI_SET_BITS(caps, 8, 8, value) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_TX_ANTENNAS_GET(caps) WMI_GET_BITS(caps, 16, 8) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_TX_ANTENNAS_SET(caps, value) WMI_SET_BITS(caps, 16, 8, value) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_RX_ANTENNAS_GET(caps) WMI_GET_BITS(caps, 24, 8) +#define WMI_RTT_PEER_MEAS_CAPS_MAX_RX_ANTENNAS_SET(caps, value) WMI_SET_BITS(caps, 24, 8, value) + +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_LTF_REP_GET(params) WMI_GET_BITS(params, 0, 3) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_LTF_REP_SET(params, value) WMI_SET_BITS(params, 0, 3, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_LTF_REP_GET(params) WMI_GET_BITS(params, 3, 3) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_LTF_REP_SET(params, value) WMI_SET_BITS(params, 3, 3, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_LTF_TOTAL_GET(params) WMI_GET_BITS(params, 6, 2) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_LTF_TOTAL_SET(params, value) WMI_SET_BITS(params, 6, 2, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_LTF_TOTAL_GET(params) WMI_GET_BITS(params, 8, 2) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_LTF_TOTAL_SET(params, value) WMI_SET_BITS(params, 8, 2, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_STS_LE80_GET(params) WMI_GET_BITS(params, 10, 3) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_STS_LE80_SET(params, value) WMI_SET_BITS(params, 10, 3, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_STS_GT80_GET(params) WMI_GET_BITS(params, 13, 3) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_RX_STS_GT80_SET(params, value) WMI_SET_BITS(params, 13, 3, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_STS_LE80_GET(params) WMI_GET_BITS(params, 16, 3) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_STS_LE80_SET(params, value) WMI_SET_BITS(params, 16, 3, value) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_STS_GT80_GET(params) WMI_GET_BITS(params, 19, 3) +#define WMI_RTT_PEER_MEAS_11AZ_PARAMS_MAX_TX_STS_GT80_SET(params, value) WMI_SET_BITS(params, 19, 3, value) + + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_peer_meas_capabilities */ + A_UINT32 tlv_header; + /** + * Support flag + * Bit 0 : report AP tsf + * Bit 1 : randomize mac address + * Bit 2 : Proximity Detection (PD) support i.e. USD ranging + * Bit 3 : PD concurrent ISTA and RSTA support + * Bit 4 : PD randomize mac address connected state + * Bits 31-5 : Reserved + */ + A_UINT32 support_flag; + A_UINT32 max_peers; + /** + * pd max peers + * Bits 15-0 : pd_max_peers ISTA role + * Bits 31-16 : pd_max_peers RSTA role + */ + A_UINT32 pd_max_peers; + /** + * FTM support flag + * Bit 0 : ftm supported + * Bit 1 : asap mode is supported + * Bit 2 : non-asap mode is supported + * Bit 3 : request lci + * Bit 4 : request civicloc + * Bit 5 : trigger based supported (TB ranging) + * Bit 6 : non-trigger based supported (NTB ranging) + * Bit 7 : 6 Ghz supported + * Bit 8 : Support Rsta role + * Bit 9 : Support edca responder + * Bit 10 : Support range report + * Bits 31-11 : Reserved + */ + A_UINT32 ftm_support_flag; + /** Bitmap of BW supported per wmi_channel_width enum */ + A_UINT32 supported_bw_bitmap; + /** Bitmap of Preambles supported per WMI_RATE_PREAMBLE */ + A_UINT32 supported_preamble_bitmap; + /** + * capabilities + * Bits 7-0 : Max burst exponents + * Bits 15-8 : Max FTM per burst + * Bits 23-16 : Max Tx antennas + * Bits 31-24 : Max Rx antennas + */ + A_UINT32 capabilities; + /** + * ranging 11az parameters + * Bits 2-0 : Max Tx LTF repetition + * Bits 5-3 : Max Rx LTF repetition + * Bits 7-6 : Max Rx LTF total + * Bits 9-8 : Max Tx LTF total + * Bits 12-10 : Max Rx STS LE 80 + * Bits 15-13 : Max Rx STS GT 80 + * Bits 18-16 : Max Tx STS LE 80 + * Bits 21-19 : Max Tx STS GT 80 + * Bits 31-22 : Reserved + */ + A_UINT32 ranging_11az_parameters; + /* Min allowed ranging interval supported by target in EDCA-based ranging, in ms */ + A_UINT32 min_interval_edca_ms; + /* Min allowed ranging interval supported by target in NTB (Non-Trigger Based) ranging, in ms */ + A_UINT32 min_interval_ntb_ms; +} wmi_rtt_peer_meas_capabilities; + +/* + * macros to set/get bitfields within + * wmi_rtt_peer_meas_req_peer_info + */ + +#define WMI_RTT_PEER_MEAS_REQ_FLAG_REPORT_AP_TSF_GET(flags) WMI_GET_BITS(flags, 0, 1) +#define WMI_RTT_PEER_MEAS_REQ_FLAG_REPORT_AP_TSF_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_FLAG_PD_REQUEST_GET(flags) WMI_GET_BITS(flags, 1, 1) +#define WMI_RTT_PEER_MEAS_REQ_FLAG_PD_REQUEST_SET(flags, value) WMI_SET_BITS(flags, 1, 1, value) + +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_FTM_REQUESTED_GET(flags) WMI_GET_BITS(flags, 0, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_FTM_REQUESTED_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_ASAP_MODE_GET(flags) WMI_GET_BITS(flags, 1, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_ASAP_MODE_SET(flags, value) WMI_SET_BITS(flags, 1, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_LCI_REQ_GET(flags) WMI_GET_BITS(flags, 2, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_LCI_REQ_SET(flags, value) WMI_SET_BITS(flags, 2, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_LOC_CIVIC_REQ_GET(flags) WMI_GET_BITS(flags, 3, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_LOC_CIVIC_REQ_SET(flags, value) WMI_SET_BITS(flags, 3, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_TB_RANGING_GET(flags) WMI_GET_BITS(flags, 4, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_TB_RANGING_SET(flags, value) WMI_SET_BITS(flags, 4, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_NTB_RANGING_GET(flags) WMI_GET_BITS(flags, 5, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_NTB_RANGING_SET(flags, value) WMI_SET_BITS(flags, 5, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_I2R_LMR_FEEDBACK_GET(flags) WMI_GET_BITS(flags, 6, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_I2R_LMR_FEEDBACK_SET(flags, value) WMI_SET_BITS(flags, 6, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_RSTA_ROLE_GET(flags) WMI_GET_BITS(flags, 7, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_RSTA_ROLE_SET(flags, value) WMI_SET_BITS(flags, 7, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_RANGE_REPORT_GET(flags) WMI_GET_BITS(flags, 8, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_RANGE_REPORT_SET(flags, value) WMI_SET_BITS(flags, 8, 1, value) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_SUPPRESS_PD_RESULT_GET(flags) WMI_GET_BITS(flags, 9, 1) +#define WMI_RTT_PEER_MEAS_REQ_CTRL_FLAG_SUPPRESS_PD_RESULT_SET(flags, value) WMI_SET_BITS(flags, 9, 1, value) + +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_NUM_BURST_EXP_GET(info) WMI_GET_BITS(info, 0, 8) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_NUM_BURST_EXP_SET(info, value) WMI_SET_BITS(info, 0, 8, value) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_BURST_DURATION_GET(info) WMI_GET_BITS(info, 8, 8) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_BURST_DURATION_SET(info, value) WMI_SET_BITS(info, 8, 8, value) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_FTMS_PER_BURST_GET(info) WMI_GET_BITS(info, 16, 8) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_FTMS_PER_BURST_SET(info, value) WMI_SET_BITS(info, 16, 8, value) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_FTMR_RETRIES_GET(info) WMI_GET_BITS(info, 24, 8) +#define WMI_RTT_PEER_MEAS_REQ_BURST_INFO_FTMR_RETRIES_SET(info, value) WMI_SET_BITS(info, 24, 8, value) + +#define WMI_RTT_PEER_MEAS_REQ_AW_SUB_ELEM_NOMINAL_TIME_GET(elem) WMI_GET_BITS(elem, 0, 16) +#define WMI_RTT_PEER_MEAS_REQ_AW_SUB_ELEM_NOMINAL_TIME_SET(elem, value) WMI_SET_BITS(elem, 0, 16, value) +#define WMI_RTT_PEER_MEAS_REQ_AW_SUB_ELEM_MEAS_PER_AW_GET(elem) WMI_GET_BITS(elem, 16, 8) +#define WMI_RTT_PEER_MEAS_REQ_AW_SUB_ELEM_MEAS_PER_AW_SET(elem, value) WMI_SET_BITS(elem, 16, 8, value) +#define WMI_RTT_PEER_MEAS_REQ_AW_SUB_ELEM_AW_DURATION_GET(elem) WMI_GET_BITS(elem, 24, 8) +#define WMI_RTT_PEER_MEAS_REQ_AW_SUB_ELEM_AW_DURATION_SET(elem, value) WMI_SET_BITS(elem, 24, 8, value) + + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_peer_meas_req_peer_info */ + A_UINT32 tlv_header; + /** Destination mac address for measurement */ + wmi_mac_addr dest_mac; + /** Channel for ranging */ + wmi_channel channel; + /** + * request_flag + * Bit 0 : Report AP TSF + * Bit 1 : PD request - indicates a peer-to-peer Proximity Detection request + * Bits 31-2 : Reserved + */ + A_UINT32 request_flag; + A_UINT32 preamble; /** see WMI_RATE_PREAMBLE for possible values */ + /** + * Control flag + * Bit 0 : FTM requested + * Bit 1 : Asap mode + * Bit 2 : LCI Req = True/False + * Bit 3 : Location Civic Req = True/False + * Bit 4 : Trigger based (TB ranging) + * Bit 5 : Non-trigger based (NTB ranging) + * Bit 6 : I2R LMR Feedback + * Bit 7 : RSTA (Operate as the RSTA in the measurement) + * Bit 8 : Range Report + * Bit 9 : Suppress PD result + * Bits 31-10 : Reserved + */ + A_UINT32 control_flag; + A_UINT32 burst_period; /* units = 100 ms */ + /** + * Burst Information + * Bits 7-0 : num_burst_exponent + * Bits 15-8 : burst_duration + * units = IEEE 802.11 FTM burst dur encoding (250 us * 2^n) + * Bits 23-16 : ftms_per_burst + * Bits 31-24 : ftmr_retries + */ + A_UINT32 burst_info; + A_UINT32 min_time_between_measurements; /** In units of 100 us */ + A_UINT32 max_time_between_measurements; /** In units of 10 ms. */ + /** + * Availability window sub elements + * Bits 15-0 : nominal_time (in unit of 1 ms) + * Bits 23-16 : meas_per_aw + * Bits 31-24 : aw_duration (in unit of 1 ms) + */ + A_UINT32 availibility_sub_elem; +} wmi_rtt_peer_meas_req_peer_info; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_peer_meas_req_cmd_fixed_param */ + A_UINT32 tlv_header; + /** Unique request ID */ + A_UINT32 req_id; + A_UINT32 vdev_id; + /** Timeout (in ms) for the whole operation, if zero it means there's no timeout */ + A_UINT32 timeout; + /** Randomized mac address if randomization is enabled */ + wmi_mac_addr random_mac_addr; + /** + * This fixed param TLV will be followed by the below TLVs + * - wmi_rtt_peer_meas_req_peer_info rtt_peer_info[] + */ +} wmi_rtt_peer_meas_req_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_peer_meas_req_cmd_fixed_param */ + A_UINT32 tlv_header; + /** Cancel all the requests associated with this req_id */ + A_UINT32 req_id; +} wmi_rtt_peer_meas_cancel_meas_cmd_fix_param; + +typedef enum { + WMI_RTT_PEER_MEAS_STATUS_SUCCESS, /* measurement completed successfully */ + WMI_RTT_PEER_MEAS_STATUS_REFUSED, /* measurement was locally refused */ + WMI_RTT_PEER_MEAS_STATUS_TIMEOUT, /* measurement timed out */ + WMI_RTT_PEER_MEAS_STATUS_FAILURE, /* measurement failed */ +} WMI_RTT_PEER_MEAS_STATUS; + +typedef enum { + WMI_RTT_PEER_MEAS_FTM_FAILURE_UNSPECIFIED, /* unspecified failure, not used */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_NO_RESPONSE, /* no response from the FTM responder */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_REJECTED, /* FTM responder rejected measurement */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_WRONG_CHANNEL, /* peer is on a different channel */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_PEER_NOT_CAPABLE, /* peer can't actually do FTM */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_INVALID_TIMESTAMP, /* invalid T1/T4 timestamps received */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_PEER_BUSY, /* peer reports busy, may retry later */ + WMI_RTT_PEER_MEAS_FTM_FAILURE_BAD_CHANGED_PARAMS, /* peer changed params no longer supported */ +} WMI_RTT_PEER_MEAS_FAILURE; + +typedef enum { + WMI_PEER_MEAS_TYPE_INVALID, + WMI_PEER_MEAS_TYPE_FTM, /* Fine Timing Measurement (IEEE 802.11mc / 802.11az) */ + WMI_PEER_MEAS_TYPES, + WMI_PEER_MEAS_MAX = WMI_PEER_MEAS_TYPES - 1, +} WMI_RTT_PEER_MEAS_TYPES; + +typedef enum { + WMI_RTT_GI_UNKNOWN = 0, /* default / not available */ + WMI_RTT_GI_08_US = 1, /* 0.8 µs GI */ + WMI_RTT_GI_16_US = 2, /* 1.6 µs GI (11az ranging common) */ + WMI_RTT_GI_32_US = 3, /* 3.2 µs GI */ + WMI_RTT_GI_ZERO_POWER = 4, /* "zero power GI" (secure LTF behavior) */ +} WMI_RTT_GI_TYPE; + +typedef enum { + WMI_PEER_AUTHORIZE_CLEAR = 0, + WMI_PEER_AUTHORIZE_SECURED_MODE = 1, + WMI_PEER_AUTHORIZE_OPEN_MODE = 2, + WMI_PEER_AUTHORIZE_SW_ENCRYPTION_MODE = 3, +} WMI_PEER_AUTHORIZE_TYPE; + +/* + * macros to set/get bitfields within + * wmi_rtt_peer_meas_report_peer_meas_result_info + */ +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_FINAL_GET(flags) WMI_GET_BITS(flags, 0, 1) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_FINAL_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_TB_RANGING_GET(flags) WMI_GET_BITS(flags, 1, 1) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_TB_RANGING_SET(flags, value) WMI_SET_BITS(flags, 1, 1, value) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_NTB_RANGING_GET(flags) WMI_GET_BITS(flags, 2, 1) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_NTB_RANGING_SET(flags, value) WMI_SET_BITS(flags, 2, 1, value) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_AP_TSF_VALID_GET(flags) WMI_GET_BITS(flags, 3, 1) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_AP_TSF_VALID_SET(flags, value) WMI_SET_BITS(flags, 3, 1, value) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_IS_DELAYED_LMR_GET(flags) WMI_GET_BITS(flags, 4, 1) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_IS_DELAYED_LMR_SET(flags, value) WMI_SET_BITS(flags, 4, 1, value) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_MEAS_TYPE_GET(flags) WMI_GET_BITS(flags, 5, 1) +#define WMI_RTT_PEER_MEAS_REPORT_RESULT_FLAG_MEAS_TYPE_SET(flags, value) WMI_SET_BITS(flags, 5, 1, value) + +#define WMI_RTT_PEER_MEAS_REPORT_BURST_INFO_BURST_INDEX_GET(info) WMI_GET_BITS(info, 0, 16) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_INFO_BURST_INDEX_SET(info, value) WMI_SET_BITS(info, 0, 16, value) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_INFO_NUM_BURSTS_EXP_GET(info) WMI_GET_BITS(info, 16, 8) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_INFO_NUM_BURSTS_EXP_SET(info, value) WMI_SET_BITS(info, 16, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_INFO_BUSY_RETRY_TIME_GET(info) WMI_GET_BITS(info, 24, 8) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_INFO_BUSY_RETRY_TIME_SET(info, value) WMI_SET_BITS(info, 24, 8, value) + +#define WMI_RTT_PEER_MEAS_REPORT_BURST_PARAMS_BURST_PERIOD_GET(params) WMI_GET_BITS(params, 0, 16) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_PARAMS_BURST_PERIOD_SET(params, value) WMI_SET_BITS(params, 0, 16, value) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_PARAMS_BURST_DURATION_GET(params) WMI_GET_BITS(params, 16, 8) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_PARAMS_BURST_DURATION_SET(params, value) WMI_SET_BITS(params, 16, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_PARAMS_FTMS_PER_BURST_GET(params) WMI_GET_BITS(params, 24, 8) +#define WMI_RTT_PEER_MEAS_REPORT_BURST_PARAMS_FTMS_PER_BURST_SET(params, value) WMI_SET_BITS(params, 24, 8, value) + +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_I2R_REP_GET(params) WMI_GET_BITS(params, 0, 8) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_I2R_REP_SET(params, value) WMI_SET_BITS(params, 0, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_R2I_REP_GET(params) WMI_GET_BITS(params, 8, 8) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_R2I_REP_SET(params, value) WMI_SET_BITS(params, 8, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_I2R_STS_GET(params) WMI_GET_BITS(params, 16, 8) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_I2R_STS_SET(params, value) WMI_SET_BITS(params, 16, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_R2I_STS_GET(params) WMI_GET_BITS(params, 24, 8) +#define WMI_RTT_PEER_MEAS_REPORT_11AZ_PARAMS_MAX_R2I_STS_SET(params, value) WMI_SET_BITS(params, 24, 8, value) + +#define WMI_RTT_PEER_MEAS_REPORT_AW_PARAMS_NOMINAL_TIME_MS_GET(params) WMI_GET_BITS(params, 0, 16) +#define WMI_RTT_PEER_MEAS_REPORT_AW_PARAMS_NOMINAL_TIME_MS_SET(params, value) WMI_SET_BITS(params, 0, 16, value) +#define WMI_RTT_PEER_MEAS_REPORT_AW_PARAMS_MEAS_PER_AW_GET(params) WMI_GET_BITS(params, 16, 8) +#define WMI_RTT_PEER_MEAS_REPORT_AW_PARAMS_MEAS_PER_AW_SET(params, value) WMI_SET_BITS(params, 16, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_AW_PARAMS_AW_DURATION_GET(params) WMI_GET_BITS(params, 24, 8) +#define WMI_RTT_PEER_MEAS_REPORT_AW_PARAMS_AW_DURATION_SET(params, value) WMI_SET_BITS(params, 24, 8, value) + +#define WMI_RTT_PEER_MEAS_REPORT_CHAN_CODE_BW_GET(code) WMI_GET_BITS(code, 0, 8) +#define WMI_RTT_PEER_MEAS_REPORT_CHAN_CODE_BW_SET(code, value) WMI_SET_BITS(code, 0, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_CHAN_CODE_PREAMBLE_GET(code) WMI_GET_BITS(code, 8, 8) +#define WMI_RTT_PEER_MEAS_REPORT_CHAN_CODE_PREAMBLE_SET(code, value) WMI_SET_BITS(code, 8, 8, value) + +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_MCS_IDX_GET(info) WMI_GET_BITS(info, 0, 8) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_MCS_IDX_SET(info, value) WMI_SET_BITS(info, 0, 8, value) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_NSS_GET(info) WMI_GET_BITS(info, 8, 4) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_NSS_SET(info, value) WMI_SET_BITS(info, 8, 4, value) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_BW_GET(info) WMI_GET_BITS(info, 12, 4) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_BW_SET(info, value) WMI_SET_BITS(info, 12, 4, value) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_GI_GET(info) WMI_GET_BITS(info, 16, 8) +#define WMI_RTT_PEER_MEAS_REPORT_RATE_INFO1_GI_SET(info, value) WMI_SET_BITS(info, 16, 8, value) + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_peer_meas_report_peer_meas_result_info */ + A_UINT32 tlv_header; + /** Destination mac address for measurement */ + wmi_mac_addr dest_mac; + /** Measurement status and reason */ + A_UINT32 status; /** refer WMI_RTT_PEER_MEAS_STATUS */ + A_UINT32 ftm_failure_reason; /** refer WMI_RTT_PEER_MEAS_STATUS */ + /** + * Result flag + * Bit 0 : final : 1 => this is last response for this peer/session + * Bit 1 : tb_ranging : 1 => if this is TB ranging + * Bit 2 : ntb_ranging : 1 => if this is NTB ranging + * Bit 3 : ap_tsf_valid : 1 => ap_tsf field is valid + * Bit 4 : is_delayed_lmr : 1 => reported LMR belongs to previous burst + * Bit 5 : meas_type : WMI_PEER_MEAS_TYPES (e.g. FTM) + * Bits 31-6 : Reserved + */ + A_UINT32 result_flag; + /** FTM Burst Counts */ + A_UINT32 num_ftmr_attempts; /** Number of FTM request frames transmitted */ + A_UINT32 num_ftmr_successes; /** Number of FTM request frames ACKed */ + /** + * Burst Info + * Bits 15-0 : burst_index [0..num_bursts-1] + * Bits 23-16 : num_bursts_exp (Negotiated num bursts exponent) + * Bits 31-24 : busy_retry_time (In seconds, if peer was busy) + */ + A_UINT32 burst_info; + /** + * Negotiated/Actual Burst Parameters + * Bits 15-0 : burst_period (In units of 100ms) + * Bits 23-16 : burst_duration (Actual burst duration negotiated) + * Bits 31-24 : ftms_per_burst (Actual FTMs per burst negotiated) + */ + A_UINT32 burst_params; + + /** AP TSF at measurement time (valid if ap_tsf_valid=1) */ + struct { + A_UINT32 ap_tsf_l32; + A_UINT32 ap_tsf_h32; + } ap_tsf; + + /** optional legacy 32-bit TSF when measurement started */ + A_UINT32 meas_start_tsf; + + /** RSSI Information */ + struct { + A_INT32 rssi_avg_dbm; + A_INT32 rssi_spread_db; + } rssi; + + /** RTT statistics (units: picoseconds) */ + struct { + union { + A_INT64 value; /* for use by target only */ + struct { + A_UINT32 value_l32; + A_UINT32 value_h32; + } part; + } rtt_avg_ps; + union { + A_INT64 value; /* for use by target only */ + struct { + A_UINT32 value_l32; + A_UINT32 value_h32; + } part; + } rtt_variance_ps; + union { + A_INT64 value; /* for use by target only */ + struct { + A_UINT32 value_l32; + A_UINT32 value_h32; + } part; + } rtt_spread_ps; + } rtt; + + /** Distance statistics (units: millimeters) */ + struct { + union { + A_INT64 value; /* for use by target only */ + struct { + A_UINT32 value_l32; + A_UINT32 value_h32; + } part; + } dist_avg_mm; + union { + A_INT64 value; /* for use by target only */ + struct { + A_UINT32 value_l32; + A_UINT32 value_h32; + } part; + } dist_variance_mm; + union { + A_INT64 value; /* for use by target only */ + struct { + A_UINT32 value_l32; + A_UINT32 value_h32; + } part; + } dist_spread_mm; + } dist; + + /** + * Negotiated/Actual 11az params + * Bits 7-0 : max_i2r_repetition + * Bits 15-8 : max_r2i_repetition + * Bits 23-16 : max_i2r_sts + * Bits 31-24 : max_r2i_sts + */ + A_UINT32 ftm_11az_params; + A_UINT32 min_time_between_measurements; /** In units of 100 us */ + A_UINT32 max_time_between_measurements; /** In units of 10 ms */ + + /** + * Negotiated/Actual avail windows params + * Bits 15-0 : nominal_time_ms (In units of 1 ms) + * Bits 23-16 : measurements_per_aw + * Bits 31-24 : aw_duration (In units of 1 ms) + */ + A_UINT32 avail_window_params; + + /** + * Negotiated/Actual FTM IE channel code + * Bits 7-0 : chan_bw (refer wmi_channel_width) + * Bits 15-8 : preamble (refer WMI_RATE_PREAMBLE) + * Bits 31-16 : reserved + */ + A_UINT32 ftm_ie_channel_code; + + /** + * Tx/Rx Rate Info + * Bits 7-0 : rateMcsIdx - OFDM/CCK rate code would be as per IEEE standard in the units of 0.5mbps + * - HT/VHT/HE it would be mcs index + * Bits 11-8 : Nss (1*1, 2*2, 3*3, 4*4) + * Bits 15-12 : Rx packet BW (0-20 Mhz, 1 - 40 Mhz, 2 - 80 Mhz, 3 - 160 Mhz, 4 - 320 Mhz) + * Bits 23-16 : gi (refer WMI_RTT_GI_TYPE) + * Bits 31-24 : Reserved + */ + A_UINT32 tx_rate_info_1; + A_UINT32 rx_rate_info_1; + + /** bits 31:0: TX/RX Bit rate in 100kbps */ + A_UINT32 tx_rate_info_2; + A_UINT32 rx_rate_info_2; +} wmi_rtt_peer_meas_report_peer_meas_result_info; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_peer_meas_report_event_fixed_param */ + A_UINT32 tlv_header; + A_UINT32 req_id; /** Unique Identifier */ + A_UINT32 vdev_id; + /** + * This fixed param TLV will be followed by the below TLVs + * - wmi_rtt_peer_meas_report_peer_meas_result_info peer_meas_info[] + */ +} wmi_rtt_peer_meas_report_event_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_athdiag_read_write_cmd_fixed_param */ + A_UINT32 tlv_header; + /* register offset to read or write using ath diag */ + A_UINT32 offset; + /** + * Number of bytes to read from or write to 'offset'. + * + * For a read: FW returns exactly 'data_length' bytes in the event. + * For a write: Host sends exactly 'data_length' bytes in the data TLV. + */ + A_UINT32 data_length; + /** + * mem_type: + * Indicates the type of memory being accessed. + */ + A_UINT32 mem_type; + /** + * is_write: + * Distinguishes between a read and a write operation. + * + * 0 = READ FW reads 'data_length' bytes from 'offset'. + * No data TLV is appended to this command. + * + * 1 = WRITE FW writes 'data_length' bytes to 'offset'. + * A WMITLV_TAG_ARRAY_BYTE TLV with the write payload + * is appended to this command. + */ + A_UINT32 is_write; +} wmi_athdiag_read_write_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_athdiag_read_write_event_fixed_param */ + A_UINT32 tlv_header; + /** + * Number of bytes to read from or write to 'offset'. + * + * For a read: FW returns exactly 'data_length' bytes in the event. + * For a write: Host sends exactly 'data_length' bytes in the data TLV. + */ + A_UINT32 data_length; + /** + * status: + * Result of the read or write operation performed by FW. + * + * 0 = Success operation completed without error. + * non-zero = Failure FW-defined error codes. + */ + A_UINT32 status; + /** + * is_write: + * Echoed back from the corresponding WMI_ATHDIAG_READ_WRITE_CMDID. + * + * 0 = READ response data TLV with 'data_length' bytes follows + * (only when status == 0) + * 1 = WRITE response no data TLV appended; check 'status' only + */ + A_UINT32 is_write; + /* + * This fixed_param TLV is followed by the following TLVs: + * - A_UINT8 data[] (WMITLV_TAG_ARRAY_BYTE) + * For READ response (is_write == 0): read data, data_length bytes. + * Present only when status == 0. + * For WRITE response (is_write == 1): not present. + */ +} wmi_athdiag_read_write_event_fixed_param; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 0943d428fd59..4efa48281edb 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_ 1740 +#define __WMI_REVISION_ 1781 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work