From beec9a1e3885bb68c9b0bbb1e5796b15cea73446 Mon Sep 17 00:00:00 2001 From: spuligil Date: Tue, 4 Nov 2025 02:35:39 -0800 Subject: [PATCH] fw-api: CL 30855107 - update fw common interface files Change-Id: I1a17054d7942208a440a26ed2dfecb2e593bd3fe CRs-Fixed: 3830439 --- fw/wmi_tlv_defs.h | 22 +++++++++++++ fw/wmi_unified.h | 83 +++++++++++++++++++++++++++++++++++++++++++++++ fw/wmi_version.h | 2 +- 3 files changed, 106 insertions(+), 1 deletion(-) diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 8400b6e72d96..ae59bcbbd347 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1518,6 +1518,9 @@ typedef enum { WMITLV_TAG_STRUC_WMI_MAC_PHY_CAPABILITIES_EXT2, WMITLV_TAG_STRUC_wmi_peer_assoc_cfp_params, WMITLV_TAG_STRUC_wmi_pdev_set_tx_chainmask_comp_event_fixed_param, + WMITLV_TAG_STRUC_wmi_fw_ready_ind_event_fixed_param, + WMITLV_TAG_STRUC_wmi_wlan_mode_req_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_wlan_mode_resp_event_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -2097,6 +2100,7 @@ typedef enum { OP(WMI_PEER_ASSOC_V2_CMDID) \ OP(WMI_VDEV_TRAFFIC_MONITORING_CMDID) \ OP(WMI_VDEV_ENERGY_MGMT_DPS_ASSISTING_ROLE_CONFIG_CMDID) \ + OP(WMI_WLAN_MODE_REQ_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2438,6 +2442,8 @@ typedef enum { OP(WMI_PDEV_MULTI_VDEV_AC_QUEUE_DEPTH_EVENTID) \ OP(WMI_VDEV_TPC_IE_POWER_EVENTID) \ OP(WMI_PDEV_SET_TX_CHAINMASK_COMP_EVENTID) \ + OP(WMI_FW_READY_IND_EVENTID) \ + OP(WMI_WLAN_MODE_RESP_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -5935,6 +5941,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_TRAFFIC_MONITORING_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_energy_mgmt_dps_assisting_role_config_cmd_fixed_param, wmi_vdev_energy_mgmt_dps_assisting_role_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_ENERGY_MGMT_DPS_ASSISTING_ROLE_CONFIG_CMDID); +/* WMI cmd to specify the driver's mode of operation */ +#define WMITLV_TABLE_WMI_WLAN_MODE_REQ_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_wlan_mode_req_cmd_fixed_param, wmi_wlan_mode_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_WLAN_MODE_REQ_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -8092,6 +8103,17 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_MULTI_VDEV_AC_QUEUE_DEPTH_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_tx_chainmask_comp_event_fixed_param, wmi_pdev_set_tx_chainmask_comp_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_TX_CHAINMASK_COMP_EVENTID); +/* WMI Event to indicate Firmware is ready for mode configuration by host */ +#define WMITLV_TABLE_WMI_FW_READY_IND_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_fw_ready_ind_event_fixed_param, wmi_fw_ready_ind_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_FW_READY_IND_EVENTID); + +/* WMI Event to acknowledge the driver mode sent by host */ +#define WMITLV_TABLE_WMI_WLAN_MODE_RESP_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_wlan_mode_resp_event_fixed_param, wmi_wlan_mode_resp_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_WLAN_MODE_RESP_EVENTID); + + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index cec5f724d7cf..66e421fe9c2e 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -385,6 +385,9 @@ typedef enum { /** initialize the wlan sub system */ WMI_INIT_CMDID = 0x1, + /** WMI command to specify the driver's mode of operation */ + WMI_WLAN_MODE_REQ_CMDID, + /* Scan specific commands */ /** start scan request to FW */ @@ -1790,6 +1793,23 @@ typedef enum { */ WMI_IFACE_COMBINATION_IND_EVENTID, + /** WMI evt that indicates FW basic initializations are done, and FW + * is ready to receive the WLAN mode specification from the host. + * + * mode selection handshake: + * host <-- WMI_FW_READY_IND_EVENTID <---- target + * host --> WMI_WLAN_MODE_REQ_CMDID -----> target + * host <-- WMI_WLAN_MODE_RESP_EVENTID <-- target + * precedes the WLAN initialization handshake: + * host <-- WMI_SERVICE_READY_EVENTID <--- target + * host --> WMI_INIT_CMDID --------------> target + * host <-- WMI_READY_EVENTID <----------- target + */ + WMI_FW_READY_IND_EVENTID, + /* WMI evt to acknowledge the driver mode specified by host */ + WMI_WLAN_MODE_RESP_EVENTID, + + /** Scan specific events */ WMI_SCAN_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SCAN), @@ -40237,6 +40257,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_VDEV_GET_TPC_IE_POWER_CMDID); WMI_RETURN_STRING(WMI_VDEV_TRAFFIC_MONITORING_CMDID); WMI_RETURN_STRING(WMI_VDEV_ENERGY_MGMT_DPS_ASSISTING_ROLE_CONFIG_CMDID); + WMI_RETURN_STRING(WMI_WLAN_MODE_REQ_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -52361,6 +52382,68 @@ typedef struct { } wmi_vdev_energy_mgmt_dps_assisting_role_config_cmd_fixed_param; +/* WMI evt to indicate FW is ready */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_fw_ready_ind_event_fixed_param */ + A_UINT32 tlv_header; +} wmi_fw_ready_ind_event_fixed_param; + +typedef enum { + WMI_DRIVER_MODE_MISSION, + WMI_DRIVER_MODE_FTM, + WMI_DRIVER_MODE_OFF, +} WMI_DRIVER_MODE; + +/** WMI command to indicate the driver mode of operation */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_wlan_mode_req_cmd_fixed_param */ + A_UINT32 tlv_header; + /* This indicates driver mode of operation from host */ + A_UINT32 mode; /* refer to WMI_DRIVER_MODE enum */ +} wmi_wlan_mode_req_cmd_fixed_param; + +typedef enum { + WMI_DRIVER_MODE_RESP_SUCCESS, + WMI_DRIVER_MODE_RESP_FAILURE, +} WMI_WLAN_DRIVER_MODE_RESP_STATUS; + +typedef enum { + WMI_DRIVER_FAIL_REASON_UNKNOWN_MODE, + /* In FTM mode, initiate PHY error */ + WMI_DRIVER_FAIL_REASON_FTM_PHY_INIT_ERR, + /* For both MISSION and FTM mode, set power error */ + WMI_DRIVER_FAIL_REASON_POWER_INIT_ERR, + WMI_DRIVER_FAIL_REASON_MODE_OFF_ERR, +} WMI_WLAN_MODE_FAILURE_REASON; + +/* Host/Firmware can get/set the status bits using below macros */ +#define WMI_WLAN_DRIVER_MODE_RESP_STATUS_GET(status) WMI_GET_BITS(status, 0, 16) +#define WMI_WLAN_DRIVER_MODE_RESP_STATUS_SET(status, value) WMI_SET_BITS(status, 0, 16, value) + +#define WMI_WLAN_DRIVER_MODE_RESP_FAILURE_GET(mode) WMI_GET_BITS(mode, 16, 16) +#define WMI_WLAN_DRIVER_MODE_RESP_FAILURE_SET(mode, value) WMI_GET_BITS(mode, 16, 16, value) + +/* WMI evt to acknowledge the driver mode sent by host */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_wlan_mode_resp_event_fixed_param */ + A_UINT32 tlv_header; + /* The status word contains the following bitfields: + * bits 15:0 - Indicates whether the FW has accepted + * (WMI_DRIVER_MODE_RESP_SUCCESS) or rejected + * (WMI_DRIVER_MODE_RESP_FAILURE) the driver mode + * specified by the host. + * bits 31:16 - Indicates the reason if the FW has rejected + * the driver mode. + * This field is only relevant if the status is + * WMI_DRIVER_MODE_RESP_FAILURE. + */ + A_UINT32 status; +} wmi_wlan_mode_resp_event_fixed_param; + + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 813ee2fa93d7..b3270921e3c5 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_ 1668 +#define __WMI_REVISION_ 1669 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work