qcacld-3.0: ACS changes for 6ghz support

Driver ACS changes for 6Ghz channel support.

Change-Id: I94cc834a9fdd5cfe54e4dcc09aba0253de6b2a39
CRs-Fixed: 2555187
This commit is contained in:
gaurank kathpalia
2019-10-29 17:36:45 +05:30
gecommit door nshrivas
bovenliggende 4fa476c979
commit 924b2a764a
8 gewijzigde bestanden met toevoegingen van 137 en 193 verwijderingen

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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)) {

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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);
}

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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

Bestand weergeven

@@ -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");