From 85d4f035876ba2e05c29e4e1bf82c303bfaac61f Mon Sep 17 00:00:00 2001 From: gaurank kathpalia Date: Fri, 7 Feb 2020 15:44:13 +0530 Subject: [PATCH] qcacmn: Set DBS scan if ndp peers are active Currently on the STA interface if the scan comes the driver puts it to NON-DBS scan if the high accuracy request comes, but if the NDP peers are active this causes a throughput loss as scan takes much time to complete. Fix is to do a DBS scan if the NDP peers are attached to a NDI interface. Change-Id: I798fd388f2bf010304ba1f6777680cf4d1f3ccfb CRs-Fixed: 2615541 --- umac/scan/core/src/wlan_scan_manager.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/umac/scan/core/src/wlan_scan_manager.c b/umac/scan/core/src/wlan_scan_manager.c index eecbfc0ad285..ed2aa5573886 100644 --- a/umac/scan/core/src/wlan_scan_manager.c +++ b/umac/scan/core/src/wlan_scan_manager.c @@ -434,6 +434,7 @@ scm_update_dbs_scan_ctrl_ext_flag(struct scan_start_request *req) { struct wlan_objmgr_psoc *psoc; uint32_t scan_dbs_policy = SCAN_DBS_POLICY_DEFAULT; + bool ndi_present; psoc = wlan_vdev_get_psoc(req->vdev); @@ -447,6 +448,15 @@ scm_update_dbs_scan_ctrl_ext_flag(struct scan_start_request *req) goto end; } + ndi_present = policy_mgr_mode_specific_connection_count(psoc, + PM_NDI_MODE, + NULL); + + if (ndi_present && !policy_mgr_is_hw_dbs_2x2_capable(psoc)) { + scm_debug("NDP present go for DBS scan"); + goto end; + } + if (req->scan_req.scan_policy_high_accuracy) { scm_debug("high accuracy scan received, going for non-dbs scan"); scan_dbs_policy = SCAN_DBS_POLICY_FORCE_NONDBS; @@ -550,6 +560,8 @@ int scm_scan_get_burst_duration(int max_ch_time, bool miracast_enabled) return burst_duration; } +#define SCM_ACTIVE_DWELL_TIME_NAN 40 + /** * scm_req_update_concurrency_params() - update scan req params depending on * concurrent mode present. @@ -759,6 +771,17 @@ static void scm_req_update_concurrency_params(struct wlan_objmgr_vdev *vdev, req->scan_req.dwell_time_active; } } + + if (ndi_present) { + req->scan_req.dwell_time_active = + QDF_MIN(req->scan_req.dwell_time_active, + SCM_ACTIVE_DWELL_TIME_NAN); + req->scan_req.dwell_time_active_2g = + QDF_MIN(req->scan_req.dwell_time_active_2g, + SCM_ACTIVE_DWELL_TIME_NAN); + scm_debug("NDP active modify dwell time 2ghz %d", + req->scan_req.dwell_time_active_2g); + } } /**