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