From a9ceabde2e748e0445013914fd646df357da9288 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 9 Apr 2026 18:01:44 -0700 Subject: [PATCH 01/63] fw-api: CL 32168619 - update fw common interface files Change-Id: I369a2ab8f0c8dd4ed5fe2b558164a1f38796d561 CRs-Fixed: 3830439 --- fw/htt.h | 3 +++ fw/wmi_unified.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fw/htt.h b/fw/htt.h index b6411c191bd6..76e269688cca 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -22333,6 +22333,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/wmi_unified.h b/fw/wmi_unified.h index f2d05d577272..23e620ab7f2f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -46786,7 +46786,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 { From 3424c5548d3039bff03c4384c8af7d500c0e1e33 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 12 Apr 2026 18:04:09 -0700 Subject: [PATCH 02/63] fw-api: CL 32226903 - update fw common interface files Change-Id: I09dfa14fca2a59b3b6ede26ae2f77c3442d8b58c CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 10 ++++++++++ fw/wmi_unified.h | 21 +++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index a5e7b230197e..9aa58fc5af13 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1613,6 +1613,7 @@ 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2580,6 +2581,7 @@ 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) \ /* add new EVT_LIST elements above this line */ @@ -7388,6 +7390,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) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 23e620ab7f2f..dc3f726a5881 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -2665,6 +2665,8 @@ 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, /* Coex Event */ WMI_COEX_REPORT_ANTENNA_ISOLATION_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_COEX), @@ -31865,6 +31867,25 @@ 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_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, diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 0943d428fd59..93cc9d29d865 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_ 1741 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 7450395d4ef112c1edf72a016d359063ac730514 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 12 Apr 2026 18:06:05 -0700 Subject: [PATCH 03/63] fw-api: CL 32227070 - update fw common interface files Change-Id: I3e30a77a4b510a3a2465269c2f6b51efc2678376 CRs-Fixed: 3830439 --- fw/htt.h | 58 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index 76e269688cca..f11c398ac942 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -283,9 +283,10 @@ * 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. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 155 +#define HTT_CURRENT_VERSION_MINOR 156 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -22007,14 +22008,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 +22095,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 +22213,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 +22307,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; From 36cbdb342f578b66bbabc78396ab47dfce88a2ec Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 12 Apr 2026 18:07:59 -0700 Subject: [PATCH 04/63] fw-api: CL 32227291 - update fw common interface files Change-Id: I7bde622379ad6ad74a3292d3f119729974123f9d CRs-Fixed: 3830439 --- fw/htt_stats.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 6324a7b5c015..c7222d1262af 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1621,6 +1621,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; @@ -3905,6 +3910,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; @@ -4713,6 +4723,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 +4888,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 +5001,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 +5065,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 @@ -7218,6 +7248,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; From f36a7e42251a7025df7a2eac0957a4a90da29146 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 12 Apr 2026 18:09:54 -0700 Subject: [PATCH 05/63] fw-api: CL 32227711 - update fw common interface files Change-Id: I4b83b4551ba36864fc332800d03c915925868391 CRs-Fixed: 3830439 --- fw/wmi_services.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index dcd795d1710f..e2392e383174 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -778,6 +778,8 @@ 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_MAX_EXT2_SERVICE From 9b3e32a13b4e7e873c0dd3879437b06d41f640ee Mon Sep 17 00:00:00 2001 From: spuligil Date: Mon, 13 Apr 2026 06:01:51 -0700 Subject: [PATCH 06/63] fw-api: CL 32229597 - update fw common interface files Change-Id: I2305f70b9ad7a02647d5eaea393ee991c325f803 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 16 ++++++++-- fw/wmi_unified.h | 76 +++++++++++++++++++++++++++++++++++++++++++++-- fw/wmi_version.h | 2 +- 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 9aa58fc5af13..01d9a549787d 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1614,6 +1614,8 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2218,6 +2220,7 @@ 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) \ /* add new CMD_LIST elements above this line */ @@ -2995,8 +2998,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. @@ -3186,6 +3190,11 @@ 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_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) @@ -5282,7 +5291,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) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index dc3f726a5881..411889d45b35 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -919,7 +919,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), @@ -19223,6 +19227,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; @@ -23753,6 +23759,67 @@ 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_vdev_get_ap_oper_bw_cmd_fixed_param */ A_UINT32 vdev_id; @@ -42432,6 +42499,7 @@ 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); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -43609,6 +43677,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; @@ -55102,13 +55172,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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 93cc9d29d865..1dbf822b9389 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_ 1741 +#define __WMI_REVISION_ 1742 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 7e715c579f188ed71491b7e0c5b4f996a0bdf37e Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 14 Apr 2026 18:01:47 -0700 Subject: [PATCH 07/63] fw-api: CL 32239632 - update fw common interface files Change-Id: I049351832e203775820a3984312386d8f20a3fae CRs-Fixed: 3830439 --- fw/wmi_unified.h | 12 ++++++++++++ fw/wmi_version.h | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 411889d45b35..024476b04c8d 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -26722,6 +26722,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 { diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 1dbf822b9389..af5abece2106 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_ 1742 +#define __WMI_REVISION_ 1743 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From e981e5130671c67cc7382b43e21f18a02caab350 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 16 Apr 2026 18:01:38 -0700 Subject: [PATCH 08/63] fw-api: CL 32267210 - update fw common interface files Change-Id: I08c3cb53cf08ea7860bfbafb32e28ea037234a01 CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + fw/wmi_tlv_defs.h | 10 +++++++++- fw/wmi_unified.h | 29 +++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index e2392e383174..6fc95d2b5a83 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -780,6 +780,7 @@ typedef enum { 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 */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 01d9a549787d..3a87f1569949 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1616,6 +1616,7 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2585,6 +2586,7 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -4434,7 +4436,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 */ @@ -8834,6 +8837,11 @@ 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); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 024476b04c8d..4fd435bdbe62 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -2671,6 +2671,8 @@ typedef enum { 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, /* Coex Event */ WMI_COEX_REPORT_ANTENNA_ISOLATION_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_COEX), @@ -31652,10 +31654,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; @@ -31766,6 +31779,12 @@ typedef struct { */ } wmi_nan_peer_params_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) @@ -31946,6 +31965,16 @@ 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 */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index af5abece2106..f8ef4b026c67 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_ 1743 +#define __WMI_REVISION_ 1744 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 2afc1681dd72e3ac8ce2e7d4c37c2cb9b54ba936 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 17 Apr 2026 18:01:47 -0700 Subject: [PATCH 09/63] fw-api: CL 32280311 - update fw common interface files Change-Id: Id7cccce49f7a94f9073183cb79c6be31a023c342 CRs-Fixed: 3830439 --- fw/htt.h | 258 ++++++++++++++++++++++++++++++++++++++++++++++--- fw/htt_stats.h | 51 ++++++++-- 2 files changed, 290 insertions(+), 19 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index f11c398ac942..c83725d2a56a 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -284,9 +284,10 @@ * 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. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 156 +#define HTT_CURRENT_VERSION_MINOR 157 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -583,6 +584,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. @@ -608,11 +610,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, }; @@ -865,13 +873,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 */ @@ -880,8 +891,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 */ @@ -915,14 +926,14 @@ 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 */ @@ -2947,6 +2958,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, diff --git a/fw/htt_stats.h b/fw/htt_stats.h index c7222d1262af..5bd300678e6f 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -5097,7 +5097,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; @@ -5162,7 +5165,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; @@ -5353,6 +5359,17 @@ 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; typedef enum { HTT_SCHED_TID_SKIP_SCHED_MASK_DISABLED = 0, /* Skip the tid when WAL_TID_DISABLE_TX_SCHED_MASK is true */ @@ -5502,7 +5519,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; @@ -10994,7 +11014,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; @@ -11005,7 +11028,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 { @@ -11042,7 +11068,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 @@ -11070,7 +11099,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 */ @@ -16473,7 +16505,10 @@ 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)) From a2d30225d0d8a07a05417a7d2bc2c97564467e99 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 17 Apr 2026 18:03:56 -0700 Subject: [PATCH 10/63] fw-api: CL 32280322 - update fw common interface files Change-Id: I125186f3e769b153988e593d3938a8516ea65b90 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 85 ++++++++++++++++++++++++++++-------------------- fw/wmi_version.h | 2 +- 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 4fd435bdbe62..e75558a9426a 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -38537,9 +38537,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; @@ -38790,47 +38794,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; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index f8ef4b026c67..8641a3f2f8f0 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_ 1744 +#define __WMI_REVISION_ 1745 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 1c6d12855dcffdfc8c22861a26ec4b4d3b6a12c1 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 18 Apr 2026 18:01:49 -0700 Subject: [PATCH 11/63] fw-api: CL 32290054 - update fw common interface files Change-Id: I83ff29000fadbd95de529b1d203579b7fd05a844 CRs-Fixed: 3830439 --- fw/wmi_services.h | 5 ++ fw/wmi_tlv_defs.h | 17 +++++++ fw/wmi_unified.h | 115 ++++++++++++++++++++++++++++++++++++++++++++-- fw/wmi_version.h | 2 +- 4 files changed, 135 insertions(+), 4 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 6fc95d2b5a83..9d606f3a3792 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -781,6 +781,11 @@ typedef enum { /* 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_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 3a87f1569949..690b606aface 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1617,6 +1617,10 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2222,6 +2226,7 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -2587,6 +2592,7 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -5242,6 +5248,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) @@ -8149,6 +8160,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); diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index e75558a9426a..57f59038b254 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1269,6 +1269,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), @@ -2439,6 +2441,9 @@ 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, + /* NLO specific events */ /** NLO match event after the first match */ @@ -16135,6 +16140,102 @@ 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; + /* 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 * @@ -39838,6 +39939,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 */ @@ -42556,6 +42667,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) 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); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -49354,9 +49466,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 */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 8641a3f2f8f0..7bbcf4d9d426 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_ 1745 +#define __WMI_REVISION_ 1746 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From c8bb175e77fd9f85bdc0a31d88958a9c6252b4df Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 18 Apr 2026 18:03:52 -0700 Subject: [PATCH 12/63] fw-api: CL 32292001 - update fw common interface files Change-Id: I74c9702b6b2dc9b0035965d401b0d4fcf0aa080b CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + fw/wmi_unified.h | 9 +++++++++ fw/wmi_version.h | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 9d606f3a3792..c695991c37f3 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -786,6 +786,7 @@ typedef enum { * used for sending TDLS connect info and TDLS data stats */ WMI_SERVICE_TDLS_STATS_SUPPORT = 502, + WMI_SERVICE_L3_HEADER_PADDING_ENABLE = 503, WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 57f59038b254..7c012d81d489 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10643,6 +10643,8 @@ typedef enum { /* Set TAS mode after boot up */ WMI_PDEV_PARAM_SET_TAS_MODE, + + WMI_PDEV_PARAM_L3_HEADER_PADDING_ENABLE, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) @@ -16164,6 +16166,13 @@ typedef struct { * 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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 7bbcf4d9d426..d002839c85a7 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_ 1746 +#define __WMI_REVISION_ 1747 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 4c05beb0cbb10913921f95324beef1ee836d20c7 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 19 Apr 2026 18:01:55 -0700 Subject: [PATCH 13/63] fw-api: CL 32293073 - update fw common interface files Change-Id: I6c686eac7382057e00cbee2cb75f51238e67f292 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 3 +++ fw/wmi_version.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 7c012d81d489..20878d98403d 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10645,6 +10645,9 @@ typedef enum { 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, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index d002839c85a7..7b5ae00f738b 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_ 1747 +#define __WMI_REVISION_ 1748 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 25745e135b776f39a51b16d2673026eff785584a Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 19 Apr 2026 18:03:51 -0700 Subject: [PATCH 14/63] fw-api: CL 32294648 - update fw common interface files Change-Id: I845d113813f1792479479ad4aa4ece738afa6317 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 16 ++++++++++++++++ fw/wmi_unified.h | 26 ++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 690b606aface..0c168ba4914c 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1621,6 +1621,8 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2227,6 +2229,7 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -2593,6 +2596,7 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -3423,6 +3427,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) \ @@ -8859,6 +8869,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_CUMAC_CHIP_ID_CONFIRMATION_EVENTID); 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); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 20878d98403d..68e2b7d1e162 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -374,6 +374,7 @@ 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_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -1860,6 +1861,9 @@ 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_CMD_ID; typedef enum { @@ -2856,6 +2860,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 */ @@ -42680,6 +42687,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) 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); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -55946,6 +55954,24 @@ 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; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 7b5ae00f738b..b11c619ceda6 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_ 1748 +#define __WMI_REVISION_ 1749 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 36119b3358156928282ca8a775d1b915eae82faa Mon Sep 17 00:00:00 2001 From: spuligil Date: Mon, 20 Apr 2026 18:01:53 -0700 Subject: [PATCH 15/63] fw-api: CL 32296279 - update fw common interface files Change-Id: I5d231a041d538decf82764104b99b29233217a58 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 6 ++++++ fw/wmi_version.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 68e2b7d1e162..6a75f2c6d033 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10655,6 +10655,12 @@ typedef enum { /* 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, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index b11c619ceda6..9917bd5d5000 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_ 1749 +#define __WMI_REVISION_ 1750 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 71d5d69082e1a5f2e6b6d42c0993f7961f5c9b15 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 21 Apr 2026 06:01:46 -0700 Subject: [PATCH 16/63] fw-api: CL 32306378 - update fw common interface files Change-Id: I37d2c1dbc11ece51f2ee34ba5161966bedc45126 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 1 + fw/wmi_version.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 6a75f2c6d033..db40ee11da07 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -35068,6 +35068,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 { diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 9917bd5d5000..be7a18a0f0b8 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_ 1750 +#define __WMI_REVISION_ 1751 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From f1b2a6fc4bf691c35aa5e442572399fc6d80466b Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 22 Apr 2026 18:01:34 -0700 Subject: [PATCH 17/63] fw-api: CL 32320410 - update fw common interface files Change-Id: Ib23b588140dbd0ed3b67dce70ef172f96c8a42ca CRs-Fixed: 3830439 --- fw/wmi_unified.h | 5 ----- fw/wmi_version.h | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index db40ee11da07..0becb5697451 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -14812,11 +14812,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 */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index be7a18a0f0b8..b3a843ab5e9d 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_ 1751 +#define __WMI_REVISION_ 1752 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From a7ba7bc1bfe52d6dadb009daecc258a39bb86a54 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 22 Apr 2026 18:03:31 -0700 Subject: [PATCH 18/63] fw-api: CL 32322205 - update fw common interface files Change-Id: I99b9ebd39ab152ca39aba681b9afbc07b8daf2f6 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 7 +++++++ fw/wmi_version.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 0becb5697451..ec6551ba3e77 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -31696,6 +31696,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[]; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index b3a843ab5e9d..bc854d101c4a 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_ 1752 +#define __WMI_REVISION_ 1753 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 0117d737f3053be0cefe5be0aa62644b70ecd627 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 22 Apr 2026 18:08:33 -0700 Subject: [PATCH 19/63] fw-api: CL 32323534 - update fw common interface files Change-Id: Id86af687cec500279d4b1d37b42cbb3bf3736fd9 CRs-Fixed: 3830439 --- fw/htt_stats.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 5bd300678e6f..d94e7c8392ab 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -5283,6 +5283,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; From f6e3b8233d546bbd5cfc468d3e07ae81e9c1b9df Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 24 Apr 2026 18:04:13 -0700 Subject: [PATCH 20/63] fw-api: CL 32335202 - update fw common interface files Change-Id: I2fe1a9b9f4b343760b51134c6fa3afdc05e3fa74 CRs-Fixed: 3830439 --- fw/wmi_services.h | 11 +++++++++++ fw/wmi_unified.h | 47 +++++++++++++++++++++++++++++++++++++++++++++-- fw/wmi_version.h | 2 +- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index c695991c37f3..ba2551604936 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -788,6 +788,17 @@ typedef enum { WMI_SERVICE_TDLS_STATS_SUPPORT = 502, WMI_SERVICE_L3_HEADER_PADDING_ENABLE = 503, + /* + * Indicates FW supports only known action ids and discards + * saving any unknown action ids + */ + WMI_SERVICE_SUPPORT_KNOWN_ACTION_IDS = 504, + /* + * Indicates FW supports cloud based control for whitelist or blacklist + * AP configuration + */ + WMI_SERVICE_SUPPORT_WHITELIST_BLACKLIST_AP_CONFIG = 505, + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index ec6551ba3e77..09474ac7779f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -28383,6 +28383,9 @@ 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_VENDOR_OUI_EXT_DATA_LENGTH 64 + typedef enum { WMI_VENDOR_OUI_ACTION_CONNECTION_1X1 = 0, /* Connect in 1X1 only */ @@ -28474,7 +28477,25 @@ 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, + + + /* 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 { @@ -28484,6 +28505,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]; */ @@ -28548,7 +28588,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; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index bc854d101c4a..cae5a8cfdb1c 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_ 1753 +#define __WMI_REVISION_ 1754 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From cb9a0a40dbc2f8088d23ca2f1d3dcc71175d23db Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 25 Apr 2026 18:01:42 -0700 Subject: [PATCH 21/63] fw-api: CL 32356331 - update fw common interface files Change-Id: I2cd3b4f5339e5278d7291da5615352e1c6a9831a CRs-Fixed: 3830439 --- fw/wmi_services.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index ba2551604936..3b296eb6e8e0 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -798,7 +798,11 @@ typedef enum { * 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, WMI_MAX_EXT2_SERVICE From ea3b788227661afd32d9100f5cc0d37114030379 Mon Sep 17 00:00:00 2001 From: spuligil Date: Mon, 27 Apr 2026 18:01:41 -0700 Subject: [PATCH 22/63] fw-api: CL 32362944 - update fw common interface files Change-Id: I1d0e39d8acc96a951c9c3820e4462be465296709 CRs-Fixed: 3830439 --- fw/wmi_services.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 3b296eb6e8e0..543b95adb8b9 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -803,6 +803,9 @@ typedef enum { * and Rate Adaptation */ WMI_SERVICE_PASSTHRU_VDEV_AMPDU_RA_SUPPORT = 506, + /* FW supports CalDB transmission over WMI */ + WMI_SERVICE_CALDB_OVER_WMI = 507, + WMI_MAX_EXT2_SERVICE From eb0e117a36ae7272042deefdd6b82afbdd03996a Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 29 Apr 2026 18:01:54 -0700 Subject: [PATCH 23/63] fw-api: CL 32387418 - update fw common interface files Change-Id: I5584f2694327b570594a95f74eb54082dd7eada1 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 13 +++++++ fw/wmi_unified.h | 94 +++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 108 insertions(+), 1 deletion(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 0c168ba4914c..f3495352f26c 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1623,6 +1623,8 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2597,6 +2599,7 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -8774,6 +8777,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SCAN_CACHE_RESULT_EVENTID); 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); diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 09474ac7779f..72e0c9c04ce5 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -2448,6 +2448,9 @@ typedef enum { /* 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 */ @@ -56024,6 +56027,97 @@ typedef struct { */ } 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; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index cae5a8cfdb1c..2edafa8e2805 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_ 1754 +#define __WMI_REVISION_ 1755 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 8314ce5fdc69ea03cd3504019ef15791f4b80db2 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 30 Apr 2026 06:58:55 -0700 Subject: [PATCH 24/63] fw-api: CL 32397726 - update fw common interface files Change-Id: I37120efd1592e9011a0fd6ad3be59557db6ce600 CRs-Fixed: 3830439 --- fw/wmi_services.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 543b95adb8b9..ebcf53298474 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -788,11 +788,9 @@ typedef enum { WMI_SERVICE_TDLS_STATS_SUPPORT = 502, WMI_SERVICE_L3_HEADER_PADDING_ENABLE = 503, - /* - * Indicates FW supports only known action ids and discards - * saving any unknown action ids - */ - WMI_SERVICE_SUPPORT_KNOWN_ACTION_IDS = 504, + /* 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 From 1a9ce1b3308f45dd0167d1e93e7b8f162e02e8d5 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 30 Apr 2026 07:00:56 -0700 Subject: [PATCH 25/63] fw-api: CL 32397731 - update fw common interface files Change-Id: I2e0c04b7be6c047e88400de5ef185900a703532e CRs-Fixed: 3830439 --- fw/wmi_unified.h | 15 ++++++++++++--- fw/wmi_version.h | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 72e0c9c04ce5..b15c15df8ff1 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -5256,10 +5256,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 @@ -5908,6 +5911,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) \ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 2edafa8e2805..40257ddf3472 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_ 1755 +#define __WMI_REVISION_ 1756 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 2b1f7f09c8e7b390cf6269122f7428946ecdcdf9 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 30 Apr 2026 07:02:49 -0700 Subject: [PATCH 26/63] fw-api: CL 32402810 - update fw common interface files Change-Id: I8b13011f540ab3832ca932067e8c2b52d02bca02 CRs-Fixed: 3830439 --- fw/htt_stats.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index d94e7c8392ab..f2d50d3ebede 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -3980,6 +3980,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 */ From 67e61c3081543bf46794f4c3f6afe5dd740bd2ed Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 30 Apr 2026 07:04:43 -0700 Subject: [PATCH 27/63] fw-api: CL 32402817 - update fw common interface files Change-Id: I090be2dadd25095e61b5a3fdfcacec68674461b8 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 4 +- fw/wmi_unified.h | 111 ++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 115 insertions(+), 2 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index f3495352f26c..dffa14356f79 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1625,6 +1625,7 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -3207,7 +3208,8 @@ 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_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 */ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index b15c15df8ff1..09bc704c8ccf 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -23955,6 +23955,117 @@ typedef struct{ #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; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 40257ddf3472..22e2b0191a00 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_ 1756 +#define __WMI_REVISION_ 1757 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From f15e9c849c3b3394e2cc9f5263d94b405761753e Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 3 May 2026 18:01:48 -0700 Subject: [PATCH 28/63] fw-api: CL 32412612 - update fw common interface files SCL original promoter: ddahlby (SCL=32409974) WINE promoted user: yeshanit WINE request id: 5876892 Jobs fixed ... ChangeRequest4520747 on 2026/04/30 by prismsvc *closed* Job created automatically by Orbit/PRISM to track changes for Change Request 4520747. Please visit https://orbit/CR/4520747 for details for the Change Request. Affected files ... ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/doc/wmi_doc.html#1092 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/doc/wmi_py/wmi_msg_lib.py#23 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_services.h#431 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_tlv_defs.h#660 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_tlv_defs_expanded.h#632 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_unified.h#1715 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_version.h#1710 edit Change-Id: Iae047a9d29e856494e4c8d70289bbeb7584b6fe0 CRs-Fixed: 3830439 --- fw/wmi_services.h | 3 +- fw/wmi_tlv_defs.h | 29 ++- fw/wmi_unified.h | 520 ++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 4 files changed, 551 insertions(+), 3 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index ebcf53298474..d49fb574c7ec 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -803,7 +803,8 @@ typedef enum { 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, WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index dffa14356f79..34542191b8c1 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1626,6 +1626,12 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2233,6 +2239,8 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -2601,6 +2609,7 @@ typedef enum { OP(WMI_TDLS_STATS_EVENTID) \ OP(WMI_GET_CHIPSET_LOGGING_STATS_EVENTID) \ OP(WMI_ANOMALY_REPORT_EVENTID) \ + OP(WMI_RTT_PEER_MEAS_REPORT_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -6481,6 +6490,17 @@ 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); + /************************** TLV definitions of WMI events *******************************/ @@ -6546,7 +6566,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) \ @@ -8890,6 +8911,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_NAN_DFS_CHANNEL_AVAILABILITY_IND_EVENTID); 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); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 09bc704c8ccf..21241b42d99a 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1212,6 +1212,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 */ @@ -2379,6 +2383,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 */ @@ -4283,6 +4289,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; @@ -56239,6 +56246,519 @@ typedef struct { } 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; + /** + * Burst Information + * Bits 7-0 : num_burst_exponent + * Bits 15-8 : burst_duration + * 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; + +/* + * 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; + + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 22e2b0191a00..e79eda5c0679 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_ 1757 +#define __WMI_REVISION_ 1758 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From e32be1e992edb63d54db67116860c911746e5918 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 3 May 2026 18:04:54 -0700 Subject: [PATCH 29/63] fw-api: CL 32415720 - update fw common interface files Change-Id: Ifb141a461641a7abd7f712b95817ca526501d2c5 CRs-Fixed: 3830439 --- fw/wmi_services.h | 3 +++ fw/wmi_tlv_defs.h | 14 ++++++++++++++ fw/wmi_unified.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 4 files changed, 65 insertions(+), 2 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index d49fb574c7ec..0cb39023a90f 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -805,6 +805,9 @@ typedef enum { 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, + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 34542191b8c1..6ec01ddba08e 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1632,6 +1632,9 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2241,6 +2244,7 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -2610,6 +2614,7 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -6501,6 +6506,10 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PEER_MEAS_REQ_CMDID); 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); + /************************** TLV definitions of WMI events *******************************/ @@ -8917,6 +8926,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_GET_CHIPSET_LOGGING_STATS_EVENTID); 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); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 21241b42d99a..8c8525c6931a 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -783,6 +783,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 */ @@ -2185,6 +2187,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 */ @@ -42870,6 +42874,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) 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); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -55923,6 +55928,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, @@ -56464,11 +56509,12 @@ typedef struct { * Bits 31-10 : Reserved */ A_UINT32 control_flag; - A_UINT32 burst_period; + 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 */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index e79eda5c0679..027a0f730c73 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_ 1758 +#define __WMI_REVISION_ 1759 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From c797dc8f311898db4f4efee76c209195913f3457 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 5 May 2026 18:01:58 -0700 Subject: [PATCH 30/63] fw-api: CL 32437017 - update fw common interface files Change-Id: I9f77b2a1e4b7b43eea1393505bc757ee3154a622 CRs-Fixed: 3830439 --- fw/wmi_services.h | 3 ++- fw/wmi_unified.h | 8 +++++++- fw/wmi_version.h | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 0cb39023a90f..319a2112b9b8 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -807,7 +807,8 @@ typedef enum { 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, WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 8c8525c6931a..2a97e07c0ca4 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -26134,8 +26134,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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 027a0f730c73..a03873338aec 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_ 1759 +#define __WMI_REVISION_ 1760 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 5409c7189d42d167384814b39093890a5345d74f Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 7 May 2026 18:01:49 -0700 Subject: [PATCH 31/63] fw-api: CL 32464183 - update fw common interface files Change-Id: Ie47269874d0fa4fe586be912cf11497d51474abc CRs-Fixed: 3830439 --- fw/htt.h | 1 + fw/htt_stats.h | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/fw/htt.h b/fw/htt.h index c83725d2a56a..0716a4625152 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -936,6 +936,7 @@ typedef enum { 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_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index f2d50d3ebede..68c6c694a69b 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -948,6 +948,8 @@ enum htt_dbg_ext_stats_type { */ HTT_DBG_EXT_STATS_DPD = 85, + HTT_DBG_EXT_STATS_NPCA = 86, + /* keep this last */ HTT_DBG_NUM_EXT_STATS = 256, @@ -16972,5 +16974,25 @@ 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; + #endif /* __HTT_STATS_H__ */ From 5f612b84b420b95beed9191517d72dde8be15d0c Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 7 May 2026 18:03:43 -0700 Subject: [PATCH 32/63] fw-api: CL 32465518 - update fw common interface files Change-Id: I2e542350a04e2f74d4c28270eaa0676868aed3ee CRs-Fixed: 3830439 --- fw/wmi_services.h | 6 +++ fw/wmi_tlv_defs.h | 22 ++++++++++ fw/wmi_unified.h | 103 +++++++++++++++++++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 4 files changed, 131 insertions(+), 2 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 319a2112b9b8..34edff232b59 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -810,6 +810,12 @@ typedef enum { /* 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, + + WMI_MAX_EXT2_SERVICE } WMI_SERVICE; diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 6ec01ddba08e..6c1e2779b5ab 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1635,6 +1635,12 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2245,6 +2251,7 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -6468,6 +6475,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) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 2a97e07c0ca4..a37efe035e27 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -374,7 +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_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) @@ -1870,6 +1871,9 @@ typedef enum { /** 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 { @@ -22409,6 +22413,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 */ @@ -56143,6 +56148,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, diff --git a/fw/wmi_version.h b/fw/wmi_version.h index a03873338aec..8eed6aba6b00 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_ 1760 +#define __WMI_REVISION_ 1761 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From be91f2f082256d1dec3a71ca455c6cca9247bd95 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 8 May 2026 18:02:01 -0700 Subject: [PATCH 33/63] fw-api: CL 32477405 - update fw common interface files Change-Id: Ic79bd8e20c37ba78e27f066ca24c4c3b05f952e4 CRs-Fixed: 3830439 --- fw/htt.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index 0716a4625152..0a50c23b9cf1 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -6235,7 +6235,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 @@ -6452,7 +6456,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, @@ -6655,6 +6660,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) \ From e280ec35850b1acee9632b7b9ead5a8cf2a93643 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 8 May 2026 18:04:07 -0700 Subject: [PATCH 34/63] fw-api: CL 32479166 - update fw common interface files Change-Id: I3ce8a6e26a34300bc1fabeeec03fa8fdfc86a630 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 41 +++++++++++++++++++++++++++++++++++++---- fw/wmi_version.h | 2 +- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index a37efe035e27..e6138c762ed6 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -44618,11 +44618,32 @@ typedef struct { #define TWT_EN_DIS_FLAGS_SET_DIS_BTWT_AUTO_DELETE(flag, val) \ WMI_SET_BITS(flag, 7, 1, val) +/* bits 8-15: unused / reserved */ + +/* + * Bit 16: 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_ID(flag) WMI_GET_BITS(flag, 16, 1) +#define TWT_EN_DIS_FLAGS_SET_VDEV_ID(flag, val) WMI_SET_BITS(flag, 16, 1, val) + 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 16 of flags. + * When TWT_EN_DIS_FLAGS_GET_VDEV_ID(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_ID(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) */ @@ -44672,8 +44693,20 @@ typedef struct { 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 16 of flags. + * When TWT_EN_DIS_FLAGS_GET_VDEV_ID(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_ID(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; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 8eed6aba6b00..ae86a7759307 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_ 1761 +#define __WMI_REVISION_ 1762 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 66cea4aabb2c6b96a39a5f5cd0c107117f1c19b8 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 9 May 2026 18:04:34 -0700 Subject: [PATCH 35/63] fw-api: CL 32489576 - update fw common interface files Change-Id: I49041d8fb1fe6844158bed3685cfcdd8ac3b4716 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 19 ++++++++++--------- fw/wmi_version.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index e6138c762ed6..343c91f7e02d 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -53555,6 +53555,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 */ @@ -53580,22 +53581,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]; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index ae86a7759307..d240459659aa 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_ 1762 +#define __WMI_REVISION_ 1763 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From a05138617ca027054782c52d1383ea9be46e4a37 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 13 May 2026 12:02:32 -0700 Subject: [PATCH 36/63] fw-api: CL 32516836 - update fw common interface files Change-Id: Ie1c92d1f9f52920395b0e00acfaca4d8b8ab5cfe CRs-Fixed: 3830439 --- fw/wmi_services.h | 6 ++++++ fw/wmi_unified.h | 3 +++ fw/wmi_version.h | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 34edff232b59..2ff0b90c30e8 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -815,6 +815,12 @@ typedef enum { 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, + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 343c91f7e02d..15bab1960b09 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -28529,6 +28529,7 @@ typedef struct { #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 @@ -28638,6 +28639,8 @@ typedef enum /* 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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index d240459659aa..c6313e5a0c2e 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_ 1763 +#define __WMI_REVISION_ 1764 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 44c9746282ac97289d90a660b1cfb639ccf95a4d Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 15 May 2026 18:02:00 -0700 Subject: [PATCH 37/63] fw-api: CL 32544807 - update fw common interface files Change-Id: Id45d1786ca4116b28a367b3705928a9e434e99a8 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 4 ++++ fw/wmi_version.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 15bab1960b09..f19420b4e557 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -19422,6 +19422,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{ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index c6313e5a0c2e..9c9e6a072807 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_ 1764 +#define __WMI_REVISION_ 1765 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From bb466adee1ff83586e1c61092a07f0898c43d433 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 16 May 2026 18:01:51 -0700 Subject: [PATCH 38/63] fw-api: CL 32554999 - update fw common interface files Change-Id: Id7721d7fa0705aab328628fd6737921380fe3882 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 3 ++- fw/wmi_unified.h | 59 +++++++++++++++++++++++++++++++++++++++++++---- fw/wmi_version.h | 2 +- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 6c1e2779b5ab..54aeed3061d5 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -4980,7 +4980,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 */ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index f19420b4e557..378fb0f4524f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10688,6 +10688,17 @@ typedef enum { * 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, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) @@ -37329,11 +37340,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 */ @@ -37402,15 +37431,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 */ @@ -37453,7 +37502,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; /* diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 9c9e6a072807..c6acc0a3926d 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_ 1765 +#define __WMI_REVISION_ 1766 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From ade1ddf800d0d99c36d860867b2da714d903cb47 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 17 May 2026 18:04:15 -0700 Subject: [PATCH 39/63] fw-api: CL 32559532 - update fw common interface files Change-Id: Iae691011c4602fe236e0fc4296621e267a91f3b4 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 7 +++++++ fw/wmi_version.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 378fb0f4524f..ea778567c827 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -56785,6 +56785,13 @@ typedef enum { 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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index c6acc0a3926d..d4a06a98720d 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_ 1766 +#define __WMI_REVISION_ 1767 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 7f34bf2dc154a7c100e1e6fe7a52e6afeb099d2e Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 17 May 2026 18:06:15 -0700 Subject: [PATCH 40/63] fw-api: CL 32559793 - update fw common interface files Change-Id: I2a12086d2ee447478ed5b051a22d9c36c97e545b CRs-Fixed: 3830439 --- fw/wmi_unified.h | 8 ++++++++ fw/wmi_version.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index ea778567c827..94ee224803ac 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10699,6 +10699,14 @@ typedef enum { * 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, } WMI_PDEV_PARAM; #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index d4a06a98720d..ba153a8ef1e9 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_ 1767 +#define __WMI_REVISION_ 1768 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From fb917f8bc73d0aed71016c62a19bb1f08c432852 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 17 May 2026 18:08:18 -0700 Subject: [PATCH 41/63] fw-api: CL 32560454 - update fw common interface files Change-Id: I1481d231bd2e470b22042631db664126f5596a7e CRs-Fixed: 3830439 --- fw/wmi_services.h | 3 +++ fw/wmi_unified.h | 63 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 2ff0b90c30e8..f6b3b8e2c00d 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -821,6 +821,9 @@ typedef enum { */ 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, + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 94ee224803ac..069863abddbc 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -44684,25 +44684,25 @@ typedef struct { #define TWT_EN_DIS_FLAGS_SET_DIS_BTWT_AUTO_DELETE(flag, val) \ WMI_SET_BITS(flag, 7, 1, val) -/* bits 8-15: unused / reserved */ - /* - * Bit 16: indicates whether pdev_id is valid or vdev_id is valid. + * 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_ID(flag) WMI_GET_BITS(flag, 16, 1) -#define TWT_EN_DIS_FLAGS_SET_VDEV_ID(flag, val) WMI_SET_BITS(flag, 16, 1, val) +#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 or vdev_id depending on bit 16 of flags. - * When TWT_EN_DIS_FLAGS_GET_VDEV_ID(flags) == 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_ID(flags) == 1: + * 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. */ @@ -44752,20 +44752,37 @@ 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 or vdev_id depending on bit 16 of flags. - * When TWT_EN_DIS_FLAGS_GET_VDEV_ID(flags) == 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_ID(flags) == 1: + * 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. */ @@ -44779,8 +44796,26 @@ typedef struct { 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 { From 8614fa0454ca3a9a4783721b86dc0c1f19046015 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 22 May 2026 18:02:25 -0700 Subject: [PATCH 42/63] fw-api: CL 32578922 - update fw common interface files SCL original promoter: ddahlby (SCL=32573576) WINE promoted user: yeshanit WINE request id: 5903286 Jobs fixed ... ChangeRequest4539549 on 2026/05/18 by prismsvc *closed* Job created automatically by Orbit/PRISM to track changes for Change Request 4539549. Please visit https://orbit/CR/4539549 for details for the Change Request. Affected files ... ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_services.h#437 edit ... //components/rel/wlanfw_cmn.cnss/1.0.0/fw_interface/include/wmi_version.h#1721 edit Change-Id: I0d5a4c167bdab1b650073a0c60bb6c7964aa677e CRs-Fixed: 3830439 --- fw/wmi_services.h | 8 ++++++++ fw/wmi_version.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index f6b3b8e2c00d..ddbfd3f67fce 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -824,6 +824,14 @@ typedef enum { /* 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_MAX_EXT2_SERVICE diff --git a/fw/wmi_version.h b/fw/wmi_version.h index ba153a8ef1e9..9fe5aa0931f8 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_ 1768 +#define __WMI_REVISION_ 1769 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 074f7db0f398677aa84362ade95a2215d484929e Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 22 May 2026 18:04:25 -0700 Subject: [PATCH 43/63] fw-api: CL 32623458 - update fw common interface files Change-Id: I813789353f01b866f6c6aa133c18520a1b92e6d3 CRs-Fixed: 3830439 --- fw/wmi_services.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index ddbfd3f67fce..830df224684c 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -832,6 +832,8 @@ typedef enum { */ WMI_SERVICE_AWGN_INT_STATUS_REQUEST_SUPPORT = 516, + WMI_SERVICE_WMI_ANOMALY_REPORTING = 517, + WMI_MAX_EXT2_SERVICE From db9a57ba1be07e9da38c303f258b82fcdf57d16a Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 22 May 2026 18:08:56 -0700 Subject: [PATCH 44/63] fw-api: CL 32623461 - update fw common interface files Change-Id: I97631e151f90475b4744303fcd5a0d5fd94e270e CRs-Fixed: 3830439 --- fw/wmi_unified.h | 278 ++++++++++++++++++++++++++++------------------- fw/wmi_version.h | 2 +- 2 files changed, 165 insertions(+), 115 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 069863abddbc..1d3b698c5492 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -3257,8 +3257,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) @@ -4268,6 +4275,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[]; @@ -23746,6 +23761,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[]; @@ -40999,6 +41021,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) \ @@ -41025,40 +41054,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 */ @@ -41073,128 +41102,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 */ /* @@ -41243,11 +41270,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) \ @@ -41412,46 +41435,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) \ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 9fe5aa0931f8..51d83b4f419c 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_ 1769 +#define __WMI_REVISION_ 1770 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From c7c691adf7642f0895855cc380ebfd419a37aebb Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 22 May 2026 18:10:52 -0700 Subject: [PATCH 45/63] fw-api: CL 32626000 - update fw common interface files Change-Id: I875fd08ee345df13f3109281b0a00c43c0fd3bb5 CRs-Fixed: 3830439 --- fw/htt.h | 2 ++ fw/htt_stats.h | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/fw/htt.h b/fw/htt.h index 0a50c23b9cf1..18d7614c2450 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -937,6 +937,8 @@ typedef enum { 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_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 68c6c694a69b..36e7615294db 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -5381,6 +5381,24 @@ typedef htt_stats_error_tlv_v 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 */ HTT_SCHED_TID_SKIP_NOTIFY_MPDU, /* Skip the tid's 2nd sched_cmd when 1st cmd is ongoing */ From 58fbfa4df8801654710ae79daa547352ef703fd1 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 23 May 2026 18:01:52 -0700 Subject: [PATCH 46/63] fw-api: CL 32636152 - update fw common interface files Change-Id: I765f7cf88c5361bb627b080c79fd740a888c10d1 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 7 +++++++ fw/wmi_version.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 1d3b698c5492..afbe126ea6b1 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10722,6 +10722,13 @@ typedef enum { * 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) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 51d83b4f419c..14bd31b096bd 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_ 1770 +#define __WMI_REVISION_ 1771 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From a5743ff473524adf98a42db6a9e5e64ac845187a Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 24 May 2026 18:01:50 -0700 Subject: [PATCH 47/63] fw-api: CL 32640276 - update fw common interface files Change-Id: Ibf222d4c6c6fc5b39550a96b4ed9343687211e9d CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 14 +- fw/wmi_unified.h | 392 ++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 405 insertions(+), 3 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 54aeed3061d5..f027d8ebccae 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1641,6 +1641,8 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2622,6 +2624,7 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -4428,15 +4431,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) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index afbe126ea6b1..925d5b6761b8 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -2712,6 +2712,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), @@ -30563,6 +30568,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 @@ -30574,6 +30584,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 */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 14bd31b096bd..d1cf1d6225f9 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_ 1771 +#define __WMI_REVISION_ 1772 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 81b46e263fcd84ec744aba41057a677b8d1d5b49 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 27 May 2026 06:01:59 -0700 Subject: [PATCH 48/63] fw-api: CL 32668717 - update fw common interface files Change-Id: I7232f5b85b3e918dc877e4a96d56d28fa692642c CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 142 +++++++++++++ fw/wmi_unified.h | 524 +++++++++++++++++++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 3 files changed, 663 insertions(+), 5 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index f027d8ebccae..d9ad9c4d8b16 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1643,6 +1643,11 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2254,6 +2259,8 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -2625,6 +2632,9 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -4517,6 +4527,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) @@ -7462,6 +7558,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) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 925d5b6761b8..e53617e96af6 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1579,7 +1579,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), @@ -2699,6 +2718,29 @@ typedef enum { 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), @@ -5624,7 +5666,9 @@ typedef struct { struct { A_UINT32 dw_notif_lead_time: 8, - reserved2: 24; + /* enable supplicant based NAN offload mode */ + enable_nan_ofld_mode: 1, + reserved2: 23; }; }; } wmi_resource_config; @@ -5635,9 +5679,34 @@ 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) + +/* + * 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)))) @@ -32542,6 +32611,244 @@ 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, @@ -32676,6 +32983,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; @@ -43401,6 +43915,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) 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); } return (A_UINT8 *) "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index d1cf1d6225f9..f1277d305b45 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_ 1772 +#define __WMI_REVISION_ 1773 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From c8014b61bb9d26760685559a019e7ed2bc8a5198 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 28 May 2026 18:01:51 -0700 Subject: [PATCH 49/63] fw-api: CL 32688516 - update fw common interface files Change-Id: I99daa05867576fda27e773d45d68fc09fd7604a4 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 18 ++++++++++++++++++ fw/wmi_version.h | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index e53617e96af6..cdc70a2fdc0e 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10909,6 +10909,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) @@ -23279,6 +23295,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 diff --git a/fw/wmi_version.h b/fw/wmi_version.h index f1277d305b45..4311246b96b0 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_ 1773 +#define __WMI_REVISION_ 1774 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From d1cea237706a3414737773f4cdc341d5bf637bfd Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 29 May 2026 18:01:52 -0700 Subject: [PATCH 50/63] fw-api: CL 32692322 - update fw common interface files Change-Id: I542168043420c52b4fe96b6f36cf5105843878ba CRs-Fixed: 3830439 --- fw/htt_stats.h | 735 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 696 insertions(+), 39 deletions(-) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 36e7615294db..fec2c7616a30 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1199,7 +1199,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); \ @@ -1814,6 +1816,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; @@ -1843,6 +1848,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; @@ -1917,6 +1925,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 { \ @@ -1927,6 +1938,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 { \ @@ -1937,6 +1951,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 { \ @@ -1992,7 +2009,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); \ @@ -2002,7 +2021,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); \ @@ -2018,7 +2039,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); \ @@ -2028,7 +2051,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); \ @@ -2166,6 +2191,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 @@ -2174,7 +2208,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); \ @@ -2184,7 +2220,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); \ @@ -2445,7 +2483,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); \ @@ -2455,7 +2495,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); \ @@ -2642,8 +2684,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) \ @@ -2657,17 +2705,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, @@ -2676,6 +2724,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, @@ -3708,6 +3784,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 */ @@ -5885,7 +5964,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); \ @@ -5996,7 +6077,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); \ @@ -6006,7 +6089,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); \ @@ -6287,6 +6372,9 @@ 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) #define HTT_STATS_RX_FW_RING_CURR_NUM_ENTRIES(dword) ((dword >> 16) & 0xffff) @@ -6535,6 +6623,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 { \ @@ -6621,7 +6712,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); \ @@ -6700,7 +6793,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); \ @@ -6710,7 +6805,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); \ @@ -6720,7 +6817,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); \ @@ -6730,7 +6829,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); \ @@ -6747,7 +6848,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); \ @@ -6757,7 +6860,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); \ @@ -6774,7 +6879,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); \ @@ -6784,7 +6891,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); \ @@ -6801,7 +6910,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); \ @@ -6811,7 +6922,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); \ @@ -6828,7 +6941,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); \ @@ -6838,7 +6953,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); \ @@ -7269,6 +7386,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 */ @@ -7406,6 +7528,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: @@ -7452,6 +7577,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); \ @@ -7463,6 +7591,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); \ @@ -7497,7 +7628,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 @@ -7779,6 +7909,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 **/ @@ -7828,6 +7961,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 { \ @@ -8003,6 +8139,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 @@ -8146,6 +8285,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 @@ -8331,6 +8473,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; @@ -8393,6 +8538,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; @@ -8451,6 +8599,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: @@ -8646,7 +8796,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); \ @@ -8860,6 +9012,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 */ @@ -9952,6 +10107,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 { \ @@ -11213,6 +11371,9 @@ typedef htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv #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 @@ -11220,6 +11381,9 @@ typedef htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv #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 @@ -11227,6 +11391,9 @@ typedef htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv #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 @@ -11234,6 +11401,9 @@ typedef htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv #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 @@ -11241,6 +11411,9 @@ typedef htt_stats_pdev_ul_mumimo_hist_ineligibility_tlv #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: @@ -11400,6 +11573,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 @@ -11924,6 +12103,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 { \ @@ -11937,6 +12119,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; @@ -12048,76 +12233,107 @@ 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) +/* 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_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_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) +/* 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_TPCCAL5GOPC, _val); \ ((_var) |= ((_val) << HTT_STATS_PHY_RESET_TPCCAL5GOPC_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_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) +/* 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); \ @@ -12128,76 +12344,107 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; #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_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); \ @@ -12209,26 +12456,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); \ @@ -12748,6 +13006,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 @@ -12902,122 +13165,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)) @@ -13321,6 +13656,48 @@ 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_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 { @@ -13792,6 +14169,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); \ @@ -13802,6 +14186,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); \ @@ -13812,6 +14203,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); \ @@ -13822,6 +14220,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); \ @@ -13832,6 +14237,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); \ @@ -13842,6 +14254,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); \ @@ -13852,6 +14271,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); \ @@ -13862,6 +14288,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); \ @@ -13872,6 +14305,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); \ @@ -14130,6 +14570,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); \ @@ -14169,6 +14612,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); \ @@ -14818,6 +15264,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; @@ -14890,6 +15338,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 { \ @@ -14903,6 +15354,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 { \ @@ -14918,6 +15372,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 { \ @@ -14933,6 +15390,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 { \ @@ -14948,6 +15408,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 { \ @@ -14963,6 +15426,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 { \ @@ -14978,6 +15444,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 { \ @@ -14991,6 +15460,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 { \ @@ -14998,6 +15470,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; @@ -15223,6 +15713,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 @@ -15839,6 +16384,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); \ @@ -15851,6 +16399,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); \ @@ -15863,6 +16414,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); \ @@ -15875,6 +16429,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); \ @@ -16220,16 +16777,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)) @@ -16367,32 +16933,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)) @@ -16439,44 +17023,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 @@ -16540,36 +17148,57 @@ typedef htt_stats_reg_6g_ch_pwr_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)) @@ -16588,11 +17217,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_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_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)) @@ -16615,11 +17250,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)) @@ -16642,21 +17283,33 @@ 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)) @@ -16899,6 +17552,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); \ @@ -16910,6 +17565,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); \ From 2f8509c7f4a77c575dc665ecfa02c0cb4dc3fed8 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 29 May 2026 18:03:47 -0700 Subject: [PATCH 51/63] fw-api: CL 32697669 - update fw common interface files Change-Id: I54453dbf6a4638ae7aeece661b9b27e40533c390 CRs-Fixed: 3830439 --- fw/htt.h | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 194 insertions(+), 2 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index 18d7614c2450..2f41c5add0d0 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -285,9 +285,10 @@ * 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 157 +#define HTT_CURRENT_VERSION_MINOR 158 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -8110,7 +8111,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, @@ -8154,6 +8158,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)) @@ -8224,6 +8245,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) \ @@ -8610,6 +8676,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 */ From 40b76f40b3e45bc1b5c33b791d52a2775a1f811d Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 29 May 2026 18:05:45 -0700 Subject: [PATCH 52/63] fw-api: CL 32697676 - update fw common interface files Change-Id: Ieb8df0407342ff4a8a8c3eec180765795e75a2a1 CRs-Fixed: 3830439 --- fw/wmi_services.h | 7 ++++ fw/wmi_tlv_defs.h | 40 ++++++++++++++++++ fw/wmi_unified.h | 104 ++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 4 files changed, 152 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 830df224684c..43b84dad12bb 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -834,6 +834,13 @@ typedef enum { 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, + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index d9ad9c4d8b16..aeff9c6e8d85 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1648,6 +1648,14 @@ typedef enum { 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_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2261,6 +2269,9 @@ typedef enum { 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) \ /* add new CMD_LIST elements above this line */ @@ -2635,6 +2646,9 @@ typedef enum { 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) \ /* add new EVT_LIST elements above this line */ @@ -6358,6 +6372,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); @@ -8978,6 +9004,20 @@ 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) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index cdc70a2fdc0e..ee6297d8a0fc 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1441,6 +1441,12 @@ 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, + /* Offload 11k related requests */ WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD), @@ -2646,6 +2652,12 @@ 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, + /* GPIO Event */ WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), @@ -43935,6 +43947,9 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) 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); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -56053,6 +56068,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) @@ -56114,6 +56158,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) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 4311246b96b0..31ed2096ba6b 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_ 1774 +#define __WMI_REVISION_ 1775 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From ebb74a35fed38dd43ab19be78ef8e7e232d5d292 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 2 Jun 2026 18:01:47 -0700 Subject: [PATCH 53/63] fw-api: CL 32731178 - update fw common interface files Change-Id: I6856eb39a14f535aa55394fa3876127f4d535e1d CRs-Fixed: 3830439 --- fw/wmi_services.h | 6 ++++++ fw/wmi_unified.h | 10 +++++++++- fw/wmi_version.h | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 43b84dad12bb..c970c20720d1 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -841,6 +841,12 @@ typedef enum { */ 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_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index ee6297d8a0fc..a2048cf1b8f7 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -5680,7 +5680,9 @@ typedef struct { dw_notif_lead_time: 8, /* enable supplicant based NAN offload mode */ enable_nan_ofld_mode: 1, - reserved2: 23; + /* disable/enable temporal IOT mode */ + enable_temporal_iot_mode: 1, + reserved2: 22; }; }; } wmi_resource_config; @@ -5700,6 +5702,12 @@ typedef struct { #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 * diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 31ed2096ba6b..837867d7c82f 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_ 1775 +#define __WMI_REVISION_ 1776 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From dc14726a1218044dcac809d2177a03cbc74ad17c Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 2 Jun 2026 18:03:47 -0700 Subject: [PATCH 54/63] fw-api: CL 32742658 - update fw common interface files Change-Id: I349dc7cd9e7d0b0a829199ae12661e7118279edf CRs-Fixed: 3830439 --- fw/htt_stats.h | 118 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index fec2c7616a30..447d1e0972fc 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -11566,6 +11566,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 @@ -11600,6 +11617,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 @@ -11607,6 +11627,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 @@ -11614,6 +11637,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 @@ -11621,6 +11647,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 @@ -11628,6 +11657,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 @@ -13049,31 +13082,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)) @@ -13683,6 +13734,10 @@ typedef struct { #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) @@ -16709,31 +16764,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)) @@ -17104,14 +17177,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; @@ -17417,6 +17505,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); \ @@ -17426,6 +17517,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); \ @@ -17435,6 +17529,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); \ @@ -17444,6 +17541,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); \ @@ -17453,6 +17553,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); \ @@ -17462,6 +17565,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); \ @@ -17481,6 +17587,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); \ @@ -17490,6 +17599,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); \ @@ -17499,6 +17611,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); \ @@ -17508,6 +17623,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); \ From 7e1dddd481814e55a1148f79c445a3d21ec3a477 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 4 Jun 2026 18:04:23 -0700 Subject: [PATCH 55/63] fw-api: CL 32762973 - update fw common interface files Change-Id: I4cceffdf4fadab9da40ff71a971cd133d96274b8 CRs-Fixed: 3830439 --- fw/htt.h | 3 + fw/htt_stats.h | 412 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 368 insertions(+), 47 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index 2f41c5add0d0..a94a3138830f 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -940,6 +940,9 @@ typedef enum { 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_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 447d1e0972fc..3b84a87e4c5e 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, @@ -6376,7 +6382,34 @@ typedef htt_stats_tx_de_cmn_tlv htt_tx_de_cmn_stats_tlv; (((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 { @@ -6386,12 +6419,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; @@ -12154,7 +12229,7 @@ typedef htt_stats_phy_counters_tlv htt_phy_counters_tlv; 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) + HTT_STATS_CURR_EANI_MODE_GET(_var) typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -12303,22 +12378,8 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; ((_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) -/* 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_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) @@ -12331,22 +12392,22 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; ((_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_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_TPCCAL5GOPC_GET(_var) \ - HTT_STATS_PHY_RESET_TPCCAL5GOPC_GET(_var) -#define HTT_STATS_PHY_RESET_TPCCAL5GOPC_SET(_var, _val) \ +#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) @@ -12359,21 +12420,22 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; ((_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_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_TPCCAL6GOPC_GET(_var) \ - HTT_STATS_PHY_RESET_TPCCAL6GOPC_GET(_var) -#define HTT_STATS_PHY_RESET_TPCCAL6GOPC_SET(_var, _val) \ +#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) @@ -12386,6 +12448,20 @@ typedef htt_stats_phy_stats_tlv htt_phy_stats_tlv; ((_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) \ @@ -16817,6 +16893,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; @@ -17402,6 +17479,247 @@ typedef struct { 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 ==================== } */ /* From 1d7a79622ddbbe4895d7566418a62362adce0fa0 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 6 Jun 2026 18:04:12 -0700 Subject: [PATCH 56/63] fw-api: CL 32796472 - update fw common interface files Change-Id: I3a4c105c93c0840e1b06abcdf9bc23f121ba4450 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 14 +++++++++++++- fw/wmi_version.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index a2048cf1b8f7..6c014a0cef49 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -5523,8 +5523,15 @@ 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. * - * Bits 31:26 - Reserved + * Bits 31:27 - Reserved */ A_UINT32 host_service_flags; @@ -6193,6 +6200,11 @@ 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) + #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) \ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 837867d7c82f..0b7e383b709e 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_ 1776 +#define __WMI_REVISION_ 1777 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 328cfa7dae2b75d2c5cb2a481c3cf1c247f1b722 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 6 Jun 2026 18:06:21 -0700 Subject: [PATCH 57/63] fw-api: CL 32796759 - update fw common interface files Change-Id: Ie60e82c71b2447b006a7d031661248e75490730a CRs-Fixed: 3830439 --- fw/htc_services.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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) From 87b3e2425eafb3fe69efb4049387d172cfde0fcc Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 7 Jun 2026 18:01:41 -0700 Subject: [PATCH 58/63] fw-api: CL 32798720 - update fw common interface files Change-Id: If7511eee9deb2e3b966ebb156163e2b565f1a395 CRs-Fixed: 3830439 --- fw/wmi_unified.h | 30 +++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 6c014a0cef49..b36235063ebc 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -28017,6 +28017,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 */ @@ -28025,7 +28041,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; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 0b7e383b709e..61e845021657 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_ 1777 +#define __WMI_REVISION_ 1778 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From b20925de80a7b5fdd1b248b5c90902227fcbffd2 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 9 Jun 2026 18:01:48 -0700 Subject: [PATCH 59/63] fw-api: CL 32817922 - update fw common interface files Change-Id: I6125a2de82bfa841ad03ba8cc8cd92e08430332b CRs-Fixed: 3830439 --- fw/wmi_unified.h | 2 ++ fw/wmi_version.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index b36235063ebc..9a99113fd5aa 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -57288,6 +57288,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) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 61e845021657..a252ae15c4ef 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_ 1778 +#define __WMI_REVISION_ 1779 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 13d4d7dd0ead133ad6f8818a399f746e4438b286 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 10 Jun 2026 18:04:25 -0700 Subject: [PATCH 60/63] fw-api: CL 32835676 - update fw common interface files Change-Id: Icd75f09dd3d08b8379bd78b9f39fbc04348870d8 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 22 ++++++++++++++ fw/wmi_unified.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index aeff9c6e8d85..05e4a9aaa6c5 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1656,6 +1656,8 @@ typedef enum { 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. @@ -2272,6 +2274,7 @@ typedef enum { 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 */ @@ -2649,6 +2652,7 @@ typedef enum { 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 */ @@ -6665,6 +6669,15 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PEER_MEAS_CANCEL_CMDID); 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 *******************************/ @@ -9146,6 +9159,15 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RTT_PEER_MEAS_REPORT_EVENTID); 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 9a99113fd5aa..f42670d89a8d 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1447,6 +1447,9 @@ typedef enum { 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), @@ -2658,6 +2661,9 @@ typedef enum { 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), @@ -43998,6 +44004,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) 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"; @@ -58190,6 +58197,75 @@ typedef struct { */ } 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 a252ae15c4ef..7cabd871a946 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_ 1779 +#define __WMI_REVISION_ 1780 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From e222d053fdd823c7fd9e685c392da01ad8d8f4ed Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 12 Jun 2026 18:01:46 -0700 Subject: [PATCH 61/63] fw-api: CL 32860532 - update fw common interface files Change-Id: I700caff11fd0f0d5a9db59e38f9c7bd03db8682a CRs-Fixed: 3830439 --- fw/htt.h | 2 + fw/htt_stats.h | 987 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 987 insertions(+), 2 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index a94a3138830f..7234768e9b81 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -943,6 +943,8 @@ typedef enum { 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; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 3b84a87e4c5e..2ed4422436b2 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -956,6 +956,19 @@ enum htt_dbg_ext_stats_type { 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, @@ -17383,7 +17396,7 @@ 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_OFFSET_GET(word) \ +#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)) @@ -17391,7 +17404,7 @@ typedef struct { #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_PSD_GET(word) \ +#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)) @@ -18106,4 +18119,974 @@ typedef struct { } 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__ */ From 197c246de9465b1e496a8f2a3d2824951290c48a Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 12 Jun 2026 18:03:55 -0700 Subject: [PATCH 62/63] fw-api: CL 32860533 - update fw common interface files Change-Id: I9d4f03a2786dee6590f64ef7dfc0c63e8d20c54d CRs-Fixed: 3830439 --- fw/wmi_services.h | 11 +++++++++++ fw/wmi_unified.h | 21 ++++++++++++++++++++- fw/wmi_version.h | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index c970c20720d1..18acd1f63fd7 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -847,6 +847,17 @@ typedef enum { */ 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_unified.h b/fw/wmi_unified.h index f42670d89a8d..9c221dab3851 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -5536,8 +5536,14 @@ typedef struct { * 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:27 - Reserved + * Bits 31:28 - Reserved */ A_UINT32 host_service_flags; @@ -6211,6 +6217,19 @@ typedef struct { #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) \ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 7cabd871a946..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_ 1780 +#define __WMI_REVISION_ 1781 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 32961570519d6f7d57542b37b6fd9ca50aad785a Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 14 Jun 2026 18:01:38 -0700 Subject: [PATCH 63/63] fw-api: CL 32870364 - update fw common interface files Change-Id: If4bbedb9340dd059741eea4f1e910cd2324999aa CRs-Fixed: 3830439 --- fw/htt_stats.h | 59 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 2ed4422436b2..28d4c2f06ad1 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -16740,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 ====================*/