From bc64c9e9eb19f6655e62d52ffeeac3da2032ac8f Mon Sep 17 00:00:00 2001 From: Govind Singh Date: Thu, 25 Feb 2016 17:42:38 +0530 Subject: [PATCH] qcacld-3.0: Refactor update channel list command Move tlv formation of update channel list wmi command to common wmi layer from wma layer. Change-Id: I6f368d749a947e284d59fc394a8ecf657d916739 CRs-Fixed: 976998 --- core/wma/src/wma_scan_roam.c | 85 +++++++++++++++--------------------- 1 file changed, 34 insertions(+), 51 deletions(-) diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 02d3e13e94d9..24fe0df6c2b9 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -627,92 +627,75 @@ QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, tSirUpdateChanList *chan_list) { tp_wma_handle wma_handle = (tp_wma_handle) handle; - wmi_buf_t buf; QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; - wmi_scan_chan_list_cmd_fixed_param *cmd; - int status, i; - uint8_t *buf_ptr; - wmi_channel *chan_info; - uint16_t len = sizeof(*cmd) + WMI_TLV_HDR_SIZE; + int i; + struct scan_chan_list_params scan_ch_param = {0}; + wmi_channel *tchan_info; - len += sizeof(wmi_channel) * chan_list->numChan; - buf = wmi_buf_alloc(wma_handle->wmi_handle, len); - if (!buf) { - WMA_LOGE("Failed to allocate memory"); - qdf_status = QDF_STATUS_E_NOMEM; - goto end; + scan_ch_param.chan_info = qdf_mem_malloc(sizeof(wmi_channel) * + chan_list->numChan); + if (NULL == scan_ch_param.chan_info) { + WMA_LOGE("%s: Failed to allocate channel info", __func__); + return QDF_STATUS_E_NOMEM; } - - buf_ptr = (uint8_t *) wmi_buf_data(buf); - cmd = (wmi_scan_chan_list_cmd_fixed_param *) buf_ptr; - WMITLV_SET_HDR(&cmd->tlv_header, - WMITLV_TAG_STRUC_wmi_scan_chan_list_cmd_fixed_param, - WMITLV_GET_STRUCT_TLVLEN - (wmi_scan_chan_list_cmd_fixed_param)); - - WMA_LOGD("no of channels = %d, len = %d", chan_list->numChan, len); - - cmd->num_scan_chans = chan_list->numChan; - WMITLV_SET_HDR((buf_ptr + sizeof(wmi_scan_chan_list_cmd_fixed_param)), - WMITLV_TAG_ARRAY_STRUC, - sizeof(wmi_channel) * chan_list->numChan); - chan_info = (wmi_channel *) (buf_ptr + sizeof(*cmd) + WMI_TLV_HDR_SIZE); + qdf_mem_zero(scan_ch_param.chan_info, sizeof(wmi_channel) * + chan_list->numChan); + WMA_LOGD("no of channels = %d", chan_list->numChan); + tchan_info = scan_ch_param.chan_info; + scan_ch_param.num_scan_chans = chan_list->numChan; for (i = 0; i < chan_list->numChan; ++i) { - WMITLV_SET_HDR(&chan_info->tlv_header, - WMITLV_TAG_STRUC_wmi_channel, - WMITLV_GET_STRUCT_TLVLEN(wmi_channel)); - chan_info->mhz = + tchan_info->mhz = cds_chan_to_freq(chan_list->chanParam[i].chanId); - chan_info->band_center_freq1 = chan_info->mhz; - chan_info->band_center_freq2 = 0; + tchan_info->band_center_freq1 = + tchan_info->mhz; + tchan_info->band_center_freq2 = 0; - WMA_LOGD("chan[%d] = %u", i, chan_info->mhz); + WMA_LOGD("chan[%d] = %u", i, tchan_info->mhz); if (chan_list->chanParam[i].dfsSet) { - WMI_SET_CHANNEL_FLAG(chan_info, WMI_CHAN_FLAG_PASSIVE); + WMI_SET_CHANNEL_FLAG(tchan_info, WMI_CHAN_FLAG_PASSIVE); WMA_LOGI("chan[%d] DFS[%d]\n", chan_list->chanParam[i].chanId, chan_list->chanParam[i].dfsSet); } - if (chan_info->mhz < WMA_2_4_GHZ_MAX_FREQ) - WMI_SET_CHANNEL_MODE(chan_info, MODE_11G); + if (tchan_info->mhz < WMA_2_4_GHZ_MAX_FREQ) + WMI_SET_CHANNEL_MODE(tchan_info, MODE_11G); else - WMI_SET_CHANNEL_MODE(chan_info, MODE_11A); + WMI_SET_CHANNEL_MODE(tchan_info, MODE_11A); if (chan_list->chanParam[i].half_rate) - WMI_SET_CHANNEL_FLAG(chan_info, + WMI_SET_CHANNEL_FLAG(tchan_info, WMI_CHAN_FLAG_HALF_RATE); else if (chan_list->chanParam[i].quarter_rate) - WMI_SET_CHANNEL_FLAG(chan_info, + WMI_SET_CHANNEL_FLAG(tchan_info, WMI_CHAN_FLAG_QUARTER_RATE); - WMI_SET_CHANNEL_MAX_TX_POWER(chan_info, + WMI_SET_CHANNEL_MAX_TX_POWER(tchan_info, chan_list->chanParam[i].pwr); - WMI_SET_CHANNEL_REG_POWER(chan_info, + WMI_SET_CHANNEL_REG_POWER(tchan_info, chan_list->chanParam[i].pwr); - WMA_LOGD("Channel TX power[%d] = %u: %d", i, chan_info->mhz, + WMA_LOGD("Channel TX power[%d] = %u: %d", i, tchan_info->mhz, chan_list->chanParam[i].pwr); /*TODO: Set WMI_SET_CHANNEL_MIN_POWER */ /*TODO: Set WMI_SET_CHANNEL_ANTENNA_MAX */ /*TODO: WMI_SET_CHANNEL_REG_CLASSID */ - chan_info++; + tchan_info++; } - status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, - WMI_SCAN_CHAN_LIST_CMDID); + qdf_status = wmi_unified_scan_chan_list_cmd_send(wma_handle->wmi_handle, + &scan_ch_param); - if (status != EOK) { - qdf_status = QDF_STATUS_E_FAILURE; + if (QDF_IS_STATUS_ERROR(qdf_status)) { WMA_LOGE("Failed to send WMI_SCAN_CHAN_LIST_CMDID"); - wmi_buf_free(buf); } -end: + + qdf_mem_free(scan_ch_param.chan_info); + return qdf_status; } - /** * wma_roam_scan_offload_mode() - send roam scan mode request to fw * @wma_handle: wma handle