diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 44aa8173341a..5998199009f1 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -2270,6 +2270,9 @@ static void mlme_init_reg_cfg(struct wlan_objmgr_psoc *psoc, struct wlan_mlme_reg *reg) { qdf_size_t valid_channel_list_num = 0; + uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN]; + uint8_t i; + struct wlan_objmgr_pdev *pdev = NULL; reg->self_gen_frm_pwr = cfg_get(psoc, CFG_SELF_GEN_FRM_PWR); reg->etsi13_srd_chan_in_master_mode = @@ -2281,10 +2284,23 @@ static void mlme_init_reg_cfg(struct wlan_objmgr_psoc *psoc, CFG_ENABLE_11D_IN_WORLD_MODE); reg->scan_11d_interval = cfg_get(psoc, CFG_SCAN_11D_INTERVAL); qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST), - reg->valid_channel_list, + channel_list, CFG_VALID_CHANNEL_LIST_LEN, &valid_channel_list_num); reg->valid_channel_list_num = (uint8_t)valid_channel_list_num; + + pdev = wlan_objmgr_get_pdev_by_id(psoc, 0, WLAN_MLME_NB_ID); + if (!pdev) { + mlme_legacy_err("null pdev"); + return; + } + + for (i = 0; i < valid_channel_list_num; i++) + reg->valid_channel_freq_list[i] = + wlan_reg_chan_to_freq(pdev, channel_list[i]); + + wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_NB_ID); + qdf_str_lcopy(reg->country_code, cfg_default(CFG_COUNTRY_CODE), sizeof(reg->country_code)); reg->country_code_len = (uint8_t)sizeof(reg->country_code); diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index d9e07c3b6350..884b1ee3e6c5 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -2040,7 +2040,7 @@ struct wlan_mlme_mwc { * @restart_beaconing_on_ch_avoid: restart beaconing on ch avoid * @indoor_channel_support: indoor channel support * @scan_11d_interval: scan 11d interval - * @valid_channel_list: array for valid channel list + * @valid_channel_freq_list: array for valid channel list * @valid_channel_list_num: valid channel list number * @country_code: country code * @country_code_len: country code length @@ -2056,7 +2056,7 @@ struct wlan_mlme_reg { restart_beaconing_on_ch_avoid; bool indoor_channel_support; uint32_t scan_11d_interval; - uint8_t valid_channel_list[CFG_VALID_CHANNEL_LIST_LEN]; + uint32_t valid_channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN]; uint8_t valid_channel_list_num; uint8_t country_code[CFG_COUNTRY_CODE_LEN + 1]; uint8_t country_code_len; diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index abe53065e7fa..0e818596dafc 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -3732,7 +3732,8 @@ ucfg_mlme_get_scan_11d_interval(struct wlan_objmgr_psoc *psoc, uint32_t *value); /** - * ucfg_mlme_get_valid_channel_list() - get valid channel list + * ucfg_mlme_get_valid_channel_freq_list() - get valid channel + * list * @psoc: pointer to psoc object * @channel_list: pointer to return channel list * @channel_list_num: pointer to return channel list number @@ -3740,9 +3741,9 @@ ucfg_mlme_get_scan_11d_interval(struct wlan_objmgr_psoc *psoc, * Return: QDF Status */ QDF_STATUS -ucfg_mlme_get_valid_channel_list(struct wlan_objmgr_psoc *psoc, - uint8_t *channel_list, - uint32_t *channel_list_num); +ucfg_mlme_get_valid_channel_freq_list(struct wlan_objmgr_psoc *psoc, + uint32_t *channel_list, + uint32_t *channel_list_num); #ifdef FEATURE_LFR_SUBNET_DETECTION /** diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c index b195e4169d8a..3e79db0a69ae 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -1500,27 +1500,43 @@ ucfg_mlme_get_scan_11d_interval(struct wlan_objmgr_psoc *psoc, } QDF_STATUS -ucfg_mlme_get_valid_channel_list(struct wlan_objmgr_psoc *psoc, - uint8_t *channel_list, - uint32_t *channel_list_num) +ucfg_mlme_get_valid_channel_freq_list(struct wlan_objmgr_psoc *psoc, + uint32_t *channel_list, + uint32_t *channel_list_num) { struct wlan_mlme_psoc_obj *mlme_obj; qdf_size_t valid_channel_list_num = 0; + uint8_t tmp_channel_list[CFG_VALID_CHANNEL_LIST_LEN]; + uint8_t i; + struct wlan_objmgr_pdev *pdev = NULL; mlme_obj = mlme_get_psoc_obj(psoc); if (!mlme_obj) { qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST), - channel_list, + tmp_channel_list, CFG_VALID_CHANNEL_LIST_LEN, &valid_channel_list_num); *channel_list_num = (uint8_t)valid_channel_list_num; mlme_legacy_err("Failed to get MLME Obj"); + pdev = wlan_objmgr_get_pdev_by_id(psoc, 0, WLAN_MLME_NB_ID); + if (!pdev) { + mlme_legacy_err("null pdev"); + return QDF_STATUS_E_INVAL; + } + + for (i = 0; i < valid_channel_list_num; i++) { + channel_list[i] = + wlan_reg_chan_to_freq(pdev, tmp_channel_list[i]); + } + + wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_NB_ID); + return QDF_STATUS_E_INVAL; } *channel_list_num = (uint32_t)mlme_obj->cfg.reg.valid_channel_list_num; - qdf_mem_copy(channel_list, mlme_obj->cfg.reg.valid_channel_list, - *channel_list_num); + for (i = 0; i < *channel_list_num; i++) + channel_list[i] = mlme_obj->cfg.reg.valid_channel_freq_list[i]; return QDF_STATUS_SUCCESS; } diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 4f9d3120cb58..301c03ecd8a7 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -14695,7 +14695,7 @@ QDF_STATUS wlan_hdd_validate_operation_channel(struct hdd_adapter *adapter, int channel) { uint32_t num_ch = 0; - u8 valid_ch[CFG_VALID_CHANNEL_LIST_LEN]; + uint32_t valid_ch[CFG_VALID_CHANNEL_LIST_LEN]; u32 indx = 0; bool is_valid_channel = false; uint8_t count; @@ -14721,10 +14721,11 @@ QDF_STATUS wlan_hdd_validate_operation_channel(struct hdd_adapter *adapter, return QDF_STATUS_E_FAILURE; } } else { - ucfg_mlme_get_valid_channel_list(hdd_ctx->psoc, valid_ch, - &num_ch); + ucfg_mlme_get_valid_channel_freq_list(hdd_ctx->psoc, valid_ch, + &num_ch); for (indx = 0; indx < num_ch; indx++) { - if (channel == valid_ch[indx]) + if (channel == + wlan_reg_freq_to_chan(hdd_ctx->pdev, valid_ch[indx])) break; } @@ -19685,7 +19686,7 @@ static int __wlan_hdd_cfg80211_join_ibss(struct wiphy *wiphy, if (NULL != params->chandef.chan) { uint32_t numChans = CFG_VALID_CHANNEL_LIST_LEN; - uint8_t validChan[CFG_VALID_CHANNEL_LIST_LEN]; + uint32_t validChan[CFG_VALID_CHANNEL_LIST_LEN]; int indx; /* Get channel number */ @@ -19694,11 +19695,12 @@ static int __wlan_hdd_cfg80211_join_ibss(struct wiphy *wiphy, chandef. chan-> center_freq); - ucfg_mlme_get_valid_channel_list(hdd_ctx->psoc, validChan, - &numChans); + ucfg_mlme_get_valid_channel_freq_list(hdd_ctx->psoc, validChan, + &numChans); for (indx = 0; indx < numChans; indx++) { - if (channelNum == validChan[indx]) + if (channelNum == + wlan_reg_freq_to_chan(hdd_ctx->pdev, validChan[indx])) break; } if (indx >= numChans) { diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index b0771c37a24f..83681f2fdad9 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -205,8 +205,11 @@ static void populate_dot11f_tdls_offchannel_params( uint8_t nss_5g; numChans = mac->mlme_cfg->reg.valid_channel_list_num; - qdf_mem_copy(validChan, mac->mlme_cfg->reg.valid_channel_list, - mac->mlme_cfg->reg.valid_channel_list_num); + + for (i = 0; i < mac->mlme_cfg->reg.valid_channel_list_num; i++) { + validChan[i] = wlan_reg_freq_to_chan(mac->pdev, + mac->mlme_cfg->reg.valid_channel_freq_list[i]); + } if (wlan_reg_is_5ghz_ch_freq(pe_session->curr_op_freq)) band = BAND_5G; diff --git a/core/mac/src/pe/lim/lim_send_messages.c b/core/mac/src/pe/lim/lim_send_messages.c index c35217ed03de..1da80fb7824d 100644 --- a/core/mac/src/pe/lim/lim_send_messages.c +++ b/core/mac/src/pe/lim/lim_send_messages.c @@ -600,6 +600,7 @@ QDF_STATUS lim_send_ht40_obss_scanind(struct mac_context *mac_ctx, struct scheduler_msg msg = {0}; uint8_t chan_list[CFG_VALID_CHANNEL_LIST_LEN]; uint8_t channel24gnum, count; + uint8_t i; ht40_obss_scanind = qdf_mem_malloc(sizeof(struct obss_ht40_scanind)); if (!ht40_obss_scanind) @@ -631,8 +632,11 @@ QDF_STATUS lim_send_ht40_obss_scanind(struct mac_context *mac_ctx, mac_ctx->pdev, session->curr_op_freq), session->ch_width); channelnum = mac_ctx->mlme_cfg->reg.valid_channel_list_num; - qdf_mem_copy(chan_list, mac_ctx->mlme_cfg->reg.valid_channel_list, - channelnum); + for (i = 0; i < channelnum; i++) { + chan_list[i] = wlan_reg_freq_to_chan(mac_ctx->pdev, + mac_ctx->mlme_cfg->reg.valid_channel_freq_list[i]); + } + /* Extract 24G channel list */ channel24gnum = 0; for (count = 0; count < channelnum && diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index f6479dd76081..5db76a4c9567 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -4427,8 +4427,6 @@ void lim_add_channel_status_info(struct mac_context *p_mac, bool lim_is_channel_valid_for_channel_switch(struct mac_context *mac, uint8_t channel) { uint8_t index; - uint32_t validChannelListLen = CFG_VALID_CHANNEL_LIST_LEN; - tSirMacChanNum validChannelList[CFG_VALID_CHANNEL_LIST_LEN]; bool ok = false; if (policy_mgr_is_chan_ok_for_dnbs(mac->psoc, channel, &ok)) { @@ -4441,11 +4439,9 @@ bool lim_is_channel_valid_for_channel_switch(struct mac_context *mac, uint8_t ch return false; } - validChannelListLen = mac->mlme_cfg->reg.valid_channel_list_num; - qdf_mem_copy(validChannelList, mac->mlme_cfg->reg.valid_channel_list, - mac->mlme_cfg->reg.valid_channel_list_num); - for (index = 0; index < validChannelListLen; index++) { - if (validChannelList[index] != channel) + for (index = 0; index < mac->mlme_cfg->reg.valid_channel_list_num; index++) { + if (mac->mlme_cfg->reg.valid_channel_freq_list[index] != + wlan_reg_chan_to_freq(mac->pdev, channel)) continue; ok = policy_mgr_is_valid_for_channel_switch(mac->psoc, diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index d028fb699596..734b53785cf9 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -1130,6 +1130,7 @@ QDF_STATUS sme_get_valid_channels(uint8_t *chan_list, uint32_t *list_len) { struct mac_context *mac_ctx = sme_get_mac_context(); uint32_t num_valid_chan; + uint8_t i; if (!mac_ctx) { QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, @@ -1146,8 +1147,10 @@ QDF_STATUS sme_get_valid_channels(uint8_t *chan_list, uint32_t *list_len) num_valid_chan = *list_len; } *list_len = num_valid_chan; - qdf_mem_copy(chan_list, mac_ctx->mlme_cfg->reg.valid_channel_list, - *list_len); + for (i = 0; i < *list_len; i++) { + chan_list[i] = wlan_reg_freq_to_chan(mac_ctx->pdev, + mac_ctx->mlme_cfg->reg.valid_channel_freq_list[i]); + } return QDF_STATUS_SUCCESS; } diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index ad448ae21b78..135f38df3342 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -13370,14 +13370,15 @@ QDF_STATUS csr_get_cfg_valid_channels(struct mac_context *mac, uint8_t *pChannel { uint8_t num_chan_temp = 0; int i; + uint8_t chan; *pNumChan = (uint32_t)mac->mlme_cfg->reg.valid_channel_list_num; - qdf_mem_copy(pChannels, mac->mlme_cfg->reg.valid_channel_list, - *pNumChan); for (i = 0; i < *pNumChan; i++) { - if (!wlan_reg_is_dsrc_chan(mac->pdev, pChannels[i])) { - pChannels[num_chan_temp] = pChannels[i]; + chan = wlan_reg_freq_to_chan(mac->pdev, + mac->mlme_cfg->reg.valid_channel_freq_list[i]); + if (!wlan_reg_is_dsrc_chan(mac->pdev, chan)) { + pChannels[num_chan_temp] = chan; num_chan_temp++; } } @@ -13392,13 +13393,12 @@ QDF_STATUS csr_get_cfg_valid_freqs(struct mac_context *mac, { uint8_t num_chan_temp = 0; int i; - uint8_t chan; + uint32_t chan; for (i = 0; i < mac->mlme_cfg->reg.valid_channel_list_num; i++) { - chan = mac->mlme_cfg->reg.valid_channel_list[i]; - if (!wlan_reg_is_dsrc_chan(mac->pdev, chan)) { - freq_list[num_chan_temp] = - wlan_reg_chan_to_freq(mac->pdev, chan); + chan = mac->mlme_cfg->reg.valid_channel_freq_list[i]; + if (!wlan_reg_is_dsrc_chan(mac->pdev, wlan_reg_freq_to_chan(mac->pdev, chan))) { + freq_list[num_chan_temp] = chan; num_chan_temp++; } } diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index 48e087c37766..7498b5757452 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -1460,14 +1460,18 @@ static void csr_set_cfg_valid_channel_list(struct mac_context *mac, uint8_t NumChannels) { QDF_STATUS status; + uint8_t i; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, "%s: dump valid channel list(NumChannels(%d))", __func__, NumChannels); QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, pChannelList, NumChannels); - qdf_mem_copy(mac->mlme_cfg->reg.valid_channel_list, pChannelList, - NumChannels); + for (i = 0; i < NumChannels; i++) { + mac->mlme_cfg->reg.valid_channel_freq_list[i] = + wlan_reg_chan_to_freq(mac->pdev, pChannelList[i]); + } + mac->mlme_cfg->reg.valid_channel_list_num = NumChannels; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,