Przeglądaj źródła

qcacmn: Add support to receive EGID_INFO from BT WMI

Add WMI support to receive the EGID_INFO from BT and
forward to FW

Change-Id: I1698994173e6cefba1284f564c2f2e79e31ee221
CRs-Fixed: 3384085
M Kavitha 2 lat temu
rodzic
commit
9064b44469

+ 12 - 0
wmi/inc/wmi_unified_api.h

@@ -2085,6 +2085,18 @@ wmi_unified_send_btcoex_wlan_priority_cmd(wmi_unified_t wmi_handle,
 QDF_STATUS
 QDF_STATUS
 wmi_unified_send_btcoex_duty_cycle_cmd(wmi_unified_t wmi_handle,
 wmi_unified_send_btcoex_duty_cycle_cmd(wmi_unified_t wmi_handle,
 				       struct btcoex_cfg_params *param);
 				       struct btcoex_cfg_params *param);
+/**
+ *  wmi_unified_send_egid_info_cmd() - send ESL egid_info commands
+ * @wmi_handle: wmi handle
+ * @param: esl_egid params
+ *
+ * Send WMI_ESL_EGID_CMDID parameters to fw.
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+QDF_STATUS
+wmi_unified_send_egid_info_cmd(wmi_unified_t wmi_handle,
+			       struct esl_egid_params *param);
 
 
 /**
 /**
  * wmi_unified_send_coex_ver_cfg_cmd() - send coex ver cfg command
  * wmi_unified_send_coex_ver_cfg_cmd() - send coex ver cfg command

+ 9 - 0
wmi/inc/wmi_unified_param.h

@@ -516,6 +516,7 @@
 
 
 #define WMI_MAX_AOA_PHASE_DELTA 31
 #define WMI_MAX_AOA_PHASE_DELTA 31
 #define WMI_MAX_CHAINS_PHASE 2
 #define WMI_MAX_CHAINS_PHASE 2
+#define EGID_INFO_SIZE 4
 
 
 #include "qdf_atomic.h"
 #include "qdf_atomic.h"
 
 
@@ -4063,6 +4064,14 @@ struct btcoex_cfg_params {
 	uint32_t wlan_duration;
 	uint32_t wlan_duration;
 };
 };
 
 
+/**
+ * struct esl_egid_params - Contains the EGID information
+ * @egid_info: egid_info contains the 128-bit ESL EGID information
+ */
+struct esl_egid_params {
+	uint32_t egid_info[EGID_INFO_SIZE];
+};
+
 #define WMI_HOST_COEX_CONFIG_BUF_MAX_LEN 32 /* 128 bytes */
 #define WMI_HOST_COEX_CONFIG_BUF_MAX_LEN 32 /* 128 bytes */
 /**
 /**
  * struct coex_ver_cfg_t
  * struct coex_ver_cfg_t

+ 4 - 0
wmi/inc/wmi_unified_priv.h

@@ -1843,6 +1843,10 @@ QDF_STATUS
 (*send_btcoex_duty_cycle_cmd)(wmi_unified_t wmi_handle,
 (*send_btcoex_duty_cycle_cmd)(wmi_unified_t wmi_handle,
 			struct btcoex_cfg_params *param);
 			struct btcoex_cfg_params *param);
 
 
+QDF_STATUS
+(*send_egid_info_cmd)(wmi_unified_t wmi_handle,
+		      struct esl_egid_params *param);
+
 QDF_STATUS
 QDF_STATUS
 (*send_coex_ver_cfg_cmd)(wmi_unified_t wmi_handle, coex_ver_cfg_t *param);
 (*send_coex_ver_cfg_cmd)(wmi_unified_t wmi_handle, coex_ver_cfg_t *param);
 
 

+ 12 - 0
wmi/src/wmi_unified_api.c

@@ -2591,6 +2591,18 @@ wmi_unified_send_btcoex_duty_cycle_cmd(wmi_unified_t wmi_handle,
 	return QDF_STATUS_E_FAILURE;
 	return QDF_STATUS_E_FAILURE;
 }
 }
 
 
+QDF_STATUS
+wmi_unified_send_egid_info_cmd(wmi_unified_t wmi_handle,
+			       struct esl_egid_params *param)
+{
+	if (wmi_handle->ops->send_egid_info_cmd) {
+		return wmi_handle->ops->send_egid_info_cmd(
+						wmi_handle, param);
+	}
+
+	return QDF_STATUS_E_FAILURE;
+}
+
 QDF_STATUS wmi_extract_service_ready_ext(
 QDF_STATUS wmi_extract_service_ready_ext(
 		wmi_unified_t wmi_handle, uint8_t *evt_buf,
 		wmi_unified_t wmi_handle, uint8_t *evt_buf,
 		struct wlan_psoc_host_service_ext_param *param)
 		struct wlan_psoc_host_service_ext_param *param)

+ 33 - 0
wmi/src/wmi_unified_tlv.c

@@ -20265,6 +20265,38 @@ send_vdev_pn_mgmt_rxfilter_cmd_tlv(wmi_unified_t wmi_handle,
 	return QDF_STATUS_SUCCESS;
 	return QDF_STATUS_SUCCESS;
 }
 }
 
 
+static QDF_STATUS
+send_egid_info_cmd_tlv(wmi_unified_t wmi_handle,
+		       struct esl_egid_params *param)
+{
+	wmi_esl_egid_cmd_fixed_param *cmd;
+	wmi_buf_t buf;
+
+	uint32_t len = sizeof(*cmd);
+
+	buf = wmi_buf_alloc(wmi_handle, len);
+	if (!buf) {
+		wmi_err("wmi_buf_alloc failed");
+		return QDF_STATUS_E_NOMEM;
+	}
+
+	cmd = (wmi_esl_egid_cmd_fixed_param *)wmi_buf_data(buf);
+	WMITLV_SET_HDR(
+		&cmd->tlv_header,
+		WMITLV_TAG_STRUC_wmi_esl_egid_cmd_fixed_param,
+		WMITLV_GET_STRUCT_TLVLEN(wmi_esl_egid_cmd_fixed_param));
+	qdf_mem_copy(cmd->egid_info,
+		     param->egid_info,
+		     sizeof(param->egid_info));
+	if (wmi_unified_cmd_send(wmi_handle, buf, len, WMI_ESL_EGID_CMDID)) {
+		wmi_err("Failed to send WMI command");
+		wmi_buf_free(buf);
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
 static QDF_STATUS
 static QDF_STATUS
 extract_pktlog_decode_info_event_tlv(wmi_unified_t wmi_handle, void *evt_buf,
 extract_pktlog_decode_info_event_tlv(wmi_unified_t wmi_handle, void *evt_buf,
 				     uint8_t *pdev_id, uint8_t *software_image,
 				     uint8_t *pdev_id, uint8_t *software_image,
@@ -20939,6 +20971,7 @@ struct wmi_ops tlv_ops =  {
 	.extract_sap_coex_cap_service_ready_ext2 =
 	.extract_sap_coex_cap_service_ready_ext2 =
 			extract_sap_coex_fix_chan_caps,
 			extract_sap_coex_fix_chan_caps,
 	.extract_tgtr2p_table_event = extract_tgtr2p_table_event_tlv,
 	.extract_tgtr2p_table_event = extract_tgtr2p_table_event_tlv,
+	.send_egid_info_cmd = send_egid_info_cmd_tlv,
 };
 };
 
 
 #ifdef WLAN_FEATURE_11BE_MLO
 #ifdef WLAN_FEATURE_11BE_MLO