Jelajahi Sumber

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
Govind Singh 9 tahun lalu
induk
melakukan
bc64c9e9eb
1 mengubah file dengan 34 tambahan dan 51 penghapusan
  1. 34 51
      core/wma/src/wma_scan_roam.c

+ 34 - 51
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