From 2044eb5632b53e9e68a67229879c59c978c94ab5 Mon Sep 17 00:00:00 2001 From: spuligil Date: Fri, 16 Jan 2026 12:05:18 -0800 Subject: [PATCH] fw-api: CL 31404904 - update fw common interface files Change-Id: I368177a34713c2e21c07f844d68f3b0d69dac6a4 CRs-Fixed: 3830439 --- fw/wmi_services.h | 6 ++ fw/wmi_tlv_defs.h | 150 +++++++++++++++++++++++++++++++--- fw/wmi_unified.h | 199 ++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 4 files changed, 344 insertions(+), 13 deletions(-) diff --git a/fw/wmi_services.h b/fw/wmi_services.h index f7e458b2c14a..59d421607c6c 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -751,6 +751,12 @@ typedef enum { WMI_SERVICE_P2P_CANCEL_ONE_SHOT_NOA_SUPPORT = 487, /* Indicates FW support for P2P GO/GC cancel one-shot NOA feature */ WMI_SERVICE_SMD_BSS_TRANSITION_SUPPORT = 488, /* Indicates FW supports S(eamless)M(obility)D(omain) BSS transition */ + /* Service caps related to SMD Roaming - start */ + WMI_SERVICE_SMD_SUPPORT_ROAMING = 489, + WMI_SERVICE_SMD_SUPPORT_DL_FORWARD = 490, + WMI_SERVICE_SMD_SUPPORT_UL_FORWARD = 491, + /* Service caps related to SMD Roaming - end */ + WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 9ee30a751ee5..13f000568137 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1567,6 +1567,12 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_power_datapath_stats_event_fixed_param, WMITLV_TAG_STRUC_wmi_pdev_power_stats_info, WMITLV_TAG_STRUC_wmi_pdev_tx_rate_info, + WMITLV_TAG_STRUC_wmi_vdev_start_smd_params, + WMITLV_TAG_STRUC_wmi_smd_roam_config_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_smd_roam_config_event_fixed_param, + WMITLV_TAG_STRUC_wmi_smd_roam_peer_unified_setup_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_smd_roam_peer_unified_setup_complete_event_fixed_param, + WMITLV_TAG_STRUC_wmi_smd_roam_peer_tid_info, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2158,6 +2164,8 @@ typedef enum { OP(WMI_VDEV_UHR_CU_CMDID) \ OP(WMI_PDEV_UHR_CU_CMDID) \ OP(WMI_PDEV_POWER_DATAPATH_STATS_CMDID) \ + OP(WMI_SMD_ROAM_CONFIG_CMDID) \ + OP(WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2510,6 +2518,8 @@ typedef enum { OP(WMI_IPA_RING_STATS_CONF_EVENTID) \ OP(WMI_PDEV_UHR_CU_EVENTID) \ OP(WMI_PDEV_POWER_DATAPATH_STATS_EVENTID) \ + OP(WMI_SMD_ROAM_CONFIG_EVENTID) \ + OP(WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2531,8 +2541,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_INIT_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_create_cmd_fixed_param, wmi_peer_create_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_create_mlo_params, mlo_params, WMITLV_SIZE_VAR) /* NOTE: - * Any new TLV addition in WMI_PEER_CREATE_CMDID needs to be included as - * TLV in WMI_VDEV_UNIFIED_CONNECT_CMDID as well to maintain compatibility. + * To maintain compatibility, any new TLV addition in WMI_PEER_CREATE_CMDID + * needs to also be included as a TLV in WMI_VDEV_UNIFIED_CONNECT_CMDID and + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID. * * WMI_VDEV_UNIFIED_CONNECT_CMDID substitutes for 5 connection related * cmds: @@ -2541,6 +2552,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_INIT_CMDID); * WMI_PEER_ASSOC_CMDID, * WMI_PEER_ASSOC_V2_CMDID, * WMI_VDEV_UP_CMDID + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID substitutes for 4 connection related + * cmds: + * WMI_PEER_CREATE_CMDID, + * WMI_PEER_ASSOC_CMDID, + * WMI_PEER_ASSOC_V2_CMDID, + * WMI_VDEV_INSTALL_KEY */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CREATE_CMDID); @@ -2914,7 +2931,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_WMM_PARAMS_CMDID); 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_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_channel, dbw_chan, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dbw_chan_info, dbw_chan_info, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dbw_chan_info, dbw_chan_info, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_smd_params, smd_params, WMITLV_SIZE_VAR) /* NOTE: * Any new TLV addition in WMI_VDEV_START_REQUEST_CMDID needs to be included as * TLV in WMI_VDEV_UNIFIED_CONNECT_CMDID as well to maintain compatibility. @@ -3005,7 +3023,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_FD_TMPL_CMDID); #define WMITLV_TABLE_WMI_VDEV_INSTALL_KEY_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_install_key_cmd_fixed_param, wmi_vdev_install_key_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)\ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, key_data, WMITLV_SIZE_VAR) - +/* NOTE: + * To maintain compatibility, any new TLV added in WMI_VDEV_INSTALL_KEY_CMDID + * needs to be included as a TLV in WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID too. + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID substitutes for 4 connection related + * cmds: + * WMI_PEER_CREATE_CMDID, + * WMI_PEER_ASSOC_CMDID, + * WMI_PEER_ASSOC_V2_CMDID, + * WMI_VDEV_INSTALL_KEY + */ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_INSTALL_KEY_CMDID); /* VDEV set LTF key seed Cmd */ @@ -3073,8 +3100,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_cfp_params, wmi_peer_assoc_cfp_params, cfp_params, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_smd_params, wmi_peer_assoc_smd_params, smd_params, WMITLV_SIZE_VAR) /* NOTE: - * Any new TLV addition in WMI_PEER_ASSOC_V2_CMDID needs to be included as - * TLV in WMI_VDEV_UNIFIED_CONNECT_CMDID as well to maintain compatibility. + * To maintain compatibility, any new TLV added in WMI_PEER_ASSOC_V2_CMDID + * needs to be also included as a TLV in WMI_VDEV_UNIFIED_CONNECT_CMDID and + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID. * * WMI_VDEV_UNIFIED_CONNECT_CMDID substitutes for 5 connection related * cmds: @@ -3083,6 +3111,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CMDID); * WMI_PEER_ASSOC_CMDID, * WMI_PEER_ASSOC_V2_CMDID, * WMI_VDEV_UP_CMDID + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID substitutes for 4 connection related + * cmds: + * WMI_PEER_CREATE_CMDID, + * WMI_PEER_ASSOC_CMDID, + * WMI_PEER_ASSOC_V2_CMDID, + * WMI_VDEV_INSTALL_KEY */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_V2_CMDID); @@ -6160,8 +6194,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_WLAN_MODE_REQ_CMDID); \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_up_cmd_fixed_param, wmi_vdev_up_cmd_fixed_param, vdev_up_fixed_param, WMITLV_SIZE_FIX) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_co_located_chan_info, vdev_up_co_located_chan_info, WMITLV_SIZE_VAR) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_smd_params, wmi_peer_assoc_smd_params, smd_params, WMITLV_SIZE_VAR) - + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_smd_params, wmi_peer_assoc_smd_params, smd_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_start_smd_params, vdev_smd_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_smd_params, wmi_peer_assoc_smd_params, peer_assoc_v2_smd_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_UNIFIED_CONNECT_CMDID); /* WMI command for unified disconnect cmd */ @@ -6209,6 +6244,57 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_UHR_CU_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_uhr_ap_elr_reception_params, elr_reception_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_UHR_CU_CMDID); +/* WMI command for unified SMD PEER SETUP cmd */ +#define WMITLV_TABLE_WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_smd_roam_peer_unified_setup_cmd_fixed_param, wmi_smd_roam_peer_unified_setup_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_smd_roam_peer_tid_info, smd_roam_peer_tid_info, WMITLV_SIZE_VAR) \ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_create_cmd_fixed_param, wmi_peer_create_cmd_fixed_param, peer_create_fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_create_mlo_params, peer_create_mlo_params, WMITLV_SIZE_VAR) \ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_complete_cmd_fixed_param, wmi_peer_assoc_complete_cmd_fixed_param, peer_assoc_fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_assoc_peer_legacy_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_assoc_peer_ht_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vht_rate_set, wmi_vht_rate_set, peer_assoc_peer_vht_rates, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_he_rate_set, peer_assoc_peer_he_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_params, peer_assoc_mlo_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_eht_rate_set, peer_assoc_peer_eht_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, peer_assoc_partner_link_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_assoc_peer_tid_to_link_map, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_operating_mode_params, peer_assoc_operating_mode_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_mpduq_params, peer_assoc_mgmt_mpduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_msduq_params, peer_assoc_mgmt_msduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_hol_msduq_params, peer_assoc_hol_mdsuq_params, WMITLV_SIZE_VAR) \ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_complete_cmd_fixed_param, wmi_peer_assoc_complete_cmd_fixed_param, peer_assoc_v2_fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_assoc_v2_peer_legacy_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, peer_assoc_v2_peer_ht_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vht_rate_set, wmi_vht_rate_set, peer_assoc_v2_peer_vht_rates, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_he_rate_set, peer_assoc_v2_peer_he_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_params, peer_assoc_v2_mlo_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_eht_rate_set, peer_assoc_v2_peer_eht_rates, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mlo_partner_link_params, peer_assoc_v2_partner_link_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_tid_to_link_map, peer_assoc_v2_peer_tid_to_link_map, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_operating_mode_params, peer_assoc_v2_operating_mode_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_mpduq_params, peer_assoc_v2_mgmt_mpduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_mgmt_msduq_params, peer_assoc_v2_mgmt_msduq_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_assoc_hol_msduq_params, peer_assoc_v2_hol_mdsuq_params, WMITLV_SIZE_VAR)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_npca_cap_params, peer_assoc_v2_peer_npca_cap_params, WMITLV_SIZE_VAR)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_create_mlo_params, peer_assoc_v2_create_mlo_params, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_cfp_params, wmi_peer_assoc_cfp_params, peer_assoc_v2_cfp_params, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_smd_params, wmi_peer_assoc_smd_params, peer_assoc_v2_smd_params, WMITLV_SIZE_FIX) \ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_install_key_cmd_fixed_param, wmi_vdev_install_key_cmd_fixed_param, key_install_fixed_param, WMITLV_SIZE_FIX)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, key_data, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID); + +/* WMI command for unified SMD Config cmd */ +#define WMITLV_TABLE_WMI_SMD_ROAM_CONFIG_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_smd_roam_config_cmd_fixed_param, wmi_smd_roam_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_smd_roam_peer_tid_info, smd_roam_peer_tid_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_SMD_ROAM_CONFIG_CMDID); + + /************************** TLV definitions of WMI events *******************************/ @@ -6490,6 +6576,17 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_DELETE_RESP_EVENTID); /* VDEV Install Key Complete Event */ #define WMITLV_TABLE_WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_install_key_complete_event_fixed_param, wmi_vdev_install_key_complete_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +/* NOTE: + * To maintain compatibility, any new TLV added in + * WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID needs to also be included as a TLV in + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID. + * + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID substitutes for + * 3 connection related events: + * WMI_PEER_CREATE_CONF_EVENTID, + * WMI_PEER_ASSOC_CONF_EVENTID, + * WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID + */ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID); /* VDEV disconnect Event */ @@ -7288,14 +7385,20 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_DELETE_ALL_PEER_RESP_EVENTID); #define WMITLV_TABLE_WMI_PEER_ASSOC_CONF_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_conf_event_fixed_param, wmi_peer_assoc_conf_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) /* NOTE: - * Any new TLV addition in WMI_PEER_ASSOC_CONF_EVENTID needs to be included - * as TLV in WMI_VDEV_UNIFIED_CONNECT_EVENTID as well to maintain compatibility. + * To maintain compatibility, any new TLV added in WMI_PEER_ASSOC_CONF_EVENTID + * needs to also be included as a TLV in WMI_VDEV_UNIFIED_CONNECT_EVENTID and + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID. * * WMI_VDEV_UNIFIED_CONNECT_EVENTID substitutes for 3 connection related * events: * WMI_PEER_CREATE_CONF_EVENTID, * WMI_VDEV_START_RESP_EVENTID, * WMI_PEER_ASSOC_CONF_EVENTID + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID substitutes for + * 3 connection related events: + * WMI_PEER_CREATE_CONF_EVENTID, + * WMI_PEER_ASSOC_CONF_EVENTID, + * WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CONF_EVENTID); @@ -7303,14 +7406,20 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ASSOC_CONF_EVENTID); #define WMITLV_TABLE_WMI_PEER_CREATE_CONF_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_create_conf_event_fixed_param, wmi_peer_create_conf_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) /* NOTE: - * Any new TLV addition in WMI_PEER_CREATE_CONF_EVENTID needs to be included - * as TLV in WMI_VDEV_UNIFIED_CONNECT_EVENTID as well to maintain compatibility. + * To maintain compatibility, any new TLV added in WMI_PEER_CREATE_CONF_EVENTID + * needs to also be included as a TLV in WMI_VDEV_UNIFIED_CONNECT_EVENTID and + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID. * * WMI_VDEV_UNIFIED_CONNECT_EVENTID substitutes for 3 connection related * events: * WMI_PEER_CREATE_CONF_EVENTID, * WMI_VDEV_START_RESP_EVENTID, * WMI_PEER_ASSOC_CONF_EVENTID + * WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID substitutes for + * 3 connection related events: + * WMI_PEER_CREATE_CONF_EVENTID, + * WMI_PEER_ASSOC_CONF_EVENTID, + * WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID */ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_CREATE_CONF_EVENTID); @@ -8491,6 +8600,23 @@ WMITLV_CREATE_PARAM_STRUC(WMI_IPA_RING_STATS_CONF_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_uhr_cu_status, cu_status, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_UHR_CU_EVENTID); +/* WMI unified SMD PEER SETUP event */ +#define WMITLV_TABLE_WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_smd_roam_peer_unified_setup_complete_event_fixed_param, wmi_smd_roam_peer_unified_setup_complete_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_create_conf_event_fixed_param, wmi_peer_create_conf_event_fixed_param, peer_create_conf_fixed_param, WMITLV_SIZE_FIX) \ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_assoc_conf_event_fixed_param, wmi_peer_assoc_conf_event_fixed_param, peer_assoc_conf_fixed_param, WMITLV_SIZE_FIX)\ + /*---*/ \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_install_key_complete_event_fixed_param, wmi_vdev_install_key_complete_event_fixed_param, vdev_install_key_complete_fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID); + +/* WMI unified SMD Config event */ +#define WMITLV_TABLE_WMI_SMD_ROAM_CONFIG_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_smd_roam_config_event_fixed_param, wmi_smd_roam_config_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_SMD_ROAM_CONFIG_EVENTID); + + #ifdef __cplusplus } #endif diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 8a08d0ff98a5..9afe991a4661 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -373,6 +373,7 @@ typedef enum { WMI_GRP_TDMA, /* 0x4c TDMA */ WMI_GRP_MANUAL_UL_TRIG, /* 0x4d Manual UL OFDMA Trigger */ WMI_GRP_ENERGY_MGMT, /* 0x4e energy management */ + WMI_GRP_SMD, /* 0x4f SMD Roaming */ } WMI_GRP_ID; #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) @@ -1814,6 +1815,14 @@ typedef enum { WMI_ENERGY_MGMT_PUO_CONFIG_CMDID, /** WMI cmd used to control ECO mode config */ WMI_ENERGY_MGMT_ECO_MODE_CONFIG_CMDID, + + /** WMI cmd used to set the SMD Roam config */ + WMI_SMD_ROAM_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_SMD), + /** + * WMI cmd used to set up the peer on the target AP during Prep Phase + * (Combine PeerCreate,Assoc, Key Install) + */ + WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID, } WMI_CMD_ID; typedef enum { @@ -2778,6 +2787,14 @@ typedef enum { * WMI Event to send Manual UL OFDMA Trigger frame RX PPDU info to Host */ WMI_MANUAL_UL_OFDMA_TRIG_RX_PEER_USERINFO_EVENTID, + + /* WMI event used during SMD Roaming */ + WMI_SMD_ROAM_CONFIG_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SMD), + /* + * WMI event to indicate the status of the SMD_ROAM_PEER_UNIFIED_SETUP_CMD + * used during SMD Roaming + */ + WMI_SMD_ROAM_PEER_UNIFIED_SETUP_COMPLETE_EVENTID, } WMI_EVT_ID; /* defines for OEM message sub-types */ @@ -7961,6 +7978,9 @@ typedef struct { #define WMI_TX_SEND_FLAG_SET_P2P_FRAME_ON_STA_VDEV 0x00000008 #define WMI_TX_SEND_FLAG_SET_P2P_FRAME_ON_STA_VDEV_GET(tx_flags) WMI_GET_BITS(tx_flags, 3, 1) #define WMI_TX_SEND_FLAG_SET_P2P_FRAME_ON_STA_VDEV_SET(tx_flags, value) WMI_SET_BITS(tx_flags, 3, 1, value) +#define WMI_TX_SEND_FLAG_SET_SMD_HIGH_PRIORITY_FRAME 0x00000010 +#define WMI_TX_SEND_FLAG_SET_SMD_HIGH_PRIORITY_FRAME_GET(tx_flags) WMI_GET_BITS(tx_flags, 4, 1) +#define WMI_TX_SEND_FLAG_SET_SMD_HIGH_PRIORITY_FRAME_SET(tx_flags, value) WMI_SET_BITS(tx_flags, 4, 1, value) typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_send_params */ @@ -17586,6 +17606,33 @@ typedef struct { #define WMI_SCAN_MODE_VDEV_FLAG_ENABLED(flag) ((flag & VDEV_FLAGS_SCAN_MODE_VAP) ? 1 : 0) + +#define WMI_VDEV_START_SMD_FLAGS_GET_ROAM_ENABLED(mlo_flags) WMI_GET_BITS(mlo_flags, 0, 1) +#define WMI_VDEV_START_SMD_FLAGS_SET_ROAM_ENABLED(mlo_flags, value) WMI_SET_BITS(mlo_flags, 0, 1, value) +#define WMI_VDEV_START_SMD_FLAGS_GET_DL_DATA_FORWARDING(mlo_flags) WMI_GET_BITS(mlo_flags, 1, 1) +#define WMI_VDEV_START_SMD_FLAGS_SET_DL_DATA_FORWARDING(mlo_flags, value) WMI_SET_BITS(mlo_flags, 1, 1, value) +#define WMI_VDEV_START_SMD_FLAGS_GET_UL_DATA_FORWARDING(mlo_flags) WMI_GET_BITS(mlo_flags, 2, 1) +#define WMI_VDEV_START_SMD_FLAGS_SET_UL_DATA_FORWARDING(mlo_flags, value) WMI_SET_BITS(mlo_flags, 2, 1, value) +#define WMI_VDEV_START_SMD_FLAGS_GET_PTK_MODE(mlo_flags) WMI_GET_BITS(mlo_flags, 3, 1) +#define WMI_VDEV_START_SMD_FLAGS_SET_PTK_MODE(mlo_flags, value) WMI_SET_BITS(mlo_flags, 3, 1, value) + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len;tag equals WMITLV_TAG_STRUC_wmi_vdev_start_smd_params*/ + /** MLD MAC address */ + wmi_mac_addr smd_macaddr; + union { + struct { + A_UINT32 roam_enabled :1, + dl_data_forwarding :1, + ul_data_forwarding :1, + ptk_mode :1, + reserved :28; + }; + A_UINT32 smd_flags; + }; +} wmi_vdev_start_smd_params; + + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_create_cmd_fixed_param */ /** unique id identifying the VDEV, generated by the caller */ @@ -18653,6 +18700,7 @@ typedef struct { * optional TLV for dbw_chan * wmi_dbw_chan_info dbw_chan_info * optional TLV used for dbw_chan_info + * wmi_vdev_start_smd_params smd_params; */ } wmi_vdev_start_request_cmd_fixed_param; @@ -22418,6 +22466,8 @@ typedef struct { #define WMI_PEER_EXT_PROTECTED_TWT 0x00000040 /* Protected TWT operation Support field in Extended RSN Capabilities element */ #define WMI_PEER_EXT_UHR 0x00000080 /* UHR enabled */ #define WMI_PEER_EXT_F_CRIT_PROTO_HINT_ENABLED 0x40000000 +#define WMI_PEER_EXT_SMD_ASSOC 0x80000000 + /** * Peer rate capabilities. @@ -22736,6 +22786,13 @@ typedef struct { A_UINT32 cfp_padding_delay; } wmi_peer_assoc_cfp_params; /* cfp -> control frame protection */ +#define WMI_PEER_ASSOC_SMD_FLAGS_GET_ROAM_ENABLED(mlo_flags) WMI_GET_BITS(mlo_flags, 0, 1) +#define WMI_PEER_ASSOC_SMD_FLAGS_SET_ROAM_ENABLED(mlo_flags, value) WMI_SET_BITS(mlo_flags, 0, 1, value) +#define WMI_PEER_ASSOC_SMD_FLAGS_GET_DL_DATA_FORWARDING(mlo_flags) WMI_GET_BITS(mlo_flags, 1, 1) +#define WMI_PEER_ASSOC_SMD_FLAGS_SET_DL_DATA_FORWARDING(mlo_flags, value) WMI_SET_BITS(mlo_flags, 1, 1, value) +#define WMI_PEER_ASSOC_SMD_FLAGS_GET_UL_DATA_FORWARDING(mlo_flags) WMI_GET_BITS(mlo_flags, 2, 1) +#define WMI_PEER_ASSOC_SMD_FLAGS_SET_UL_DATA_FORWARDING(mlo_flags, value) WMI_SET_BITS(mlo_flags, 2, 1, value) + /* This TLV structure used to pass smd Parameters on peer assoc */ typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_assoc_smd_params */ @@ -22743,6 +22800,15 @@ typedef struct { wmi_mac_addr smd_identifier; /** SMD capabilities defined in 802.11BN-SMD Information element */ A_UINT32 smd_capabilities; + union { + struct { + A_UINT32 roam_enabled :1, + dl_data_forwarding :1, + ul_data_forwarding :1, + reserved :29; + }; + A_UINT32 smd_flags; + }; } wmi_peer_assoc_smd_params; /* @@ -22953,6 +23019,7 @@ typedef struct { * 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_smd_params peer_assoc_smd_params; */ } wmi_peer_assoc_complete_cmd_fixed_param; @@ -41092,6 +41159,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_VDEV_REPURPOSE_RESP_CMDID); WMI_RETURN_STRING(WMI_IPA_RING_STATS_REQ_CMDID); WMI_RETURN_STRING(WMI_PDEV_POWER_DATAPATH_STATS_CMDID); + WMI_RETURN_STRING(WMI_SMD_ROAM_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_SMD_ROAM_PEER_UNIFIED_SETUP_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -53932,6 +54001,136 @@ typedef struct { } wmi_pdev_uhr_cu_event_fixed_param; +typedef enum { + WMI_SMD_ROAM_CONFIG_ROLE_SERVING_AP = 1, + WMI_SMD_ROAM_CONFIG_ROLE_TARGET_AP, + WMI_SMD_ROAM_CONFIG_ROLE_STA, +} wmi_smd_roam_config_role; + +typedef enum { + WMI_SMD_ROAM_CONFIG_CMD_PREP_REQ = 1, + WMI_SMD_ROAM_CONFIG_CMD_PREP_RESP, + WMI_SMD_ROAM_CONFIG_CMD_EXEC_REQ, + WMI_SMD_ROAM_CONFIG_CMD_EXEC_RESP, + WMI_SMD_ROAM_CONFIG_CMD_DYNAMIC_CONTEXT, + WMI_SMD_ROAM_CONFIG_CMD_TERMINATION, +} wmi_smd_roam_config_cmd_type; + +#define WMI_SMD_ROAM_FLAG_DL_SN_NOT_TRANSFFERED 0x01 +#define WMI_SMD_ROAM_FLAG_UL_SN_NOT_TRANSFFERED 0x02 +#define WMI_SMD_ROAM_FLAG_DISABLE_LINK 0x04 + +#define WMI_SMD_ROAM_PEER_GET_MLSN(dword) \ + WMI_GET_BITS(dword, 0, 16) +#define WMI_SMD_ROAM_PEER_SET_MLSN(dword, value) \ + WMI_SET_BITS(dword, 0, 16, value) + +#define WMI_SMD_ROAM_PEER_GET_OFFSET(dword) \ + WMI_GET_BITS(dword, 16, 16) +#define WMI_SMD_ROAM_PEER_SET_OFFSET(dword, value) \ + WMI_SET_BITS(dword, 16, 16, value) + +typedef struct { + A_UINT32 tlv_header; /* WMITLV_TAG_STRUC_wmi_smd_roam_peer_tid_info */ + A_UINT32 tid_num; + union { + A_UINT32 mlsn__offset__word32; + struct { + A_UINT32 mlsn: 16, + offset: 16; + }; + }; +} wmi_smd_roam_peer_tid_info; + +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_GET_ROLE(cmd_flags) WMI_GET_BITS(mlo_flags, 0, 4) +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_SET_ROLE(cmd_flags, value) WMI_SET_BITS(mlo_flags, 0, 4, value) + +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_GET_CMD_TYPE(cmd_flags) WMI_GET_BITS(mlo_flags, 4, 8) +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_SET_CMD_TYPE(cmd_flags, value) WMI_SET_BITS(mlo_flags, 4, 8, value) + +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_GET_STATUS(cmd_flags) WMI_GET_BITS(mlo_flags, 12, 8) +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_SET_STATUS(cmd_flags, value) WMI_SET_BITS(mlo_flags, 12, 8, value) + +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_GET_ROAM_FLAGS(cmd_flags) WMI_GET_BITS(mlo_flags, 20, 8) +#define WMI_SMD_ROAM_CONFIG_CMD_FLAGS_SET_ROAM_FLAGS(cmd_flags, value) WMI_SET_BITS(mlo_flags, 20, 8, value) + +typedef enum { + WMI_SMD_ROAM_CONFIG_CMD_SUCCESS = 0, + WMI_SMD_ROAM_CONFIG_CMD_FAILURE, +} wmi_smd_roam_config_cmd_status; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_smd_roam_config_cmd_fixed_param */ + /** global unique ID identifying vdev */ + A_UINT32 vdev_id; + /** PEER MAC address */ + wmi_mac_addr peer_mac_addr; + union { + A_UINT32 cmd_flags; + struct { + A_UINT32 role :4, /* wmi_smd_config_role */ + cmd_type :8, /* wmi_smd_config_cmd_type */ + status :8, /* wmi_smd_roam_config_cmd_status */ + roam_flags :8, /* WMI_SMD_ROAM_FLAG_* */ + reserved :4; + }; + }; + A_UINT32 dl_drain_time; /* units = milliseconds */ + /* + * Followed by per tid tlv wmi_smd_roam_peer_tid_info[]. + * Present when dynamic context is set. + */ +} wmi_smd_roam_config_cmd_fixed_param; + +#define WMI_SMD_ROAM_CONFIG_EVENT_FLAGS_GET_ROLE(event_flags) WMI_GET_BITS(mlo_flags, 0, 4) +#define WMI_SMD_ROAM_CONFIG_EVENT_FLAGS_SET_ROLE(event_flags, value) WMI_SET_BITS(mlo_flags, 0, 4, value) + +#define WMI_SMD_ROAM_CONFIG_EVENT_FLAGS_GET_CMD_TYPE(event_flags) WMI_GET_BITS(mlo_flags, 4, 8) +#define WMI_SMD_ROAM_CONFIG_EVENT_FLAGS_SET_CMD_TYPE(event_flags, value) WMI_SET_BITS(mlo_flags, 4, 8, value) + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; */ + /** global unique ID identifying vdev */ + A_UINT32 vdev_id; + /** PEER MAC address */ + wmi_mac_addr peer_mac_address; + /* maximum ST Transitory Duration */ + A_UINT32 dl_drain_time; /* units = milliseconds */ + union { + A_UINT32 event_flags; + struct { + A_UINT32 role:4, + cmd_type:8, + unused:20; + }; + }; +} wmi_smd_roam_config_event_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_smd_roam_peer_unified_setup_cmd_fixed_param */ + + /** global unique ID identifying peer */ + A_UINT32 peer_id; + /* + * Following this struct are the TLV's: + * wmi_smd_roam_peer_tid_info smd_tid_info[], TLV per TID; + */ +} wmi_smd_roam_peer_unified_setup_cmd_fixed_param; + +typedef enum { + WMI_SMD_PEER_SETUP_SUCCESS = 0, + WMI_SMD_PEER_SETUP_FAILURE, +} wmi_smd_peer_setup_status_type; + +typedef struct { + /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_smd_roam_peer_unified_setup_complete_event_fixed_param */ + A_UINT32 tlv_header; + /** global unique ID identifying peer */ + A_UINT32 peer_id; + A_UINT32 status; /** wmi_smd_peer_setup_status_type */ +} wmi_smd_roam_peer_unified_setup_complete_event_fixed_param; + + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index c88a7063f569..0bd9b2d0d6f2 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_ 1700 +#define __WMI_REVISION_ 1701 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work