From 075afa7922bf138a3eed2351912c71bf8367164c Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Wed, 30 Oct 2019 12:58:22 +0800 Subject: [PATCH] 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 --- core/hdd/src/wlan_hdd_ioctl.c | 54 +++++++++++++++++-------- core/sme/inc/csr_neighbor_roam.h | 8 ++-- core/sme/inc/sme_api.h | 8 ++-- core/sme/inc/sme_inside.h | 6 +-- core/sme/src/common/sme_api.c | 43 +++++++++----------- core/sme/src/csr/csr_api_roam.c | 60 ++++++++++++++-------------- core/sme/src/csr/csr_neighbor_roam.c | 43 ++++++++++---------- 7 files changed, 120 insertions(+), 102 deletions(-) diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index 83cd4306db05..34a9a668e24c 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/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"); diff --git a/core/sme/inc/csr_neighbor_roam.h b/core/sme/inc/csr_neighbor_roam.h index 09a7b8bafc8e..adeb5dab7364 100644 --- a/core/sme/inc/csr_neighbor_roam.h +++ b/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); diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 0b853cadfa1f..7dc8853ea083 100644 --- a/core/sme/inc/sme_api.h +++ b/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 diff --git a/core/sme/inc/sme_inside.h b/core/sme/inc/sme_inside.h index 27b27ee21b56..dcb67840fc4e 100644 --- a/core/sme/inc/sme_inside.h +++ b/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 diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index df85c5989d3e..7ff04e1708e3 100644 --- a/core/sme/src/common/sme_api.c +++ b/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; } diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index f27660d49fef..d26eaa1f2e07 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/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; diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 572cc8c2e80e..714a26ee0791 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/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 =