qcacmn: Support dma_ring_caps info processing
EXT2 event carries the dma_ring_caps info.Necessary support to process the same is being provided. Change-Id: Id8ef1840470b272db00fa5e8f98d1fe9dc273a7e
This commit is contained in:
@@ -233,6 +233,15 @@ static int init_deinit_service_ext2_ready_event_handler(ol_scn_t scn_handle,
|
||||
if (err_code)
|
||||
goto exit;
|
||||
|
||||
/* dbr_ring_caps could have already come as part of EXT event */
|
||||
if (info->service_ext2_param.num_dbr_ring_caps) {
|
||||
err_code = init_deinit_populate_dbr_ring_cap_ext2(psoc,
|
||||
wmi_handle,
|
||||
event, info);
|
||||
if (err_code)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* send init command */
|
||||
init_deinit_set_send_init_cmd(psoc, tgt_hdl);
|
||||
|
||||
@@ -315,10 +324,13 @@ static int init_deinit_service_ext_ready_event_handler(ol_scn_t scn_handle,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err_code = init_deinit_populate_dbr_ring_cap(psoc, wmi_handle,
|
||||
event, info);
|
||||
if (err_code)
|
||||
goto exit;
|
||||
/* dbr_ring_caps can be absent if enough space is not available */
|
||||
if (info->service_ext_param.num_dbr_ring_caps) {
|
||||
err_code = init_deinit_populate_dbr_ring_cap(psoc, wmi_handle,
|
||||
event, info);
|
||||
if (err_code)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err_code = init_deinit_populate_spectral_bin_scale_params(psoc,
|
||||
wmi_handle,
|
||||
|
@@ -379,7 +379,6 @@ int init_deinit_populate_dbr_ring_cap(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
num_dbr_ring_caps = info->service_ext_param.num_dbr_ring_caps;
|
||||
|
||||
target_if_debug("Num DMA Capabilities = %d", num_dbr_ring_caps);
|
||||
|
||||
if (!num_dbr_ring_caps)
|
||||
@@ -411,6 +410,60 @@ free_and_return:
|
||||
return qdf_status_to_os_return(status);
|
||||
}
|
||||
|
||||
int init_deinit_populate_dbr_ring_cap_ext2(struct wlan_objmgr_psoc *psoc,
|
||||
wmi_unified_t handle, uint8_t *event,
|
||||
struct tgt_info *info)
|
||||
|
||||
{
|
||||
uint8_t cap_idx;
|
||||
uint32_t num_dbr_ring_caps;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
struct wlan_psoc_host_dbr_ring_caps *param;
|
||||
|
||||
/*
|
||||
* If FW had already sent this info as part of EXT event,
|
||||
* we need to discard the same and use the info from EXT2.
|
||||
*/
|
||||
if (info->service_ext_param.num_dbr_ring_caps) {
|
||||
target_if_debug("dbr_ring_caps already populated");
|
||||
info->service_ext_param.num_dbr_ring_caps = 0;
|
||||
qdf_mem_free(info->dbr_ring_cap);
|
||||
info->dbr_ring_cap = NULL;
|
||||
}
|
||||
|
||||
num_dbr_ring_caps = info->service_ext2_param.num_dbr_ring_caps;
|
||||
target_if_debug("Num DMA Capabilities = %d", num_dbr_ring_caps);
|
||||
|
||||
if (!num_dbr_ring_caps)
|
||||
return 0;
|
||||
|
||||
info->dbr_ring_cap = qdf_mem_malloc(
|
||||
sizeof(struct wlan_psoc_host_dbr_ring_caps) *
|
||||
num_dbr_ring_caps);
|
||||
|
||||
if (!info->dbr_ring_cap)
|
||||
return -EINVAL;
|
||||
|
||||
for (cap_idx = 0; cap_idx < num_dbr_ring_caps; cap_idx++) {
|
||||
param = &info->dbr_ring_cap[cap_idx];
|
||||
status = wmi_extract_dbr_ring_cap_service_ready_ext2(handle,
|
||||
event,
|
||||
cap_idx,
|
||||
param);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
target_if_err("Extraction of DMA cap failed");
|
||||
goto free_and_return;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
free_and_return:
|
||||
qdf_mem_free(info->dbr_ring_cap);
|
||||
info->dbr_ring_cap = NULL;
|
||||
|
||||
return qdf_status_to_os_return(status);
|
||||
}
|
||||
int init_deinit_populate_spectral_bin_scale_params(
|
||||
struct wlan_objmgr_psoc *psoc, wmi_unified_t handle,
|
||||
uint8_t *event, struct tgt_info *info)
|
||||
|
Reference in New Issue
Block a user