diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 371d7f9a4d..0e1e117302 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1871,15 +1871,11 @@ struct hdd_context { /** * struct hdd_vendor_acs_chan_params - vendor acs channel parameters - * @channel_count: channel count - * @channel_list: pointer to channel list * @pcl_count: pcl list count * @vendor_pcl_list: pointer to pcl list * @vendor_weight_list: pointer to pcl weight list */ struct hdd_vendor_acs_chan_params { - uint32_t channel_count; - uint8_t *channel_list; uint32_t pcl_count; uint8_t *vendor_pcl_list; uint8_t *vendor_weight_list; diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 442a1a2e78..18ead33e43 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -1734,22 +1734,23 @@ int wlan_hdd_sap_cfg_dfs_override(struct hdd_adapter *adapter) * MCC restriction. So free ch list allocated in do_acs * func for Sec AP and realloc for Pri AP ch list size */ - if (sap_config->acs_cfg.ch_list) - qdf_mem_free(sap_config->acs_cfg.ch_list); + if (sap_config->acs_cfg.freq_list) + qdf_mem_free(sap_config->acs_cfg.freq_list); qdf_mem_copy(&sap_config->acs_cfg, - &con_sap_config->acs_cfg, - sizeof(struct sap_acs_cfg)); - sap_config->acs_cfg.ch_list = qdf_mem_malloc( - sizeof(uint8_t) * + &con_sap_config->acs_cfg, + sizeof(struct sap_acs_cfg)); + sap_config->acs_cfg.freq_list = qdf_mem_malloc( + sizeof(uint32_t) * con_sap_config->acs_cfg.ch_list_count); - if (!sap_config->acs_cfg.ch_list) { + if (!sap_config->acs_cfg.freq_list) { sap_config->acs_cfg.ch_list_count = 0; return -ENOMEM; } - qdf_mem_copy(sap_config->acs_cfg.ch_list, - con_sap_config->acs_cfg.ch_list, - con_sap_config->acs_cfg.ch_list_count); + qdf_mem_copy(sap_config->acs_cfg.freq_list, + con_sap_config->acs_cfg.freq_list, + con_sap_config->acs_cfg.ch_list_count * + sizeof(uint32_t)); sap_config->acs_cfg.ch_list_count = con_sap_config->acs_cfg.ch_list_count; @@ -1808,19 +1809,24 @@ static int wlan_hdd_set_acs_ch_range( sap_cfg->acs_cfg.hw_mode = eCSR_DOT11_MODE_11ac; /* Parse ACS Chan list from hostapd */ - if (!sap_cfg->acs_cfg.ch_list) + if (!sap_cfg->acs_cfg.freq_list) return -EINVAL; - sap_cfg->acs_cfg.start_ch = sap_cfg->acs_cfg.ch_list[0]; - sap_cfg->acs_cfg.end_ch = - sap_cfg->acs_cfg.ch_list[sap_cfg->acs_cfg.ch_list_count - 1]; + sap_cfg->acs_cfg.start_ch = + wlan_freq_to_chan(sap_cfg->acs_cfg.freq_list[0]); + sap_cfg->acs_cfg.end_ch = wlan_freq_to_chan( + sap_cfg->acs_cfg.freq_list[sap_cfg->acs_cfg.ch_list_count - 1]); for (i = 0; i < sap_cfg->acs_cfg.ch_list_count; i++) { /* avoid channel as start channel */ - if (sap_cfg->acs_cfg.start_ch > sap_cfg->acs_cfg.ch_list[i] && - sap_cfg->acs_cfg.ch_list[i] != 0) - sap_cfg->acs_cfg.start_ch = sap_cfg->acs_cfg.ch_list[i]; - if (sap_cfg->acs_cfg.end_ch < sap_cfg->acs_cfg.ch_list[i]) - sap_cfg->acs_cfg.end_ch = sap_cfg->acs_cfg.ch_list[i]; + if (sap_cfg->acs_cfg.start_ch > + wlan_freq_to_chan(sap_cfg->acs_cfg.freq_list[i]) && + sap_cfg->acs_cfg.freq_list[i] != 0) + sap_cfg->acs_cfg.start_ch = + wlan_freq_to_chan(sap_cfg->acs_cfg.freq_list[i]); + if (sap_cfg->acs_cfg.end_ch < + wlan_freq_to_chan(sap_cfg->acs_cfg.freq_list[i])) + sap_cfg->acs_cfg.end_ch = + wlan_freq_to_chan(sap_cfg->acs_cfg.freq_list[i]); } return 0; @@ -1838,17 +1844,19 @@ static void hdd_update_acs_channel_list(struct sap_config *sap_config, for (i = 0; i < acs_list_count; i++) { if (BAND_2G == band) { - if (WLAN_REG_IS_24GHZ_CH( - sap_config->acs_cfg.ch_list[i])) { - sap_config->acs_cfg.ch_list[temp_count] = - sap_config->acs_cfg.ch_list[i]; + if (WLAN_REG_IS_24GHZ_CH_FREQ( + sap_config->acs_cfg.freq_list[i])) { + sap_config->acs_cfg.freq_list[temp_count] = + sap_config->acs_cfg.freq_list[i]; temp_count++; } } else if (BAND_5G == band) { - if (WLAN_REG_IS_5GHZ_CH( - sap_config->acs_cfg.ch_list[i])) { - sap_config->acs_cfg.ch_list[temp_count] = - sap_config->acs_cfg.ch_list[i]; + if (WLAN_REG_IS_5GHZ_CH_FREQ( + sap_config->acs_cfg.freq_list[i]) || + WLAN_REG_IS_6GHZ_CHAN_FREQ( + sap_config->acs_cfg.freq_list[i])) { + sap_config->acs_cfg.freq_list[temp_count] = + sap_config->acs_cfg.freq_list[i]; temp_count++; } } @@ -1927,8 +1935,8 @@ int wlan_hdd_cfg80211_start_acs(struct hdd_adapter *adapter) conc_connection_info = policy_mgr_get_conn_info(&i); if (conc_connection_info[0].mac == conc_connection_info[1].mac) { - if (WLAN_REG_IS_5GHZ_CH(sap_config->acs_cfg. - pcl_channels[0])) { + if (WLAN_REG_IS_5GHZ_CH_FREQ( + sap_config->acs_cfg.pcl_chan_freq[0])) { sap_config->acs_cfg.band = QCA_ACS_MODE_IEEE80211A; hdd_update_acs_channel_list(sap_config, @@ -1992,14 +2000,14 @@ static void hdd_update_vendor_pcl_list(struct hdd_context *hdd_ctx, */ for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) { acs_chan_params->vendor_pcl_list[i] = - sap_config->acs_cfg.ch_list[i]; + wlan_reg_freq_to_chan(hdd_ctx->pdev, + sap_config->acs_cfg.freq_list[i]); acs_chan_params->vendor_weight_list[i] = 0; for (j = 0; j < sap_config->acs_cfg.pcl_ch_count; j++) { - if (sap_config->acs_cfg.ch_list[i] == - sap_config->acs_cfg.pcl_channels[j]) { + if (sap_config->acs_cfg.freq_list[i] == + sap_config->acs_cfg.pcl_chan_freq[j]) { acs_chan_params->vendor_weight_list[i] = - sap_config-> - acs_cfg.pcl_channels_weight_list[j]; + sap_config->acs_cfg.pcl_channels_weight_list[j]; break; } } @@ -2241,24 +2249,6 @@ static void hdd_get_scan_band(struct hdd_context *hdd_ctx, } } - -/** - * hdd_get_freq_list: API to get Frequency list based on channel list - * @channel_list: channel list - * @freq_list: frequency list - * @channel_count: channel count - * - * Return: None - */ -static void hdd_get_freq_list(uint8_t *channel_list, uint32_t *freq_list, - uint32_t channel_count) -{ - int count; - - for (count = 0; count < channel_count ; count++) - freq_list[count] = cds_chan_to_freq(channel_list[count]); -} - /** * wlan_hdd_sap_get_valid_channellist() - Get SAPs valid channel list * @ap_adapter: adapter @@ -2363,8 +2353,8 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter, if (conc_connection_info[0].mac == conc_connection_info[1].mac) { - if (WLAN_REG_IS_5GHZ_CH(sap_config->acs_cfg. - pcl_channels[0])) { + if (WLAN_REG_IS_5GHZ_CH_FREQ( + sap_config->acs_cfg.pcl_chan_freq[0])) { sap_config->acs_cfg.band = QCA_ACS_MODE_IEEE80211A; hdd_update_acs_channel_list(sap_config, @@ -2380,10 +2370,11 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter, hdd_get_scan_band(hdd_ctx, &adapter->session.ap.sap_config, &band); - if (sap_config->acs_cfg.ch_list) { + if (sap_config->acs_cfg.freq_list) { /* Copy INI or hostapd provided ACS channel range*/ - qdf_mem_copy(channel_list, sap_config->acs_cfg.ch_list, - sap_config->acs_cfg.ch_list_count); + for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) + channel_list[i] = wlan_reg_freq_to_chan(hdd_ctx->pdev, + sap_config->acs_cfg.freq_list[i]); channel_count = sap_config->acs_cfg.ch_list_count; } else { /* No channel list provided, copy all valid channels */ @@ -2400,7 +2391,9 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter, return -ENOMEM; hdd_update_reg_chan_info(adapter, channel_count, channel_list); - hdd_get_freq_list(channel_list, freq_list, channel_count); + + qdf_mem_copy(freq_list, sap_config->acs_cfg.freq_list, + sizeof(uint32_t) * sap_config->acs_cfg.ch_list_count); /* Get phymode */ phy_mode = adapter->session.ap.sap_config.acs_cfg.hw_mode; @@ -2420,21 +2413,12 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter, * Remove all channels which are not in channel list from pcl * and add weight as zero */ - acs_chan_params.channel_count = channel_count; - acs_chan_params.channel_list = channel_list; acs_chan_params.vendor_pcl_list = vendor_pcl_list; acs_chan_params.vendor_weight_list = vendor_weight_list; hdd_update_vendor_pcl_list(hdd_ctx, &acs_chan_params, sap_config); - if (acs_chan_params.channel_count) { - hdd_debug("ACS channel list: len: %d", - acs_chan_params.channel_count); - for (i = 0; i < acs_chan_params.channel_count; i++) - hdd_debug("%d ", acs_chan_params.channel_list[i]); - } - if (acs_chan_params.pcl_count) { hdd_debug("ACS PCL list: len: %d", acs_chan_params.pcl_count); @@ -2479,8 +2463,7 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter, } status = hdd_cfg80211_update_pcl(skb, - acs_chan_params. - pcl_count, + acs_chan_params.pcl_count, QCA_WLAN_VENDOR_ATTR_EXTERNAL_ACS_EVENT_PCL, vendor_pcl_list, vendor_weight_list); @@ -2621,18 +2604,16 @@ static void hdd_avoid_acs_channels(struct hdd_context *hdd_ctx, for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) { for (j = 0; j < avoid_acs_freq_list_num; j++) { - if (sap_config->acs_cfg.ch_list[i] == - wlan_reg_freq_to_chan( - hdd_ctx->pdev, - avoid_acs_freq_list[j])) { - hdd_debug("skip channel %d", - sap_config->acs_cfg.ch_list[i]); + if (sap_config->acs_cfg.freq_list[i] == + avoid_acs_freq_list[j]) { + hdd_debug("skip freq %d", + sap_config->acs_cfg.freq_list[i]); break; } } if (j == avoid_acs_freq_list_num) - sap_config->acs_cfg.ch_list[ch_cnt++] = - sap_config->acs_cfg.ch_list[i]; + sap_config->acs_cfg.freq_list[ch_cnt++] = + sap_config->acs_cfg.freq_list[i]; } sap_config->acs_cfg.ch_list_count = ch_cnt; } @@ -2653,8 +2634,8 @@ static void hdd_avoid_acs_channels(struct hdd_context *hdd_ctx, * * Return: None */ -static void wlan_hdd_trim_acs_channel_list(uint8_t *pcl, uint8_t pcl_count, - uint8_t *org_ch_list, +static void wlan_hdd_trim_acs_channel_list(uint32_t *pcl, uint8_t pcl_count, + uint32_t *org_freq_list, uint8_t *org_ch_list_count) { uint16_t i, j, ch_list_count = 0; @@ -2670,11 +2651,11 @@ static void wlan_hdd_trim_acs_channel_list(uint8_t *pcl, uint8_t pcl_count, return; } - hdd_debug("Update ACS channels with PCL"); + hdd_debug("Update ACS chan freq with PCL"); for (j = 0; j < *org_ch_list_count; j++) for (i = 0; i < pcl_count; i++) - if (pcl[i] == org_ch_list[j]) { - org_ch_list[ch_list_count++] = pcl[i]; + if (pcl[i] == org_freq_list[j]) { + org_freq_list[ch_list_count++] = pcl[i]; break; } @@ -2702,24 +2683,21 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, struct hdd_context *hdd_ctx = wiphy_priv(wiphy); struct sap_config *sap_config; struct sk_buff *temp_skbuff; - int ret, i, ch_cnt = 0; + int ret, i; struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_ACS_MAX + 1]; bool ht_enabled, ht40_enabled, vht_enabled; uint8_t ch_width; enum qca_wlan_vendor_acs_hw_mode hw_mode; enum policy_mgr_con_mode pm_mode; QDF_STATUS qdf_status; - bool skip_etsi13_srd_chan = false; bool is_vendor_acs_support = cfg_default(CFG_USER_AUTO_CHANNEL_SELECTION); bool is_external_acs_policy = cfg_default(CFG_EXTERNAL_ACS_POLICY); bool sap_force_11n_for_11ac = 0; bool go_force_11n_for_11ac = 0; - bool etsi13_srd_chan; bool go_11ac_override = 0; bool sap_11ac_override = 0; - uint32_t pcl_freq_list[QDF_MAX_NUM_CHAN] = {0}; /* ***Note*** Donot set SME config related to ACS operation here because * ACS operation is not synchronouse and ACS for Second AP may come when @@ -2855,23 +2833,27 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, */ if (tb[QCA_WLAN_VENDOR_ATTR_ACS_CH_LIST]) { - char *tmp = nla_data(tb[QCA_WLAN_VENDOR_ATTR_ACS_CH_LIST]); + uint8_t *tmp = nla_data(tb[QCA_WLAN_VENDOR_ATTR_ACS_CH_LIST]); sap_config->acs_cfg.ch_list_count = nla_len( tb[QCA_WLAN_VENDOR_ATTR_ACS_CH_LIST]); if (sap_config->acs_cfg.ch_list_count) { - sap_config->acs_cfg.ch_list = qdf_mem_malloc( - sap_config->acs_cfg.ch_list_count); + sap_config->acs_cfg.freq_list = qdf_mem_malloc( + sap_config->acs_cfg.ch_list_count * + sizeof(uint32_t)); sap_config->acs_cfg.master_ch_list = qdf_mem_malloc( sap_config->acs_cfg.ch_list_count); - if (!sap_config->acs_cfg.ch_list || + if (!sap_config->acs_cfg.freq_list || !sap_config->acs_cfg.master_ch_list) { ret = -ENOMEM; goto out; } - qdf_mem_copy(sap_config->acs_cfg.ch_list, tmp, - sap_config->acs_cfg.ch_list_count); + /* convert frequency to channel */ + for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) + sap_config->acs_cfg.freq_list[i] = + wlan_reg_chan_to_freq(hdd_ctx->pdev, tmp[i]); + qdf_mem_copy(sap_config->acs_cfg.master_ch_list, tmp, sap_config->acs_cfg.ch_list_count); sap_config->acs_cfg.master_ch_list_count = @@ -2884,23 +2866,24 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, tb[QCA_WLAN_VENDOR_ATTR_ACS_FREQ_LIST]) / sizeof(uint32_t); if (sap_config->acs_cfg.ch_list_count) { - sap_config->acs_cfg.ch_list = qdf_mem_malloc( - sap_config->acs_cfg.ch_list_count); + sap_config->acs_cfg.freq_list = qdf_mem_malloc( + sap_config->acs_cfg.ch_list_count * + sizeof(uint32_t)); sap_config->acs_cfg.master_ch_list = qdf_mem_malloc( sap_config->acs_cfg.ch_list_count); - if (!sap_config->acs_cfg.ch_list || + if (!sap_config->acs_cfg.freq_list || !sap_config->acs_cfg.master_ch_list) { ret = -ENOMEM; goto out; } /* convert frequency to channel */ - for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) - sap_config->acs_cfg.ch_list[i] = + for (i = 0; i < sap_config->acs_cfg.ch_list_count; + i++) { + sap_config->acs_cfg.master_ch_list[i] = ieee80211_frequency_to_channel(freq[i]); - qdf_mem_copy(sap_config->acs_cfg.master_ch_list, - sap_config->acs_cfg.ch_list, - sap_config->acs_cfg.ch_list_count); + sap_config->acs_cfg.freq_list[i] = freq[i]; + } sap_config->acs_cfg.master_ch_list_count = sap_config->acs_cfg.ch_list_count; } @@ -2912,25 +2895,6 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, goto out; } - ucfg_mlme_get_etsi13_srd_chan_in_master_mode(hdd_ctx->psoc, - &etsi13_srd_chan); - skip_etsi13_srd_chan = - !etsi13_srd_chan && - wlan_reg_is_etsi13_regdmn(hdd_ctx->pdev); - - if (skip_etsi13_srd_chan) { - for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) { - if (wlan_reg_is_etsi13_srd_chan(hdd_ctx->pdev, - sap_config->acs_cfg. - ch_list[i])) - sap_config->acs_cfg.ch_list[i] = 0; - else - sap_config->acs_cfg.ch_list[ch_cnt++] = - sap_config->acs_cfg.ch_list[i]; - } - sap_config->acs_cfg.ch_list_count = ch_cnt; - } - hdd_avoid_acs_channels(hdd_ctx, sap_config); hdd_debug("get pcl for DO_ACS vendor command"); @@ -2939,25 +2903,18 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, policy_mgr_convert_device_mode_to_qdf_type(adapter->device_mode); /* consult policy manager to get PCL */ qdf_status = policy_mgr_get_pcl(hdd_ctx->psoc, pm_mode, - pcl_freq_list, + sap_config->acs_cfg.pcl_chan_freq, &sap_config->acs_cfg.pcl_ch_count, sap_config->acs_cfg. pcl_channels_weight_list, QDF_MAX_NUM_CHAN); - if (qdf_status != QDF_STATUS_SUCCESS) { - hdd_err("Get PCL failed"); - } else { - for (i = 0; i < sap_config->acs_cfg.pcl_ch_count; i++) - sap_config->acs_cfg.pcl_channels[i] = - wlan_freq_to_chan(pcl_freq_list[i]); - } + if (sap_config->acs_cfg.pcl_ch_count) { hdd_debug("ACS config PCL: len: %d", sap_config->acs_cfg.pcl_ch_count); for (i = 0; i < sap_config->acs_cfg.pcl_ch_count; i++) - hdd_debug("channel:%d, weight:%d ", - sap_config->acs_cfg. - pcl_channels[i], + hdd_debug("freq:%d, weight:%d ", + sap_config->acs_cfg.pcl_chan_freq[i], sap_config->acs_cfg. pcl_channels_weight_list[i]); } @@ -2974,15 +2931,16 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, policy_mgr_is_force_scc(hdd_ctx->psoc) && policy_mgr_get_connection_count(hdd_ctx->psoc)) { wlan_hdd_trim_acs_channel_list( - sap_config->acs_cfg.pcl_channels, + sap_config->acs_cfg.pcl_chan_freq, sap_config->acs_cfg.pcl_ch_count, - sap_config->acs_cfg.ch_list, + sap_config->acs_cfg.freq_list, &sap_config->acs_cfg.ch_list_count); /* if it is only one channel, send ACS event to upper layer */ if (sap_config->acs_cfg.ch_list_count == 1) { sap_config->acs_cfg.pri_ch = - sap_config->acs_cfg.ch_list[0]; + wlan_reg_freq_to_chan(hdd_ctx->pdev, + sap_config->acs_cfg.freq_list[0]); wlan_sap_set_sap_ctx_acs_cfg( WLAN_HDD_GET_SAP_CTX_PTR(adapter), sap_config); sap_config_acs_result(hdd_ctx->mac_handle, @@ -3051,10 +3009,10 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy, sap_config->acs_cfg.is_vht_enabled = vht_enabled; if (sap_config->acs_cfg.ch_list_count) { - hdd_debug("ACS channel list: len: %d", + hdd_debug("ACS freq list: len: %d", sap_config->acs_cfg.ch_list_count); for (i = 0; i < sap_config->acs_cfg.ch_list_count; i++) - hdd_debug("%d ", sap_config->acs_cfg.ch_list[i]); + hdd_debug("%d ", sap_config->acs_cfg.freq_list[i]); } if (test_bit(ACS_IN_PROGRESS, &hdd_ctx->g_event_flags)) { diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h index 8d07280d65..6edd9dcba0 100644 --- a/core/sap/inc/sap_api.h +++ b/core/sap/inc/sap_api.h @@ -431,7 +431,7 @@ struct sap_acs_cfg { eCsrPhyMode hw_mode; uint8_t start_ch; uint8_t end_ch; - uint8_t *ch_list; + uint32_t *freq_list; uint8_t ch_list_count; uint8_t *master_ch_list; uint8_t master_ch_list_count; @@ -444,7 +444,7 @@ struct sap_acs_cfg { #endif uint16_t ch_width; - uint8_t pcl_channels[QDF_MAX_NUM_CHAN]; + uint32_t pcl_chan_freq[QDF_MAX_NUM_CHAN]; uint8_t pcl_channels_weight_list[QDF_MAX_NUM_CHAN]; uint32_t pcl_ch_count; uint8_t is_ht_enabled; diff --git a/core/sap/src/sap_api_link_cntl.c b/core/sap/src/sap_api_link_cntl.c index 6a782e64ea..09993a3ef7 100644 --- a/core/sap/src/sap_api_link_cntl.c +++ b/core/sap/src/sap_api_link_cntl.c @@ -199,7 +199,7 @@ static inline void wlansap_send_acs_success_event(struct sap_context *sap_ctx, } #endif -static uint8_t +static uint32_t wlansap_calculate_chan_from_scan_result(mac_handle_t mac_handle, struct sap_context *sap_ctx, uint32_t scan_id) @@ -207,7 +207,7 @@ wlansap_calculate_chan_from_scan_result(mac_handle_t mac_handle, struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); qdf_list_t *list = NULL; struct scan_filter *filter; - uint8_t oper_channel = SAP_CHANNEL_NOT_SELECTED; + uint32_t oper_channel = SAP_CHANNEL_NOT_SELECTED; filter = qdf_mem_malloc(sizeof(*filter)); @@ -254,22 +254,21 @@ wlansap_filter_unsafe_ch(struct wlan_objmgr_psoc *psoc, */ for (i = 0; i < sap_ctx->acs_cfg->ch_list_count; i++) { if (!policy_mgr_is_safe_channel( - psoc, wlan_chan_to_freq( - sap_ctx->acs_cfg->ch_list[i]))) { - sap_debug("unsafe ch %d removed from acs list", - sap_ctx->acs_cfg->ch_list[i]); + psoc, sap_ctx->acs_cfg->freq_list[i])) { + sap_debug("unsafe freq %d removed from acs list", + sap_ctx->acs_cfg->freq_list[i]); continue; } /* Add only safe channels to the acs cfg ch list */ - sap_ctx->acs_cfg->ch_list[num_safe_ch++] = - sap_ctx->acs_cfg->ch_list[i]; + sap_ctx->acs_cfg->freq_list[num_safe_ch++] = + sap_ctx->acs_cfg->freq_list[i]; } sap_debug("Updated ACS ch list len %d", num_safe_ch); sap_ctx->acs_cfg->ch_list_count = num_safe_ch; for (i = 0; i < num_safe_ch; i++) - sap_debug("Ch %d", sap_ctx->acs_cfg->ch_list[i]); + sap_debug("Safe freq %d", sap_ctx->acs_cfg->freq_list[i]); } QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle, @@ -278,7 +277,7 @@ QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle, uint32_t scanid, eCsrScanStatus scan_status) { - uint8_t oper_channel = SAP_CHANNEL_NOT_SELECTED; + uint32_t oper_channel = SAP_CHANNEL_NOT_SELECTED; struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); host_log_acs_scan_done(acs_scan_done_status_str(scan_status), @@ -303,9 +302,9 @@ QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle, scan_status); oper_channel = sap_select_default_oper_chan(sap_ctx->acs_cfg); - sap_ctx->chan_freq = wlan_reg_chan_to_freq(mac_ctx->pdev, - oper_channel); - sap_ctx->acs_cfg->pri_ch = oper_channel; + sap_ctx->chan_freq = oper_channel; + sap_ctx->acs_cfg->pri_ch = + wlan_reg_freq_to_chan(mac_ctx->pdev, oper_channel); sap_config_acs_result(mac_handle, sap_ctx, sap_ctx->acs_cfg->ht_sec_ch); sap_ctx->sap_state = eSAP_ACS_CHANNEL_SELECTED; @@ -324,10 +323,10 @@ QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle, oper_channel = sap_select_default_oper_chan(sap_ctx->acs_cfg); } - sap_ctx->chan_freq = wlan_reg_chan_to_freq(mac_ctx->pdev, oper_channel); - sap_ctx->acs_cfg->pri_ch = oper_channel; - sap_config_acs_result(mac_handle, sap_ctx, - sap_ctx->acs_cfg->ht_sec_ch); + sap_ctx->chan_freq = oper_channel; + sap_ctx->acs_cfg->pri_ch = wlan_reg_freq_to_chan(mac_ctx->pdev, + oper_channel); + sap_config_acs_result(mac_handle, sap_ctx, sap_ctx->acs_cfg->ht_sec_ch); QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, FL("Channel freq selected = %d"), sap_ctx->chan_freq); diff --git a/core/sap/src/sap_ch_select.c b/core/sap/src/sap_ch_select.c index 729682392d..6317031862 100644 --- a/core/sap/src/sap_ch_select.c +++ b/core/sap/src/sap_ch_select.c @@ -416,7 +416,7 @@ uint8_t sap_select_preferred_channel_from_channel_list(uint8_t best_chnl, * If Channel List is not Configured don't do anything * Else return the Best Channel from the Channel List */ - if ((!sap_ctx->acs_cfg->ch_list) || + if ((!sap_ctx->acs_cfg->freq_list) || (!spectinfo_param) || (0 == sap_ctx->acs_cfg->ch_list_count)) return best_chnl; @@ -426,7 +426,8 @@ uint8_t sap_select_preferred_channel_from_channel_list(uint8_t best_chnl, /* Select the best channel from allowed list */ for (i = 0; i < sap_ctx->acs_cfg->ch_list_count; i++) { - if ((sap_ctx->acs_cfg->ch_list[i] == best_chnl) && + if ((sap_ctx->acs_cfg->freq_list[i] == + wlan_reg_chan_to_freq(mac_ctx->pdev, best_chnl)) && !(wlan_reg_is_dfs_ch(mac_ctx->pdev, best_chnl) && policy_mgr_disallow_mcc( mac_ctx->psoc, wlan_chan_to_freq(best_chnl)))) { @@ -1354,12 +1355,12 @@ static void sap_interference_rssi_count(tSapSpectChInfo *spect_ch, * true: channel is in PCL, * false: channel is not in PCL */ -static bool ch_in_pcl(struct sap_context *sap_ctx, uint8_t channel) +static bool ch_in_pcl(struct sap_context *sap_ctx, uint32_t ch_freq) { uint32_t i; for (i = 0; i < sap_ctx->acs_cfg->pcl_ch_count; i++) { - if (channel == sap_ctx->acs_cfg->pcl_channels[i]) + if (ch_freq == sap_ctx->acs_cfg->pcl_chan_freq[i]) return true; } @@ -1546,7 +1547,8 @@ static void sap_compute_spect_weight(tSapChSelSpectInfo *pSpectInfoParams, */ rssi = (int8_t) pSpectCh->rssiAgr; - if (ch_in_pcl(sap_ctx, pSpectCh->chNum)) + if (ch_in_pcl(sap_ctx, wlan_reg_chan_to_freq(mac->pdev, + pSpectCh->chNum))) rssi -= PCL_RSSI_DISCOUNT; if (rssi < SOFTAP_MIN_RSSI) @@ -2442,7 +2444,7 @@ static bool sap_is_ch_non_overlap(struct sap_context *sap_ctx, uint16_t ch) return false; } -uint8_t sap_select_channel(mac_handle_t mac_handle, +uint32_t sap_select_channel(mac_handle_t mac_handle, struct sap_context *sap_ctx, qdf_list_t *scan_list) { @@ -2473,11 +2475,7 @@ uint8_t sap_select_channel(mac_handle_t mac_handle, QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, FL("No external AP present")); -#ifndef SOFTAP_CHANNEL_RANGE - return SAP_CHANNEL_NOT_SELECTED; -#else return sap_select_default_oper_chan(sap_ctx->acs_cfg); -#endif } /* Initialize the structure pointed by spect_info */ @@ -2662,8 +2660,5 @@ sap_ch_sel_end: FL("Running SAP Ch select Completed, Ch=%d"), best_ch_num); host_log_acs_best_chan(best_ch_num, best_ch_weight); - if (best_ch_num > 0 && best_ch_num <= 252) - return best_ch_num; - else - return SAP_CHANNEL_NOT_SELECTED; + return wlan_reg_chan_to_freq(mac_ctx->pdev, best_ch_num); } diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 5f47fcbca7..d7bc5e1b64 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -670,11 +670,11 @@ sap_chan_bond_dfs_sub_chan(struct sap_context *sap_context, return false; } -uint8_t sap_select_default_oper_chan(struct sap_acs_cfg *acs_cfg) +uint32_t sap_select_default_oper_chan(struct sap_acs_cfg *acs_cfg) { uint16_t i; - if (!acs_cfg || !acs_cfg->ch_list || !acs_cfg->ch_list_count) + if (!acs_cfg || !acs_cfg->freq_list || !acs_cfg->ch_list_count) return 0; /* @@ -688,16 +688,16 @@ uint8_t sap_select_default_oper_chan(struct sap_acs_cfg *acs_cfg) */ for (i = 0; i < acs_cfg->ch_list_count; i++) { - if (WLAN_CHAN_IS_5GHZ(acs_cfg->ch_list[i])) { - sap_debug("default channel chosen as %d", - acs_cfg->ch_list[i]); - return acs_cfg->ch_list[i]; + if (WLAN_REG_IS_5GHZ_CH_FREQ(acs_cfg->freq_list[i])) { + sap_debug("default freq chosen as %d", + acs_cfg->freq_list[i]); + return acs_cfg->freq_list[i]; } } - sap_debug("default channel chosen as %d", acs_cfg->ch_list[0]); + sap_debug("default frequency chosen as %d", acs_cfg->freq_list[0]); - return acs_cfg->ch_list[0]; + return acs_cfg->freq_list[0]; } QDF_STATUS @@ -967,9 +967,6 @@ QDF_STATUS sap_channel_sel(struct sap_context *sap_context) sap_context->chan_freq); sap_context->chan_freq = sap_select_default_oper_chan( sap_context->acs_cfg); - sap_context->chan_freq = wlan_reg_chan_to_freq( - mac_ctx->pdev, - sap_context->chan_freq); if (sap_context->freq_list) { sap_context->chan_freq = @@ -3486,8 +3483,7 @@ static QDF_STATUS sap_get_freq_list(struct sap_context *sap_ctx, for (loop_count = 0; loop_count < ch_count; loop_count++) { QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, FL("channel frequency: %d"), list[loop_count]); - sap_ctx->acs_cfg->ch_list[loop_count] = - wlan_reg_freq_to_chan(mac_ctx->pdev, list[loop_count]); + sap_ctx->acs_cfg->freq_list[loop_count] = list[loop_count]; } sap_ctx->acs_cfg->ch_list_count = ch_count; diff --git a/core/sap/src/sap_internal.h b/core/sap/src/sap_internal.h index bb508ea0ab..7763d393cb 100644 --- a/core/sap/src/sap_internal.h +++ b/core/sap/src/sap_internal.h @@ -290,9 +290,9 @@ QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle, * Runs a algorithm to select the best channel to operate in based on BSS * rssi and bss count on each channel * - * Returns: channel number if success, 0 otherwise + * Returns: channel frequency if success, 0 otherwise */ -uint8_t sap_select_channel(mac_handle_t mac_handle, struct sap_context *sap_ctx, +uint32_t sap_select_channel(mac_handle_t mac_handle, struct sap_context *sap_ctx, qdf_list_t *scan_list); QDF_STATUS @@ -452,9 +452,9 @@ static inline uint8_t sap_indicate_radar(struct sap_context *sap_ctx) * range configuration when ACS scan fails due to some reasons, such as scan * timeout, etc. * - * Return: Selected operating channel number + * Return: Selected operating channel frequency */ -uint8_t sap_select_default_oper_chan(struct sap_acs_cfg *acs_cfg); +uint32_t sap_select_default_oper_chan(struct sap_acs_cfg *acs_cfg); /* * sap_is_dfs_cac_wait_state() - check if sap is in cac wait state diff --git a/core/sap/src/sap_module.c b/core/sap/src/sap_module.c index 186674c5c6..5ba853ac2f 100644 --- a/core/sap/src/sap_module.c +++ b/core/sap/src/sap_module.c @@ -2483,10 +2483,10 @@ void sap_undo_acs(struct sap_context *sap_ctx, struct sap_config *sap_cfg) if (!acs_cfg) return; - if (acs_cfg->ch_list) { - sap_debug("Clearing ACS cfg channel list"); - qdf_mem_free(acs_cfg->ch_list); - acs_cfg->ch_list = NULL; + if (acs_cfg->freq_list) { + sap_debug("Clearing ACS cfg ch freq list"); + qdf_mem_free(acs_cfg->freq_list); + acs_cfg->freq_list = NULL; } if (acs_cfg->master_ch_list) { sap_debug("Clearing master ACS cfg channel list");