浏览代码

qcacld-3.0: Use freq for SME roam API

Change below csr/sme APIs and dependent APIs to
use freq as parameter:
csr_create_roam_scan_channel_list,
csr_neighbor_roam_channels_filter_by_current_band,
csr_neighbor_roam_merge_channel_lists,
csr_create_bg_scan_roam_channel_list,
sme_update_roam_scan_channel_list.

Change-Id: Icfc45863d6dacb318558ba75fde111af24256641
CRs-Fixed: 2555688
Liangwei Dong 5 年之前
父节点
当前提交
075afa7922

+ 38 - 16
core/hdd/src/wlan_hdd_ioctl.c

@@ -1808,8 +1808,9 @@ hdd_parse_sendactionframe(struct hdd_adapter *adapter, const char *command,
 
 /**
  * hdd_parse_channellist() - HDD Parse channel list
+ * @hdd_ctx: hdd context
  * @command: Pointer to input channel list
- * @channel_list: Pointer to local output array to record
+ * @channel_freq_list: Pointer to local output array to record
  *                channel list
  * @num_channels: Pointer to number of roam scan channels
  *
@@ -1826,7 +1827,9 @@ hdd_parse_sendactionframe(struct hdd_adapter *adapter, const char *command,
  * Return: 0 for success non-zero for failure
  */
 static int
-hdd_parse_channellist(const uint8_t *command, uint8_t *channel_list,
+hdd_parse_channellist(struct hdd_context *hdd_ctx,
+		      const uint8_t *command,
+		      uint32_t *channel_freq_list,
 		      uint8_t *num_channels)
 {
 	const uint8_t *in_ptr = command;
@@ -1907,10 +1910,11 @@ hdd_parse_channellist(const uint8_t *command, uint8_t *channel_list,
 		    (temp_int > WNI_CFG_CURRENT_CHANNEL_STAMAX)) {
 			return -EINVAL;
 		}
-		channel_list[j] = temp_int;
+		channel_freq_list[j] =
+			wlan_reg_chan_to_freq(hdd_ctx->pdev, temp_int);
 
 		hdd_debug("Channel %d added to preferred channel list",
-			  channel_list[j]);
+			  channel_freq_list[j]);
 	}
 
 	return 0;
@@ -1937,14 +1941,21 @@ static int
 hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
 				    const char *command)
 {
-	uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
+	uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
 	uint8_t num_chan = 0;
 	QDF_STATUS status;
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	int ret;
 	mac_handle_t mac_handle;
 
-	ret = hdd_parse_channellist(command, channel_list, &num_chan);
+	if (!hdd_ctx) {
+		hdd_err("invalid hdd ctx");
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	ret = hdd_parse_channellist(hdd_ctx, command, channel_freq_list,
+				    &num_chan);
 	if (ret) {
 		hdd_err("Failed to parse channel list information");
 		goto exit;
@@ -1962,7 +1973,8 @@ hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
 	}
 
 	mac_handle = hdd_ctx->mac_handle;
-	if (!sme_validate_channel_list(mac_handle, channel_list, num_chan)) {
+	if (!sme_validate_channel_list(mac_handle,
+				       channel_freq_list, num_chan)) {
 		hdd_err("List contains invalid channel(s)");
 		ret = -EINVAL;
 		goto exit;
@@ -1970,7 +1982,8 @@ hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
 
 	status = sme_change_roam_scan_channel_list(mac_handle,
 						   adapter->vdev_id,
-						   channel_list, num_chan);
+						   channel_freq_list,
+						   num_chan);
 	if (QDF_STATUS_SUCCESS != status) {
 		hdd_err("Failed to update channel list information");
 		ret = -EINVAL;
@@ -2003,7 +2016,7 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
 				    const char *command)
 {
 	const uint8_t *value;
-	uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
+	uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
 	uint8_t channel;
 	uint8_t num_chan;
 	int i;
@@ -2043,11 +2056,13 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
 			ret = -EINVAL;
 			goto exit;
 		}
-		channel_list[i] = channel;
+		channel_freq_list[i] = wlan_reg_chan_to_freq(hdd_ctx->pdev,
+							     channel);
 	}
 
 	mac_handle = hdd_ctx->mac_handle;
-	if (!sme_validate_channel_list(mac_handle, channel_list, num_chan)) {
+	if (!sme_validate_channel_list(mac_handle, channel_freq_list,
+				       num_chan)) {
 		hdd_err("List contains invalid channel(s)");
 		ret = -EINVAL;
 		goto exit;
@@ -2055,7 +2070,7 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
 
 	status = sme_change_roam_scan_channel_list(mac_handle,
 						   adapter->vdev_id,
-						   channel_list, num_chan);
+						   channel_freq_list, num_chan);
 	if (QDF_STATUS_SUCCESS != status) {
 		hdd_err("Failed to update channel list information");
 		ret = -EINVAL;
@@ -5520,12 +5535,19 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
 {
 	int ret = 0;
 	uint8_t *value = command;
-	uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
+	uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
 	uint8_t num_channels = 0;
 	QDF_STATUS status;
 	mac_handle_t mac_handle;
 
-	ret = hdd_parse_channellist(value, channel_list, &num_channels);
+	if (!hdd_ctx) {
+		hdd_err("invalid hdd ctx");
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	ret = hdd_parse_channellist(hdd_ctx, value, channel_freq_list,
+				    &num_channels);
 	if (ret) {
 		hdd_err("Failed to parse channel list information");
 		goto exit;
@@ -5539,7 +5561,7 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
 	}
 
 	mac_handle = hdd_ctx->mac_handle;
-	if (!sme_validate_channel_list(mac_handle, channel_list,
+	if (!sme_validate_channel_list(mac_handle, channel_freq_list,
 				       num_channels)) {
 		hdd_err("List contains invalid channel(s)");
 		ret = -EINVAL;
@@ -5548,7 +5570,7 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
 
 	status = sme_set_ese_roam_scan_channel_list(mac_handle,
 						    adapter->vdev_id,
-						    channel_list,
+						    channel_freq_list,
 						    num_channels);
 	if (QDF_STATUS_SUCCESS != status) {
 		hdd_err("Failed to update channel list information");

+ 4 - 4
core/sme/inc/csr_neighbor_roam.h

@@ -125,7 +125,7 @@ typedef struct sCsrNeighborRoamControlInfo {
 	eCsrNeighborRoamState prevNeighborRoamState;
 	tCsrNeighborRoamCfgParams cfgParams;
 	struct qdf_mac_addr currAPbssid;  /* current assoc AP */
-	uint8_t currAPoperationChannel; /* current assoc AP */
+	uint32_t curr_ap_op_chan_freq; /* current assoc AP */
 	tCsrNeighborRoamChannelInfo roamChannelInfo;
 	uint8_t currentNeighborLookupThreshold;
 	uint8_t currentOpportunisticThresholdDiff;
@@ -198,14 +198,14 @@ QDF_STATUS csr_neighbor_roam_update_fast_roaming_enabled(struct mac_context *mac
 		uint8_t sessionId, const bool fastRoamEnabled);
 QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(
 		struct mac_context *mac, uint8_t sessionId,
-		uint8_t *pInputChannelList,
+		uint32_t *input_chan_freq_list,
 		uint8_t inputNumOfChannels,
-		uint8_t *pOutputChannelList,
+		uint32_t *out_chan_freq_list,
 		uint8_t *pMergedOutputNumOfChannels);
 QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
 		uint32_t *pinput_chan_freq_list,
 		uint8_t inputNumOfChannels,
-		uint8_t *pOutputChannelList,
+		uint32_t *out_chan_freq_list,
 		uint8_t outputNumOfChannels,
 		uint8_t *pMergedOutputNumOfChannels);
 void csr_roam_reset_roam_params(struct mac_context *mac_ptr);

+ 4 - 4
core/sme/inc/sme_api.h

@@ -1038,7 +1038,7 @@ QDF_STATUS sme_get_roam_rssi_diff(mac_handle_t mac_handle, uint8_t vdev_id,
 				  uint8_t *rssi_diff);
 QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
 					     uint8_t sessionId,
-					     uint8_t *pChannelList,
+					     uint32_t *channel_freq_list,
 					     uint8_t numChannels);
 
 /**
@@ -1060,7 +1060,7 @@ sme_update_roam_scan_freq_list(mac_handle_t mac_handle, uint8_t vdev_id,
 			       uint32_t freq_list_type);
 QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
 					      uint8_t sessionId,
-					      uint8_t *pChannelList,
+					      uint32_t *chan_freq_list,
 					      uint8_t numChannels);
 QDF_STATUS sme_get_roam_scan_channel_list(mac_handle_t mac_handle,
 					  uint8_t *pChannelList,
@@ -3355,7 +3355,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
 /*
  * sme_validate_channel_list() - Validate the given channel list
  * @mac_handle: Opaque handle to the global MAC context
- * @chan_list: Pointer to the channel list
+ * @chan_freq_list: Pointer to the channel list
  * @num_channels: number of channels present in the chan_list
  *
  * Validates the given channel list with base channels in mac context
@@ -3363,7 +3363,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
  * Return: True if all channels in the list are valid, false otherwise
  */
 bool sme_validate_channel_list(mac_handle_t mac_handle,
-			       uint8_t *chan_list,
+			       uint32_t *chan_freq_list,
 			       uint8_t num_channels);
 /**
  * sme_set_amsdu() - set amsdu enable/disable based on user cfg

+ 3 - 3
core/sme/inc/sme_inside.h

@@ -180,20 +180,20 @@ void csr_flush_cfg_bg_scan_roam_channel_list(tCsrChannelInfo *channel_info);
  * csr_create_bg_scan_roam_channel_list() - Create roam scan chan list
  * @mac: global mac context
  * @channel_info: Channel list to be populated for roam scan
- * @chan_list: Channel list to be populated from
+ * @chan_freq_list: Channel list to be populated from
  * @num_chan: Number of channels
  *
  * Return: QDF_STATUS_SUCCESS or QDF_STATUS_E_FAILURE
  */
 QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac,
 						tCsrChannelInfo *channel_info,
-						const uint8_t *chan_list,
+						const uint32_t *chan_freq_list,
 						const uint8_t num_chan);
 
 #ifdef FEATURE_WLAN_ESE
 QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
 		uint8_t sessionId,
-		uint8_t *pChannelList,
+		uint32_t *chan_freq_list,
 		uint8_t numChannels,
 		const enum band_info band);
 #endif

+ 18 - 25
core/sme/src/common/sme_api.c

@@ -1726,7 +1726,7 @@ QDF_STATUS sme_get_tsm_stats(mac_handle_t mac_handle,
  * sme_set_ese_roam_scan_channel_list() - To set ese roam scan channel list
  * @mac_handle: Opaque handle to the global MAC context
  * @sessionId: sme session id
- * @pChannelList: Output channel list
+ * @chan_freq_list: Output channel list
  * @numChannels: Output number of channels
  *
  * This routine is called to set ese roam scan channel list.
@@ -1736,15 +1736,15 @@ QDF_STATUS sme_get_tsm_stats(mac_handle_t mac_handle,
  */
 QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
 					      uint8_t sessionId,
-					      uint8_t *pChannelList,
+					      uint32_t *chan_freq_list,
 					      uint8_t numChannels)
 {
 	struct mac_context *mac = MAC_CONTEXT(mac_handle);
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
 	tpCsrChannelInfo curchnl_list_info = NULL;
-	uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 };
-	uint8_t newChannelList[128] = { 0 };
+	uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
+	uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
 	uint8_t i = 0, j = 0;
 	enum band_info band = -1;
 
@@ -1771,7 +1771,7 @@ QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
 	}
         ucfg_reg_get_band(mac->pdev, &band);
 	status = csr_create_roam_scan_channel_list(mac, sessionId,
-				pChannelList, numChannels,
+				chan_freq_list, numChannels,
 				band);
 	if (QDF_IS_STATUS_SUCCESS(status)) {
 		if (curchnl_list_info->freq_list) {
@@ -7425,19 +7425,13 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	struct mac_context *mac = MAC_CONTEXT(mac_handle);
-	uint8_t *channel_list;
-
-	channel_list = qdf_mem_malloc(SIR_MAX_SUPPORTED_CHANNEL_LIST);
-	if (!channel_list)
-		return QDF_STATUS_E_NOMEM;
 
 	if (chan_info->numOfChannels) {
 		sme_debug("Current channels:");
 		sme_dump_freq_list(chan_info);
 	}
 	csr_flush_cfg_bg_scan_roam_channel_list(chan_info);
-	sme_freq_to_chan_list(mac->pdev, channel_list, freq_list, num_chan);
-	csr_create_bg_scan_roam_channel_list(mac, chan_info, channel_list,
+	csr_create_bg_scan_roam_channel_list(mac, chan_info, freq_list,
 					     num_chan);
 	sme_debug("New channels:");
 	sme_dump_freq_list(chan_info);
@@ -7448,8 +7442,6 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
 		status = csr_roam_update_cfg(mac, vdev_id,
 					     REASON_CHANNEL_LIST_CHANGED);
 
-	qdf_mem_free(channel_list);
-
 	return status;
 }
 
@@ -7457,7 +7449,7 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
  * sme_change_roam_scan_channel_list() - to change scan channel list
  * @mac_handle: Opaque handle to the global MAC context
  * @sessionId: sme session id
- * @channel_list: Output channel list
+ * @channel_freq_list: Output channel list
  * @numChannels: Output number of channels
  *
  * This routine is called to Change roam scan channel list.
@@ -7467,14 +7459,14 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
  */
 QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
 					     uint8_t sessionId,
-					     uint8_t *channel_list,
+					     uint32_t *channel_freq_list,
 					     uint8_t numChannels)
 {
 	struct mac_context *mac = MAC_CONTEXT(mac_handle);
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
-	uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 };
-	uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 };
+	uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
+	uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
 	uint8_t i = 0, j = 0;
 	tCsrChannelInfo *chan_info;
 
@@ -7497,14 +7489,14 @@ QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
 			if (j < sizeof(oldChannelList))
 				j += snprintf(oldChannelList + j,
 					sizeof(oldChannelList) -
-					j, "%d",
+					j, " %d",
 					chan_info->freq_list[i]);
 			else
 				break;
 		}
 	}
 	csr_flush_cfg_bg_scan_roam_channel_list(chan_info);
-	csr_create_bg_scan_roam_channel_list(mac, chan_info, channel_list,
+	csr_create_bg_scan_roam_channel_list(mac, chan_info, channel_freq_list,
 					     numChannels);
 	sme_set_roam_scan_control(mac_handle, sessionId, 1);
 	if (chan_info->freq_list) {
@@ -15208,7 +15200,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
 }
 
 bool sme_validate_channel_list(mac_handle_t mac_handle,
-			       uint8_t *chan_list,
+			       uint32_t *chan_freq_list,
 			       uint8_t num_channels)
 {
 	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
@@ -15217,8 +15209,9 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
 	bool found;
 	struct csr_channel *ch_lst_info = &mac_ctx->scan.base_channels;
 
-	if (!chan_list || !num_channels) {
-		sme_err("Chan list empty %pK or num_channels is 0", chan_list);
+	if (!chan_freq_list || !num_channels) {
+		sme_err("Chan list empty %pK or num_channels is 0",
+			chan_freq_list);
 		return false;
 	}
 
@@ -15226,14 +15219,14 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
 		found = false;
 		for (j = 0; j < ch_lst_info->numChannels; j++) {
 			if (ch_lst_info->channel_freq_list[j] ==
-				wlan_reg_chan_to_freq(mac_ctx->pdev, chan_list[i])) {
+					chan_freq_list[i]) {
 				found = true;
 				break;
 			}
 		}
 
 		if (!found) {
-			sme_debug("Invalid channel %d", chan_list[i]);
+			sme_debug("Invalid channel %d", chan_freq_list[i]);
 			return false;
 		}
 

+ 31 - 29
core/sme/src/csr/csr_api_roam.c

@@ -2063,18 +2063,20 @@ csr_flush_roam_scan_chan_lists(struct mac_context *mac, uint8_t vdev_id)
 
 QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac,
 						tCsrChannelInfo *channel_info,
-						const uint8_t *chan_list,
+						const uint32_t *chan_freq_list,
 						const uint8_t num_chan)
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
+	uint8_t i;
 
 	channel_info->freq_list = qdf_mem_malloc(sizeof(uint32_t) * num_chan);
 	if (!channel_info->freq_list)
 		return QDF_STATUS_E_NOMEM;
 
 	channel_info->numOfChannels = num_chan;
-	sme_chan_to_freq_list(mac->pdev, channel_info->freq_list,
-			      chan_list, num_chan);
+	for (i = 0; i < num_chan; i++)
+		channel_info->freq_list[i] = chan_freq_list[i];
+
 	return status;
 }
 
@@ -2169,7 +2171,7 @@ is_dfs_unsafe_extra_band_chan(struct mac_context *mac_ctx, uint32_t freq,
  * csr_create_roam_scan_channel_list() - create roam scan channel list
  * @mac: Global mac pointer
  * @sessionId: session id
- * @chan_list: pointer to channel list
+ * @chan_freq_list: pointer to channel list
  * @numChannels: number of channels
  * @band: band enumeration
  *
@@ -2185,7 +2187,7 @@ is_dfs_unsafe_extra_band_chan(struct mac_context *mac_ctx, uint32_t freq,
  */
 QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
 					     uint8_t sessionId,
-					     uint8_t *chan_list,
+					     uint32_t *chan_freq_list,
 					     uint8_t numChannels,
 					     const enum band_info band)
 {
@@ -2195,10 +2197,10 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
 		= &mac->roam.neighborRoamInfo[sessionId];
 	uint8_t out_num_chan = 0;
 	uint8_t inNumChannels = numChannels;
-	uint8_t *in_ptr = chan_list;
+	uint32_t *in_ptr = chan_freq_list;
 	uint8_t i = 0;
-	uint8_t ChannelList[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
-	uint8_t tmp_chan_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
+	uint32_t csr_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
+	uint32_t tmp_chan_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
 	uint8_t mergedOutputNumOfChannels = 0;
 
 	tpCsrChannelInfo currChannelListInfo
@@ -2221,25 +2223,25 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
 	}
 	if (BAND_2G == band) {
 		for (i = 0; i < inNumChannels; i++) {
-			if (WLAN_REG_IS_24GHZ_CH(in_ptr[i])
-			    && csr_roam_is_channel_valid(mac, in_ptr[i])) {
-				ChannelList[out_num_chan++] = in_ptr[i];
+			if (WLAN_REG_IS_24GHZ_CH_FREQ(in_ptr[i]) &&
+			    csr_roam_is_chan_freq_valid(mac, in_ptr[i])) {
+				csr_freq_list[out_num_chan++] = in_ptr[i];
 			}
 		}
 	} else if (BAND_5G == band) {
 		for (i = 0; i < inNumChannels; i++) {
 			/* Add 5G Non-DFS channel */
-			if (WLAN_REG_IS_5GHZ_CH(in_ptr[i]) &&
-			    csr_roam_is_channel_valid(mac, in_ptr[i]) &&
-			    !wlan_reg_is_dfs_ch(mac->pdev, in_ptr[i])) {
-				ChannelList[out_num_chan++] = in_ptr[i];
+			if (WLAN_REG_IS_5GHZ_CH_FREQ(in_ptr[i]) &&
+			    csr_roam_is_chan_freq_valid(mac, in_ptr[i]) &&
+			    !wlan_reg_is_dfs_for_freq(mac->pdev, in_ptr[i])) {
+				csr_freq_list[out_num_chan++] = in_ptr[i];
 			}
 		}
 	} else if (BAND_ALL == band) {
 		for (i = 0; i < inNumChannels; i++) {
-			if (csr_roam_is_channel_valid(mac, in_ptr[i]) &&
-			    !wlan_reg_is_dfs_ch(mac->pdev, in_ptr[i])) {
-				ChannelList[out_num_chan++] = in_ptr[i];
+			if (csr_roam_is_chan_freq_valid(mac, in_ptr[i]) &&
+			    !wlan_reg_is_dfs_for_freq(mac->pdev, in_ptr[i])) {
+				csr_freq_list[out_num_chan++] = in_ptr[i];
 			}
 		}
 	} else {
@@ -2256,14 +2258,13 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
 	 * list are already filtered for 2.4G channels, hence ignore this check
 	 */
 	if ((BAND_ALL == band) && CSR_IS_ROAM_INTRA_BAND_ENABLED(mac)) {
-		csr_neighbor_roam_channels_filter_by_current_band(mac,
-								  sessionId,
-								  ChannelList,
-								  out_num_chan,
-								  tmp_chan_list,
-							          &out_num_chan
-								  );
-		qdf_mem_copy(ChannelList, tmp_chan_list, out_num_chan);
+		csr_neighbor_roam_channels_filter_by_current_band(
+						mac,
+						sessionId,
+						csr_freq_list,
+						out_num_chan,
+						tmp_chan_freq_list,
+						&out_num_chan);
 	}
 	/* Prepare final roam scan channel list */
 	if (out_num_chan) {
@@ -2279,9 +2280,10 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
 			currChannelListInfo->numOfChannels = 0;
 			return QDF_STATUS_E_NOMEM;
 		}
-		sme_chan_to_freq_list(mac->pdev,
-				      currChannelListInfo->freq_list,
-				      ChannelList, out_num_chan);
+		for (i = 0; i < out_num_chan; i++)
+			currChannelListInfo->freq_list[i] =
+				tmp_chan_freq_list[i];
+
 		currChannelListInfo->numOfChannels = out_num_chan;
 	}
 	return status;

+ 22 - 21
core/sme/src/csr/csr_neighbor_roam.c

@@ -451,9 +451,9 @@ enum band_info csr_get_rf_band(uint8_t channel)
  *
  * @mac_ctx: Pointer to Global MAC structure
  * @session_id: Session ID
- * @input_ch_list: The input channel list
+ * @input_chan_freq_list: The input channel list
  * @input_num_of_ch: The number of channels in input channel list
- * @output_ch_list: The output channel list
+ * @out_chan_freq_list: The output channel list
  * @output_num_of_ch: The number of channels in output channel list
  * @merged_output_num_of_ch: The final number of channels in the
  *				output channel list.
@@ -466,22 +466,22 @@ enum band_info csr_get_rf_band(uint8_t channel)
 QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context *
 						mac,
 						uint8_t sessionId,
-						uint8_t *pInputChannelList,
+						uint32_t *input_chan_freq_list,
 						uint8_t inputNumOfChannels,
-						uint8_t *pOutputChannelList,
+						uint32_t *out_chan_freq_list,
 						uint8_t *
 						pMergedOutputNumOfChannels)
 {
 	uint8_t i = 0;
 	uint8_t numChannels = 0;
-	uint8_t currAPoperationChannel =
-		mac->roam.neighborRoamInfo[sessionId].currAPoperationChannel;
+	uint32_t curr_ap_op_chan_freq =
+		mac->roam.neighborRoamInfo[sessionId].curr_ap_op_chan_freq;
 	/* Check for NULL pointer */
-	if (!pInputChannelList)
+	if (!input_chan_freq_list)
 		return QDF_STATUS_E_INVAL;
 
 	/* Check for NULL pointer */
-	if (!pOutputChannelList)
+	if (!out_chan_freq_list)
 		return QDF_STATUS_E_INVAL;
 
 	if (inputNumOfChannels > CFG_VALID_CHANNEL_LIST_LEN) {
@@ -491,9 +491,11 @@ QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context
 		return QDF_STATUS_E_INVAL;
 	}
 	for (i = 0; i < inputNumOfChannels; i++) {
-		if (csr_get_rf_band(currAPoperationChannel) ==
-		    csr_get_rf_band(pInputChannelList[i])) {
-			pOutputChannelList[numChannels] = pInputChannelList[i];
+		if (WLAN_REG_IS_SAME_BAND_FREQS(
+				curr_ap_op_chan_freq,
+				input_chan_freq_list[i])) {
+			out_chan_freq_list[numChannels] =
+				input_chan_freq_list[i];
 			numChannels++;
 		}
 	}
@@ -511,7 +513,7 @@ QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context
  * @pinput_chan_freq_list: The additional channels to merge in
  *          to the "merged" channels list.
  * @input_num_of_ch: The number of additional channels.
- * @output_ch_list: The place to put the "merged" channel list.
+ * @out_chan_freq_list: The place to put the "merged" channel list.
  * @output_num_of_ch: The original number of channels in the
  *			"merged" channels list.
  * @merged_output_num_of_ch: The final number of channels in the
@@ -527,7 +529,7 @@ QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context
 QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
 						 uint32_t *pinput_chan_freq_list,
 						 uint8_t inputNumOfChannels,
-						 uint8_t *pOutputChannelList,
+						 uint32_t *out_chan_freq_list,
 						 uint8_t outputNumOfChannels,
 						 uint8_t *
 						 pMergedOutputNumOfChannels)
@@ -541,7 +543,7 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
 		return QDF_STATUS_E_INVAL;
 
 	/* Check for NULL pointer */
-	if (!pOutputChannelList)
+	if (!out_chan_freq_list)
 		return QDF_STATUS_E_INVAL;
 
 	if (inputNumOfChannels > CFG_VALID_CHANNEL_LIST_LEN) {
@@ -561,8 +563,8 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
 	 */
 	for (i = 0; i < inputNumOfChannels; i++) {
 		for (j = 0; j < outputNumOfChannels; j++) {
-			if (wlan_reg_freq_to_chan(mac->pdev, pinput_chan_freq_list[i])
-				== pOutputChannelList[j])
+			if (pinput_chan_freq_list[i]
+				== out_chan_freq_list[j])
 				break;
 		}
 		if (j == outputNumOfChannels) {
@@ -571,8 +573,8 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
 					  QDF_TRACE_LEVEL_DEBUG,
 					  "%s: [INFOLOG] Adding extra %d to Neighbor channel list",
 					  __func__, pinput_chan_freq_list[i]);
-				pOutputChannelList[numChannels] =
-					wlan_reg_freq_to_chan(mac->pdev, pinput_chan_freq_list[i]);
+				out_chan_freq_list[numChannels] =
+					pinput_chan_freq_list[i];
 				numChannels++;
 			}
 		}
@@ -911,9 +913,8 @@ static void csr_neighbor_roam_info_ctx_init(struct mac_context *mac,
 
 	qdf_copy_macaddr(&ngbr_roam_info->currAPbssid,
 			&session->connectedProfile.bssid);
-	ngbr_roam_info->currAPoperationChannel =
-		wlan_reg_freq_to_chan(mac->pdev,
-				      session->connectedProfile.op_freq);
+	ngbr_roam_info->curr_ap_op_chan_freq =
+				      session->connectedProfile.op_freq;
 	ngbr_roam_info->currentNeighborLookupThreshold =
 		ngbr_roam_info->cfgParams.neighborLookupThreshold;
 	ngbr_roam_info->currentOpportunisticThresholdDiff =