mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
qcacmn: Fix scan policy type in default scan case
The driver has a default scan policy type of DBS scan which is not overwritten in case of DBS disabled. Fix is to have a default of NON-DBS scan, and overwrite the scan policy if the low power, low span scan is triggered, or if the DBS is disabled from ini. Change-Id: I8c95b2ca5915e1a74ccdeae55dea5e65bcfe9664 CRs-Fixed: 2354103
This commit is contained in:
parent
da522d8f7c
commit
a6076f692d
1 changed files with 10 additions and 49 deletions
|
|
@ -412,10 +412,7 @@ ucfg_scan_update_pno_config(struct pno_def_config *pno,
|
|||
*
|
||||
* Non-DBS scan is requested if any of the below case is met:
|
||||
* 1. HW is DBS incapable
|
||||
* 2. Directed scan
|
||||
* 3. Channel list has only few channels
|
||||
* 4. Channel list has single band channels
|
||||
* 5. A high accuracy scan request is sent by kernel.
|
||||
* 2. A high accuracy scan request is sent by kernel.
|
||||
*
|
||||
* DBS scan is enabled for these conditions:
|
||||
* 1. A low power or low span scan request is sent by kernel.
|
||||
|
|
@ -425,65 +422,29 @@ ucfg_scan_update_pno_config(struct pno_def_config *pno,
|
|||
static void
|
||||
ucfg_scan_update_dbs_scan_ctrl_ext_flag(struct scan_start_request *req)
|
||||
{
|
||||
uint32_t num_chan;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
uint32_t scan_dbs_policy = SCAN_DBS_POLICY_DEFAULT;
|
||||
uint32_t conn_cnt;
|
||||
|
||||
psoc = wlan_vdev_get_psoc(req->vdev);
|
||||
|
||||
if ((DISABLE_DBS_CXN_AND_SCAN ==
|
||||
wlan_objmgr_psoc_get_dual_mac_disable(psoc)) ||
|
||||
(ENABLE_DBS_CXN_AND_DISABLE_DBS_SCAN ==
|
||||
wlan_objmgr_psoc_get_dual_mac_disable(psoc)))
|
||||
if (!policy_mgr_is_hw_dbs_capable(psoc)) {
|
||||
scm_debug("dbs disabled, going for non-dbs scan");
|
||||
scan_dbs_policy = SCAN_DBS_POLICY_FORCE_NONDBS;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (req->scan_req.scan_policy_high_accuracy)
|
||||
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;
|
||||
goto end;
|
||||
|
||||
}
|
||||
if ((req->scan_req.scan_policy_low_power) ||
|
||||
(req->scan_req.scan_policy_low_span)) {
|
||||
scm_debug("low power/span scan received, going for dbs scan");
|
||||
scan_dbs_policy = SCAN_DBS_POLICY_IGNORE_DUTY;
|
||||
goto end;
|
||||
}
|
||||
|
||||
conn_cnt = policy_mgr_get_connection_count(psoc);
|
||||
if (conn_cnt > 0) {
|
||||
scm_debug("%d active connections, go for DBS scan",
|
||||
conn_cnt);
|
||||
scan_dbs_policy = SCAN_DBS_POLICY_DEFAULT;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (req->scan_req.num_ssids) {
|
||||
scm_debug("directed SSID");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (req->scan_req.num_bssid) {
|
||||
scm_debug("directed BSSID");
|
||||
goto end;
|
||||
}
|
||||
|
||||
num_chan = req->scan_req.chan_list.num_chan;
|
||||
|
||||
/* num_chan=0 means all channels */
|
||||
if (!num_chan)
|
||||
scan_dbs_policy = SCAN_DBS_POLICY_DEFAULT;
|
||||
|
||||
if (num_chan < SCAN_MIN_CHAN_DBS_SCAN_THRESHOLD)
|
||||
goto end;
|
||||
|
||||
while (num_chan > 1) {
|
||||
if (!WLAN_REG_IS_SAME_BAND_CHANNELS(
|
||||
req->scan_req.chan_list.chan[0].freq,
|
||||
req->scan_req.chan_list.chan[num_chan-1].freq)) {
|
||||
scan_dbs_policy = SCAN_DBS_POLICY_DEFAULT;
|
||||
break;
|
||||
}
|
||||
num_chan--;
|
||||
}
|
||||
|
||||
end:
|
||||
req->scan_req.scan_ctrl_flags_ext |=
|
||||
((scan_dbs_policy << SCAN_FLAG_EXT_DBS_SCAN_POLICY_BIT)
|
||||
|
|
|
|||
Loading…
Reference in a new issue