From 273666bb99410377fd67222bfbdb963af1afd2bc Mon Sep 17 00:00:00 2001 From: spuligil Date: Sat, 13 Sep 2025 18:01:29 -0700 Subject: [PATCH] fw-api: CL 30358561 - update fw common interface files Change-Id: Iae2e79e0dffab1b0dc77d8f9a2a4bbc45de21d2a CRs-Fixed: 3830439 --- fw/wmi_services.h | 1 + fw/wmi_tlv_defs.h | 28 ++++++++++++++++++++++++++++ fw/wmi_unified.h | 46 +++++++++++++++++++++++++++++++++++++++++++++- fw/wmi_version.h | 2 +- 4 files changed, 75 insertions(+), 2 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 7d4c390a70f5..d418bd21b1ac 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -723,6 +723,7 @@ typedef enum { WMI_SERVICE_MLO_SAP_LINK_REMOVAL_SUPPORT = 462, /* Indicates FW supports MLO SAP link removal operation */ WMI_SERVICE_TX_POWER_LIMIT = 463, /* FW supports temporary tx power limit indication to HALPHY */ WMI_SERVICE_NPCA_SUPPORT = 464, /* Indicates FW supports NPCA (Non-Primary Channel Access) */ + WMI_SERVICE_EXT_TLV_SUPPORT = 465, /* FW supports WMI_MAX_NUM_EXT_TLVS */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 6ab6a25d3aa4..e078c310b074 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -2086,6 +2086,7 @@ typedef enum { OP(WMI_PEER_NPCA_CAP_CMDID) \ OP(WMI_PDEV_MULTI_VDEV_GET_AC_QUEUE_DEPTH_CMDID) \ OP(WMI_VDEV_GET_TPC_IE_POWER_CMDID) \ + OP(WMI_PEER_ASSOC_V2_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2929,9 +2930,36 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID); /* NOTE: * No further TLVs can be added to this message; * it is already at the target's WMI_MAX_NUM_TLVS limit (13). + * + * Note that the WMI_PEER_ASSOC_V2_CMDID (below) can support additional TLVs. */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); +/* Peer Assoc EXT Cmd + * This cmd message mirrors the WMI_PEER_ASSOC_CMDID message, but has the + * capacity for extra TLVs beyond those in the WMI_PEER_ASSOC_CMDID definition. + * This message can only be used if the target advertises support for + * WMI_MAX_NUM_EXT_TLVS (via the WMI_SERVICE_EXT_TLV_SUPPORT flag). + */ +#define WMITLV_TABLE_WMI_PEER_ASSOC_V2_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_complete_cmd_fixed_param, wmi_peer_assoc_complete_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_legacy_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_ht_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vht_rate_set, wmi_vht_rate_set, peer_vht_rates, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_he_rate_set, peer_he_rates, WMITLV_SIZE_VAR) \ + 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_operating_mode_params, operating_mode_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_ARRAY_STRUC, wmi_peer_assoc_hol_mdsuq_params, hol_mdsuq_params, WMITLV_SIZE_VAR)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_npca_cap_params, peer_npca_cap_params, WMITLV_SIZE_VAR)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_create_mlo_params, create_mlo_params, WMITLV_SIZE_VAR) + +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_V2_CMDID); + /* Peer Set Rate Report Condition Cmd */ #define WMITLV_TABLE_WMI_PEER_SET_RATE_REPORT_CONDITION_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_set_rate_report_condition_fixed_param, wmi_peer_set_rate_report_condition_fixed_param, fixed_param, WMITLV_SIZE_FIX) diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 2b4d2ed80aaa..e535a515575c 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -115,6 +115,8 @@ extern "C" { } #endif +#define WMI_MAX_NUM_EXT_TLVS 50 + #define ATH_MAC_LEN 6 /**< length of MAC in bytes */ #define WMI_EVENT_STATUS_SUCCESS 0 /* Success return status to host */ #define WMI_EVENT_STATUS_FAILURE 1 /* Failure return status to host */ @@ -867,6 +869,9 @@ typedef enum { /** Peer NPCA CAP Command **/ WMI_PEER_NPCA_CAP_CMDID, + /* WMI_PEER_ASSOC_V2_CMDID: extended alternative for WMI_PEER_ASSOC_CMDID */ + WMI_PEER_ASSOC_V2_CMDID, + /* beacon/management specific commands */ /** transmit beacon by reference . used for transmitting beacon on low latency interface like pcie */ @@ -22410,13 +22415,23 @@ typedef struct { #define WMI_ASSOC_FLAG_FLUSH_PEER_DATA_GET(assoc_flags) WMI_GET_BITS(assoc_flags, 0, 1) #define WMI_ASSOC_FLAG_FLUSH_PEER_DATA_SET(assoc_flags, value) WMI_GET_BITS(assoc_flags, 0, 1, value) +enum wmi_peer_new_assoc { + WMI_PEER_REASSOC = 0, /* Peer Reassoc */ + WMI_PEER_ASSOC = 1, /* Peer Assoc */ + WMI_PEER_CREATE_ASSOC = 2, /* Peer Create and Peer Assoc in single command, + * currently used for SMD case */ + + /* Host <-> Target Peer New Assoc is assigned up to 127 */ + WMI_PEER_NEW_ASSOC_MAX = 127 +}; + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_assoc_complete_cmd_fixed_param */ /** peer MAC address */ wmi_mac_addr peer_macaddr; /** VDEV id */ A_UINT32 vdev_id; - /** assoc = 1 reassoc = 0 */ + /* enum wmi_peer_new_assoc: create_assoc = 2, assoc = 1, reassoc = 0 */ A_UINT32 peer_new_assoc; /** peer associd (16 bits) */ A_UINT32 peer_associd; @@ -22550,6 +22565,23 @@ typedef struct { */ A_UINT32 max_downlink_nss; + /** Peer create flags */ + union { + struct { + A_UINT32 hw_peer_id_valid : 1, + peer_type_valid : 1, + reserved :30; + }; + 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; + /** peer type: see enum values above */ + A_UINT32 peer_type; + + /* Following this struct are the TLV's: * A_UINT8 peer_legacy_rates[]; * A_UINT8 peer_ht_rates[]; @@ -22563,11 +22595,23 @@ typedef struct { * 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 + * --- the below only apply to WMI_PEER_ASSOC_V2_CMD, not WMI_PEER_ASSOC_CMDID * wmi_peer_npca_cap_params peer_npca_cap_params[]; <-- peer NPCA * capabilities, host sends NPCA peer capabilities as an optional TLV + * 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. + * Only mlo_enable flag required by MCC to decide MAC address + * to be used. */ } wmi_peer_assoc_complete_cmd_fixed_param; +#define WMI_PEER_ASSOC_COMPLETE_CMD_FLAG_HW_PEER_ID_VALID_GET(flags) WMI_GET_BITS(flags, 0, 1) +#define WMI_PEER_ASSOC_COMPLETE_CMD_FLAG_HW_PEER_ID_VALID_SET(flags, value) WMI_GET_BITS(flags, 0, 1, value) + +#define WMI_PEER_ASSOC_COMPLETE_CMD_FLAG_PEER_TYPE_VALID_GET(flags) WMI_GET_BITS(flags, 1, 1) +#define WMI_PEER_ASSOC_COMPLETE_CMD_FLAG_PEER_TYPE_VALID_SET(flags, value) WMI_GET_BITS(flags, 1, 1, value) + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_npca_cap_params*/ A_UINT32 sw_peer_id; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 8cfd774b4f7f..60ece38126f3 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_ 1649 +#define __WMI_REVISION_ 1650 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work