|
@@ -1699,6 +1699,7 @@ int wma_oem_capability_event_callback(void *handle,
|
|
|
}
|
|
|
|
|
|
cdf_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp));
|
|
|
+ pStartOemDataRsp->target_rsp = true;
|
|
|
msg_subtype = (uint32_t *) (&pStartOemDataRsp->oemDataRsp[0]);
|
|
|
*msg_subtype = WMI_OEM_CAPABILITY_RSP;
|
|
|
cdf_mem_copy(&pStartOemDataRsp->oemDataRsp[4], data, datalen);
|
|
@@ -1760,6 +1761,7 @@ int wma_oem_measurement_report_event_callback(void *handle,
|
|
|
}
|
|
|
|
|
|
cdf_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp));
|
|
|
+ pStartOemDataRsp->target_rsp = true;
|
|
|
msg_subtype = (uint32_t *) (&pStartOemDataRsp->oemDataRsp[0]);
|
|
|
*msg_subtype = WMI_OEM_MEASUREMENT_RSP;
|
|
|
cdf_mem_copy(&pStartOemDataRsp->oemDataRsp[4], data, datalen);
|
|
@@ -1820,6 +1822,7 @@ int wma_oem_error_report_event_callback(void *handle,
|
|
|
}
|
|
|
|
|
|
cdf_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp));
|
|
|
+ pStartOemDataRsp->target_rsp = true;
|
|
|
msg_subtype = (uint32_t *) (&pStartOemDataRsp->oemDataRsp[0]);
|
|
|
*msg_subtype = WMI_OEM_ERROR_REPORT_RSP;
|
|
|
cdf_mem_copy(&pStartOemDataRsp->oemDataRsp[4], data, datalen);
|
|
@@ -1831,6 +1834,59 @@ int wma_oem_error_report_event_callback(void *handle,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * wma_oem_data_response_handler() - OEM data response event handler
|
|
|
+ * @handle: wma handle
|
|
|
+ * @datap: data ptr
|
|
|
+ * @len: data length
|
|
|
+ *
|
|
|
+ * Return: 0 for success or error code
|
|
|
+ */
|
|
|
+int wma_oem_data_response_handler(void *handle,
|
|
|
+ uint8_t *datap, uint32_t len)
|
|
|
+{
|
|
|
+ tp_wma_handle wma = (tp_wma_handle) handle;
|
|
|
+ WMI_OEM_RESPONSE_EVENTID_param_tlvs *param_buf;
|
|
|
+ uint8_t *data;
|
|
|
+ uint32_t datalen;
|
|
|
+ tStartOemDataRsp *oem_data_rsp;
|
|
|
+
|
|
|
+ param_buf = (WMI_OEM_RESPONSE_EVENTID_param_tlvs *) datap;
|
|
|
+ if (!param_buf) {
|
|
|
+ WMA_LOGE(FL("Received NULL buf ptr from FW"));
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ data = param_buf->data;
|
|
|
+ datalen = param_buf->num_data;
|
|
|
+
|
|
|
+ if (!data) {
|
|
|
+ WMA_LOGE(FL("Received NULL data from FW"));
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (datalen > OEM_DATA_RSP_SIZE) {
|
|
|
+ WMA_LOGE(FL("Received data len %d exceeds max value %d"),
|
|
|
+ datalen, OEM_DATA_RSP_SIZE);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ oem_data_rsp = cdf_mem_malloc(sizeof(*oem_data_rsp));
|
|
|
+ if (!oem_data_rsp) {
|
|
|
+ WMA_LOGE(FL("Failed to alloc oem_data_rsp"));
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ cdf_mem_zero(oem_data_rsp, sizeof(tStartOemDataRsp));
|
|
|
+ oem_data_rsp->target_rsp = true;
|
|
|
+ cdf_mem_copy(&oem_data_rsp->oemDataRsp[0], data, datalen);
|
|
|
+
|
|
|
+ WMA_LOGI(FL("Sending WMA_START_OEM_DATA_RSP, data len %d"), datalen);
|
|
|
+
|
|
|
+ wma_send_msg(wma, WMA_START_OEM_DATA_RSP, (void *)oem_data_rsp, 0);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* wma_start_oem_data_req() - start OEM data request to target
|
|
|
* @wma_handle: wma handle
|
|
@@ -1844,7 +1900,6 @@ void wma_start_oem_data_req(tp_wma_handle wma_handle,
|
|
|
wmi_buf_t buf;
|
|
|
uint8_t *cmd;
|
|
|
int ret = 0;
|
|
|
- uint32_t *msg_subtype;
|
|
|
tStartOemDataRsp *pStartOemDataRsp;
|
|
|
|
|
|
WMA_LOGD("%s: Send OEM Data Request to target", __func__);
|
|
@@ -1903,8 +1958,7 @@ out:
|
|
|
return;
|
|
|
}
|
|
|
cdf_mem_zero(pStartOemDataRsp, sizeof(tStartOemDataRsp));
|
|
|
- msg_subtype = (uint32_t *) (&pStartOemDataRsp->oemDataRsp[0]);
|
|
|
- *msg_subtype = WMI_OEM_INTERNAL_RSP;
|
|
|
+ pStartOemDataRsp->target_rsp = false;
|
|
|
|
|
|
WMA_LOGI("%s: Sending WMA_START_OEM_DATA_RSP to clear up PE/SME pending cmd",
|
|
|
__func__);
|