diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index b6cfbcabe4..f3fcef9c4a 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1141,6 +1141,14 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_get_dpd_status_evt_fixed_param, WMITLV_TAG_STRUC_wmi_eht_rate_set, WMITLV_TAG_STRUC_wmi_dcs_awgn_int_t, + WMITLV_TAG_STRUC_wmi_mlo_tx_send_params, + WMITLV_TAG_STRUC_wmi_partner_link_params, + WMITLV_TAG_STRUC_wmi_peer_assoc_mlo_partner_link_params, + WMITLV_TAG_STRUC_wmi_mlo_setup_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mlo_setup_complete_event_fixed_param, + WMITLV_TAG_STRUC_wmi_mlo_ready_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mlo_teardown_fixed_param, + WMITLV_TAG_STRUC_wmi_mlo_teardown_complete_fixed_param, } WMITLV_TAG_ID; /* @@ -1599,6 +1607,9 @@ typedef enum { OP(WMI_PEER_TID_LATENCY_CONFIG_CMDID) \ OP(WMI_MLO_LINK_SET_ACTIVE_CMDID) \ OP(WMI_PDEV_GET_DPD_STATUS_CMDID) \ + OP(WMI_MLO_SETUP_CMDID) \ + OP(WMI_MLO_READY_CMDID) \ + OP(WMI_MLO_TEARDOWN_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1862,6 +1873,8 @@ typedef enum { OP(WMI_TWT_NOTIFY_EVENTID) \ OP(WMI_MLO_LINK_SET_ACTIVE_RESP_EVENTID) \ OP(WMI_PDEV_GET_DPD_STATUS_EVENTID) \ + OP(WMI_MLO_SETUP_COMPLETE_EVENTID) \ + OP(WMI_MLO_TEARDOWN_COMPLETE_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2241,7 +2254,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_WMM_PARAMS_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_start_request_cmd_fixed_param, wmi_vdev_start_request_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_channel, wmi_channel, chan, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_p2p_noa_descriptor, noa_descriptors, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_mlo_params, mlo_params, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_mlo_params, mlo_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_partner_link_params, partner_link_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_START_REQUEST_CMDID); @@ -2336,7 +2350,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_IPSEC_NATKEEPALIVE_FILTER_CMDID); 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_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_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); @@ -2708,7 +2723,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_TX_CMDID); #define WMITLV_TABLE_WMI_MGMT_TX_SEND_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_tx_send_cmd_fixed_param, wmi_mgmt_tx_send_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tx_send_params, wmi_tx_send_params, tx_send_params, WMITLV_SIZE_FIX) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tx_send_params, wmi_tx_send_params, tx_send_params, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mlo_tx_send_params, mlo_tx_send_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_TX_SEND_CMDID); @@ -4610,6 +4626,22 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MLO_LINK_SET_ACTIVE_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_get_dpd_status_cmd_fixed_param, wmi_pdev_get_dpd_status_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_DPD_STATUS_CMDID); +/** WMI cmd used to indicate hw_links part of MLO */ +#define WMITLV_TABLE_WMI_MLO_SETUP_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_setup_cmd_fixed_param, wmi_mlo_setup_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, hw_link_ids, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_SETUP_CMDID); + +/** WMI cmd used for init synchronization of hw_links part of MLO */ +#define WMITLV_TABLE_WMI_MLO_READY_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_ready_cmd_fixed_param, wmi_mlo_ready_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_READY_CMDID); + +/** WMI cmd used for tearing down a hw_link part of MLO */ +#define WMITLV_TABLE_WMI_MLO_TEARDOWN_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_teardown_fixed_param, wmi_mlo_teardown_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_TEARDOWN_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -6224,6 +6256,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MLO_LINK_SET_ACTIVE_RESP_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_get_dpd_status_evt_fixed_param, wmi_pdev_get_dpd_status_evt_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_DPD_STATUS_EVENTID); +/* Response event for MLO setup cmd */ +#define WMITLV_TABLE_WMI_MLO_SETUP_COMPLETE_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_setup_complete_event_fixed_param, wmi_mlo_setup_complete_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_SETUP_COMPLETE_EVENTID); + +/* Response event for MLO teardown cmd */ +#define WMITLV_TABLE_WMI_MLO_TEARDOWN_COMPLETE_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_teardown_complete_fixed_param, wmi_mlo_teardown_complete_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_TEARDOWN_COMPLETE_EVENTID); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index ab8e7d43c7..647d05f17b 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -1366,6 +1366,12 @@ typedef enum { /** WMI commands specific to MLO **/ /** MLO link active / inactive Request command */ WMI_MLO_LINK_SET_ACTIVE_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_MLO), + /** WMI cmd used to indicate hw_links part of MLO */ + WMI_MLO_SETUP_CMDID, + /** WMI cmd used for init synchronization of hw_links part of MLO */ + WMI_MLO_READY_CMDID, + /** WMI cmd used for tearing down a hw_link part of MLO */ + WMI_MLO_TEARDOWN_CMDID, } WMI_CMD_ID; typedef enum { @@ -2077,6 +2083,10 @@ typedef enum { /** WMI event specific to MLO **/ /** MLO link active / inactive response event */ WMI_MLO_LINK_SET_ACTIVE_RESP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MLO), + /* Response event for MLO setup cmd */ + WMI_MLO_SETUP_COMPLETE_EVENTID, + /* Response event for MLO teardown cmd */ + WMI_MLO_TEARDOWN_COMPLETE_EVENTID, } WMI_EVT_ID; /* defines for OEM message sub-types */ @@ -5659,6 +5669,14 @@ typedef struct { }; } wmi_tx_send_params; +typedef struct { + A_UINT32 tlv_header; /* TLV tag (WMITLV_TAG_STRUC_wmi_mlo_tx_send_params) and len */ + A_UINT32 hw_link_id; /** Unique link id across SOCs, provided by QMI handshake. + * If 0xFFFF then the frame will be queued in the MLO queue + * If valid hw_link_id + */ +} wmi_mlo_tx_send_params; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mgmt_tx_send_cmd_fixed_param */ A_UINT32 vdev_id; @@ -5699,6 +5717,7 @@ typedef struct { */ /* This TLV is followed by wmi_tx_send_params * wmi_tx_send_params tx_send_params; + * wmi_mlo_tx_send_params mlo_tx_send_params[]; */ } wmi_mgmt_tx_send_cmd_fixed_param; @@ -10352,6 +10371,8 @@ typedef struct { * bits 0 - mlo enable flag; * bits 1 - assoc link flag; * bits 2 - primary_umac flag; + * bits 3 - is logical link index valid + * bits 4 - is mlo peer id valid */ #define WMI_MLO_FLAGS_GET_ENABLED(mlo_flags) WMI_GET_BITS(mlo_flags, 0, 1) #define WMI_MLO_FLAGS_SET_ENABLED(mlo_flags, value) WMI_SET_BITS(mlo_flags, 0, 1, value) @@ -10359,6 +10380,10 @@ typedef struct { #define WMI_MLO_FLAGS_SET_ASSOC_LINK(mlo_flags, value) WMI_SET_BITS(mlo_flags, 1, 1, value) #define WMI_MLO_FLAGS_GET_PRIMARY_UMAC(mlo_flags) WMI_GET_BITS(mlo_flags, 2, 1) #define WMI_MLO_FLAGS_SET_PRIMARY_UMAC(mlo_flags, value) WMI_SET_BITS(mlo_flags, 2, 1, value) +#define WMI_MLO_FLAGS_GET_LINK_INDEX_VALID(mlo_flags) WMI_GET_BITS(mlo_flags, 3, 1) +#define WMI_MLO_FLAGS_SET_LINK_INDEX_VALID(mlo_flags, value) WMI_SET_BITS(mlo_flags, 3, 1, value) +#define WMI_MLO_FLAGS_GET_PEER_ID_VALID(mlo_flags) WMI_GET_BITS(mlo_flags, 4, 1) +#define WMI_MLO_FLAGS_SET_PEER_ID_VALID(mlo_flags, value) WMI_SET_BITS(mlo_flags, 4, 1, value) /* this structure used for pass mlo flags*/ typedef struct { @@ -10367,12 +10392,21 @@ typedef struct { A_UINT32 mlo_enabled:1, /* indicate is MLO enabled */ mlo_assoc_link:1, /* indicate is the link used to initialize the association of mlo connection */ mlo_primary_umac:1, /* indicate is the link on primary UMAC, WIN only flag */ - unused: 29; + mlo_logical_link_index_valid:1, /* indicate if the logial link index in wmi_peer_assoc_mlo_params is valid */ + mlo_peer_id_valid:1, /* indicate if the mlo peer id in wmi_peer_assoc_mlo_params is valid */ + unused: 27; }; A_UINT32 mlo_flags; }; } wmi_mlo_flags; +typedef struct { + A_UINT32 tlv_header;/** TLV tag (WMITLV_TAG_STRUC_wmi_partner_link_params) and len;*/ + A_UINT32 vdev_id; /** partner vdev_id */ + A_UINT32 hw_link_id; /** hw_link_id: Unique link id across SOCs, got as part of QMI handshake */ + wmi_mac_addr vdev_macaddr; /** VDEV MAC address */ +} wmi_partner_link_params; + /* this TLV structure used for pass mlo parameters on vdev create*/ typedef struct { A_UINT32 tlv_header; /** TLV tag and len; */ @@ -11147,6 +11181,9 @@ typedef struct { * wmi_vdev_start_mlo_params mlo_params[0,1]; <-- vdev start MLO parameters * optional TLV, only present for MLO vdevs, * If the vdev is non-MLO the array length should be 0. + * wmi_partner_link_info link_info[]; <-- partner link info + * optional TLV, only present for MLO vdevs, + * If the vdev is non-MLO the array length should be 0. */ } wmi_vdev_start_request_cmd_fixed_param; @@ -14234,6 +14271,12 @@ enum WMI_PEER_STA_TYPE { #define WMI_PEER_ASSOC_GET_BSS_MAX_IDLE_PERIOD(_dword) \ WMI_GET_BITS(_dword, WMI_PEER_ASSOC_BSS_MAX_IDLE_PERIOD_BITPOS, 16) +typedef struct { + A_UINT32 tlv_header; /** TLV tag (MITLV_TAG_STRUC_wmi_peer_assoc_mlo_partner_link_params) and len */ + A_UINT32 vdev_id; /** unique id identifying the VDEV, generated by the caller */ + A_UINT32 hw_mld_link_id; /** Unique link id across SOCs, got as part of QMI handshake. */ +} wmi_peer_assoc_mlo_partner_link_params; + /* This TLV structure used to pass mlo Parameters on peer assoc, only apply for mlo-peers */ typedef struct { A_UINT32 tlv_header; /** TLV tag and len; */ @@ -14241,6 +14284,13 @@ typedef struct { wmi_mlo_flags mlo_flags; /** MLD MAC address */ wmi_mac_addr mld_macaddr; + /** Unique index for links of the mlo. Starts with Zero */ + A_UINT32 logical_link_index; + /** ML Peer ID + * In WIN systems, mld_peer_id is generated by Host. + * In MCL systems, mld_peer_id will be set to invalid peer id. + */ + A_UINT32 mld_peer_id; } wmi_peer_assoc_mlo_params; typedef struct { @@ -14383,6 +14433,7 @@ typedef struct { * Only present for MLO peers. * For non-MLO peers the array length should be 0. * 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_complete_cmd_fixed_param; @@ -26907,7 +26958,7 @@ typedef enum wmi_hw_mode_config_type { /* * Per HW mode MLO capability flags - * use bits 31:28 of A_UINT32 hw_mode_config_type for Per HW mode MLO + * use bits 31:27 of A_UINT32 hw_mode_config_type for Per HW mode MLO * capability flags... * WMI_MLO_CAP_FLAG_NONE: Do not support MLO for the specific HW mode * WMI_MLO_CAP_FLAG_NON_STR_IN_DBS: Support STR MLO when DBS for the specific @@ -26918,22 +26969,35 @@ typedef enum wmi_hw_mode_config_type { * HW mode * WMI_MLO_CAP_FLAG_STR_IN_SBS: Support Non-STR MLO when SBS for the * specific HW mode + * WMI_MLO_CAP_FLAG_STR: Support STR for the specific HW mode. */ -#define WMI_MLO_CAP_FLAG_NONE 0x0 -#define WMI_MLO_CAP_FLAG_NON_STR_IN_DBS 0x1 -#define WMI_MLO_CAP_FLAG_STR_IN_DBS 0x2 -#define WMI_MLO_CAP_FLAG_NON_STR_IN_SBS 0x4 -#define WMI_MLO_CAP_FLAG_STR_IN_SBS 0x8 +#define WMI_MLO_CAP_FLAG_NONE 0x00 +#define WMI_MLO_CAP_FLAG_NON_STR_IN_DBS 0x01 +#define WMI_MLO_CAP_FLAG_STR_IN_DBS 0x02 +#define WMI_MLO_CAP_FLAG_NON_STR_IN_SBS 0x04 +#define WMI_MLO_CAP_FLAG_STR_IN_SBS 0x08 +#define WMI_MLO_CAP_FLAG_STR 0x10 /* * hw_mode_config_type sub-fields for chips that support 802.11BE/MLO: - * bits 28:0 - hw_mode_config - * bits 31:28 - per HW mode MLO capability flags + * bits 26:0 - hw_mode_config + * bits 31:27 - per HW mode MLO capability flags */ -#define WMI_BECAP_PHY_GET_HW_MODE_CFG(hw_mode_config_type) WMI_GET_BITS(hw_mode_config_type, 0, 28) -#define WMI_BECAP_PHY_SET_HW_MODE_CFG(hw_mode_config_type, value) WMI_SET_BITS(hw_mode_config_type, 0, 28, value) -#define WMI_BECAP_PHY_GET_MLO_CAP(hw_mode_config_type) WMI_GET_BITS(hw_mode_config_type, 28, 4) -#define WMI_BECAP_PHY_SET_MLO_CAP(hw_mode_config_type, value) WMI_SET_BITS(hw_mode_config_type, 28, 4, value) +#define WMI_BECAP_PHY_GET_HW_MODE_CFG(hw_mode_config_type) WMI_GET_BITS(hw_mode_config_type, 0, 27) +#define WMI_BECAP_PHY_SET_HW_MODE_CFG(hw_mode_config_type, value) WMI_SET_BITS(hw_mode_config_type, 0, 27, value) +#define WMI_BECAP_PHY_GET_MLO_CAP(hw_mode_config_type) WMI_GET_BITS(hw_mode_config_type, 27, 5) +#define WMI_BECAP_PHY_SET_MLO_CAP(hw_mode_config_type, value) WMI_SET_BITS(hw_mode_config_type, 27, 5, value) + +/* + * pdev_id sub-fields for chips that support 802.11BE/MLO + * as part of WMI_MAC_PHY_CAPABILITIES and WMI_MAC_PHY_CAPABILITIES_EXT: + * bits 16:0 - pdev_id + * bits 32:16 - Unique link id across SOCs, got as part of QMI handshake. + */ +#define WMI_PHY_GET_PDEV_ID(pdev_id) WMI_GET_BITS(pdev_id, 0, 16) +#define WMI_PHY_SET_PDEV_ID(pdev_id, value) WMI_SET_BITS(pdev_id, 0, 16, value) +#define WMI_PHY_GET_HW_LINK_ID(pdev_id) WMI_GET_BITS(pdev_id, 16, 16) +#define WMI_PHY_SET_HW_LINK_ID(pdev_id, value) WMI_SET_BITS(pdev_id, 16, 16, value) #define WMI_SUPPORT_11B_GET(flags) WMI_GET_BITS(flags, 0, 1) #define WMI_SUPPORT_11B_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value) @@ -27035,8 +27099,20 @@ typedef struct { * No particular ordering of WMI_MAC_PHY_CAPABILITIES elements should be assumed, * though in practice the elements may always be ordered by hw_mode_id */ A_UINT32 hw_mode_id; - /* pdev_id starts with 1. pdev_id 1 => phy_id 0, pdev_id 2 => phy_id 1 */ - A_UINT32 pdev_id; + /* + * pdev_id starts with 1. pdev_id 1 => phy_id 0, pdev_id 2 => phy_id 1 + * hw_link_id: Unique link id across SOCs, got as part of QMI handshake. + * For legacy chips which do not support MLO, these top bits will always + * be set to 0, so it won't impact the legacy chips which treat pdev_id + * as 32 bits. + */ + union { + struct { + A_UINT32 pdev_id:16, + hw_link_id:16; + } wmi_pdev_to_link_map; + A_UINT32 pdev_id; + }; /* phy id. Starts with 0 */ A_UINT32 phy_id; /* supported modulations and number of MU beamformees */ @@ -27211,8 +27287,20 @@ typedef struct { * No particular ordering of WMI_MAC_PHY_CAPABILITIES elements should be assumed, * though in practice the elements may always be ordered by hw_mode_id */ A_UINT32 hw_mode_id; - /* pdev_id starts with 1. pdev_id 1 => phy_id 0, pdev_id 2 => phy_id 1 */ - A_UINT32 pdev_id; + /* + * pdev_id starts with 1. pdev_id 1 => phy_id 0, pdev_id 2 => phy_id 1 + * hw_link_id: Unique link id across SOCs, got as part of QMI handshake. + * For legacy chips which do not support MLO, these top bits will always + * be set to 0, so it won't impact the legacy chips which treat pdev_id + * as 32 bits. + */ + union { + struct { + A_UINT32 pdev_id:16, + hw_link_id:16; + } wmi_pdev_to_link_map; + A_UINT32 pdev_id; + }; /* phy id. Starts with 0 */ A_UINT32 phy_id; A_UINT32 wireless_modes_ext; /* REGDMN MODE EXT, see REGDMN_MODE_ enum */ @@ -27253,7 +27341,7 @@ typedef struct { * Identify a particular type of HW mode such as SBS, DBS etc. * Refer to WMI_HW_MODE_CONFIG_TYPE values. * - * Use bits 31:28 of hw_mode_config_type for Per HW mode MLO capability + * Use bits 31:27 of hw_mode_config_type for Per HW mode MLO capability * flags. * Refer to WMI_MLO_CAP_FLAG_XXX. For legacy chips which do not support * MLO, these top bits will always be set to 0, so it won't impact the @@ -27261,8 +27349,8 @@ typedef struct { */ union { struct { - A_UINT32 hw_mode_config :28, - mlo_cap_flag :4; /* see WMI_MLO_CAP_FLAG_ defs */ + A_UINT32 hw_mode_config :27, + mlo_cap_flag :5; /* see WMI_MLO_CAP_FLAG_ defs */ }; A_UINT32 hw_mode_config_type; }; @@ -28380,6 +28468,9 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_PEER_TID_LATENCY_CONFIG_CMDID); WMI_RETURN_STRING(WMI_MLO_LINK_SET_ACTIVE_CMDID); WMI_RETURN_STRING(WMI_PDEV_GET_DPD_STATUS_CMDID); + WMI_RETURN_STRING(WMI_MLO_SETUP_CMDID); + WMI_RETURN_STRING(WMI_MLO_READY_CMDID); + WMI_RETURN_STRING(WMI_MLO_TEARDOWN_CMDID); } return "Invalid WMI cmd"; @@ -33819,6 +33910,57 @@ typedef struct wmi_mlo_link_set_active_resp_event */ } wmi_mlo_link_set_active_resp_event_fixed_param; +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mlo_setup_cmd_fixed_param; */ + A_UINT32 tlv_header; + /** Unique ID reprsenting the hw_links part of the MLD */ + A_UINT32 mld_group_id; + /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 pdev_id; +/* + * Followed by TLVs: + * A_UINT32 hw_link_ids[]; + */ +} wmi_mlo_setup_cmd_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mlo_setup_complete_event_fixed_param; */ + A_UINT32 tlv_header; + /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 pdev_id; + /** Return status. 0 for success, non-zero otherwise */ + A_UINT32 status; +} wmi_mlo_setup_complete_event_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mlo_ready_cmd_fixed_param; */ + A_UINT32 tlv_header; + /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 pdev_id; +} wmi_mlo_ready_cmd_fixed_param; + +typedef enum wmi_mlo_tear_down_reason_code_type { + WMI_MLO_TEARDOWN_SSR_REASON, +} WMI_MLO_TEARDOWN_REASON_TYPE; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mlo_teardown_fixed_param; */ + A_UINT32 tlv_header; + /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 pdev_id; + /** reason_code: of type WMI_TEARDOWN_REASON_TYPE */ + A_UINT32 reason_code; +} wmi_mlo_teardown_fixed_param; + +typedef struct { + /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mlo_teardown_complete_fixed_param; */ + A_UINT32 tlv_header; + /** pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 pdev_id; + /** Return status. 0 for success, non-zero otherwise */ + A_UINT32 status; +} wmi_mlo_teardown_complete_fixed_param; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 114d3e7c14..27bb01ed9a 100644 --- a/fw/wmi_version.h +++ b/fw/wmi_version.h @@ -36,7 +36,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_ 976 +#define __WMI_REVISION_ 977 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work