diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 01b6443accc9..8b3bb33ce8b9 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2921,6 +2921,17 @@ enum dot11p_mode { #define CFG_DOT11P_MODE_MAX (WLAN_HDD_11P_CONCURRENT) #ifdef FEATURE_WLAN_EXTSCAN + +/* + * This ini is added to control the enabling of extscan feature outside of code + * To enable , gExtScanEnable=1 need to be declared in ini file. + * Otherwise, Extscan feature will remain disabled. + */ +#define CFG_EXTSCAN_ALLOWED_NAME "gExtScanEnable" +#define CFG_EXTSCAN_ALLOWED_MIN (0) +#define CFG_EXTSCAN_ALLOWED_MAX (1) +#define CFG_EXTSCAN_ALLOWED_DEF (0) + #define CFG_EXTSCAN_PASSIVE_MAX_CHANNEL_TIME_NAME "gExtScanPassiveMaxChannelTime" #define CFG_EXTSCAN_PASSIVE_MAX_CHANNEL_TIME_MIN (0) #define CFG_EXTSCAN_PASSIVE_MAX_CHANNEL_TIME_MAX (500) @@ -4092,6 +4103,7 @@ struct hdd_config { uint8_t rx_mode; uint8_t cpu_map_list[CFG_RPS_RX_QUEUE_CPU_MAP_LIST_LEN]; #ifdef FEATURE_WLAN_EXTSCAN + bool extscan_enabled; uint32_t extscan_passive_max_chn_time; uint32_t extscan_passive_min_chn_time; uint32_t extscan_active_max_chn_time; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index d526431f545c..1b182dbd1d22 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -3557,6 +3557,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_DOT11P_MODE_MAX), #ifdef FEATURE_WLAN_EXTSCAN + REG_VARIABLE(CFG_EXTSCAN_ALLOWED_NAME, WLAN_PARAM_Integer, + struct hdd_config, extscan_enabled, + VAR_FLAGS_OPTIONAL | + VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_EXTSCAN_ALLOWED_DEF, + CFG_EXTSCAN_ALLOWED_MIN, + CFG_EXTSCAN_ALLOWED_MAX), + REG_VARIABLE(CFG_EXTSCAN_PASSIVE_MAX_CHANNEL_TIME_NAME, WLAN_PARAM_Integer, struct hdd_config, extscan_passive_max_chn_time, diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 918e4aaa8166..9a52c0d291e1 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -1826,7 +1826,8 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy, fset |= WIFI_FEATURE_HOTSPOT; #ifdef FEATURE_WLAN_EXTSCAN - if (sme_is_feature_supported_by_fw(EXTENDED_SCAN)) { + if (pHddCtx->config->extscan_enabled && + sme_is_feature_supported_by_fw(EXTENDED_SCAN)) { hdd_notice("EXTScan is supported by firmware"); fset |= WIFI_FEATURE_EXTSCAN | WIFI_FEATURE_HAL_EPNO; } diff --git a/core/hdd/src/wlan_hdd_ext_scan.c b/core/hdd/src/wlan_hdd_ext_scan.c index 51111af70f79..147ace8a3ef0 100644 --- a/core/hdd/src/wlan_hdd_ext_scan.c +++ b/core/hdd/src/wlan_hdd_ext_scan.c @@ -1761,6 +1761,10 @@ static int __wlan_hdd_cfg80211_extscan_get_capabilities(struct wiphy *wiphy, if (0 != ret) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -1895,6 +1899,10 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -2042,6 +2050,10 @@ __wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -2520,6 +2532,10 @@ __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy, if (0 != ret) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -3181,6 +3197,10 @@ __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -3394,6 +3414,10 @@ __wlan_hdd_cfg80211_extscan_stop(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -3520,6 +3544,10 @@ __wlan_hdd_cfg80211_extscan_reset_bssid_hotlist(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -3644,6 +3672,10 @@ __wlan_hdd_cfg80211_extscan_reset_significant_change(struct wiphy if (0 != retval) return -EINVAL; + if (!pHddCtx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { hdd_err("Invalid ATTR"); @@ -3851,6 +3883,10 @@ static int __wlan_hdd_cfg80211_set_epno_list(struct wiphy *wiphy, if (ret_val) return ret_val; + if (!hdd_ctx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) { hdd_err("Command not allowed in FTM mode"); return -EPERM; @@ -4306,6 +4342,10 @@ __wlan_hdd_cfg80211_extscan_set_ssid_hotlist(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!hdd_ctx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) { @@ -4524,6 +4564,10 @@ __wlan_hdd_cfg80211_extscan_reset_ssid_hotlist(struct wiphy *wiphy, if (0 != retval) return -EINVAL; + if (!hdd_ctx->config->extscan_enabled) { + hdd_err("extscan not supported"); + return -ENOTSUPP; + } if (nla_parse(tb, PARAM_MAX, data, data_len, wlan_hdd_extscan_config_policy)) {