qcacmn: Extract OEM response params

Add API to extract OEM response parameters from corresponding
WMI event.

Change-Id: I9a45bdac4a9091bf21ad8b9877e485baad4a75db
CRs-Fixed: 2467938
This commit is contained in:
Abhiram Jogadenu 2019-06-04 16:46:34 +05:30 • committed by nshrivas
commit 94748b3c46
6 changed files with 133 additions and 11 deletions

View file

@ -2451,4 +2451,18 @@ wmi_extract_cfr_peer_tx_event_param(void *wmi_hdl, void *evt_buf,
wmi_cfr_peer_tx_event_param *peer_tx_event);
#endif /* WLAN_CFR_ENABLE */
#ifdef WIFI_POS_CONVERGED
/**
* wmi_extract_oem_response_param() - WMI function to extract OEM response param
* @wmi_hdl: WMI handle
* @resp_buf: Buffer holding response data
* @oem_resp_param: zero-filled structure pointer to hold oem response data
*
* Return: QDF_STATUS_SUCCESS if success, else returns proper error code.
*/
QDF_STATUS
wmi_extract_oem_response_param(wmi_unified_t wmi_hdl, void *resp_buf,
struct wmi_oem_response_param *oem_resp_param);
#endif /* WIFI_POS_CONVERGED */
#endif /* _WMI_UNIFIED_API_H_ */

View file

@ -7854,6 +7854,34 @@ typedef struct {
uint32_t chain_rssi[WMI_HOST_MAX_CHAINS];
} wmi_cfr_peer_tx_event_param;
/**
* struct wmi_host_oem_indirect_data - Indirect OEM data
* @pdev_id: pdev id
* @addr: 36 bit address
* @len: length of data in bytes
*/
struct wmi_host_oem_indirect_data {
uint32_t pdev_id;
uint64_t addr;
uint32_t len;
};
/**
* struct wmi_oem_response_param - OEM response info
* @num_data1: First data response length
* @data_1: First data
* @num_data2: Second data response length
* @data_2: Second data
* @indirect_data: Indirect data
*/
struct wmi_oem_response_param {
uint32_t num_data1;
uint8_t *data_1;
uint32_t num_data2;
uint8_t *data_2;
struct wmi_host_oem_indirect_data indirect_data;
};
/**
* struct mws_coex_state - Modem Wireless Subsystem(MWS) coex info
* @vdev_id : vdev id

View file

@ -1984,6 +1984,11 @@ QDF_STATUS (*send_mws_coex_status_req_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*set_rx_pkt_type_routing_tag_cmd)(
wmi_unified_t wmi_hdl, struct wmi_rx_pkt_protocol_routing_info *param);
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
#ifdef WIFI_POS_CONVERGED
QDF_STATUS (*extract_oem_response_param)
(wmi_unified_t wmi_hdl, void *resp_buf,
struct wmi_oem_response_param *oem_resp_param);
#endif /* WIFI_POS_CONVERGED */
};
/* Forward declartion for psoc*/

View file

@ -4069,3 +4069,17 @@ QDF_STATUS wmi_unified_send_mws_coex_req_cmd(struct wmi_unified *wmi_handle,
return QDF_STATUS_E_FAILURE;
}
#ifdef WIFI_POS_CONVERGED
QDF_STATUS
wmi_extract_oem_response_param(wmi_unified_t wmi_hdl, void *resp_buf,
struct wmi_oem_response_param *oem_resp_param)
{
if (wmi_hdl->ops->extract_oem_response_param)
return wmi_hdl->ops->extract_oem_response_param(wmi_hdl,
resp_buf,
oem_resp_param);
return QDF_STATUS_E_FAILURE;
}
#endif /* WIFI_POS_CONVERGED */

View file

@ -11642,6 +11642,53 @@ static QDF_STATUS send_mws_coex_status_req_cmd_tlv(wmi_unified_t wmi_handle,
}
#endif
#ifdef WIFI_POS_CONVERGED
/**
* extract_oem_response_param_tlv() - Extract oem response params
* @wmi_handle: wmi handle
* @resp_buf: response buffer
* @oem_resp_param: pointer to hold oem response params
*
* Return: QDF_STATUS_SUCCESS on success or proper error code.
*/
static QDF_STATUS
extract_oem_response_param_tlv(wmi_unified_t wmi_handle, void *resp_buf,
struct wmi_oem_response_param *oem_resp_param)
{
uint64_t temp_addr;
WMI_OEM_RESPONSE_EVENTID_param_tlvs *param_buf =
(WMI_OEM_RESPONSE_EVENTID_param_tlvs *)resp_buf;
if (!param_buf) {
WMI_LOGE("Invalid OEM response");
return QDF_STATUS_E_INVAL;
}
if (param_buf->num_data) {
oem_resp_param->num_data1 = param_buf->num_data;
oem_resp_param->data_1 = param_buf->data;
}
if (param_buf->num_data2) {
oem_resp_param->num_data2 = param_buf->num_data2;
oem_resp_param->data_2 = param_buf->data2;
}
if (param_buf->indirect_data) {
oem_resp_param->indirect_data.pdev_id =
param_buf->indirect_data->pdev_id;
temp_addr = (param_buf->indirect_data->addr_hi) & 0xf;
oem_resp_param->indirect_data.addr =
param_buf->indirect_data->addr_lo +
((uint64_t)temp_addr << 32);
oem_resp_param->indirect_data.len =
param_buf->indirect_data->len;
}
return QDF_STATUS_SUCCESS;
}
#endif /* WIFI_POS_CONVERGED */
struct wmi_ops tlv_ops = {
.send_vdev_create_cmd = send_vdev_create_cmd_tlv,
.send_vdev_delete_cmd = send_vdev_delete_cmd_tlv,
@ -11913,6 +11960,9 @@ struct wmi_ops tlv_ops = {
send_peer_cfr_capture_cmd_tlv,
.extract_cfr_peer_tx_event_param = extract_cfr_peer_tx_event_param_tlv,
#endif /* WLAN_CFR_ENABLE */
#ifdef WIFI_POS_CONVERGED
.extract_oem_response_param = extract_oem_response_param_tlv,
#endif /* WIFI_POS_CONVERGED */
#ifdef WLAN_MWS_INFO_DEBUGFS
.send_mws_coex_status_req_cmd = send_mws_coex_status_req_cmd_tlv,
#endif