From 2567c2b3eb4577b9666c14b23cfe87a767874929 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 7 Jun 2025 06:01:38 -0700 Subject: [PATCH 01/25] fw-api: CL 29412107 - update fw common interface files Change-Id: I6779a596a6131f8b8027320c49304d4f10240850 CRs-Fixed: 3830439 --- fw/htt_stats.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index cec553dd5bef..7cc5dcf28b0c 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -2984,6 +2984,20 @@ typedef enum { #define HTT_MAX_NUM_SBT_INTR 4 +typedef enum { + HTT_RU_ALLOC_MODE_PF, + HTT_RU_ALLOC_MODE_QOS, + HTT_RU_ALLOC_MODE_STATIC, + HTT_RU_ALLOC_MODE_EQUAL, + HTT_RU_ALLOC_MODE_SIMPLIFIED, + + /* Reserving additional modes for future use */ + HTT_RU_ALLOC_MODE_RESERVED_1, + HTT_RU_ALLOC_MODE_RESERVED_2, + + HTT_RU_ALLOC_NUM_MODES +} HTT_RU_ALLOC_MODE; + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -3049,6 +3063,7 @@ typedef struct { * (Smart basic triggers are only used with intervals <= 40 ms.) */ A_UINT32 smart_basic_trig_sch_histogram[HTT_MAX_NUM_SBT_INTR]; + A_UINT32 ru_alloc_mode_cnt[HTT_RU_ALLOC_NUM_MODES]; } htt_stats_tx_selfgen_cmn_stats_tlv; /* 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; From e2fc0fc137ad0cd7b355564f32d3f145978c89c3 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 11 Jun 2025 06:01:33 -0700 Subject: [PATCH 02/25] fw-api: CL 29449355 - update fw common interface files Change-Id: Ic7352b94c01759b826b1ab9251207773abc53c07 CRs-Fixed: 3830439 --- fw/htt.h | 1 + fw/htt_stats.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/fw/htt.h b/fw/htt.h index cf522cc9c9bb..2d9bc93ce51b 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -850,6 +850,7 @@ typedef enum { HTT_STATS_PDEV_UL_MUMIMO_HIST_INELIGIBILITY_TAG = 211, /* htt_stats_pdev_ulmumimo_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_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 7cc5dcf28b0c..c1f6178c2885 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1274,6 +1274,13 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_flush_tlv htt_tx_pdev_stats_flush_tlv_v; +#define HTT_TX_PDEV_MDSB_MAX_NUM_USERS 8 +typedef struct { + htt_tlv_hdr_t tlv_hdr; + A_UINT32 pdev_id; + A_UINT32 mdsb_num_users_histogram[HTT_TX_PDEV_MDSB_MAX_NUM_USERS]; +} htt_stats_tx_pdev_mdsb_num_users_histogram_tlv; + #define HTT_TX_PDEV_STATS_MLO_ABORT_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { From 43a2892bd4757bec9cea4a99bf1da717c9fe2cf2 Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 11 Jun 2025 06:03:14 -0700 Subject: [PATCH 03/25] fw-api: CL 29449928 - update fw common interface files Change-Id: Ifc6fc413409c84216fa58b18e31b9686aabf4d82 CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + fw/wmi_tlv_defs.h | 6 +++-- fw/wmi_unified.h | 63 ++++++++++++++++++++++++++++++++++++++++++++--- fw/wmi_version.h | 2 +- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 2240b7eb1417..913281692c32 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -707,6 +707,7 @@ typedef enum { WMI_SERVICE_STA_MLO_RCFG_SUPPORT = 448, /* FW supports STA ML reconfig op */ WMI_SERVICE_PDEV_SUSPEND_EVENT_SUPPORT = 449, /* FW supports PDEV_SUSPEND event */ WMI_SERVICE_PCC_MODE = 450, /* Indicates FW support for PCC (P2P Connection Compatibility) Mode */ + WMI_SERVICE_TDLS_NSS_CONFIRM_SUPPORT = 451, /* FW supports confirmation to host requested TDLS NSS operation */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index af1087cb216f..b985524399c2 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1484,7 +1484,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_hw_blacklist_chan_fixed_param, WMITLV_TAG_STRUC_wmi_hw_blacklist_chan_data, WMITLV_TAG_STRUC_wmi_pdev_suspend_event_fixed_param, - WMITLV_TAG_STRUC_wmi_bpf_set_apf_mode_cmd_fixed_param + WMITLV_TAG_STRUC_wmi_bpf_set_apf_mode_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_assoc_operating_mode_params, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2882,7 +2883,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_params, mlo_params, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_eht_rate_set, peer_eht_rates, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_tid_to_link_map, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_tid_to_link_map, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_operating_mode_params, operating_mode_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 1941b3620be8..46fe2646a963 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -18241,6 +18241,8 @@ typedef struct { /* Target TSF value by which VDEV restart procedure should be completed in FW */ A_UINT32 target_tsf_us_lo; /* bits 31:0 */ A_UINT32 target_tsf_us_hi; /* bits 63:32 */ + A_UINT32 vdev_op_ul_nss; /* vdev operating uplink nss. 1 ~ n: 1ss ~ nss */ + A_UINT32 vdev_op_dl_nss; /* vdev operating downlink nss. 1 ~ n: 1ss ~ nss */ /* The TLVs follows this structure: * wmi_channel chan; <-- WMI channel @@ -22088,6 +22090,25 @@ typedef struct { wmi_mac_addr link_macaddr; } wmi_pdev_mesh_rx_filter_enable_fixed_param; +typedef struct { + A_UINT32 tlv_header; /** TLV tag (WMITLV_TAG_STRUC_wmi_peer_assoc_operating_mode_params) and len */ + /* rx_nss: + * self rx nss indicated to AP through capability IEs or operating mode IE. + * 1 ~ n: 1ss ~ nss + */ + A_UINT32 rx_nss; + /* tx_nss: + * self tx nss indicated to AP through capability IEs or operating mode IE. + * 1 ~ n: 1ss ~ nss + */ + A_UINT32 tx_nss; + /* bw: + * self BW indicated to AP through capability IEs or operating mode IE, + * refer to wmi_channel_width for definition of the values this field + * can hold. + */ + A_UINT32 bw; +} wmi_peer_assoc_operating_mode_params; /* * PEER assoc_flags for assoc complete: @@ -22231,6 +22252,11 @@ typedef struct { A_UINT32 assoc_flags; /** maximum number of spatial streams supported by peer for tx */ A_UINT32 peer_max_tx_nss; + /* max_downlink_nss: + * max downlink nss, intersected between self rx and peer tx. + * 1~N means 1ss~Nss + */ + A_UINT32 max_downlink_nss; /* Following this struct are the TLV's: * A_UINT8 peer_legacy_rates[]; @@ -22243,6 +22269,8 @@ typedef struct { * wmi_eht_rate_set peer_eht_rates; <-- EHT capabilities of the peer * wmi_peer_assoc_mlo_partner_link_params link_info[] <-- partner link info * wmi_peer_assoc_tid_to_link_map[] <-- tid to link_map info + * wmi_peer_assoc_operating_mode_params <-- operating mode param that + * host sends to AP in peer assoc req, optional TLV */ } wmi_peer_assoc_complete_cmd_fixed_param; @@ -27507,13 +27535,32 @@ typedef struct { typedef struct { /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tdls_peer_update_cmd_fixed_param */ - A_UINT32 tlv_header; + A_UINT32 tlv_header; /** unique id identifying the VDEV */ - A_UINT32 vdev_id; + A_UINT32 vdev_id; /** peer MAC address */ - wmi_mac_addr peer_macaddr; + wmi_mac_addr peer_macaddr; /** new TDLS state for peer (wmi_tdls_peer_state) */ - A_UINT32 peer_state; + A_UINT32 peer_state; + /** need_nss_conf: + * only set to 1 when this TDLS peer is required to operating + * in particular HW mode NSS + */ + A_UINT32 need_nss_conf; + /* preferred_tx_nss: + * for peering state, it means advertised nss, + * for connected state, it means final negotiated nss. + * 1 ~ n: 1ss ~ nss + */ + A_UINT32 preferred_tx_nss; + /* preferred_rx_nss: + * for peering state, it means advertised nss, + * for connected state, it means final negotiated nss. + * 1 ~ n: 1ss ~ nss + */ + A_UINT32 preferred_rx_nss; + + /* The TLV for wmi_tdls_peer_capabilities will follow. * wmi_tdls_peer_capabilities peer_caps; */ @@ -27575,6 +27622,8 @@ enum wmi_tdls_peer_notification { WMI_TDLS_PEER_DISCONNECTED, /** TDLS/BT role change notification for connection tracker */ WMI_TDLS_CONNECTION_TRACKER_NOTIFICATION, + /** resp to WMI_TDLS_PEER_UPDATE_CMDID as host requested */ + WMI_TDLS_PEER_UPDATE_RESP, }; enum wmi_tdls_peer_reason { @@ -27604,6 +27653,8 @@ enum wmi_tdls_peer_reason { WMI_TDLS_SCAN_STARTED_EVENT, /** TDLS module received a scan complete event, TDLS connection tracker needs to handle this */ WMI_TDLS_SCAN_COMPLETED_EVENT, + /** TDLS max supported operating NSS in current HW mode */ + WMI_TDLS_OPERATING_NSS_CONF_EVENT, }; /* WMI_TDLS_PEER_EVENTID */ @@ -27618,6 +27669,10 @@ typedef struct { A_UINT32 peer_reason; /** unique id identifying the VDEV */ A_UINT32 vdev_id; + /** operating TX NSS 1 ~ n: 1ss ~ nss */ + A_UINT32 tx_nss; + /** operating RX NSS 1 ~ n: 1ss ~ nss */ + A_UINT32 rx_nss; } wmi_tdls_peer_event_fixed_param; /* NOTE: wmi_vdev_mcc_bcn_intvl_change_event_fixed_param would be deprecated. Please diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 1be5df054b96..b87396ef539a 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_ 1623 +#define __WMI_REVISION_ 1624 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From e860e2a02c871c1857a1ebf9611a47af88a2bc17 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 13 Jun 2025 06:01:53 -0700 Subject: [PATCH 04/25] fw-api: CL 29472274 - update fw common interface files Change-Id: Ieae923eaa45f1fe4a1cd149e69f41497b3d34a25 CRs-Fixed: 3830439 --- fw/htt_stats.h | 342 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 292 insertions(+), 50 deletions(-) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index c1f6178c2885..d4d41789afc9 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1070,7 +1070,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Num PPDUs queued to HW */ A_UINT32 hw_queued; /** Num PPDUs reaped from HW */ @@ -1545,10 +1551,17 @@ typedef htt_stats_hw_wd_timeout_tlv htt_hw_stats_wd_timeout_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - /* BIT [ 7 : 0] :- mac_id + /** + * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 tx_abort; A_UINT32 tx_abort_fail_count; A_UINT32 rx_abort; @@ -1615,10 +1628,17 @@ typedef htt_stats_hw_pdev_errs_tlv htt_hw_stats_pdev_errs_tlv; typedef struct { htt_tlv_hdr_t tlv_hdr; - /* BIT [ 7 : 0] :- mac_id + /** + * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 last_unpause_ppdu_id; A_UINT32 hwsch_unpause_wait_tqm_write; A_UINT32 hwsch_dummy_tlv_skipped; @@ -1751,7 +1771,15 @@ typedef struct _htt_msdu_flow_stats_tlv { * BIT [20 : 20] :- drop_rule * BIT [31 : 21] :- reserved */ - A_UINT32 tx_flow_no__tid_num__drop_rule; + union { + struct { + A_UINT32 tx_flow_number : 16; + A_UINT32 tid_num : 4; + A_UINT32 drop_rule : 1; + A_UINT32 reserved : 11; + }; + A_UINT32 tx_flow_no__tid_num__drop_rule; + }; A_UINT32 last_cycle_enqueue_count; A_UINT32 last_cycle_dequeue_count; A_UINT32 last_cycle_drop_count; @@ -1828,13 +1856,26 @@ typedef struct _htt_tx_tid_stats_tlv { * BIT [15 : 0] :- sw_peer_id * BIT [31 : 16] :- tid_num */ - A_UINT32 sw_peer_id__tid_num; + union { + struct { + A_UINT32 sw_peer_id : 16; + A_UINT32 tid_num : 16; + }; + A_UINT32 sw_peer_id__tid_num; + }; /** * BIT [ 7 : 0] :- num_sched_pending * BIT [15 : 8] :- num_ppdu_in_hwq * BIT [31 : 16] :- reserved */ - A_UINT32 num_sched_pending__num_ppdu_in_hwq; + union { + struct { + A_UINT32 num_sched_pending : 8; + A_UINT32 num_ppdu_in_hwq : 8; + A_UINT32 reserved : 16; + }; + A_UINT32 num_sched_pending__num_ppdu_in_hwq; + }; A_UINT32 tid_flags; /** per tid # of hw_queued ppdu */ A_UINT32 hw_queued; @@ -1864,13 +1905,26 @@ typedef struct _htt_tx_tid_stats_v1_tlv { * BIT [15 : 0] :- sw_peer_id * BIT [31 : 16] :- tid_num */ - A_UINT32 sw_peer_id__tid_num; + union { + struct { + A_UINT32 sw_peer_id : 16; + A_UINT32 tid_num : 16; + }; + A_UINT32 sw_peer_id__tid_num; + }; /** * BIT [ 7 : 0] :- num_sched_pending * BIT [15 : 8] :- num_ppdu_in_hwq * BIT [31 : 16] :- reserved */ - A_UINT32 num_sched_pending__num_ppdu_in_hwq; + union { + struct { + A_UINT32 num_sched_pending : 8; + A_UINT32 num_ppdu_in_hwq : 8; + A_UINT32 reserved : 16; + }; + A_UINT32 num_sched_pending__num_ppdu_in_hwq; + }; A_UINT32 tid_flags; /** Max qdepth in bytes reached by this tid */ A_UINT32 max_qdepth_bytes; @@ -1955,7 +2009,13 @@ typedef struct _htt_rx_tid_stats_tlv { * BIT [15 : 0] : sw_peer_id * BIT [31 : 16] : tid_num */ - A_UINT32 sw_peer_id__tid_num; + union { + struct { + A_UINT32 sw_peer_id : 16; + A_UINT32 tid_num : 16; + }; + A_UINT32 sw_peer_id__tid_num; + }; /** Stored as little endian */ A_UINT8 tid_name[MAX_HTT_TID_NAME]; /** @@ -3008,11 +3068,17 @@ typedef enum { typedef struct { htt_tlv_hdr_t tlv_hdr; - /* + /** * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** BAR sent out for SU transmission */ A_UINT32 su_bar; /** SW generated RTS frame sent */ @@ -4311,8 +4377,8 @@ typedef struct { /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - /** Scheduler command posted per tx_mode */ - A_UINT32 sched_cmd_posted[1/* length = num tx modes */]; + /** Scheduler command posted per tx_mode (length = num tx modes) */ + HTT_STATS_VAR_LEN_ARRAY1(A_UINT32, sched_cmd_posted); } htt_stats_sched_txq_cmd_posted_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_sched_txq_cmd_posted_tlv htt_sched_txq_cmd_posted_tlv_v; @@ -4322,8 +4388,8 @@ typedef htt_stats_sched_txq_cmd_posted_tlv htt_sched_txq_cmd_posted_tlv_v; /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { htt_tlv_hdr_t tlv_hdr; - /** Scheduler command reaped per tx_mode */ - A_UINT32 sched_cmd_reaped[1/* length = num tx modes */]; + /** Scheduler command reaped per tx_mode (length = num tx modes) */ + HTT_STATS_VAR_LEN_ARRAY1(A_UINT32, sched_cmd_reaped); } htt_stats_sched_txq_cmd_reaped_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_sched_txq_cmd_reaped_tlv htt_sched_txq_cmd_reaped_tlv_v; @@ -4442,7 +4508,7 @@ typedef struct { * These supercycle trigger counts are not automatically reset, but * are reset upon request. */ - A_UINT32 supercycle_triggers[1/*HTT_SCHED_SUPERCYCLE_TRIGGER_MAX*/]; + HTT_STATS_VAR_LEN_ARRAY1(A_UINT32, supercycle_triggers); } htt_stats_sched_txq_supercycle_trigger_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_sched_txq_supercycle_trigger_tlv @@ -4567,7 +4633,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Current timestamp */ A_UINT32 current_timestamp; } htt_stats_tx_sched_cmn_tlv; @@ -4586,6 +4658,7 @@ typedef struct { * This structure is for documentation, and cannot be safely used directly. * Instead, use the constituent TLV structures to fill/parse. */ +#ifdef ATH_TARGET typedef struct { htt_stats_tx_sched_cmn_tlv cmn_tlv; struct { @@ -4597,6 +4670,7 @@ typedef struct { htt_stats_sched_txq_supercycle_trigger_tlv htt_sched_txq_sched_ineligibility_tlv_esched_supercycle_trigger_tlv; } txq[1]; } htt_stats_tx_sched_t; +#endif /* == TQM STATS == */ @@ -4712,7 +4786,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 max_cmdq_id; A_UINT32 list_mpdu_cnt_hist_intvl; @@ -4828,7 +4908,14 @@ typedef struct { * BIT [15 : 8] :- cmdq_id * BIT [31 : 16] :- reserved */ - A_UINT32 mac_id__cmdq_id__word; + union { + struct { + A_UINT32 mac_id : 8; + A_UINT32 cmdq_id : 8; + A_UINT32 reserved : 16; + }; + A_UINT32 mac_id__cmdq_id__word; + }; A_UINT32 sync_cmd; A_UINT32 write_cmd; A_UINT32 gen_mpdu_cmd; @@ -5064,7 +5151,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /* Global Stats */ A_UINT32 tcl2fw_entry_count; @@ -5272,23 +5365,47 @@ typedef struct { * BIT [15 : 0] :- num_elems * BIT [31 : 16] :- prefetch_tail_idx */ - A_UINT32 num_elems__prefetch_tail_idx; + union { + struct { + A_UINT32 num_elems : 16; + A_UINT32 prefetch_tail_idx : 16; + }; + A_UINT32 num_elems__prefetch_tail_idx; + }; /** * BIT [15 : 0] :- head_idx * BIT [31 : 16] :- tail_idx */ - A_UINT32 head_idx__tail_idx; + union { + struct { + A_UINT32 head_idx : 16; + A_UINT32 tail_idx : 16; + }; + A_UINT32 head_idx__tail_idx; + }; /** * BIT [15 : 0] :- shadow_head_idx * BIT [31 : 16] :- shadow_tail_idx */ - A_UINT32 shadow_head_idx__shadow_tail_idx; + union { + struct { + A_UINT32 shadow_head_idx : 16; + A_UINT32 shadow_tail_idx : 16; + }; + A_UINT32 shadow_head_idx__shadow_tail_idx; + }; A_UINT32 num_tail_incr; /** * BIT [15 : 0] :- lwm_thresh * BIT [31 : 16] :- hwm_thresh */ - A_UINT32 lwm_thresh__hwm_thresh; + union { + struct { + A_UINT32 lwm_thresh : 16; + A_UINT32 hwm_thresh : 16; + }; + A_UINT32 lwm_thresh__hwm_thresh; + }; A_UINT32 overrun_hit_count; A_UINT32 underrun_hit_count; A_UINT32 prod_blockwait_count; @@ -5319,7 +5436,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 num_records; } htt_stats_ring_if_cmn_tlv; /* preserve old name alias for new name consistent with the tag name */ @@ -5399,7 +5522,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** * Indicates the total number of 128 byte buffers in the CMEM * that are available for buffer sharing @@ -5613,7 +5742,16 @@ typedef struct { * BIT [24 : 24] :- EP 0 -consumer, 1 - producer * BIT [31 : 25] :- reserved */ - A_UINT32 mac_id__ring_id__arena__ep; + union { + struct { + A_UINT32 mac_id : 8; + A_UINT32 ring_id : 8; + A_UINT32 arena : 8; + A_UINT32 ep : 1; + A_UINT32 reserved : 7; + }; + A_UINT32 mac_id__ring_id__arena__ep; + }; /** DWORD aligned base memory address of the ring */ A_UINT32 base_addr_lsb; A_UINT32 base_addr_msb; @@ -5627,25 +5765,49 @@ typedef struct { * BIT [15 : 0] :- num_avail_words * BIT [31 : 16] :- num_valid_words */ - A_UINT32 num_avail_words__num_valid_words; + union { + struct { + A_UINT32 num_avail_words : 16; + A_UINT32 num_valid_words : 16; + }; + A_UINT32 num_avail_words__num_valid_words; + }; /** Index of head and tail * BIT [15 : 0] :- head_ptr * BIT [31 : 16] :- tail_ptr */ - A_UINT32 head_ptr__tail_ptr; + union { + struct { + A_UINT32 head_ptr : 16; + A_UINT32 tail_ptr : 16; + }; + A_UINT32 head_ptr__tail_ptr; + }; /** Empty or full counter of rings * BIT [15 : 0] :- consumer_empty * BIT [31 : 16] :- producer_full */ - A_UINT32 consumer_empty__producer_full; + union { + struct { + A_UINT32 consumer_empty : 16; + A_UINT32 producer_full : 16; + }; + A_UINT32 consumer_empty__producer_full; + }; /** Prefetch status of consumer ring * BIT [15 : 0] :- prefetch_count * BIT [31 : 16] :- internal_tail_ptr */ - A_UINT32 prefetch_count__internal_tail_ptr; + union { + struct { + A_UINT32 prefetch_count : 16; + A_UINT32 internal_tail_ptr : 16; + }; + A_UINT32 prefetch_count__internal_tail_ptr; + }; } htt_stats_sring_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_sring_stats_tlv htt_sring_stats_tlv; @@ -5778,7 +5940,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Number of tx ldpc packets */ A_UINT32 tx_ldpc; /** Number of tx rts packets */ @@ -5993,7 +6161,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** 11BE EHT DL MU OFDMA LDPC count */ A_UINT32 be_ofdma_tx_ldpc; @@ -6158,7 +6332,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 nsts; /** Number of rx ldpc packets */ @@ -6423,7 +6603,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 rx_11ax_ul_ofdma; @@ -6497,7 +6683,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 rx_11be_ul_ofdma; @@ -6650,12 +6842,18 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /** - * BIT [7:0] :- mac_id - * BIT [31:8] :- reserved + * BIT [ 7 : 0] :- mac_id + * BIT [31 : 8] :- reserved * * Refer to HTT_STATS_CMN_MAC_ID_GET/SET macros. */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Number of times UL MUMIMO RX packets received */ A_UINT32 rx_11ax_ul_mumimo; @@ -6709,12 +6907,18 @@ typedef struct { htt_tlv_hdr_t tlv_hdr; /** - * BIT [7:0] :- mac_id - * BIT [31:8] :- reserved + * BIT [ 7 : 0] :- mac_id + * BIT [31 : 8] :- reserved * * Refer to HTT_STATS_CMN_MAC_ID_GET/SET macros. */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Number of times UL MUMIMO RX packets received */ A_UINT32 rx_11be_ul_mumimo; @@ -6967,7 +7171,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Num PPDU status processed from HW */ A_UINT32 ppdu_recvd; /** Num MPDU across PPDUs with FCS ok */ @@ -7098,7 +7308,13 @@ typedef struct { * BIT [ 7 : 0] :- mac_id * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; /** Num of phy err */ A_UINT32 total_phy_err_cnt; /** Counts of different types of phy errs @@ -12166,7 +12382,13 @@ typedef struct { * read/write this bitfield. * BIT [31 : 8] :- reserved */ - A_UINT32 mac_id__word; + union { + struct { + A_UINT32 mac_id: 8, + reserved: 24; + }; + A_UINT32 mac_id__word; + }; A_UINT32 basic_trigger_across_bss; A_UINT32 basic_trigger_within_bss; A_UINT32 bsr_trigger_across_bss; @@ -12329,17 +12551,37 @@ typedef struct { * BIT [ 15 : 8] :- pri20_index * BIT [ 31 : 16] :- pri20_freq in Mhz */ - A_UINT32 mac_id__pri20_idx__freq; + union { + struct { + A_UINT32 mac_id : 8; + A_UINT32 pri20_idx : 8; + A_UINT32 pri20_freq_mhz : 16; + }; + A_UINT32 mac_id__pri20_idx__freq; + }; /* BIT [ 15 : 0] :- centre_freq1 * BIT [ 31 : 16] :- centre_freq2 */ - A_UINT32 centre_freq1__freq2; + union { + struct { + A_UINT32 centre_freq1 : 16; + A_UINT32 centre_freq2 : 16; + }; + A_UINT32 centre_freq1__freq2; + }; /* BIT [ 7 : 0] :- channel_phy_mode * BIT [ 23 : 8] :- static_pattern */ - A_UINT32 phy_mode__static_pattern; + union { + struct { + A_UINT32 phy_mode : 8; + A_UINT32 static_pattern : 16; + A_UINT32 reserved : 8; + }; + A_UINT32 phy_mode__static_pattern; + }; } htt_stats_pdev_bw_mgr_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_pdev_bw_mgr_stats_tlv htt_pdev_bw_mgr_stats_tlv; From d752352447af39d49563d157c7909d365522867b Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 13 Jun 2025 06:03:28 -0700 Subject: [PATCH 05/25] fw-api: CL 29472280 - update fw common interface files Change-Id: I3b466f9b5326dd43500d1712489423fb1536dd6d CRs-Fixed: 3830439 --- fw/htc_services.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fw/htc_services.h b/fw/htc_services.h index 50d57596a0b0..73eb52c32911 100644 --- a/fw/htc_services.h +++ b/fw/htc_services.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2012, 2014-2017, 2020 The Linux Foundation. All rights reserved. - * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023, 2025 Qualcomm Innovation Center, Inc. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -93,6 +93,11 @@ typedef enum { */ #define HTT_DATA3_MSG_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP,2) +/* HTT_DATA4_MSG_SVC + * H2T channel to transfer MSDU/MPDU queue info from host to target + */ +#define HTT_DATA4_MSG_SVC MAKE_SERVICE_ID(HTT_SERVICE_GROUP,3) + /* raw stream service (i.e. flash, tcmd, calibration apps) */ #define HTC_RAW_STREAMS_SVC MAKE_SERVICE_ID(HTC_TEST_GROUP,0) From ae432b7677dde23518d166504fcb274fbb6fc8ac Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 13 Jun 2025 06:05:10 -0700 Subject: [PATCH 06/25] fw-api: CL 29472287 - update fw common interface files Change-Id: I4216587effd2b89f106fd2c25bd4a830da453cb2 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 4 +++- fw/wmi_unified.h | 41 ++++++++++++++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index b985524399c2..e4e950374a5f 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1486,6 +1486,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_suspend_event_fixed_param, WMITLV_TAG_STRUC_wmi_bpf_set_apf_mode_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_peer_assoc_operating_mode_params, + WMITLV_TAG_STRUC_wmi_recv_bcn_stats, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -6401,7 +6402,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_HOST_SWFDA_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pmf_bcn_protect_stats, pmf_bcn_protect_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_extd_stats, vdev_extd_stats, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_extd_stats, pdev_extd_stats, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_telemetry_stats, pdev_telemetry_stats, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_pdev_telemetry_stats, pdev_telemetry_stats, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_recv_bcn_stats, recv_bcn_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID); /* Update PN response Event */ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 46fe2646a963..c895a500eaa8 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -4870,8 +4870,13 @@ typedef struct { * 11 -> reserved * Refer to the below WMI_RSRC_CFG_FLAGS2_OPTIMIZE_POWER_GET/SET * macros. + * Bit 25 - enable recv_bcn_stats feature + * 0 -> disable the feature + * 1 -> enable the feature + * Refer to below WMI_RSRC_CFG_FLAGS2_RECV_BCN_STATS_ENABLED_GET/SET + * macros. * - * Bits 31:25 - Reserved + * Bits 31:26 - Reserved */ A_UINT32 flags2; /** @brief host_service_flags - can be used by Host to indicate @@ -5458,6 +5463,11 @@ typedef struct { #define WMI_RSRC_CFG_FLAGS2_OPTIMIZE_POWER_SET(flags2, value) \ WMI_SET_BITS(flags2, 23, 2, value) +#define WMI_RSRC_CFG_FLAGS2_RECV_BCN_STATS_ENABLED_GET(flags2) \ + WMI_GET_BITS(flags2, 25, 1) +#define WMI_RSRC_CFG_FLAGS2_RECV_BCN_STATS_ENABLED_SET(flags2, value) \ + WMI_SET_BITS(flags2, 25, 1, value) + #define WMI_RSRC_CFG_HOST_SERVICE_FLAG_NAN_IFACE_SUPPORT_GET(host_service_flags) \ WMI_GET_BITS(host_service_flags, 0, 1) @@ -11180,6 +11190,7 @@ typedef enum { WMI_REQUEST_VDEV_EXTD_STAT = 0x10000, WMI_REQUEST_PDEV_EXTD_STAT = 0x20000, WMI_REQUEST_PDEV_TELEMETRY_STAT = 0x40000, + WMI_REQUEST_VDEV_RECV_BCN_STAT = 0x80000, } wmi_stats_id; /* @@ -11674,6 +11685,10 @@ typedef struct { * This TLV is followed by another TLV of array of bytes * num_channels * size of(struct wmi_channel_stats) */ +/* If WMI_REQUEST_VDEV_RECV_BCN_STAT is set in stats_id, then TLV + * wmi_recv_bcn_stats wmi_recv_bcn_stats[] + * follows the other TLVs + */ } wmi_radio_link_stats_event_fixed_param; /* per rate statistics */ @@ -15534,6 +15549,30 @@ typedef struct{ A_UINT32 estimated_air_time_per_ac; } wmi_pdev_telemetry_stats; + +#define WMI_MAX_BCN_HISTORY 10 /* max beacon history entry */ + +typedef struct { + /* Beacon real RSSI, non-averaged rssi, dBm units; -128 means invalid */ + A_INT32 bcn_rssi; + /* Beacon tsf, 0 means invalid */ + A_UINT32 bcn_tsf; + /* NOTE: + * Due to backwards-compatibility requirements, no new fields + * can be added to this struct. + */ +} wmi_bcn_his_info; + +typedef struct { + /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_recv_bcn_stats */ + A_UINT32 tlv_header; + /* Vdev id */ + A_UINT32 vdev_id; + /* Received History of last ten Beacon of the connected Bss */ + wmi_bcn_his_info bcn_history[WMI_MAX_BCN_HISTORY]; +} wmi_recv_bcn_stats; + + /** * VDEV statistics * @todo diff --git a/fw/wmi_version.h b/fw/wmi_version.h index b87396ef539a..20f1d77afbae 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_ 1624 +#define __WMI_REVISION_ 1625 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From e7a6cd32d97a760a998ca2f86ea20134f4aec783 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 14 Jun 2025 06:01:41 -0700 Subject: [PATCH 07/25] fw-api: CL 29495802 - update fw common interface files Change-Id: I10441e94eb35209519448701ecb78027a6fd30b9 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 c895a500eaa8..0cd7ee1c76d5 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -18481,6 +18481,7 @@ typedef enum { WMI_RATE_PREAMBLE_VHT, WMI_RATE_PREAMBLE_HE, WMI_RATE_PREAMBLE_EHT, + WMI_RATE_PREAMBLE_UHR, } WMI_RATE_PREAMBLE; /** Value to disable fixed rate setting */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 20f1d77afbae..93940d463f9e 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_ 1625 +#define __WMI_REVISION_ 1626 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 4624e4efd2ea7a309f582a66381a21bf324e7cfc Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 14 Jun 2025 06:03:27 -0700 Subject: [PATCH 08/25] fw-api: CL 29496038 - update fw common interface files Change-Id: I955cc936adf959fd95327171b4a789c5261e15a1 CRs-Fixed: 3830439 --- fw/htt_stats.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fw/htt_stats.h b/fw/htt_stats.h index d4d41789afc9..b55bbff69ea6 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -12367,6 +12367,16 @@ typedef struct { * only for UL BSR TX mode. */ A_UINT32 running_ul_scheduler_for_bsrp_cnt[HTT_NUM_AC_WMM]; + /** + * Number of instances where we populated TX mode and candidate lists + * only for DL, due to skipping UL voluntarily. + */ + A_UINT32 running_dl_scheduler_due_to_skip_ul[HTT_NUM_AC_WMM]; + /** + * Number of instances where we populated TX mode and candidate lists + * only for UL, due to skipping DL voluntarily. + */ + A_UINT32 running_ul_scheduler_due_to_skip_dl[HTT_NUM_AC_WMM]; } htt_stats_pdev_sched_algo_ofdma_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_pdev_sched_algo_ofdma_stats_tlv From e01662d785ea3eb5f41c8b06a51dbdd706a3bf24 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 15 Jun 2025 06:01:42 -0700 Subject: [PATCH 09/25] fw-api: CL 29497269 - update fw common interface files Change-Id: Ia490ff308a2f0f97e7cb0da156a5ee95c64923df CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 7 +++++-- fw/wmi_unified.h | 42 +++++++++++++++++++++++++++++++++++++----- fw/wmi_version.h | 2 +- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index e4e950374a5f..4dcd586d8501 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1487,6 +1487,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_bpf_set_apf_mode_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_peer_assoc_operating_mode_params, WMITLV_TAG_STRUC_wmi_recv_bcn_stats, + WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -3661,7 +3662,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_UPDATE_MAC_ADDR_CMDID); #define WMITLV_TABLE_WMI_VDEV_VBSS_CONFIG_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_config_cmd_fixed_param, wmi_vdev_vbss_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)\ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_pn_info, vbss_peer_pn_info, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_sn_info, vbss_peer_sn_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_sn_info, vbss_peer_sn_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info, wmi_vdev_vbss_peer_dyn_info, vbss_peer_dyn_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_VBSS_CONFIG_CMDID); /* Pdev suspend Cmd */ @@ -7829,7 +7831,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VENDOR_PEER_EVENTID); #define WMITLV_TABLE_WMI_VDEV_VBSS_CONFIG_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_config_event_fixed_param, wmi_vdev_vbss_config_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)\ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_pn_info, vbss_peer_pn_info, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_sn_info, vbss_peer_sn_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_sn_info, vbss_peer_sn_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info, wmi_vdev_vbss_peer_dyn_info, vbss_peer_dyn_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_VBSS_CONFIG_EVENTID); /* link switch event */ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 0cd7ee1c76d5..4ab9a37631a1 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -51015,8 +51015,9 @@ typedef struct { }; /* * The below TLVs follow this TLV in the WMI_VDEV_VBSS_CONFIG_CMDID msg: - * - wmi_vdev_vbss_peer_sn_info[]; * - wmi_vdev_vbss_peer_pn_info[]; + * - wmi_vdev_vbss_peer_sn_info[]; + * - wmi_vdev_vbss_peer_dyn_info; */ } wmi_vdev_vbss_config_cmd_fixed_param; @@ -51049,12 +51050,34 @@ typedef struct { ssn: 16; }; }; - /* The below TLVs follow this TLV in the WMI_VDEV_VBSS_CONFIG_EVENTID msg: - * - A_UINT32 scan_freq_list[]; - * - wmi_vdev_vbss_config_event_fixed_param[]; - */ } wmi_vdev_vbss_peer_sn_info; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info */ + union { + A_UINT32 peer_dyn_info1_word32; + struct { + /** 15:0 omi + * 31:16 eht_omi + */ + A_UINT32 + omi: 16, + eht_omi: 16; + }; + }; + union { + A_UINT32 peer_dyn_info2_word32; + struct { + /** 1:0 pm + * 31:2 reserved + */ + A_UINT32 + pm : 1, + rsvd : 31; + }; + }; +} wmi_vdev_vbss_peer_dyn_info; + typedef enum { WMI_VBSS_GET_PEER_CONTEXT = 1, WMI_VBSS_SET_PEER_CONTEXT = 2, @@ -51073,6 +51096,15 @@ typedef enum { #define WMI_VDEV_VBSS_SN_INFO_GET_SSN(tid_num_ssn) WMI_GET_BITS(tid_num_ssn, 16, 16) #define WMI_VDEV_VBSS_SN_INFO_SET_SSN(action, value) WMI_SET_BITS(tid_num_ssn, 16, 16, value) +#define WMI_VDEV_VBSS_DYN_INFO_GET_OMI(peer_dyn_info1) WMI_GET_BITS(omi, 0, 16) +#define WMI_VDEV_VBSS_DYN_INFO_SET_OMI(peer_dyn_info1, value) WMI_SET_BITS(omi, 0, 16, value) + +#define WMI_VDEV_VBSS_DYN_INFO_GET_EHT_OMI(peer_dyn_info1) WMI_GET_BITS(eht_omi, 16, 16) +#define WMI_VDEV_VBSS_DYN_INFO_SET_EHT_OMI(peer_dyn_info1, value) WMI_SET_BITS(eht_omi, 16, 16, value) + +#define WMI_VDEV_VBSS_DYN_INFO_GET_PM(peer_dyn_info2) WMI_GET_BITS(pm, 0, 1) +#define WMI_VDEV_VBSS_DYN_INFO_SET_PM(peer_dyn_info2, value) WMI_SET_BITS(pm, 0, 1, value) + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_vbss_config_event_fixed_param */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 93940d463f9e..4eec2a32e344 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_ 1626 +#define __WMI_REVISION_ 1627 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 1f9b672143f748f42162d23fd8b0ccbcf2324d7f Mon Sep 17 00:00:00 2001 From: spuligil Date: Sun, 15 Jun 2025 06:03:06 -0700 Subject: [PATCH 10/25] fw-api: CL 29498712 - update fw common interface files Change-Id: Iec789f4373995dc0af8a306e3aa4886a93eec9d9 CRs-Fixed: 3830439 --- fw/htt.h | 4 ++ fw/htt_stats.h | 141 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 141 insertions(+), 4 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index 2d9bc93ce51b..f8a35739165e 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -851,6 +851,10 @@ typedef enum { 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_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 */ + HTT_STATS_SCHED_TXQ_EARLY_COMPL_TAG = 218, /* htt_stats_sched_txq_early_compl_tlv */ HTT_STATS_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index b55bbff69ea6..9cf849e24520 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -1020,6 +1020,10 @@ typedef enum { #define HTT_PDEV_STATS_PPDU_DUR_HIST_BINS 16 #define HTT_PDEV_STATS_PPDU_DUR_HIST_EXT_BINS 6 #define HTT_PDEV_STATS_PPDU_DUR_HIST_INTERVAL_US 250 +/* Max seq ctrl can be active in txq at a given instant */ +#define HTT_PDEV_STATS_MAX_SEQ_CTRL_HIST 4 +/* For BE max active seq_ctrl that can be in HWQ */ +#define HTT_PDEV_STATS_MAX_ACTIVE_SEQ_IN_HWQ_HIST 2 typedef enum { HTT_STATS_TX_PDEV_NO_DATA_UNDERRUN = 0, @@ -1258,6 +1262,33 @@ typedef struct { /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_pdev_cmn_tlv htt_tx_pdev_stats_cmn_tlv; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + union { + A_UINT32 pdev_id__word; + struct { + A_UINT32 + pdev_id: 8, + reserved: 24; + }; + }; + A_UINT32 pending_seq_on_sched_post_hist[HTT_PDEV_STATS_MAX_SEQ_CTRL_HIST]; +} htt_stats_tx_pdev_pending_seq_cnt_on_sched_post_hist_tlv; + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_M 0x000000ff +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_S 0 + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_GET(_var) \ + (((_var) & HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_M) >> \ + HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_S) + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_PDEV_ID_S)); \ + } while (0) + + #define HTT_TX_PDEV_STATS_URRN_TLV_SZ(_num_elems) (sizeof(A_UINT32) * (_num_elems)) /* NOTE: Variable length TLV, use length spec to infer array size */ typedef struct { @@ -1491,6 +1522,7 @@ typedef htt_stats_pdev_ctrl_path_tx_stats_tlv htt_pdev_ctrl_path_tx_stats_tlv_v; * - HTT_STATS_TX_PDEV_TRIED_MPDU_CNT_HIST_TAG * - HTT_STATS_PDEV_CTRL_PATH_TX_STATS_TAG * - HTT_STATS_MU_PPDU_DIST_TAG + * - HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_ON_SCHED_POST_HIST_TAG */ /* NOTE: * This structure is for documentation, and cannot be safely used directly. @@ -1508,6 +1540,8 @@ typedef struct _htt_tx_pdev_stats { htt_stats_tx_pdev_tried_mpdu_cnt_hist_tlv tried_mpdu_cnt_hist_tlv; htt_stats_pdev_ctrl_path_tx_stats_tlv ctrl_path_tx_tlv; htt_stats_mu_ppdu_dist_tlv mu_ppdu_dist_tlv; + htt_stats_tx_pdev_pending_seq_cnt_on_sched_post_hist_tlv + pending_seq_cnt_on_sched_post_hist_tlv; } htt_tx_pdev_stats_t; #endif /* ATH_TARGET */ @@ -2932,6 +2966,58 @@ typedef struct { typedef htt_stats_tx_hwq_txop_used_cnt_hist_tlv htt_tx_hwq_txop_used_cnt_hist_tlv_v; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + union { + A_UINT32 pdev_id__word; + struct { + A_UINT32 + pdev_id: 8, + reserved: 24; + }; + }; + A_UINT32 active_seq_in_hwq_hist[HTT_PDEV_STATS_MAX_ACTIVE_SEQ_IN_HWQ_HIST]; +} htt_stats_tx_pdev_pending_seq_cnt_in_hwq_hist_tlv; + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_M 0x000000ff +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_S 0 + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_GET(_var) \ + (((_var) & HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_M) >> \ + HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_S) + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_PDEV_ID_S)); \ + } while (0) + +typedef struct { + htt_tlv_hdr_t tlv_hdr; + union { + A_UINT32 pdev_id__word; + struct { + A_UINT32 + pdev_id: 8, + reserved: 24; + }; + }; + A_UINT32 active_seq_in_txq_hist[HTT_PDEV_STATS_MAX_SEQ_CTRL_HIST]; +} htt_stats_tx_pdev_pending_seq_cnt_in_txq_hist_tlv; + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_M 0x000000ff +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_S 0 + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_GET(_var) \ + (((_var) & HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_M) >> \ + HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_S) + +#define HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_PDEV_ID_S)); \ + } while (0) + /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_TX_HWQ * TLV_TAGS: * - HTT_STATS_STRING_TAG @@ -2942,6 +3028,8 @@ typedef htt_stats_tx_hwq_txop_used_cnt_hist_tlv * - HTT_STATS_TX_HWQ_FES_STATUS_TAG * - HTT_STATS_TX_HWQ_TRIED_MPDU_CNT_HIST_TAG * - HTT_STATS_TX_HWQ_TXOP_USED_CNT_HIST_TAG + * - HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_HWQ_HIST_TAG + * - HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_TAG */ /* NOTE: * This structure is for documentation, and cannot be safely used directly. @@ -2962,6 +3050,10 @@ typedef struct _htt_tx_hwq_stats { htt_stats_tx_hwq_fes_status_tlv fes_stats_tlv; htt_stats_tx_hwq_tried_mpdu_cnt_hist_tlv tried_mpdu_tlv; htt_stats_tx_hwq_txop_used_cnt_hist_tlv txop_used_tlv; + htt_stats_tx_pdev_pending_seq_cnt_in_hwq_hist_tlv + active_pending_seq_cnt_in_hwq_hist_tlv; + htt_stats_tx_pdev_pending_seq_cnt_in_txq_hist_tlv + active_pending_seq_cnt_in_txq_hist_tlv; } htt_tx_hwq_stats_t; #endif /* ATH_TARGET */ @@ -4514,6 +4606,44 @@ typedef struct { typedef htt_stats_sched_txq_supercycle_trigger_tlv htt_sched_txq_supercycle_triggers_tlv_v; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + union { + A_UINT32 pdev_id__word; + struct { + A_UINT32 + pdev_id: 8, + reserved: 24; + }; + }; + A_UINT32 ist_txop_end_indicated_cnt; + A_UINT32 ist_txop_end_notify_at_cmd_status_end; + A_UINT32 ist_txop_end_notify_at_isr_end; + A_UINT32 sched_cmd_post_skip_on_seq_unavail; + A_UINT32 ist_txop_end_skip_on_seq_unavail; + A_UINT32 ist_txop_end_skip_on_mpdu_ownership; + A_UINT32 skip_early_schedule_due_to_per; + A_UINT32 sched_cmd_posted_at_hw_txop_end; + A_UINT32 sched_cmd_missed_at_hw_txop_end; + A_UINT32 sched_cmd_posted_at_sched_cmd_compl; + A_UINT32 sched_cmd_missed_at_sched_cmd_compl; + A_UINT32 num_QoS_sched_runs; +} htt_stats_sched_txq_early_compl_tlv; + +#define HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_M 0x000000ff +#define HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_S 0 + +#define HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_GET(_var) \ + (((_var) & HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_M) >> \ + HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_S) + +#define HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_STATS_SCHED_TXQ_EARLY_COMPL_PDEV_ID_S)); \ + } while (0) + + #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_M 0x000000ff #define HTT_TX_PDEV_STATS_SCHED_PER_TXQ_MAC_ID_S 0 @@ -4653,6 +4783,7 @@ typedef struct { * - HTT_STATS_SCHED_TXQ_SCHED_ORDER_SU_TAG * - HTT_STATS_SCHED_TXQ_SCHED_INELIGIBILITY_TAG * - HTT_STATS_SCHED_TXQ_SUPERCYCLE_TRIGGER_TAG + * - HTT_STATS_SCHED_TXQ_EARLY_COMPL_TAG */ /* NOTE: * This structure is for documentation, and cannot be safely used directly. @@ -4662,12 +4793,14 @@ typedef struct { typedef struct { htt_stats_tx_sched_cmn_tlv cmn_tlv; struct { - htt_stats_tx_pdev_scheduler_txq_stats_tlv txq_tlv; - htt_stats_sched_txq_cmd_posted_tlv cmd_posted_tlv; - htt_stats_sched_txq_cmd_reaped_tlv cmd_reaped_tlv; + htt_stats_tx_pdev_scheduler_txq_stats_tlv txq_tlv; + htt_stats_sched_txq_cmd_posted_tlv cmd_posted_tlv; + htt_stats_sched_txq_cmd_reaped_tlv cmd_reaped_tlv; htt_stats_sched_txq_sched_order_su_tlv sched_order_su_tlv; htt_stats_sched_txq_sched_ineligibility_tlv sched_ineligibility_tlv; - htt_stats_sched_txq_supercycle_trigger_tlv htt_sched_txq_sched_ineligibility_tlv_esched_supercycle_trigger_tlv; + htt_stats_sched_txq_supercycle_trigger_tlv + htt_sched_txq_sched_ineligibility_tlv_esched_supercycle_trigger_tlv; + htt_stats_sched_txq_early_compl_tlv early_compl_tlv; } txq[1]; } htt_stats_tx_sched_t; #endif From 334c788a2c07903dd3953ff9d96801ca6821e64f Mon Sep 17 00:00:00 2001 From: spuligil Date: Mon, 16 Jun 2025 06:01:50 -0700 Subject: [PATCH 11/25] fw-api: CL 29499792 - update fw common interface files Change-Id: I3efe2e954c3945c86bb6c4d8020bf97fbd66d5cb CRs-Fixed: 3830439 --- fw/wmi_unified.h | 7 ++++++- fw/wmi_version.h | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 4ab9a37631a1..5f771c109acb 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -40813,7 +40813,10 @@ typedef struct { #define WLM_FLAGS_ROAM_SUPPRESS 1 #define WLM_FLAGS_ALLOW_FINAL_BMISS_ROAM 2 -/* bit 8: reserved for roaming */ +/* bit 8: Final bmiss roam will be triggered when all active links + * are final bmiss reported. + */ +#define WLM_FLAGS_ROAM_WHEN_ALL_LINKS_FBMISS 1 /* bit 9-11 of flags is used for powersave operation */ /* bit 9: WLM_FLAGS_PS_DISABLE_BMPS, disable BMPS if bit is set */ @@ -40857,6 +40860,8 @@ typedef struct { #define WLM_FLAGS_TSF_LATENCY_COMPENSATE_ENABLED_SET(flag) WMI_SET_BITS(flag, 4, 1, val) #define WLM_FLAGS_ROAM_GET_POLICY(flag) WMI_GET_BITS(flag, 6, 2) #define WLM_FLAGS_ROAM_SET_POLICY(flag, val) WMI_SET_BITS(flag, 6, 2, val) +#define WLM_FLAGS_ROAM_GET_WHEN_ALL_LINKS_FBMISS(flag) WMI_GET_BITS(flag, 8, 1) +#define WLM_FLAGS_ROAM_SET_WHEN_ALL_LINKS_FBMISS(flag, val) WMI_SET_BITS(flag, 8, 1, val) #define WLM_FLAGS_PS_IS_BMPS_DISABLED(flag) WMI_GET_BITS(flag, 9, 1) #define WLM_FLAGS_PS_IS_CSS_CLPS_DISABLED(flag) WMI_GET_BITS(flag, 10, 1) #define WLM_FLAGS_PS_SET_CSS_CLPS_DISABLE(flag, val) WMI_SET_BITS(flag, 10, 1, val) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 4eec2a32e344..b28cb730d141 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_ 1627 +#define __WMI_REVISION_ 1628 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 5718b526ca958c746de805499348a773f3f86265 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 19 Jun 2025 06:01:52 -0700 Subject: [PATCH 12/25] fw-api: CL 29527156 - update fw common interface files Change-Id: Idfd18a33597d86627a492ea19341eb6a99448a8a CRs-Fixed: 3830439 --- fw/wlan_module_ids.h | 1 + fw/wmi_services.h | 8 ++++ fw/wmi_tlv_defs.h | 42 ++++++++++++++++ fw/wmi_unified.h | 111 ++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 161 insertions(+), 1 deletion(-) diff --git a/fw/wlan_module_ids.h b/fw/wlan_module_ids.h index a00b3e5c1924..6ccf2d652f95 100644 --- a/fw/wlan_module_ids.h +++ b/fw/wlan_module_ids.h @@ -197,6 +197,7 @@ typedef enum { WLAN_MODULE_VBSS, /* 0x99 */ WLAN_MODULE_OPT_DATA, /* 0x9a */ WLAN_MODULE_ASD, /* 0x9b */ + WLAN_MODULE_ENERGY_MGMT, /* 0x9c */ WLAN_MODULE_ID_MAX, WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX, diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 913281692c32..a859cabac6df 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -709,6 +709,14 @@ typedef enum { WMI_SERVICE_PCC_MODE = 450, /* Indicates FW support for PCC (P2P Connection Compatibility) Mode */ WMI_SERVICE_TDLS_NSS_CONFIRM_SUPPORT = 451, /* FW supports confirmation to host requested TDLS NSS operation */ + WMI_SERVICE_EM_PCIE_CONFIG_CBW_SUPPORT = 452, /* Indicates support for channel bandwidth based PCIe config adjustment */ + WMI_SERVICE_EM_PCIE_CONFIG_LPM_SUPPORT = 453, /* Indicates support for PCIe low power mode L0S/L1 */ + WMI_SERVICE_EM_DCVS_SUPPORT = 454, /* Indicates support for Dynamic clock and voltage scaling */ + WMI_SERVICE_EM_EDPS_SUPPORT = 455, /* Indicates support for Dynamic AP power save */ + WMI_SERVICE_EM_PUO_SUPPORT = 456, /* Indicates support for TWT based periodic unavailability operation. */ + WMI_SERVICE_EM_ECO_MODE_SUPPORT = 457, /* Indicates support for ECO mode config (LP BBF+ADC+SYNCT) */ + + WMI_MAX_EXT2_SERVICE } WMI_SERVICE; diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 4dcd586d8501..f28e569b80c6 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1488,6 +1488,12 @@ typedef enum { WMITLV_TAG_STRUC_wmi_peer_assoc_operating_mode_params, WMITLV_TAG_STRUC_wmi_recv_bcn_stats, WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info, + WMITLV_TAG_STRUC_wmi_energy_mgmt_pcie_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_energy_mgmt_pcie_lpm_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_energy_mgmt_dcvs_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_energy_mgmt_edps_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_energy_mgmt_puo_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_energy_mgmt_eco_mode_config_cmd_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2053,6 +2059,12 @@ typedef enum { OP(WMI_MLO_LINK_TTLM_COMPLETE_CMDID) \ OP(WMI_BPF_SET_SUPPORTED_OFFLOAD_BITMAP_CMDID) \ OP(WMI_BPF_SET_APF_MODE_CMDID) \ + OP(WMI_ENERGY_MGMT_PCIE_CONFIG_CMDID) \ + OP(WMI_ENERGY_MGMT_PCIE_LPM_CMDID) \ + OP(WMI_ENERGY_MGMT_DCVS_CONFIG_CMDID) \ + OP(WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID) \ + OP(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID) \ + OP(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -5783,6 +5795,36 @@ WMITLV_CREATE_PARAM_STRUC(WMI_BPF_SET_SUPPORTED_OFFLOAD_BITMAP_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_bpf_set_apf_mode_cmd_fixed_param, wmi_bpf_set_apf_mode_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_BPF_SET_APF_MODE_CMDID); +/* WMI cmd used to control PCIe config */ +#define WMITLV_TABLE_WMI_ENERGY_MGMT_PCIE_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_pcie_config_cmd_fixed_param, wmi_energy_mgmt_pcie_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_PCIE_CONFIG_CMDID); + +/* WMI cmd used for PCIe LPM config */ +#define WMITLV_TABLE_WMI_ENERGY_MGMT_PCIE_LPM_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_pcie_lpm_cmd_fixed_param, wmi_energy_mgmt_pcie_lpm_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_PCIE_LPM_CMDID); + +/* WMI cmd used to control DCVS config */ +#define WMITLV_TABLE_WMI_ENERGY_MGMT_DCVS_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_dcvs_config_cmd_fixed_param, wmi_energy_mgmt_dcvs_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_DCVS_CONFIG_CMDID); + +/* WMI cmd used to control Dynamic AP Power Save config */ +#define WMITLV_TABLE_WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_edps_config_cmd_fixed_param, wmi_energy_mgmt_edps_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID); + +/* WMI cmd used to control Scheduled AP Power Save config */ +#define WMITLV_TABLE_WMI_ENERGY_MGMT_PUO_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_puo_config_cmd_fixed_param, wmi_energy_mgmt_puo_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID); + +/* WMI cmd used to control Un-scheduled AP Power Save config */ +#define WMITLV_TABLE_WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_eco_mode_config_cmd_fixed_param, wmi_energy_mgmt_eco_mode_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID); + /************************** TLV definitions of WMI events *******************************/ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 5f771c109acb..e18ddc622ffa 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -369,7 +369,8 @@ typedef enum { WMI_GRP_QUIET_OFL, /* 0x4a Quiet offloads */ WMI_GRP_ODD, /* 0x4b ODD */ WMI_GRP_TDMA, /* 0x4c TDMA */ - WMI_GRP_MANUAL_UL_TRIG /* 0x4d Manual UL OFDMA Trigger */ + WMI_GRP_MANUAL_UL_TRIG, /* 0x4d Manual UL OFDMA Trigger */ + WMI_GRP_ENERGY_MGMT, /* 0x4e energy management */ } WMI_GRP_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -1728,6 +1729,21 @@ typedef enum { /** WMI Command to set Manual MU UL OFDMA trigger parameters */ WMI_VDEV_SET_ULOFDMA_MANUAL_MU_TRIG_CMDID, + + + /** WMI commands specific to Energy Management **/ + /** WMI cmd used to control PCIe config */ + WMI_ENERGY_MGMT_PCIE_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_ENERGY_MGMT), + /** WMI cmd used to control PCIe LPM */ + WMI_ENERGY_MGMT_PCIE_LPM_CMDID, + /** WMI cmd used to control Clock and Voltage config */ + WMI_ENERGY_MGMT_DCVS_CONFIG_CMDID, + /** WMI cmd used to control AP Dynamic Power Save feature */ + WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID, + /** WMI cmd used to control periodic unavailability operation */ + WMI_ENERGY_MGMT_PUO_CONFIG_CMDID, + /** WMI cmd used to control ECO mode config */ + WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID, } WMI_CMD_ID; typedef enum { @@ -39317,6 +39333,12 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_MLO_LINK_TTLM_COMPLETE_CMDID); WMI_RETURN_STRING(WMI_BPF_SET_SUPPORTED_OFFLOAD_BITMAP_CMDID); WMI_RETURN_STRING(WMI_BPF_SET_APF_MODE_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_PCIE_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_PCIE_LPM_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_DCVS_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_DPS_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -51124,6 +51146,93 @@ typedef struct { } wmi_vdev_vbss_config_event_fixed_param; +typedef enum { + /* Channel bandwidth based semi static PCIe config */ + WMI_PCIE_CONFIG_TYPE_CHANNEL_BANDWIDTH, + /* Force a specific PCIe config */ + WMI_PCIE_CONFIG_TYPE_FORCED_STATIC, +} wmi_pcie_config_type_e; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_energy_mgmt_pcie_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /** enable or disable PCIe config */ + A_UINT32 enable; + /* PCIe config type (holds a wmi_pcie_config_type_e value) */ + A_UINT32 config_type; + /** pcie_gen: pcie generation to be used + * pcie_lane:pcie lane config (lane number) to be used + */ + A_UINT32 pcie_gen; + A_UINT32 pcie_lane; +} wmi_energy_mgmt_pcie_config_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_energy_mgmt_pcie_lpm_cmd_fixed_param */ + A_UINT32 tlv_header; + /** enable or disable PCIe LPM */ + A_UINT32 enable; +} wmi_energy_mgmt_pcie_lpm_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_energy_mgmt_dcvs_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /** enable or disable DCVS config */ + A_UINT32 enable; +} wmi_energy_mgmt_dcvs_config_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_energy_mgmt_dps_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /** enable or disable DPS config */ + A_UINT32 enable; + /** PDEV identifier */ + A_UINT32 pdev_id; + /** Channel to be used in DPS Low cap mode, freq must match the primary home chan freq */ + wmi_channel low_cap_channel; + /** Tx chainmask to be used in DPS Low cap mode */ + A_UINT32 low_cap_tx_chainmask; + /** Rx chainmask to be used in DPS Low cap mode */ + A_UINT32 low_cap_rx_chainmask; + /** Mbps throughput after which DPS will be exited and notified to Host */ + A_UINT32 exit_thpt_thrsld_mbps; + /** number of wakeups per second after which DPS will be exited and notified to Host */ + A_UINT32 exit_wakeup_thrsld_per_second; +} wmi_energy_mgmt_edps_config_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_energy_mgmt_puo_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /** enable or disable DPS config */ + A_UINT32 enable; + /** PDEV identifier */ + A_UINT32 pdev_id; + /** Channel to be used in PUO Low cap mode, freq must match the primary home chan freq */ + wmi_channel low_cap_channel; + /** Tx chainmask to be used in Low cap mode */ + A_UINT32 low_cap_tx_chainmask; + /** Rx chainmask to be used in Low cap mode */ + A_UINT32 low_cap_rx_chainmask; + /** minimum duration required between SP end and SP start to trigger entering to doze state */ + A_UINT32 min_doze_thrsld_in_us; +} wmi_energy_mgmt_puo_config_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_energy_mgmt_eco_mode_config_cmd_fixed_param */ + A_UINT32 tlv_header; + /** enable or disable DPS config */ + A_UINT32 enable; + /** PDEV identifier */ + A_UINT32 pdev_id; +} wmi_energy_mgmt_eco_mode_config_cmd_fixed_param; + + /* ADD NEW DEFS HERE */ From 8b6a83bea8ec27636613a02bfb611d6f50f01cb6 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 21 Jun 2025 06:01:39 -0700 Subject: [PATCH 13/25] fw-api: CL 29563125 - update fw common interface files Change-Id: I85202ae615861e607890cbd66429eb73dbe3dd8c CRs-Fixed: 3830439 --- fw/htt.h | 11 +++- fw/htt_stats.h | 134 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 128 insertions(+), 17 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index f8a35739165e..50b67b47fb3c 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -771,7 +771,10 @@ typedef enum { HTT_STATS_AST_ENTRY_TAG = 132, /* htt_ast_entry_tlv */ HTT_STATS_TX_PDEV_BE_DL_MU_OFDMA_STATS_TAG = 133, /* htt_tx_pdev_dl_be_mu_ofdma_sch_stats_tlv, TOPIC=advanced */ HTT_STATS_TX_PDEV_BE_UL_MU_OFDMA_STATS_TAG = 134, /* htt_tx_pdev_ul_be_mu_ofdma_sch_stats_tlv, TOPIC=advanced */ - HTT_STATS_TX_PDEV_RATE_STATS_BE_OFDMA_TAG = 135, /* htt_tx_pdev_rate_stats_be_ofdma_tlv */ + HTT_STATS_TX_PDEV_RATE_BE_BN_OFDMA_TAG = 135, /* htt_stats_tx_pdev_rate_be_bn_ofdma_tlv */ + /* retain deprecated name as an alias */ + HTT_STATS_TX_PDEV_RATE_STATS_BE_OFDMA_TAG = + HTT_STATS_TX_PDEV_RATE_BE_BN_OFDMA_TAG, HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_BE_STATS_TAG = 136, /* htt_rx_pdev_ul_mumimo_trig_be_stats_tlv, TOPIC=advanced */ HTT_STATS_TX_SELFGEN_BE_ERR_STATS_TAG = 137, /* htt_tx_selfgen_be_err_stats_tlv, TOPIC=advanced */ HTT_STATS_TX_SELFGEN_BE_STATS_TAG = 138, /* htt_tx_selfgen_be_stats_tlv, TOPIC=advanced */ @@ -779,7 +782,10 @@ typedef enum { HTT_STATS_TX_PDEV_BE_UL_MU_MIMO_STATS_TAG = 140, /* htt_tx_pdev_be_ul_mu_mimo_sch_stats_tlv */ HTT_STATS_RX_PDEV_BE_UL_MIMO_USER_STATS_TAG = 141, /* htt_rx_pdev_be_ul_mimo_user_stats_tlv */ HTT_STATS_RX_RING_STATS_TAG = 142, /* htt_rx_fw_ring_stats_tlv_v */ - HTT_STATS_RX_PDEV_BE_UL_TRIG_STATS_TAG = 143, /* htt_rx_pdev_be_ul_trigger_stats_tlv, TOPIC=advanced */ + HTT_STATS_RX_PDEV_BE_BN_UL_TRIG_TAG = 143, /* htt_stats_rx_pdev_be_bn_ul_trig_tlv, TOPIC=advanced */ + /* retain deprecated name as an alias */ + HTT_STATS_RX_PDEV_BE_UL_TRIG_STATS_TAG = + HTT_STATS_RX_PDEV_BE_BN_UL_TRIG_TAG, HTT_STATS_TX_PDEV_SAWF_RATE_STATS_TAG = 144, /* htt_tx_pdev_rate_stats_sawf_tlv, TOPIC=advanced */ HTT_STATS_STRM_GEN_MPDUS_TAG = 145, /* htt_stats_strm_gen_mpdus_tlv_t */ HTT_STATS_STRM_GEN_MPDUS_DETAILS_TAG = 146, /* htt_stats_strm_gen_mpdus_details_tlv_t */ @@ -855,6 +861,7 @@ typedef enum { 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 */ HTT_STATS_SCHED_TXQ_EARLY_COMPL_TAG = 218, /* htt_stats_sched_txq_early_compl_tlv */ + HTT_STATS_RX_PDEV_BN_UL_OFDMA_USER_TAG = 219, /* htt_stats_rx_pdev_bn_ul_ofdma_user_tlv */ HTT_STATS_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 9cf849e24520..26f867cfe9ad 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -680,16 +680,18 @@ enum htt_dbg_ext_stats_type { HTT_DBG_ODD_PDEV_BE_TX_MU_OFDMA_STATS = HTT_DBG_EXT_STATS_ODD_PDEV_BE_TX_MU_OFDMA, - /** HTT_DBG_EXT_STATS_ODD_UL_BE_OFDMA + /** HTT_DBG_EXT_STATS_ODD_UL_BE_BN_OFDMA * PARAMS: * - No Params * RESP MSG: * - htt_rx_pdev_be_ul_ofdma_user_stats_tlv */ - HTT_DBG_EXT_STATS_ODD_UL_BE_OFDMA = 60, - /* retain the deprecated name as an alias */ + HTT_DBG_EXT_STATS_ODD_UL_BE_BN_OFDMA = 60, + /* retain deprecated names as aliases */ + HTT_DBG_EXT_STATS_ODD_UL_BE_OFDMA = + HTT_DBG_EXT_STATS_ODD_UL_BE_BN_OFDMA, HTT_DBG_ODD_UL_BE_OFDMA_STATS = - HTT_DBG_EXT_STATS_ODD_UL_BE_OFDMA, + HTT_DBG_EXT_STATS_ODD_UL_BE_BN_OFDMA, /** HTT_DBG_EXT_STATS_ODD_BE_TXBF_OFDMA */ @@ -931,11 +933,14 @@ typedef enum { HTT_TX_RATE_STATS_DEFAULT, /* - * Upload 11be OFDMA TX stats + * Upload 11be and 11bn OFDMA TX stats * * TLV: htt_tx_pdev_rate_stats_be_ofdma_tlv */ - HTT_TX_RATE_STATS_UPLOAD_11BE_OFDMA, + HTT_TX_RATE_STATS_UPLOAD_11BE_11BN_OFDMA, + /* retain prior name as an alias */ + HTT_TX_RATE_STATS_UPLOAD_11BE_OFDMA = + HTT_TX_RATE_STATS_UPLOAD_11BE_11BN_OFDMA, } htt_tx_rate_stats_upload_t; /* htt_rx_ul_trigger_stats_upload_t @@ -950,11 +955,14 @@ typedef enum { HTT_RX_UL_TRIGGER_STATS_UPLOAD_11AX_OFDMA, /* - * Upload 11be UL OFDMA RX Trigger stats + * Upload 11be and 11bn UL OFDMA RX Trigger stats * * TLV: htt_rx_pdev_be_ul_trigger_stats_tlv */ - HTT_RX_UL_TRIGGER_STATS_UPLOAD_11BE_OFDMA, + HTT_RX_UL_TRIGGER_STATS_UPLOAD_11BE_11BN_OFDMA, + /* retain prior name as an alias */ + HTT_RX_UL_TRIGGER_STATS_UPLOAD_11BE_OFDMA = + HTT_RX_UL_TRIGGER_STATS_UPLOAD_11BE_11BN_OFDMA, } htt_rx_ul_trigger_stats_upload_t; /* @@ -6031,9 +6039,13 @@ typedef enum { /* 11be related updates */ #define HTT_TX_PDEV_STATS_NUM_BE_MCS_COUNTERS 16 /* 0...13,-2,-1 */ #define HTT_TX_PDEV_STATS_NUM_BE_BW_COUNTERS 5 /* 20,40,80,160,320 MHz */ +/* 11bn MCS counters: all BE MCS indices and 4 UHR iMCS */ +#define HTT_TX_PDEV_STATS_NUM_BN_MCS_COUNTERS 20 +#define HTT_TX_PDEV_STATS_NUM_BN_BW_COUNTERS 5 /* 20,40,80,160,320 MHz */ #define HTT_TX_PDEV_STATS_NUM_HE_SIG_B_MCS_COUNTERS 6 #define HTT_TX_PDEV_STATS_NUM_EHT_SIG_MCS_COUNTERS 4 +#define HTT_TX_PDEV_STATS_NUM_UHR_SIG_MCS_COUNTERS 4 typedef enum { HTT_TX_PDEV_STATS_AX_RU_SIZE_26, @@ -6066,6 +6078,9 @@ typedef enum { HTT_TX_PDEV_STATS_NUM_BE_RU_SIZE_COUNTERS, } HTT_TX_PDEV_STATS_BE_RU_SIZE; +#define HTT_TX_PDEV_STATS_NUM_BN_RU_SIZE_COUNTERS \ + HTT_TX_PDEV_STATS_NUM_BE_RU_SIZE_COUNTERS + typedef struct { htt_tlv_hdr_t tlv_hdr; @@ -6318,10 +6333,32 @@ typedef struct { A_UINT32 be_ofdma_tx_ru_size[HTT_TX_PDEV_STATS_NUM_BE_RU_SIZE_COUNTERS]; /** 11BE EHT DL MU OFDMA EHT-SIG MCS stats */ A_UINT32 be_ofdma_eht_sig_mcs[HTT_TX_PDEV_STATS_NUM_EHT_SIG_MCS_COUNTERS]; + /** 11BE UHT DL MU OFDMA BA RU size stats */ A_UINT32 be_ofdma_ba_ru_size[HTT_TX_PDEV_STATS_NUM_BE_RU_SIZE_COUNTERS]; -} htt_stats_tx_pdev_rate_stats_be_ofdma_tlv; -/* preserve old name alias for new name consistent with the tag name */ -typedef htt_stats_tx_pdev_rate_stats_be_ofdma_tlv + + /** 11BN UHR DL MU OFDMA LDPC count */ + A_UINT32 bn_ofdma_tx_ldpc; + /** 11BE UHR DL MU OFDMA TX MCS stats */ + A_UINT32 bn_ofdma_tx_mcs[HTT_TX_PDEV_STATS_NUM_BN_MCS_COUNTERS]; + /** + * 11BN UHR DL MU OFDMA TX NSS stats (Indicates NSS for individual users) + */ + A_UINT32 bn_ofdma_tx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS]; + /** 11BN UHR DL MU OFDMA TX BW stats */ + A_UINT32 bn_ofdma_tx_bw[HTT_TX_PDEV_STATS_NUM_BN_BW_COUNTERS]; + /** 11BN UHR DL MU OFDMA TX guard interval stats */ + A_UINT32 bn_ofdma_tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_BN_MCS_COUNTERS]; + /** 11BN UHR DL MU OFDMA TX RU Size stats */ + A_UINT32 bn_ofdma_tx_ru_size[HTT_TX_PDEV_STATS_NUM_BN_RU_SIZE_COUNTERS]; + /** 11BN UHR DL MU OFDMA UHR-SIG MCS stats */ + A_UINT32 bn_ofdma_uhr_sig_mcs[HTT_TX_PDEV_STATS_NUM_UHR_SIG_MCS_COUNTERS]; + /** 11BN UHR DL MU OFDMA BA RU size stats */ + A_UINT32 bn_ofdma_ba_ru_size[HTT_TX_PDEV_STATS_NUM_BN_RU_SIZE_COUNTERS]; +} htt_stats_tx_pdev_rate_be_bn_ofdma_tlv; +/* preserve old names as aliases */ +typedef htt_stats_tx_pdev_rate_be_bn_ofdma_tlv + htt_stats_tx_pdev_rate_stats_be_ofdma_tlv; +typedef htt_stats_tx_pdev_rate_be_bn_ofdma_tlv htt_tx_pdev_rate_stats_be_ofdma_tlv; typedef struct { @@ -6392,6 +6429,9 @@ typedef struct { #define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16 #define HTT_RX_PDEV_STATS_NUM_BE_MCS_COUNTERS 16 /* 0-13, -2, -1 */ #define HTT_RX_PDEV_STATS_NUM_BE_BW_COUNTERS 5 /* 20,40,80,160,320 MHz */ +/* 802.11BN MCS: all 16 EHT MCS indices and 4 UHR iMCS */ +#define HTT_RX_PDEV_STATS_NUM_BN_MCS_COUNTERS 20 +#define HTT_RX_PDEV_STATS_NUM_BN_BW_COUNTERS 5 /* 20,40,80,160,320 MHz */ /* HTT_RX_PDEV_STATS_NUM_RU_SIZE_COUNTERS: * RU size index 0: HTT_UL_OFDMA_V0_RU_SIZE_RU_26 @@ -6433,6 +6473,9 @@ typedef enum { HTT_RX_PDEV_STATS_NUM_BE_RU_SIZE_COUNTERS, } HTT_RX_PDEV_STATS_BE_RU_SIZE; +#define HTT_RX_PDEV_STATS_NUM_BN_RU_SIZE_COUNTERS \ + HTT_RX_PDEV_STATS_NUM_BE_RU_SIZE_COUNTERS + #define HTT_RX_PDEV_RATE_STATS_MAC_ID_M 0x000000ff #define HTT_RX_PDEV_RATE_STATS_MAC_ID_S 0 @@ -6879,14 +6922,59 @@ typedef struct { A_UINT32 ul_mlo_proc_qdepth_params_count; A_UINT32 ul_mlo_proc_accepted_qdepth_params_count; A_UINT32 ul_mlo_proc_discarded_qdepth_params_count; -} htt_stats_rx_pdev_be_ul_trig_stats_tlv; -/* preserve old name alias for new name consistent with the tag name */ -typedef htt_stats_rx_pdev_be_ul_trig_stats_tlv + + A_UINT32 rx_11bn_ul_ofdma; + + A_UINT32 bn_ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_BN_MCS_COUNTERS]; + A_UINT32 bn_ul_ofdma_rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_BN_MCS_COUNTERS]; + A_UINT32 bn_ul_ofdma_rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]; + A_UINT32 bn_ul_ofdma_rx_bw[HTT_RX_PDEV_STATS_NUM_BN_BW_COUNTERS]; + A_UINT32 bn_ul_ofdma_rx_stbc; + A_UINT32 bn_ul_ofdma_rx_ldpc; + + /* + * These are arrays to hold the number of PPDUs that we received per RU. + * E.g. PPDUs (data or non data) received in RU26 will be incremented in + * array offset 0 and similarly RU52 will be incremented in array offset 1 + */ + /** PPDU level */ + A_UINT32 bn_rx_ulofdma_data_ru_size_ppdu[HTT_RX_PDEV_STATS_NUM_BN_RU_SIZE_COUNTERS]; + /** PPDU level */ + A_UINT32 bn_rx_ulofdma_non_data_ru_size_ppdu[HTT_RX_PDEV_STATS_NUM_BN_RU_SIZE_COUNTERS]; + + /** + * STA AID array for identifying which STA the + * Target-RSSI / FD-RSSI / pwr headroom stats are for + */ + A_UINT32 bn_uplink_sta_aid[HTT_RX_UL_MAX_UPLINK_RSSI_TRACK]; + /** + * Trig Target RSSI for STA AID in same index - UNIT(dBm) + */ + A_INT32 bn_uplink_sta_target_rssi[HTT_RX_UL_MAX_UPLINK_RSSI_TRACK]; + /** + * Trig FD RSSI from STA AID in same index - UNIT(dBm) + */ + A_INT32 bn_uplink_sta_fd_rssi[HTT_RX_UL_MAX_UPLINK_RSSI_TRACK]; + /** + * Trig power headroom for STA AID in same idx - UNIT(dB) + */ + A_UINT32 bn_uplink_sta_power_headroom[HTT_RX_UL_MAX_UPLINK_RSSI_TRACK]; + + /* + * Number of UHR UL OFDMA per-user responses containing only a QoS null in + * response to basic trigger. Typically a data response is expected. + */ + A_UINT32 bn_ul_ofdma_basic_trigger_rx_qos_null_only; +} htt_stats_rx_pdev_be_bn_ul_trig_tlv; +/* preserve old names as aliases */ +typedef htt_stats_rx_pdev_be_bn_ul_trig_tlv + htt_stats_rx_pdev_be_ul_trig_stats_tlv; +typedef htt_stats_rx_pdev_be_bn_ul_trig_tlv htt_rx_pdev_be_ul_trigger_stats_tlv; /* STATS_TYPE : HTT_DBG_EXT_STATS_PDEV_UL_TRIG_STATS * TLV_TAGS: - * - HTT_STATS_RX_PDEV_BE_UL_TRIG_STATS_TAG + * - HTT_STATS_RX_PDEV_BE_BN_UL_TRIG_TAG * NOTE: * This structure is for documentation, and cannot be safely used directly. * Instead, use the constituent TLV structures to fill/parse. @@ -6935,6 +7023,22 @@ typedef struct { typedef htt_stats_rx_pdev_be_ul_ofdma_user_stats_tlv htt_rx_pdev_be_ul_ofdma_user_stats_tlv; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + + A_UINT32 user_index; + /** PPDU level */ + A_UINT32 bn_rx_ulofdma_non_data_ppdu; + /** PPDU level */ + A_UINT32 bn_rx_ulofdma_data_ppdu; + /** MPDU level */ + A_UINT32 bn_rx_ulofdma_mpdu_ok; + /** MPDU level */ + A_UINT32 bn_rx_ulofdma_mpdu_fail; + A_UINT32 bn_rx_ulofdma_non_data_nusers; + A_UINT32 bn_rx_ulofdma_data_nusers; +} htt_stats_rx_pdev_bn_ul_ofdma_user_tlv; + typedef struct { htt_tlv_hdr_t tlv_hdr; From f7a287f654dff8947ce53bf19e244d2c8800a8d6 Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 21 Jun 2025 06:03:21 -0700 Subject: [PATCH 14/25] fw-api: CL 29563157 - update fw common interface files Change-Id: I89a1bc371886805ced42afa307253f542449b0fe CRs-Fixed: 3830439 --- fw/wmi_services.h | 2 ++ fw/wmi_unified.h | 11 ++++++----- fw/wmi_version.h | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index a859cabac6df..55202bf9730f 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -716,6 +716,8 @@ typedef enum { WMI_SERVICE_EM_PUO_SUPPORT = 456, /* Indicates support for TWT based periodic unavailability operation. */ WMI_SERVICE_EM_ECO_MODE_SUPPORT = 457, /* Indicates support for ECO mode config (LP BBF+ADC+SYNCT) */ + WMI_SERVICE_11BN = 458, /* Indicates FW supports 802.11bn */ + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index e18ddc622ffa..8331feb3c89f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -11701,10 +11701,6 @@ typedef struct { * This TLV is followed by another TLV of array of bytes * num_channels * size of(struct wmi_channel_stats) */ -/* If WMI_REQUEST_VDEV_RECV_BCN_STAT is set in stats_id, then TLV - * wmi_recv_bcn_stats wmi_recv_bcn_stats[] - * follows the other TLVs - */ } wmi_radio_link_stats_event_fixed_param; /* per rate statistics */ @@ -12201,6 +12197,10 @@ typedef struct { * wmi_pdev_telemetry_stats wmi_pdev_telemetry_stats[] * follows the other TLVs */ +/* If WMI_REQUEST_VDEV_RECV_BCN_STAT is set in stats_id, then TLV + * wmi_recv_bcn_stats wmi_recv_bcn_stats[] + * follows the other TLVs + */ } wmi_stats_event_fixed_param; /* WLAN channel CCA stats bitmap */ @@ -37634,8 +37634,9 @@ typedef struct { supports_11ac:1, supports_11ax:1, supports_11be:1, + supports_11bn:1, - unused: 21, + unused: 20, max_mubfee: 4; /* max MU beamformees supported per MAC */ }; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index b28cb730d141..f0c4ba10047c 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_ 1628 +#define __WMI_REVISION_ 1629 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From a6824ab6ea289f010303c1dc00aaeb4ce66c04bf Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 24 Jun 2025 06:01:36 -0700 Subject: [PATCH 15/25] fw-api: CL 29574189 - update fw common interface files Change-Id: I4fd0b336a81a1587925eadf4b057d25bc6b70f6e 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 8331feb3c89f..ecc032960b7d 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10095,6 +10095,9 @@ typedef enum { /* To enable/disable DFS radar detection for scan radio */ WMI_PDEV_PARAM_ENABLE_SCAN_RADIO_DFS, + + /* configure CCE rules based on ethertype match */ + WMI_PDEV_PARAM_CONFIG_CUSTOM_CCE_RULE, } 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 f0c4ba10047c..3b25bdc6dedf 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_ 1629 +#define __WMI_REVISION_ 1630 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From f2614b0f3c9f6d0403536cc1ce88c5f71463963e Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 24 Jun 2025 21:31:13 -0700 Subject: [PATCH 16/25] fw-api: CL 29596437 - update fw common interface files Change-Id: Idffc62551252713f57cd181a8d6d1b331a436cff CRs-Fixed: 3830439 --- fw/htt.h | 122 ++++++++++++++++++++++++++++++++++++- fw/wmi_services.h | 1 + fw/wmi_unified.h | 150 +++++++++++++++++++++++++--------------------- fw/wmi_version.h | 2 +- 4 files changed, 204 insertions(+), 71 deletions(-) diff --git a/fw/htt.h b/fw/htt.h index 50b67b47fb3c..4f98bce1d7cb 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -270,9 +270,10 @@ * 3.140 Add H2T MPDUQ_AND_MSDUQ_INFO_HDR and MPDUQ_OF_MSDUQ_INFO defs. * 3.141 Add H2T HTT_AST_INFO for RxOLE. * 3.142 Add T2H GLOBAL_PEER_ID_UNMAP def, update H2T MPDUQ_OR_MSDUQ_INFO def. + * 3.143 Add T2H HAPS msg def. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 142 +#define HTT_CURRENT_VERSION_MINOR 143 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -12182,6 +12183,7 @@ enum htt_t2h_msg_type { HTT_T2H_MSG_TYPE_SDWF_MSDUQ_CFG_IND = 0x3c, HTT_T2H_MSG_TYPE_MLO_LATENCY_REQ = 0x3d, HTT_T2H_MSG_TYPE_GLOBAL_PEER_ID_UNMAP = 0x3e, + HTT_T2H_MSG_TYPE_HAPS = 0x3f, HTT_T2H_MSG_TYPE_TEST, @@ -24069,4 +24071,122 @@ PREPACK struct htt_t2h_global_peer_id_unmap_t { } while (0) +/* + * @brief target -> pause/unpause host tx queues based on FW indication + * MSG_TYPE => HTT_T2H_MSG_TYPE_HAPS + * + * @details * Header fields: + * + * |31 22|21 20|19 16|15 8|7 0| + * |---------+-------------+-----------+------------------+---------------| + * | RSVD |time_type |action_code| vdev_id | msg type | + * |----------------------------------------------------------------------| + * | time_high | + * |----------------------------------------------------------------------| + * | time_low | + * |----------------------------------------------------------------------| + * + * dword0 - b'7:0 - msg_type: This will be set to + * 0x3f (HTT_T2H_MSG_TYPE_HAPS) + * b'15:8 - vdev_id + * b'19:16 - action_code (HTT_T2H_HAPS_ACTION_CODE): + * b'0000: Pause + * b'0001: Pause with One-Shot Unpause + * b'0010: Unpause + * values 3-15: reserved + * b'21:20 - time_type + * b'31:22 - rsvd + * reverse action_code at time specified below + * (units are specified by the type_type bitfield) + * dword1 - b'31:0 uint32_t time_high + * dword2 - b'31:0 uint32_t time_low + */ +typedef enum { + HTT_T2H_HAPS_ACTION_PAUSE = 0x00, + HTT_T2H_HAPS_ACTION_PAUSE_WITH_ONESHOT_UNPAUSE = 0x01, + HTT_T2H_HAPS_ACTION_UNPAUSE = 0x02, +} HTT_T2H_HAPS_ACTION_CODE; + +typedef enum { + HTT_T2H_HAPS_TIME_TYPE_HOST_QTIME = 0x00, + HTT_T2H_HAPS_TIME_TYPE_TSF = 0x01, +} HTT_T2H_HAPS_TIME_TYPE; + +PREPACK struct htt_t2h_power_state_info { + uint32_t msg_type : 8, /* [7:0] */ + vdev_id : 8, /* [15:8] */ + action_code : 4, /* [19:16] */ + time_type: 2, /* [21:20] */ + rsvd: 10; /* [31:22] */ + uint32_t time_low; + uint32_t time_high; +} POSTPACK; + +#define HTT_T2H_POWER_STATE_INFO_SIZE (sizeof(struct htt_t2h_power_state_info)) + +#define HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_M 0x0000FF00 +#define HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_S 8 + +#define HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_GET(_var) \ + (((_var) & HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_M) >> \ + HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_S) +#define HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID, _val); \ + ((_var) |= ((_val) << HTT_T2H_POWER_STATE_INFO_HTT_VDEV_ID_S));\ + } while (0) + +#define HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_M 0x000F0000 +#define HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_S 16 + +#define HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_GET(_var) \ + (((_var) & HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_M) >> \ + HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_S) +#define HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE, _val); \ + ((_var) |= ((_val) << HTT_T2H_POWER_STATE_INFO_HTT_ACTION_CODE_S));\ + } while (0) + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_M 0x00300000 +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_S 20 + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_GET(_var) \ + (((_var) & HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_M) >> \ + HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_S) + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE, _val); \ + ((_var) |= ((_val) << HTT_T2H_POWER_STATE_INFO_HTT_TIME_TYPE_S));\ + } while (0) + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_M 0xFFFFFFFF +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_S 0 + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_GET(_var) \ + (((_var) & HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_M) >> \ + HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_S) + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH, _val); \ + ((_var) |= ((_val) << HTT_T2H_POWER_STATE_INFO_HTT_TIME_HIGH_S));\ + } while (0) + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_M 0xFFFFFFFF +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_S 0 + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_GET(_var) \ + (((_var) & HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_M) >> \ + HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_S) + +#define HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW, _val); \ + ((_var) |= ((_val) << HTT_T2H_POWER_STATE_INFO_HTT_TIME_LOW_S));\ + } while (0) + + + #endif diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 55202bf9730f..ae9f2b69e5d4 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -717,6 +717,7 @@ typedef enum { WMI_SERVICE_EM_ECO_MODE_SUPPORT = 457, /* Indicates support for ECO mode config (LP BBF+ADC+SYNCT) */ WMI_SERVICE_11BN = 458, /* Indicates FW supports 802.11bn */ + WMI_SERVICE_HOST_AWARE_POWERSAVE = 459, /* FW supports indicating the powerstate of FW to host */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index ecc032960b7d..b65c95f78f0f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -5181,6 +5181,13 @@ typedef struct { reserved: 31; }; }; + /** + * @brief HAPS flags setting for power save config + * bit 0 : Enable disable haps feature + * bit 1 : Sync and update qtime cnss timestamp + * BIT 2-31: Reserved + */ + A_UINT32 dp_haps_config; } wmi_resource_config; #define WMI_RSRC_CFG_APF_DATA_OFLD_ENABLE_GET(word32) \ WMI_GET_BITS(word32, 0, 1) @@ -20661,91 +20668,96 @@ enum wmi_sta_ps_scheme_cfg { WMI_STA_PS_OPM_CONSERVATIVE = 0, WMI_STA_PS_OPM_AGGRESSIVE = 1, WMI_STA_PS_USER_DEF = 2, + WMI_STA_PS_LATENCY_DEF = 3, }; enum wmi_sta_powersave_param { -/** - * Controls how frames are retrievd from AP while STA is sleeping - * - * (see enum wmi_sta_ps_param_rx_wake_policy) - */ -WMI_STA_PS_PARAM_RX_WAKE_POLICY = 0, + /** + * Controls how frames are retrievd from AP while STA is sleeping + * + * (see enum wmi_sta_ps_param_rx_wake_policy) + */ + WMI_STA_PS_PARAM_RX_WAKE_POLICY = 0, -/** - * The STA will go active after this many TX - * - * (see enum wmi_sta_ps_param_tx_wake_threshold) - */ -WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD = 1, + /** + * The STA will go active after this many TX + * + * (see enum wmi_sta_ps_param_tx_wake_threshold) + */ + WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD = 1, -/** - * Number of PS-Poll to send before STA wakes up - * - * (see enum wmi_sta_ps_param_pspoll_count) - * - */ -WMI_STA_PS_PARAM_PSPOLL_COUNT = 2, + /** + * Number of PS-Poll to send before STA wakes up + * + * (see enum wmi_sta_ps_param_pspoll_count) + * + */ + WMI_STA_PS_PARAM_PSPOLL_COUNT = 2, -/** - * TX/RX inactivity time in msec before going to sleep. - * - * The power save SM will monitor tx/rx activity on the VDEV, if no - * activity for the specified msec of the parameter the Power save SM will - * go to sleep. - */ -WMI_STA_PS_PARAM_INACTIVITY_TIME = 3, + /** + * TX/RX inactivity time in msec before going to sleep. + * + * The power save SM will monitor tx/rx activity on the VDEV, if no + * activity for the specified msec of the parameter the Power save SM will + * go to sleep. + */ + WMI_STA_PS_PARAM_INACTIVITY_TIME = 3, -/** - * Set uapsd configuration. - * - * (see enum wmi_sta_ps_param_uapsd) - */ -WMI_STA_PS_PARAM_UAPSD = 4, + /** + * Set uapsd configuration. + * + * (see enum wmi_sta_ps_param_uapsd) + */ + WMI_STA_PS_PARAM_UAPSD = 4, -/** - * Number of PS-Poll to send before STA wakes up in QPower Mode - */ -WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT = 5, + /** + * Number of PS-Poll to send before STA wakes up in QPower Mode + */ + WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT = 5, -/** - * Enable OPM - */ -WMI_STA_PS_ENABLE_QPOWER = 6, - WMI_STA_PS_ENABLE_OPM = WMI_STA_PS_ENABLE_QPOWER, /* alias */ + /** + * Enable OPM + */ + WMI_STA_PS_ENABLE_QPOWER = 6, + WMI_STA_PS_ENABLE_OPM = WMI_STA_PS_ENABLE_QPOWER, /* alias */ -/** - * Number of TX frames before the entering the Active state - */ -WMI_STA_PS_PARAM_QPOWER_MAX_TX_BEFORE_WAKE = 7, + /** + * Number of TX frames before the entering the Active state + */ + WMI_STA_PS_PARAM_QPOWER_MAX_TX_BEFORE_WAKE = 7, -/** - * QPower SPEC PSPOLL interval - */ -WMI_STA_PS_PARAM_QPOWER_SPEC_PSPOLL_WAKE_INTERVAL = 8, + /** + * QPower SPEC PSPOLL interval + */ + WMI_STA_PS_PARAM_QPOWER_SPEC_PSPOLL_WAKE_INTERVAL = 8, -/** - * Max SPEC PSPOLL to be sent when the PSPOLL response has - * no-data bit set - */ -WMI_STA_PS_PARAM_QPOWER_SPEC_MAX_SPEC_NODATA_PSPOLL = 9, + /** + * Max SPEC PSPOLL to be sent when the PSPOLL response has + * no-data bit set + */ + WMI_STA_PS_PARAM_QPOWER_SPEC_MAX_SPEC_NODATA_PSPOLL = 9, -/** - * Max value of ITO reset when there is no tx-rx - * after AP has set the TIM bit - */ -WMI_STA_PS_PARAM_MAX_RESET_ITO_COUNT_ON_TIM_NO_TXRX = 10, + /** + * Max value of ITO reset when there is no tx-rx + * after AP has set the TIM bit + */ + WMI_STA_PS_PARAM_MAX_RESET_ITO_COUNT_ON_TIM_NO_TXRX = 10, -/** - * Flag to enable/disable Powersave Optimization - * in WOW - */ -WMI_STA_PS_PARAM_ENABLE_PS_OPT_IN_WOW = 11, + /** + * Flag to enable/disable Powersave Optimization + * in WOW + */ + WMI_STA_PS_PARAM_ENABLE_PS_OPT_IN_WOW = 11, -/** - * Speculative interval in ms - */ -WMI_STA_PS_PARAM_SPEC_WAKE_INTERVAL = 12, + /** + * Speculative interval in ms + */ + WMI_STA_PS_PARAM_SPEC_WAKE_INTERVAL = 12, + /** + * Value determines the ITO level to apply + */ + WMI_STA_PS_PARAM_ITO_LEVEL = 13, }; typedef struct { diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 3b25bdc6dedf..9d3b7c037682 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_ 1630 +#define __WMI_REVISION_ 1631 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 7cf61af347b71f5f0de46e8f0299b98e9bbd1856 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 26 Jun 2025 21:39:30 -0700 Subject: [PATCH 17/25] fw-api: CL 29622365 - update fw common interface files Change-Id: I8b16a6994984bfc96b972f67724cd6c417fa6260 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 8 +++- fw/wmi_unified.h | 114 +++++++++++++++++++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 3 files changed, 120 insertions(+), 4 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index f28e569b80c6..6d8b0fd4cdd8 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1494,6 +1494,9 @@ typedef enum { WMITLV_TAG_STRUC_wmi_energy_mgmt_edps_config_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_energy_mgmt_puo_config_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_energy_mgmt_eco_mode_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_mpduq_params, + WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_msduq_params, + WMITLV_TAG_STRUC_wmi_peer_assoc_hol_mdsuq_params, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2898,7 +2901,10 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_eht_rate_set, peer_eht_rates, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_tid_to_link_map, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_operating_mode_params, operating_mode_params, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_operating_mode_params, operating_mode_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_mpduq_params, wmi_peer_assoc_mgmt_mpduq_params, mgmt_mpduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_msduq_params, mgmt_msduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_hol_mdsuq_params, wmi_peer_assoc_hol_mdsuq_params, hol_mdsuq_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index b65c95f78f0f..64048b7e412a 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -21273,6 +21273,9 @@ typedef struct { wmi_mlo_flags mlo_flags; /* only mlo enable flag need by STA mode peer create */ } wmi_peer_create_mlo_params; +#define WMI_PEER_CREATE_GET_HW_PEER_ID_VALID(flags) WMI_GET_BITS(flags,0,1) +#define WMI_PEER_CREATE_SET_HW_PEER_ID_VALID(flags) WMI_SET_BITS(flags,0,1,value) + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_create_cmd_fixed_param */ /** unique id identifying the VDEV, generated by the caller */ @@ -21281,7 +21284,19 @@ typedef struct { wmi_mac_addr peer_macaddr; /** peer type: see enum values above */ A_UINT32 peer_type; -/* The TLVs follows this structure: + /** Peer create flags */ + union { + struct { + A_UINT32 hw_peer_id_valid :1, + reserved :31; + }; + A_UINT32 flags; + }; + /** Global sw peer id, valid only if non-zero */ + A_UINT32 sw_peer_id; + /** Global hardware id, valid only if hw_peer_id_valid is set */ + A_UINT32 hw_peer_id; +/* The TLVs follow this structure: * wmi_peer_create_mlo_params mlo_params[]; <-- MLO flags on peer_create * Optional TLV, only present for MLO peers. * If the peer is non-MLO, the array length should be 0. @@ -22181,6 +22196,101 @@ typedef struct { A_UINT32 bw; } wmi_peer_assoc_operating_mode_params; + +typedef enum { + WMI_MGMT_TID_MSDUQ_LINK_SPECIFIC,/* legacy and link peer */ + WMI_MGMT_TID_MSDUQ_LINK_AGNOSTIC, + WMI_MGMT_TID_MSDUQ_TYPE_MAX, +} WMI_MGMT_TID_MSDUQ_TYPE; + +#define WMI_MGMT_MSDUQ_GET_LINK_ID(msduq_type) WMI_GET_BITS(msduq_type,0,3) +#define WMI_MGMT_MSDUQ_SET_LINK_ID(msduq_type) WMI_SET_BITS(msduq_type,0,3,value) +#define WMI_MGMT_MSDUQ_GET_FLOW_TYPE(msduq_type) WMI_GET_BITS(msduq_type,3,5) +#define WMI_MGMT_MSDUQ_SET_FLOW_TYPE(msduq_type) WMI_SET_BITS(msduq_type,3,5,value) + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and Len. Tag: WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_msduq_params*/ + union { + struct { + A_UINT32 link_id : 3, /* HW Link ID */ + flow_type : 5, /* WMI_MGMT_TID_MSDUQ_TYPE */ + reserved : 24; + }; + A_UINT32 msduq_type; + }; + + /* 40 bit physical address, 256 bytes alligned, LSB 8 bits are zero */ + A_UINT32 mgmt_msduq_paddr_39_8; +} wmi_peer_assoc_mgmt_msduq_params; + +typedef struct { + A_UINT32 tlv_header; /* TAG_ID : WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_mpduq_params */ + /* 40 bit physical address, 256 bytes alligned, LSB 8 bits are zero */ + A_UINT32 mgmt_mpduq_paddr_39_8; + A_UINT32 pn_paddr_31_0; + A_UINT32 pn_paddr_39_32; +} wmi_peer_assoc_mgmt_mpduq_params; + +#define WMI_HOL_QUEUE_GET_PEER_ID(mpduq_msduq_number) \ + WMI_GET_BITS(mpduq_msduq_number,0,12) +#define WMI_HOL_QUEUE_SET_PEER_ID(mpduq_msduq_number) \ + WMI_SET_BITS(mpduq_msduq_number,0,12,value) +#define WMI_HOL_QUEUE_GET_TID_NUM(mpduq_msduq_number) \ + WMI_GET_BITS(mpduq_msduq_number,12,5) +#define WMI_HOL_QUEUE_SET_TID_NUM(mpduq_msduq_number) \ + WMI_SET_BITS(mpduq_msduq_number,12,5,value) +#define WMI_HOL_QUEUE_GET_MPDUQ_TYPE(mpduq_msduq_number) \ + WMI_GET_BITS(mpduq_msduq_number,17,5) +#define WMI_HOL_MSDUQ_SET_MPDUQ_TYPE(mpduq_msduq_number) \ + WMI_SET_BITS(mpduq_msduq_number,17,5,value) +#define WMI_HOL_QUEUE_GET_MSDUQ_TYPE(mpduq_msduq_number) \ + WMI_GET_BITS(mpduq_msduq_number,22,5) +#define WMI_HOL_MSDUQ_SET_MSDUQ_TYPE(mpduq_msduq_number) \ + WMI_SET_BITS(mpduq_msduq_number,22,5,value) + +typedef struct { + A_UINT32 tlv_header; /* TAG_ID : WMITLV_TAG_STRUC_wmi_peer_assoc_hol_mdsuq_params */ + + /** + * A_UINT32 + * WMI_HOL_MSDUQ_GET_PEER_ID / WMI_HOL_MSDU_SET_PEER_ID + * peer_id:12, + * + * WMI_HOL_MSDUQ_GET_TID_NUM / WMI_HOL_MSDUQ_SET_TID_NUM + * tid_num:5, + * + * WMI_HOL_MPDUQ_GET_QUEUE_TYPE / WMI_HOL_MPDUQ_SET_QUEUE_TYPE + * mpduq_type:5, + * + * WMI_HOL_MSDUQ_GET_QUEUE_TYPE / WMI_HOL_MSDUQ_SET_QUEUE_TYPE + * msduq_type:5, + * + * rsvd:5; + */ + union { + struct { + A_UINT32 peer_id : 12, + tid_num : 5, + mpduq_type : 5, + msduq_type : 5, + reserved : 5; + }; + A_UINT32 mpduq_msduq_number; + }; + + /* 40 bit address, 256 bytes alligned LSB 8 bits are zero */ + A_UINT32 mpduq_paddr_39_8; + + /* 40 bit address, 256 bytes alligned LSB 8 bits are zero */ + A_UINT32 msduq_paddr_39_8; + + /* First 32 bits for pn physical address */ + A_UINT32 pn_paddr_31_0; + + /* Upper 8 bits of 40 bit pn physical address */ + A_UINT32 pn_paddr_39_32; +} wmi_peer_assoc_hol_mdsuq_params; + /* * PEER assoc_flags for assoc complete: * Bit 0: Set for peer data flush @@ -39352,7 +39462,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_ENERGY_MGMT_PCIE_CONFIG_CMDID); WMI_RETURN_STRING(WMI_ENERGY_MGMT_PCIE_LPM_CMDID); WMI_RETURN_STRING(WMI_ENERGY_MGMT_DCVS_CONFIG_CMDID); - WMI_RETURN_STRING(WMI_ENERGY_MGMT_DPS_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID); WMI_RETURN_STRING(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID); WMI_RETURN_STRING(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID); } diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 9d3b7c037682..3c6d21ce0bf3 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_ 1631 +#define __WMI_REVISION_ 1632 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 1ffed48e3de5975405b1ce55262068b0cfe43b3b Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 2 Jul 2025 12:01:52 -0700 Subject: [PATCH 18/25] fw-api: CL 29659315 - update fw common interface files Change-Id: I3b7187e50a42ffb24ae942c1c50a9960a5610261 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 8 ++++---- fw/wmi_version.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 6d8b0fd4cdd8..46202cf40d5b 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -2902,9 +2902,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_tid_to_link_map, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_operating_mode_params, operating_mode_params, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_mpduq_params, wmi_peer_assoc_mgmt_mpduq_params, mgmt_mpduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_mpduq_params, mgmt_mpduq_params, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_msduq_params, mgmt_msduq_params, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_hol_mdsuq_params, wmi_peer_assoc_hol_mdsuq_params, hol_mdsuq_params, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_hol_mdsuq_params, hol_mdsuq_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); @@ -3681,7 +3681,7 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_UPDATE_MAC_ADDR_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_config_cmd_fixed_param, wmi_vdev_vbss_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)\ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_pn_info, vbss_peer_pn_info, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_sn_info, vbss_peer_sn_info, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info, wmi_vdev_vbss_peer_dyn_info, vbss_peer_dyn_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_dyn_info, vbss_peer_dyn_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_VBSS_CONFIG_CMDID); /* Pdev suspend Cmd */ @@ -7880,7 +7880,7 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VENDOR_PEER_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_config_event_fixed_param, wmi_vdev_vbss_config_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)\ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_pn_info, vbss_peer_pn_info, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_sn_info, vbss_peer_sn_info, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_vbss_peer_dyn_info, wmi_vdev_vbss_peer_dyn_info, vbss_peer_dyn_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_vbss_peer_dyn_info, vbss_peer_dyn_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_VBSS_CONFIG_EVENTID); /* link switch event */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 3c6d21ce0bf3..71bf687b5891 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_ 1632 +#define __WMI_REVISION_ 1633 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From abe05012db9daab2affe435b0c292d88e13dda6d Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 5 Jul 2025 06:01:52 -0700 Subject: [PATCH 19/25] fw-api: CL 29678196 - update fw common interface files Change-Id: I5812a8d5266ce44ec1e94c95f17aacbc2a463da6 CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + fw/wmi_unified.h | 21 +++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index ae9f2b69e5d4..7ed9332a1b20 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -718,6 +718,7 @@ typedef enum { WMI_SERVICE_11BN = 458, /* Indicates FW supports 802.11bn */ WMI_SERVICE_HOST_AWARE_POWERSAVE = 459, /* FW supports indicating the powerstate of FW to host */ + WMI_SERVICE_PDEV_DIV_STATES_REPORT = 460, /* FW supports reporting antenna diversity states */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 64048b7e412a..85accae8c459 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -10762,6 +10762,16 @@ typedef struct { */ } wmi_pdev_tpc_config_event_fixed_param; + +typedef enum { + WMI_ASD_PRIMARY_ANT = 0, + WMI_ASD_DIVERSITY_ANT = 1, + WMI_ASD_THIRD_ANT = 2, + WMI_ASD_FOURTH_ANT = 3, + + WMI_ASD_MAX_ANTTYPE = 4 +} WMI_ASD_ANT_TYPE; + typedef struct { /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_div_rssi_antid_event_fixed_param */ A_UINT32 tlv_header; @@ -10775,6 +10785,17 @@ typedef struct { wmi_mac_addr macaddr; /* EVM value for stream0 and stream1 20Mhz, dB units */ A_INT32 chain_evm[WMI_MAX_CHAINS]; + /** num_antennas_valid: + * how many elements in the WMI_ASD_MAX_ANTTYPE arrays below + * contain valid info + */ + A_UINT32 num_antennas_valid; + /** switch count on each antenna attached to each chain */ + A_UINT32 ant_cnt[WMI_MAX_CHAINS][WMI_ASD_MAX_ANTTYPE]; + /** stay duration on each antenna attached to each chain (units: ms) */ + A_UINT32 ant_dur[WMI_MAX_CHAINS][WMI_ASD_MAX_ANTTYPE]; + /** RSSI on each antenna attached to each chain in dbm */ + A_INT32 ant_rssi[WMI_MAX_CHAINS][WMI_ASD_MAX_ANTTYPE]; } wmi_pdev_div_rssi_antid_event_fixed_param; typedef struct { diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 71bf687b5891..e185fece7f03 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_ 1633 +#define __WMI_REVISION_ 1634 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From dda266c12a603c6643ec92ffa266a5c40d6c0c2f Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 9 Jul 2025 06:01:54 -0700 Subject: [PATCH 20/25] fw-api: CL 29712800 - update fw common interface files Change-Id: I57be3caf23aacb8a66905472ad72b90b2ef03999 CRs-Fixed: 3830439 --- fw/htt.h | 3 +++ fw/htt_stats.h | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/fw/htt.h b/fw/htt.h index 4f98bce1d7cb..6e1874396d53 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -863,6 +863,9 @@ typedef enum { HTT_STATS_TX_PDEV_PENDING_SEQ_CNT_IN_TXQ_HIST_TAG = 217, /* htt_stats_tx_pdev_pending_seq_cnt_in_txq_hist_tlv */ HTT_STATS_SCHED_TXQ_EARLY_COMPL_TAG = 218, /* htt_stats_sched_txq_early_compl_tlv */ HTT_STATS_RX_PDEV_BN_UL_OFDMA_USER_TAG = 219, /* htt_stats_rx_pdev_bn_ul_ofdma_user_tlv */ + 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_MAX_TAG, } htt_stats_tlv_tag_t; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 26f867cfe9ad..395dc8ca87e1 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -3417,6 +3417,35 @@ typedef struct { /* 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; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** 11bn UHR MU Basic Trigger frame sent over the air */ + A_UINT32 bn_basic_trigger; + /** 11bn UHR MU BSRP Trigger frame sent over the air */ + A_UINT32 bn_bsr_trigger; + /** 11bn UHR MU BAR Trigger frame sent over the air */ + A_UINT32 bn_mu_bar_trigger; + /** 11bn UHR MU RTS Trigger frame sent over the air */ + A_UINT32 bn_mu_rts_trigger; + + /** 11BN UHR MU Combined Freq. BSRP Trigger frame sent over the air */ + A_UINT32 combined_bn_bsr_trigger_tried[HTT_NUM_AC_WMM]; + /** 11BN UHR MU Combined Freq. BSRP Trigger completed with error(s) */ + A_UINT32 combined_bn_bsr_trigger_err[HTT_NUM_AC_WMM]; + /** 11BN UHR MU Standalone Freq. BSRP Trigger frame sent over the air */ + A_UINT32 standalone_bn_bsr_trigger_tried[HTT_NUM_AC_WMM]; + /** 11BN UHR MU Standalone Freq. BSRP Trigger completed with error(s) */ + A_UINT32 standalone_bn_bsr_trigger_err[HTT_NUM_AC_WMM]; + /** 11BN UHR Manual Single-User UL OFDMA Trigger frame sent over the air */ + A_UINT32 manual_bn_su_ulofdma_basic_trigger[HTT_NUM_AC_WMM]; + /** 11BN UHR Manual Single-User UL OFDMA Trigger completed with error(s) */ + A_UINT32 manual_bn_su_ulofdma_basic_trigger_err[HTT_NUM_AC_WMM]; + /** 11BN UHR Manual Multi-User UL OFDMA Trigger frame sent over the air */ + A_UINT32 manual_bn_mu_ulofdma_basic_trigger[HTT_NUM_AC_WMM]; + /** 11BN UHR Manual Multi-User UL OFDMA Trigger completed with error(s) */ + A_UINT32 manual_bn_mu_ulofdma_basic_trigger_err[HTT_NUM_AC_WMM]; +} htt_stats_tx_selfgen_bn_tlv; + typedef struct { /* DEPRECATED */ htt_tlv_hdr_t tlv_hdr; /** 11AX HE OFDMA NDPA frame queued to the HW */ @@ -3998,6 +4027,29 @@ typedef struct { /* 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; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** 11BN UHR MU Basic Trigger frame completed with error(s) */ + A_UINT32 bn_basic_trigger_err; + /** 11BN UHR MU BSRP Trigger frame completed with error(s) */ + A_UINT32 bn_bsr_trigger_err; + /** 11BN UHR MU BAR Trigger frame completed with error(s) */ + A_UINT32 bn_mu_bar_trigger_err; + /** 11BN UHR MU RTS Trigger frame completed with error(s) */ + A_UINT32 bn_mu_rts_trigger_err; + + /** 11BN UHR MU OFDMA Basic Trigger frame completed with partial user response */ + A_UINT32 bn_basic_trigger_partial_resp; + /** 11BN UHR MU BSRP Trigger frame completed with partial user response */ + A_UINT32 bn_bsr_trigger_partial_resp; + /** 11BN UHR MU BAR Trigger frame completed with partial user response */ + A_UINT32 bn_mu_bar_trigger_partial_resp; + /** 11BN UHR MU RTS Trigger frame blocked due to partner link TX/RX(eMLSR) */ + A_UINT32 bn_mu_rts_trigger_blocked; + /** 11BN UHR MU BSR Trigger frame blocked due to partner link TX/RX(eMLSR) */ + A_UINT32 bn_bsr_trigger_blocked; +} htt_stats_tx_selfgen_bn_err_tlv; + /* * Scheduler completion status reason code. * (0) HTT_TXERR_NONE - No error (Success). @@ -4129,6 +4181,19 @@ typedef struct { typedef htt_stats_tx_selfgen_be_sched_status_stats_tlv htt_tx_selfgen_be_sched_status_stats_tlv; +typedef struct { + htt_tlv_hdr_t tlv_hdr; + /** 11BN UHR MU BAR scheduler completion status reason code */ + A_UINT32 bn_mu_bar_sch_status[HTT_TX_PDEV_STATS_NUM_TX_ERR_STATUS]; + /** 11BN UHR MU BAR scheduler error code */ + A_UINT32 bn_mu_bar_sch_flag_err[HTT_TX_SELFGEN_NUM_SCH_TSFLAG_ERROR_STATS]; + + /** 11BN UHR UL OFDMA Basic Trigger scheduler completion status reason code */ + A_UINT32 bn_basic_trig_sch_status[HTT_TX_PDEV_STATS_NUM_TX_ERR_STATUS]; + /** 11BN UHR UL OFDMA Basic Trigger scheduler error code */ + A_UINT32 bn_basic_trig_sch_flag_err[HTT_TX_SELFGEN_NUM_SCH_TSFLAG_ERROR_STATS]; +} htt_stats_tx_selfgen_bn_sched_status_tlv; + /* STATS_TYPE : HTT_DBG_EXT_STATS_TX_SELFGEN_INFO * TLV_TAGS: * - HTT_STATS_TX_SELFGEN_CMN_STATS_TAG @@ -4141,6 +4206,9 @@ typedef htt_stats_tx_selfgen_be_sched_status_stats_tlv * - HTT_STATS_TX_SELFGEN_BE_STATS_TAG * - HTT_STATS_TX_SELFGEN_BE_ERR_STATS_TAG * - HTT_STATS_TX_SELFGEN_BE_SCHED_STATUS_STATS_TAG + * - HTT_STATS_TX_SELFGEN_BN_TAG + * - HTT_STATS_TX_SELFGEN_BN_ERR_TAG + * - HTT_STATS_TX_SELFGEN_BN_SCHED_STATUS_TAG */ /* NOTE: * This structure is for documentation, and cannot be safely used directly. @@ -4158,6 +4226,9 @@ typedef struct { htt_stats_tx_selfgen_be_stats_tlv be_tlv; htt_stats_tx_selfgen_be_err_stats_tlv be_err_tlv; htt_stats_tx_selfgen_be_sched_status_stats_tlv be_sched_status_tlv; + htt_stats_tx_selfgen_bn_tlv bn_tlv; + htt_stats_tx_selfgen_bn_err_tlv bn_err_tlv; + htt_stats_tx_selfgen_bn_sched_status_tlv bn_sched_status_tlv; } htt_tx_pdev_selfgen_stats_t; #endif /* ATH_TARGET */ From 3a652ca6c2a0be5e121c2b86b2eed0011f818211 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 11 Jul 2025 06:03:12 -0700 Subject: [PATCH 21/25] fw-api: CL 29734524 - update fw common interface files Change-Id: Ic75a3f3ee0bc175c6f0b56a6951343bf72657d37 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 8 ++++++++ fw/wmi_unified.h | 21 +++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 46202cf40d5b..8d9a1ace4801 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1497,6 +1497,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_mpduq_params, WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_msduq_params, WMITLV_TAG_STRUC_wmi_peer_assoc_hol_mdsuq_params, + WMITLV_TAG_STRUC_wmi_peer_tid_rate_custom_cmd_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2068,6 +2069,7 @@ typedef enum { OP(WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID) \ OP(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID) \ OP(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID) \ + OP(WMI_PEER_TID_RATE_CUSTOM_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -5831,6 +5833,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_energy_mgmt_eco_mode_config_cmd_fixed_param, wmi_energy_mgmt_eco_mode_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID); +/* peer tid rate customization cmd */ +#define WMITLV_TABLE_WMI_PEER_TID_RATE_CUSTOM_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tid_rate_custom_cmd_fixed_param, wmi_peer_tid_rate_custom_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, rate_code, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TID_RATE_CUSTOM_CMDID); + /************************** TLV definitions of WMI events *******************************/ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 85accae8c459..3d0c3f32cd2f 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -852,6 +852,9 @@ typedef enum { /* WMI command to setup reorder queue for multiple TIDs */ WMI_PEER_MULTIPLE_REORDER_QUEUE_SETUP_CMDID, + /** Customize MCS range for specific tid */ + WMI_PEER_TID_RATE_CUSTOM_CMDID, + /* beacon/management specific commands */ /** transmit beacon by reference . used for transmitting beacon on low latency interface like pcie */ @@ -33862,6 +33865,23 @@ typedef struct { A_UINT32 tid_mask; /* bits 0 to 15 = QoS TIDs, bit 16 = non-qos TID */ } wmi_peer_reorder_queue_remove_cmd_fixed_param; +/** + * This command is sent from WLAN host driver to firmware for + * customizing MCS range & retry count for specific TID of specific peer + */ +typedef struct { + A_UINT32 tlv_header; + A_UINT32 vdev_id; + wmi_mac_addr peer_macaddr; /* Peer MAC address */ + A_UINT32 tid; + /* on_off: + * Rate customization enable/disable. 1 for enable and 0 for disable. + */ + A_UINT32 on_off; + A_UINT32 bw; /* Unit MHz */ + A_UINT32 retry_count; +} wmi_peer_tid_rate_custom_cmd_fixed_param; + /* DEPRECATED - use wmi_pdev_set_mac_config_response_event_fixed_param instead */ typedef struct { @@ -39486,6 +39506,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_ENERGY_MGMT_EDPS_CONFIG_CMDID); WMI_RETURN_STRING(WMI_ENERGY_MGMT_PUO_CONFIG_CMDID); WMI_RETURN_STRING(WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_PEER_TID_RATE_CUSTOM_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index e185fece7f03..1437afa1b225 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_ 1634 +#define __WMI_REVISION_ 1635 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 808c8d2af8c2a526bc793b9ed552dd1bc5b8b112 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 15 Jul 2025 06:01:45 -0700 Subject: [PATCH 22/25] fw-api: CL 29754552 - update fw common interface files Change-Id: Ic6032c259105e7eae104f27d0468b21152fd5c9b CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + fw/wmi_version.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 7ed9332a1b20..0f79ea9e4871 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -719,6 +719,7 @@ typedef enum { WMI_SERVICE_11BN = 458, /* Indicates FW supports 802.11bn */ WMI_SERVICE_HOST_AWARE_POWERSAVE = 459, /* FW supports indicating the powerstate of FW to host */ WMI_SERVICE_PDEV_DIV_STATES_REPORT = 460, /* FW supports reporting antenna diversity states */ + WMI_SERVICE_EAPOL_OVER_RAW = 461, /* FW supports sending EAPOL frames in raw mode even when the vdev is brought up in nwifi/ethernet mode */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 1437afa1b225..cffc5c2adeab 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_ 1635 +#define __WMI_REVISION_ 1636 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From c60180a52b84a06883994b1d5d758707fe62c5e4 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 15 Jul 2025 06:03:38 -0700 Subject: [PATCH 23/25] fw-api: CL 29754585 - update fw common interface files Change-Id: Icbc386dc553f774e13981ee2aa645403df411777 CRs-Fixed: 3830439 --- fw/htt_ppdu_stats.h | 78 +++++++++++++++++++++++++++++++++++++-------- fw/htt_stats.h | 32 +++++++++++++++++++ 2 files changed, 97 insertions(+), 13 deletions(-) diff --git a/fw/htt_ppdu_stats.h b/fw/htt_ppdu_stats.h index d1575d7c91ba..5f7bad98cb84 100644 --- a/fw/htt_ppdu_stats.h +++ b/fw/htt_ppdu_stats.h @@ -707,6 +707,58 @@ typedef enum HTT_PPDU_STATS_SPATIAL_REUSE HTT_PPDU_STATS_SPATIAL_REUSE; (((_val) & HTT_PPDU_STATS_COMMON_TRIG_COOKIE_M) >> \ HTT_PPDU_STATS_COMMON_TRIG_COOKIE_S) +#define HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_M 0x00000001 +#define HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_S 0 + +#define HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_GET(_var) \ + (((_var) & HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_M) >> \ + HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_S) + +#define HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_COMMON_TLV_HTT_SEQ_TYPE_S)); \ + } while (0) + +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_M 0x00000002 +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_S 1 + +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_GET(_var) \ + (((_var) & HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_M) >> \ + HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_S) + +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BASIC_TRIGGER_S)); \ + } while (0) + +#define HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_M 0x00000004 +#define HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_S 2 + +#define HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_GET(_var) \ + (((_var) & HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_M) >> \ + HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_S) + +#define HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_COMMON_TLV_IS_MANUAL_ULOFDMA_TRIGGER_S)); \ + } while (0) + +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_M 0x00000008 +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_S 3 + +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_GET(_var) \ + (((_var) & HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_M) >> \ + HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_S) + +#define HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER, _val); \ + ((_var) |= ((_val) << HTT_PPDU_STATS_COMMON_TLV_IS_COMBINED_UL_BSRP_TRIGGER_S)); \ + } while (0) + enum HTT_SEQ_TYPE { WAL_PPDU_SEQ_TYPE = 0, HTT_PPDU_SEQ_TYPE = 1, @@ -902,26 +954,26 @@ typedef struct { * HTT_PPDU_SEQ_TYPE then decoder should interpret the * seq type as HTT_PPDU_STATS_SEQ_TYPE. * htt_seq_type field will be set to HTT_PPDU_SEQ_TYPE in - * firmware versions where this field is defined. - * BIT [31: 1] - reserved + * BIT [1 : 1] - is_combined_ul_basic_trigger - Flag to indicate if a + * given UL OFDMA/MU-MIMO Basic trigger is sent combined + * as part of existing DL data sequence. + * BIT [2 : 2] - is_manual_ulofdma_trigger - Flag to indicate if a + * given UL OFDMA trigger is manually triggered from the Host. + * BIT [3 : 3] - is_combined_ul_bsrp_trigger - Flag to indicate if a + * given UL BSRP trigger is sent combined as part of + * an existing DL/UL data sequence + * BIT [31: 4] - reserved */ union { A_UINT32 reserved__htt_seq_type; struct { A_UINT32 htt_seq_type: 1, - reserved3: 31; + is_combined_ul_basic_trigger: 1, + is_manual_ulofdma_trigger: 1, + is_combined_ul_bsrp_trigger: 1, + reserved3: 28; }; }; - /* is_manual_ulofdma_trigger: - * Flag to indicate if a given UL OFDMA trigger is manually triggered - * from the Host - */ - A_UINT32 is_manual_ulofdma_trigger; - /* is_combined_ul_bsrp_trigger: - * Flag to indicate if a given UL BSRP trigger is sent combined as - * part of existing DL/UL data sequence - */ - A_UINT32 is_combined_ul_bsrp_trigger; /* Flag to indicate if the channel chosen is 320_1 / 320_2 */ A_UINT32 chan_type_320mhz; } htt_ppdu_stats_common_tlv; diff --git a/fw/htt_stats.h b/fw/htt_stats.h index 395dc8ca87e1..c0730881c023 100644 --- a/fw/htt_stats.h +++ b/fw/htt_stats.h @@ -3348,6 +3348,22 @@ typedef struct { A_UINT32 ax_mu_bar_trigger_per_ac[HTT_NUM_AC_WMM]; /** 11AX HE MU-BAR Trigger frames per AC completed with error(s) */ A_UINT32 ax_mu_bar_trigger_errors_per_ac[HTT_NUM_AC_WMM]; + /** 11AX HE MU Combined UL OFDMA Basic Trigger frame sent over the air */ + A_UINT32 combined_ax_ulofdma_trigger_tried[HTT_NUM_AC_WMM]; + /** 11AX HE MU Combined UL OFDMA Basic Trigger completed with error(s) */ + A_UINT32 combined_ax_ulofdma_trigger_err[HTT_NUM_AC_WMM]; + /** 11AX HE MU Standalone UL OFDMA Basic Trigger frame sent over the air */ + A_UINT32 standalone_ax_ulofdma_trigger_tried[HTT_NUM_AC_WMM]; + /** 11AX HE MU Standalone UL OFDMA Basic Trigger completed with error(s) */ + A_UINT32 standalone_ax_ulofdma_trigger_err[HTT_NUM_AC_WMM]; + /** 11AX HE MU Combined UL MU-MIMO Basic Trigger frame sent over the air */ + A_UINT32 combined_ax_ulmumimo_trigger_tried[HTT_NUM_AC_WMM]; + /** 11AX HE MU Combined UL MU-MIMO Basic Trigger completed with error(s) */ + A_UINT32 combined_ax_ulmumimo_trigger_err[HTT_NUM_AC_WMM]; + /** 11AX HE MU Standalone UL MU-MIMO Basic Trigger frame sent over the air*/ + A_UINT32 standalone_ax_ulmumimo_trigger_tried[HTT_NUM_AC_WMM]; + /** 11AX HE MU Standalone UL MU-MIMO Basic Trigger completed with error(s)*/ + A_UINT32 standalone_ax_ulmumimo_trigger_err[HTT_NUM_AC_WMM]; } htt_stats_tx_selfgen_ax_stats_tlv; /* preserve old name alias for new name consistent with the tag name */ typedef htt_stats_tx_selfgen_ax_stats_tlv htt_tx_selfgen_ax_stats_tlv; @@ -3413,6 +3429,22 @@ typedef struct { A_UINT32 be_mu_bar_trigger_per_ac[HTT_NUM_AC_WMM]; /** 11BE EHT MU-BAR Trigger frames per AC completed with error(s) */ A_UINT32 be_mu_bar_trigger_errors_per_ac[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Combined UL OFDMA Basic Trigger frame sent over the air */ + A_UINT32 combined_be_ulofdma_trigger_tried[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Combined UL OFDMA Basic Trigger completed with error(s) */ + A_UINT32 combined_be_ulofdma_trigger_err[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Standalone UL OFDMA Basic Trigger frame sent over the air */ + A_UINT32 standalone_be_ulofdma_trigger_tried[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Standalone UL OFDMA Basic Trigger completed with error(s) */ + A_UINT32 standalone_be_ulofdma_trigger_err[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Combined UL MU-MIMO Basic Trigger frame sent over the air */ + A_UINT32 combined_be_ulmumimo_trigger_tried[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Combined UL MU-MIMO Basic Trigger completed with error(s) */ + A_UINT32 combined_be_ulmumimo_trigger_err[HTT_NUM_AC_WMM]; + /** 11BE EHT MU Standalone UL MU-MIMO Basic Trigger frame sent over the air */ + 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]; } 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; From fd9deb56d1ff2a06c2a7a0ed9dce5b010d9b1bdf Mon Sep 17 00:00:00 2001 From: spuligil Date: Wed, 16 Jul 2025 06:01:42 -0700 Subject: [PATCH 24/25] fw-api: CL 29778978 - update fw common interface files Change-Id: Iecd76063e70aa0da774c4d39801d0e376b453704 CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 4 +++- fw/wmi_unified.h | 10 ++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 8d9a1ace4801..54ea736a2375 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1498,6 +1498,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_peer_assoc_mgmt_msduq_params, WMITLV_TAG_STRUC_wmi_peer_assoc_hol_mdsuq_params, WMITLV_TAG_STRUC_wmi_peer_tid_rate_custom_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_co_located_chan_info, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -3650,7 +3651,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_DELETE_CMDID); /* Vdev up Cmd */ #define WMITLV_TABLE_WMI_VDEV_UP_CMDID(id,op,buf,len) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_up_cmd_fixed_param, wmi_vdev_up_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_up_cmd_fixed_param, wmi_vdev_up_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_co_located_chan_info, co_located_chan_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_UP_CMDID); diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 3d0c3f32cd2f..69eb61830fb9 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -18391,6 +18391,12 @@ enum WMI_VDEV_UP_FLAGS { WMI_VDEV_UP_FLAG_VBSS_PASSIVE = 0x00000004, }; +typedef struct{ + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_co_located_chan_info */ + /* co-located link frequency discovered on connected ap */ + A_UINT32 link_freq; /* MHz units */ +} wmi_co_located_chan_info; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_up_cmdid_fixed_param */ /** unique id identifying the VDEV, generated by the caller */ @@ -18407,6 +18413,10 @@ typedef struct { A_UINT32 profile_num; /** flags - this is a bitwise-or combination of WMI_VDEV_UP_FLAGS values */ A_UINT32 flags; + /* The below TLVs follow this struct: + * - wmi_co_located_chan_info co_located_chan_info[]; + * Connected AP's co-located channel info + */ } wmi_vdev_up_cmd_fixed_param; typedef struct { diff --git a/fw/wmi_version.h b/fw/wmi_version.h index cffc5c2adeab..2c695cde4cda 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_ 1636 +#define __WMI_REVISION_ 1637 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work From 024d402c850de81a4e1bda1616e00823d879dbd7 Mon Sep 17 00:00:00 2001 From: spuligil Date: Thu, 17 Jul 2025 06:02:18 -0700 Subject: [PATCH 25/25] fw-api: CL 29789367 - update fw common interface files Change-Id: I7746ab511883809be5afa3c8255391093f2bc7e1 CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + 1 file changed, 1 insertion(+) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 0f79ea9e4871..18f2fa6085d5 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -720,6 +720,7 @@ typedef enum { WMI_SERVICE_HOST_AWARE_POWERSAVE = 459, /* FW supports indicating the powerstate of FW to host */ WMI_SERVICE_PDEV_DIV_STATES_REPORT = 460, /* FW supports reporting antenna diversity states */ WMI_SERVICE_EAPOL_OVER_RAW = 461, /* FW supports sending EAPOL frames in raw mode even when the vdev is brought up in nwifi/ethernet mode */ + WMI_SERVICE_MLO_SAP_LINK_REMOVAL_SUPPORT = 462, /* Indicates FW supports MLO SAP link removal operation */ WMI_MAX_EXT2_SERVICE