diff --git a/os_if/linux/scan/src/wlan_cfg80211_scan.c b/os_if/linux/scan/src/wlan_cfg80211_scan.c index 8e0f964b3d..ff9f06511c 100644 --- a/os_if/linux/scan/src/wlan_cfg80211_scan.c +++ b/os_if/linux/scan/src/wlan_cfg80211_scan.c @@ -1984,16 +1984,11 @@ void wlan_config_sched_scan_plans_to_wiphy(struct wiphy *wiphy, wiphy->max_sched_scan_ie_len = SCAN_MAX_IE_LENGTH; wiphy->max_sched_scan_plans = SCAN_PNO_MAX_PLAN_REQUEST; - /* - * Exception: Using cfg_get() here because these two - * schedule scan params are used only at this place - * to copy to wiphy structure - */ wiphy->max_sched_scan_plan_interval = - cfg_get(psoc, CFG_MAX_SCHED_SCAN_PLAN_INTERVAL); + ucfg_scan_get_max_sched_scan_plan_interval(psoc); wiphy->max_sched_scan_plan_iterations = - cfg_get(psoc, CFG_MAX_SCHED_SCAN_PLAN_ITERATIONS); + ucfg_scan_get_max_sched_scan_plan_iterations(psoc); } } #endif diff --git a/umac/scan/core/src/wlan_scan_main.h b/umac/scan/core/src/wlan_scan_main.h index 955e0b9595..f5bc62fb03 100644 --- a/umac/scan/core/src/wlan_scan_main.h +++ b/umac/scan/core/src/wlan_scan_main.h @@ -137,12 +137,6 @@ struct probe_time_dwell_time { #endif #define SCAN_TIMEOUT_GRACE_PERIOD 10 -/* scan age time in millisec */ -#ifdef QCA_WIFI_NAPIER_EMULATION -#define SCAN_CACHE_AGING_TIME (90 * 1000) -#else -#define SCAN_CACHE_AGING_TIME (30 * 1000) -#endif #define SCAN_MAX_BSS_PDEV 100 #define SCAN_PRIORITY SCAN_PRIORITY_LOW @@ -248,6 +242,8 @@ struct scan_vdev_obj { * @scan_support_enabled: PNO scan support enabled/disabled * @scan_timer_repeat_value: PNO scan timer repeat value * @slow_scan_multiplier: PNO slow scan timer multiplier + * @max_sched_scan_plan_interval: PNO scan interval + * @max_sched_scan_plan_iterations: PNO scan number of iterations * @scan_backoff_multiplier: Scan banckoff multiplier * @pno_wake_lock: pno wake lock * @pno_cb: callback to call on PNO completion @@ -264,6 +260,8 @@ struct pno_def_config { bool scan_support_enabled; uint32_t scan_timer_repeat_value; uint32_t slow_scan_multiplier; + uint32_t max_sched_scan_plan_interval; + uint32_t max_sched_scan_plan_iterations; uint8_t scan_backoff_multiplier; qdf_wake_lock_t pno_wake_lock; struct cb_handler pno_cb; diff --git a/umac/scan/dispatcher/inc/wlan_scan_cfg.h b/umac/scan/dispatcher/inc/wlan_scan_cfg.h index 1f5d00b6aa..ceef980fef 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_cfg.h +++ b/umac/scan/dispatcher/inc/wlan_scan_cfg.h @@ -856,6 +856,60 @@ CFG_VALUE_OR_DEFAULT, \ "data inactivity time on bss channel") +/* + * + * gEnableMacAddrSpoof - Enable mac address randomization feature. + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to enable/disable mac address randomization for scan. + * + * Supported Feature: SCAN + * + * + * Usage: Internal/External + * + * + */ +#define CFG_ENABLE_MAC_ADDR_SPOOFING CFG_INI_BOOL( \ + "gEnableMacAddrSpoof", \ + true, \ + "Enable mac spoofing") + +/* + * + * gScanAgingTime - Set scan aging time + * @Min: 0 + * @Max: 200 + * @Default: 30 + * + * This ini is used to set scan aging timeout value + * in secs. For example after 30 secs the bss results + * greater than 30secs age will be flushed. + * + * Related: None + * + * Supported Feature: Scan + * + * Usage: External + * + * + */ +#ifdef QCA_WIFI_NAPIER_EMULATION +#define CFG_SCAN_AGING_TIME_DEFAULT (90) +#else +#define CFG_SCAN_AGING_TIME_DEFAULT (30) +#endif + +#define CFG_SCAN_AGING_TIME CFG_INI_UINT( \ + "gScanAgingTime", \ + 0, \ + 200, \ + CFG_SCAN_AGING_TIME_DEFAULT, \ + CFG_VALUE_OR_DEFAULT, \ + "scan aging time") + #define CFG_SCAN_ALL \ CFG(CFG_DROP_BCN_ON_CHANNEL_MISMATCH) \ CFG(CFG_ENABLE_WAKE_LOCK_IN_SCAN) \ @@ -885,5 +939,7 @@ CFG(CFG_MAWC_NLO_EXP_BACKOFF_RATIO) \ CFG(CFG_MAWC_NLO_INIT_SCAN_INTERVAL) \ CFG(CFG_MAWC_NLO_MAX_SCAN_INTERVAL) \ + CFG(CFG_ENABLE_MAC_ADDR_SPOOFING) \ + CFG(CFG_SCAN_AGING_TIME) \ CFG_SCAN_PNO #endif /* __CONFIG_SCAN_H */ diff --git a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h index 26f0d23c99..83e2cba95c 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h +++ b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h @@ -1281,18 +1281,14 @@ struct pno_scan_req_params { /** * struct scan_user_cfg - user configuration required for for scan - * @scan_cache_aging_time: default scan cache aging time * @is_snr_monitoring_enabled: whether snr monitoring enabled or not * @ie_whitelist: probe req IE whitelist attrs - * @enable_mac_spoofing: enable mac address spoof in scan * @sta_miracast_mcc_rest_time: sta miracast mcc rest time * @score_config: scoring logic configuration */ struct scan_user_cfg { - uint32_t scan_cache_aging_time; bool is_snr_monitoring_enabled; struct probe_req_whitelist_attr ie_whitelist; - bool enable_mac_spoofing; uint32_t sta_miracast_mcc_rest_time; struct scoring_config score_config; }; diff --git a/umac/scan/dispatcher/inc/wlan_scan_ucfg_api.h b/umac/scan/dispatcher/inc/wlan_scan_ucfg_api.h index 0c170e0ae4..cdad8ba099 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_ucfg_api.h +++ b/umac/scan/dispatcher/inc/wlan_scan_ucfg_api.h @@ -639,6 +639,14 @@ void ucfg_scan_set_bt_activity(struct wlan_objmgr_psoc *psoc, */ bool ucfg_scan_get_bt_activity(struct wlan_objmgr_psoc *psoc); +/** + * ucfg_scan_is_mac_spoofing_enabled() - API to check if mac spoofing is enabled + * @psoc: pointer to psoc object + * + * Return: true if enabled else false. + */ +bool ucfg_scan_is_mac_spoofing_enabled(struct wlan_objmgr_psoc *psoc); + /** * ucfg_scan_cfg_set_active_dwelltime() - API to set scan active dwelltime * @psoc: pointer to psoc object @@ -876,6 +884,27 @@ uint32_t ucfg_scan_get_scan_timer_repeat_value(struct wlan_objmgr_psoc *psoc); * Return: slow_scan_multiplier value */ uint32_t ucfg_scan_get_slow_scan_multiplier(struct wlan_objmgr_psoc *psoc); + +/** + * ucfg_scan_get_max_sched_scan_plan_interval() - API to get maximum scheduled + * scan plan interval + * @psoc: pointer to psoc object + * + * Return: max_sched_scan_plan_interval value. + */ +uint32_t +ucfg_scan_get_max_sched_scan_plan_interval(struct wlan_objmgr_psoc *psoc); + +/** + * ucfg_scan_get_max_sched_scan_plan_iterations() - API to get maximum scheduled + * scan plan iterations + * @psoc: pointer to psoc object + * + * Return: value. + */ +uint32_t +ucfg_scan_get_max_sched_scan_plan_iterations(struct wlan_objmgr_psoc *psoc); + #else static inline bool ucfg_scan_is_pno_offload_enabled(struct wlan_objmgr_psoc *psoc) @@ -917,5 +946,18 @@ uint32_t ucfg_scan_get_slow_scan_multiplier(struct wlan_objmgr_psoc *psoc) { return 0; } + +static inline uint32_t +ucfg_scan_get_max_sched_scan_plan_interval(struct wlan_objmgr_psoc *psoc) +{ + return 0; +} + +static inline uint32_t +ucfg_scan_get_max_sched_scan_plan_iterations(struct wlan_objmgr_psoc *psoc) +{ + return 0; +} + #endif /* FEATURE_WLAN_SCAN_PNO */ #endif diff --git a/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c b/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c index 9db024ec40..8f53de6efb 100644 --- a/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c +++ b/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c @@ -255,6 +255,10 @@ wlan_pno_global_init(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_PNO_SLOW_SCAN_MULTIPLIER); pno_def->scan_backoff_multiplier = cfg_get(psoc, CFG_SCAN_BACKOFF_MULTIPLIER); + pno_def->max_sched_scan_plan_interval = + cfg_get(psoc, CFG_MAX_SCHED_SCAN_PLAN_INTERVAL); + pno_def->max_sched_scan_plan_iterations = + cfg_get(psoc, CFG_MAX_SCHED_SCAN_PLAN_ITERATIONS); mawc_cfg->enable = cfg_get(psoc, CFG_MAWC_NLO_ENABLED); mawc_cfg->exp_backoff_ratio = @@ -1505,7 +1509,8 @@ wlan_scan_global_init(struct wlan_objmgr_psoc *psoc, scan_obj->scan_def.burst_duration = SCAN_BURST_DURATION; scan_obj->scan_def.max_scan_time = SCAN_MAX_SCAN_TIME; scan_obj->scan_def.num_probes = cfg_get(psoc, CFG_SCAN_NUM_PROBES); - scan_obj->scan_def.scan_cache_aging_time = SCAN_CACHE_AGING_TIME; + scan_obj->scan_def.scan_cache_aging_time = + (cfg_get(psoc, CFG_SCAN_AGING_TIME) * 1000); scan_obj->scan_def.max_bss_per_pdev = SCAN_MAX_BSS_PDEV; scan_obj->scan_def.scan_priority = SCAN_PRIORITY; scan_obj->scan_def.idle_time = SCAN_NETWORK_IDLE_TIMEOUT; @@ -1513,8 +1518,9 @@ wlan_scan_global_init(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_ADAPTIVE_SCAN_DWELL_MODE); scan_obj->scan_def.adaptive_dwell_time_mode_nc = cfg_get(psoc, CFG_ADAPTIVE_SCAN_DWELL_MODE_NC); - scan_obj->scan_def.is_bssid_hint_priority = - cfg_get(psoc, CFG_IS_BSSID_HINT_PRIORITY); + scan_obj->scan_def.enable_mac_spoofing = + cfg_get(psoc, CFG_ENABLE_MAC_ADDR_SPOOFING); + /* scan contrl flags */ scan_obj->scan_def.scan_f_passive = true; scan_obj->scan_def.scan_f_ofdm_rates = true; @@ -1997,10 +2003,8 @@ QDF_STATUS ucfg_scan_update_user_config(struct wlan_objmgr_psoc *psoc, } scan_def = &scan_obj->scan_def; - scan_def->scan_cache_aging_time = scan_cfg->scan_cache_aging_time; scan_def->scan_f_chan_stat_evnt = scan_cfg->is_snr_monitoring_enabled; scan_obj->ie_whitelist = scan_cfg->ie_whitelist; - scan_def->enable_mac_spoofing = scan_cfg->enable_mac_spoofing; scan_def->sta_miracast_mcc_rest_time = scan_cfg->sta_miracast_mcc_rest_time; @@ -2338,6 +2342,19 @@ bool ucfg_scan_wake_lock_in_user_scan(struct wlan_objmgr_psoc *psoc) return scan_obj->scan_def.use_wake_lock_in_user_scan; } +bool ucfg_scan_is_mac_spoofing_enabled(struct wlan_objmgr_psoc *psoc) +{ + struct wlan_scan_obj *scan_obj; + + scan_obj = wlan_psoc_get_scan_obj(psoc); + if (!scan_obj) { + scm_err("Failed to get scan object"); + return cfg_default(CFG_ENABLE_MAC_ADDR_SPOOFING); + } + + return scan_obj->scan_def.enable_mac_spoofing; +} + QDF_STATUS ucfg_scan_set_global_config(struct wlan_objmgr_psoc *psoc, enum scan_config config, uint32_t val) @@ -2493,4 +2510,33 @@ uint32_t ucfg_scan_get_slow_scan_multiplier(struct wlan_objmgr_psoc *psoc) } return scan_obj->pno_cfg.slow_scan_multiplier; } + +uint32_t +ucfg_scan_get_max_sched_scan_plan_interval(struct wlan_objmgr_psoc *psoc) +{ + struct wlan_scan_obj *scan_obj; + + scan_obj = wlan_psoc_get_scan_obj(psoc); + if (!scan_obj) { + scm_err("Failed to get scan object"); + return cfg_default(CFG_MAX_SCHED_SCAN_PLAN_INTERVAL); + } + + return scan_obj->pno_cfg.max_sched_scan_plan_interval; +} + +uint32_t +ucfg_scan_get_max_sched_scan_plan_iterations(struct wlan_objmgr_psoc *psoc) +{ + struct wlan_scan_obj *scan_obj; + + scan_obj = wlan_psoc_get_scan_obj(psoc); + if (!scan_obj) { + scm_err("Failed to get scan object"); + return cfg_default(CFG_MAX_SCHED_SCAN_PLAN_ITERATIONS); + } + + return scan_obj->pno_cfg.max_sched_scan_plan_iterations; +} + #endif