qcacmn: Don't Scan same mac frequencies, if low latency SAP present

Currently, Scan list is trimmed based on low latency sap frequency.
But even after removal of 6 GHz frequencies from scan list,
host receives scan events for 6 GHz frequencies because rnr info
is updated and hint bssids and hint ssids are added due to which
FW scans 6 GHz frequencies also.

Fix is to update hint_bssid and hint_s_ssid to those frequencies
only which are allowed to be scanned in case low latency sap is up.

Change-Id: I7f9bc6b6262a235d5aa02c9155555b4827227acf
CRs-Fixed: 3379401
This commit is contained in:
Sheenam Monga
2023-02-20 17:14:54 +05:30
committed by Madan Koyyalamudi
orang tua 9149ed9f51
melakukan a1a81cce96

Melihat File

@@ -719,6 +719,100 @@ void wlan_scan_get_feature_info(struct wlan_objmgr_psoc *psoc,
#endif
#ifdef WLAN_POLICY_MGR_ENABLE
/**
* wlan_scan_update_hint_bssid() - Update rnr hint bssid info
* @psoc: objmgr psoc
* @req: Scan request
* @ll_sap_freq: ll sap freq
*
* Use to update hint_bssid if low latency Sap is UP
*
* Return: void
*/
static void
wlan_scan_update_hint_bssid(struct wlan_objmgr_psoc *psoc,
struct scan_start_request *req,
qdf_freq_t ll_sap_freq)
{
struct hint_bssid hint_bssid[WLAN_SCAN_MAX_HINT_BSSID] = {0};
uint32_t i;
uint32_t count = 0;
qdf_freq_t freq;
if (!req->scan_req.num_hint_bssid)
return;
for (i = 0; i < req->scan_req.num_hint_bssid; i++) {
freq = req->scan_req.hint_bssid[i].freq_flags >> 16;
if (!freq)
continue;
if (!policy_mgr_2_freq_always_on_same_mac(psoc,
ll_sap_freq,
freq)) {
qdf_mem_copy(
&hint_bssid[count].bssid,
&req->scan_req.hint_bssid[i].bssid,
sizeof(hint_bssid[i].bssid));
hint_bssid[count].freq_flags =
req->scan_req.hint_bssid[i].freq_flags;
count++;
}
}
qdf_mem_zero(req->scan_req.hint_bssid,
sizeof(req->scan_req.hint_bssid));
if (count)
qdf_mem_copy(req->scan_req.hint_bssid, hint_bssid,
sizeof(hint_bssid));
req->scan_req.num_hint_bssid = count;
}
/**
* wlan_scan_update_hint_s_ssid() - Update rnr hint short ssid info
* @psoc: objmgr psoc
* @req: Scan request
* @ll_sap_freq: ll sap freq
*
* Use to update hint_s_ssid if low latency Sap is UP
*
* Return: void
*/
static
void wlan_scan_update_hint_s_ssid(struct wlan_objmgr_psoc *psoc,
struct scan_start_request *req,
qdf_freq_t ll_sap_freq)
{
struct hint_short_ssid hint_s_ssid[WLAN_SCAN_MAX_HINT_BSSID] = {0};
uint32_t i;
uint32_t count = 0;
qdf_freq_t freq;
if (!req->scan_req.num_hint_s_ssid)
return;
for (i = 0; i < req->scan_req.num_hint_s_ssid; i++) {
freq = req->scan_req.hint_s_ssid[i].freq_flags >> 16;
if (!freq)
continue;
if (!policy_mgr_2_freq_always_on_same_mac(psoc,
ll_sap_freq,
freq)) {
qdf_mem_copy(
&hint_s_ssid[count].short_ssid,
&req->scan_req.hint_s_ssid[i].short_ssid,
sizeof(hint_s_ssid[i].short_ssid));
hint_s_ssid[count].freq_flags =
req->scan_req.hint_s_ssid[i].freq_flags;
count++;
}
}
qdf_mem_zero(req->scan_req.hint_s_ssid,
sizeof(req->scan_req.hint_s_ssid));
if (count)
qdf_mem_copy(req->scan_req.hint_s_ssid, hint_s_ssid,
sizeof(hint_s_ssid));
req->scan_req.num_hint_s_ssid = count;
}
void wlan_scan_update_low_latency_profile_chnlist(
struct wlan_objmgr_vdev *vdev,
struct scan_start_request *req)
@@ -737,6 +831,8 @@ void wlan_scan_update_low_latency_profile_chnlist(
if (!ll_sap_freq)
return;
wlan_scan_update_hint_bssid(psoc, req, ll_sap_freq);
wlan_scan_update_hint_s_ssid(psoc, req, ll_sap_freq);
/*
* Scenario: LL SAP is present and scan is requested.
* Allow scan on freq on mutually exclusive mac.