diff --git a/umac/scan/core/src/wlan_scan_main.h b/umac/scan/core/src/wlan_scan_main.h index 45bfb99f5d..56772209da 100644 --- a/umac/scan/core/src/wlan_scan_main.h +++ b/umac/scan/core/src/wlan_scan_main.h @@ -396,6 +396,10 @@ struct scan_default_params { uint32_t usr_cfg_num_probes; uint16_t max_bss_per_pdev; uint32_t max_active_scans_allowed; + uint8_t sta_scan_burst_duration; + uint8_t p2p_scan_burst_duration; + uint8_t go_scan_burst_duration; + uint8_t ap_scan_burst_duration; enum scan_priority scan_priority; enum scan_dwelltime_adaptive_mode adaptive_dwell_time_mode; enum scan_dwelltime_adaptive_mode adaptive_dwell_time_mode_nc; diff --git a/umac/scan/core/src/wlan_scan_manager.c b/umac/scan/core/src/wlan_scan_manager.c index 63398f0799..29dfc0a5d7 100644 --- a/umac/scan/core/src/wlan_scan_manager.c +++ b/umac/scan/core/src/wlan_scan_manager.c @@ -644,19 +644,24 @@ static void scm_req_update_concurrency_params(struct wlan_objmgr_vdev *vdev, * of channels in every transition by using * burst scan. */ - req->scan_req.burst_duration = - scm_scan_get_burst_duration( - req->scan_req.dwell_time_active, - scan_obj->miracast_enabled); + if (scan_obj->scan_def.go_scan_burst_duration) + req->scan_req.burst_duration = + scan_obj-> + scan_def.go_scan_burst_duration; + else + req->scan_req.burst_duration = + scm_scan_get_burst_duration( + req->scan_req. + dwell_time_active, + scan_obj-> + miracast_enabled); break; } - if ((sta_active || p2p_cli_present) && - !req->scan_req.burst_duration) { - /* - * Typical background scan. - * Disable burst scan for now. - */ - req->scan_req.burst_duration = 0; + if ((sta_active || p2p_cli_present)) { + if (scan_obj->scan_def.sta_scan_burst_duration) + req->scan_req.burst_duration = + scan_obj->scan_def. + sta_scan_burst_duration; break; } @@ -707,11 +712,17 @@ static void scm_req_update_concurrency_params(struct wlan_objmgr_vdev *vdev, req->scan_req.dwell_time_passive = req->scan_req.dwell_time_active; } - req->scan_req.burst_duration = 0; - if (utils_is_dfs_ch(pdev, ap_chan)) + + if (scan_obj->scan_def.ap_scan_burst_duration) { req->scan_req.burst_duration = - SCAN_BURST_SCAN_MAX_NUM_OFFCHANNELS * - req->scan_req.dwell_time_active; + scan_obj->scan_def.ap_scan_burst_duration; + } else { + req->scan_req.burst_duration = 0; + if (utils_is_dfs_ch(pdev, ap_chan)) + req->scan_req.burst_duration = + SCAN_BURST_SCAN_MAX_NUM_OFFCHANNELS * + req->scan_req.dwell_time_active; + } } } @@ -860,22 +871,27 @@ scm_scan_req_update_params(struct wlan_objmgr_vdev *vdev, else req->scan_req.repeat_probe_time = req->scan_req.dwell_time_active / 3; - - req->scan_req.burst_duration = - BURST_SCAN_MAX_NUM_OFFCHANNELS * - req->scan_req.dwell_time_active; - if (req->scan_req.burst_duration > - P2P_SCAN_MAX_BURST_DURATION) { - uint8_t channels = - P2P_SCAN_MAX_BURST_DURATION / - req->scan_req.dwell_time_active; - if (channels) - req->scan_req.burst_duration = + if (scan_obj->scan_def.p2p_scan_burst_duration) { + req->scan_req.burst_duration = + scan_obj->scan_def. + p2p_scan_burst_duration; + } else { + req->scan_req.burst_duration = + BURST_SCAN_MAX_NUM_OFFCHANNELS * + req->scan_req.dwell_time_active; + if (req->scan_req.burst_duration > + P2P_SCAN_MAX_BURST_DURATION) { + uint8_t channels = + P2P_SCAN_MAX_BURST_DURATION / + req->scan_req.dwell_time_active; + if (channels) + req->scan_req.burst_duration = channels * req->scan_req.dwell_time_active; - else - req->scan_req.burst_duration = + else + req->scan_req.burst_duration = P2P_SCAN_MAX_BURST_DURATION; + } } req->scan_req.scan_ev_bss_chan = false; } diff --git a/umac/scan/dispatcher/inc/wlan_scan_cfg.h b/umac/scan/dispatcher/inc/wlan_scan_cfg.h index eba4e81895..cda29fd4d4 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_cfg.h +++ b/umac/scan/dispatcher/inc/wlan_scan_cfg.h @@ -943,6 +943,108 @@ CFG_VALUE_OR_DEFAULT, \ "ext scan adaptive dwell mode") +/* + * + * sta_scan_burst_duration - Burst duration in case of split scan. + * @Min: 0 + * @Max: 180 + * @Default: 0 + * + * This ini is used to set burst duration of sta scan requests. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: External + * + * + */ +#define CFG_STA_SCAN_BURST_DURATION CFG_INI_UINT( \ + "sta_scan_burst_duration", \ + 0, \ + 180, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "sta scan burst duration") + +/* + * + * p2p_scan_burst_duration - Burst duration in case of split scan for p2p scan. + * @Min: 0 + * @Max: 180 + * @Default: 0 + * + * This ini is used to set burst duration of scan for p2p scan requests. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: External + * + * + */ + +#define CFG_P2P_SCAN_BURST_DURATION CFG_INI_UINT( \ + "p2p_scan_burst_duration", \ + 0, \ + 180, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "p2p scan burst duration") +/* + * + * go_scan_burst_duration - Burst duration in case of split scan when GO is + * active. + * @Min: 0 + * @Max: 180 + * @Default: 0 + * + * This ini is used to set burst duration of scan when GO is active. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: External + * + * + */ +#define CFG_GO_SCAN_BURST_DURATION CFG_INI_UINT( \ + "go_scan_burst_duration", \ + 0, \ + 180, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "go scan burst duration") + +/* + * + * ap_scan_burst_duration - Burst duration in case of split scan when ap + * is active. + * @Min: 0 + * @Max: 32 + * @Default: 0 + * + * This ini is used to set burst duration of scan when SAP is active. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: External + * + * + */ +#define CFG_AP_SCAN_BURST_DURATION CFG_INI_UINT( \ + "ap_scan_burst_duration", \ + 0, \ + 32, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "ap scan burst duration") + #define CFG_SCAN_ALL \ CFG(CFG_DROP_BCN_ON_CHANNEL_MISMATCH) \ CFG(CFG_ENABLE_WAKE_LOCK_IN_SCAN) \ @@ -964,6 +1066,10 @@ CFG(CFG_ENABLE_MAC_ADDR_SPOOFING) \ CFG(CFG_SCAN_AGING_TIME) \ CFG(CFG_ADAPTIVE_EXTSCAN_DWELL_MODE) \ + CFG(CFG_STA_SCAN_BURST_DURATION) \ + CFG(CFG_P2P_SCAN_BURST_DURATION) \ + CFG(CFG_GO_SCAN_BURST_DURATION) \ + CFG(CFG_AP_SCAN_BURST_DURATION) \ CFG_SCAN_PNO #endif /* __CONFIG_SCAN_H */ diff --git a/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c b/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c index 77df45faa8..6d3fdbcf77 100644 --- a/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c +++ b/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c @@ -993,6 +993,15 @@ wlan_scan_global_init(struct wlan_objmgr_psoc *psoc, scan_obj->scan_def.extscan_adaptive_dwell_mode = cfg_get(psoc, CFG_ADAPTIVE_EXTSCAN_DWELL_MODE); + /* init burst durations */ + scan_obj->scan_def.sta_scan_burst_duration = + cfg_get(psoc, CFG_STA_SCAN_BURST_DURATION); + scan_obj->scan_def.p2p_scan_burst_duration = + cfg_get(psoc, CFG_P2P_SCAN_BURST_DURATION); + scan_obj->scan_def.go_scan_burst_duration = + cfg_get(psoc, CFG_GO_SCAN_BURST_DURATION); + scan_obj->scan_def.ap_scan_burst_duration = + cfg_get(psoc, CFG_AP_SCAN_BURST_DURATION); /* scan contrl flags */ scan_obj->scan_def.scan_f_passive = true; scan_obj->scan_def.scan_f_ofdm_rates = true;