qcacmn: Use best regulatory power mode in scan manager

Due to the nature of discrete channel lists for each
power mode on the host driver, it is currently not
possible to scan 6GHz channels which are not part
of the operating regulatory power mode.

To enable scanning all 6GHz channels irrespective of the
regulatory power mode (i.e., standard, low, etc.), the
existing sanity checks for the regulatory current channel
list need to refer to the super channel list
instead.

Additionally, these sanity checks need to check the
channel state and flags for the best power mode instead
of the current power mode. This will allow the scan
manager to access all 6GHz channels irrespective
of the current regulatory power mode.

Multi-band operation (for radios operable on 2.4GHz,
5GHz and/or 6GHz) is also ensured in these sanity
checks.

CRs-Fixed: 3140935
Change-Id: If10c617834dd89f4bbd99669318fd84c63421755
Šī revīzija ir iekļauta:
Aditya Sathish
2022-03-03 14:47:04 +05:30
revīziju iesūtīja Madan Koyyalamudi
vecāks f8beed3fc7
revīzija 1cebff1228
4 mainīti faili ar 13 papildinājumiem un 6 dzēšanām

Parādīt failu

@@ -992,6 +992,7 @@ ucfg_scan_init_bssid_params(struct scan_start_request *req,
/**
* is_chan_enabled_for_scan() - helper API to check if a frequency
* is allowed to scan.
* @pdev: pointer to pdev
* @reg_chan: regulatory_channel object
* @low_2g: lower 2.4 GHz frequency thresold
* @high_2g: upper 2.4 GHz frequency thresold
@@ -1001,14 +1002,19 @@ ucfg_scan_init_bssid_params(struct scan_start_request *req,
* Return: true if scan is allowed. false otherwise.
*/
static bool
is_chan_enabled_for_scan(struct regulatory_channel *reg_chan,
is_chan_enabled_for_scan(struct wlan_objmgr_pdev *pdev,
struct regulatory_channel *reg_chan,
qdf_freq_t low_2g, qdf_freq_t high_2g, qdf_freq_t low_5g,
qdf_freq_t high_5g)
{
if (reg_chan->state == CHANNEL_STATE_DISABLE)
if (wlan_reg_is_disable_for_pwrmode(pdev,
reg_chan->center_freq,
REG_BEST_PWR_MODE))
return false;
if (reg_chan->nol_chan)
return false;
/* 2 GHz channel */
if ((util_scan_scm_freq_to_band(reg_chan->center_freq) ==
WLAN_BAND_2_4_GHZ) &&
@@ -1076,7 +1082,8 @@ ucfg_scan_init_chanlist_params(struct scan_start_request *req,
for (idx = 0, num_chans = 0;
(idx < NUM_CHANNELS && num_chans < max_chans); idx++)
if ((is_chan_enabled_for_scan(&reg_chan_list[idx],
if ((is_chan_enabled_for_scan(pdev,
&reg_chan_list[idx],
low_2g, high_2g,
low_5g, high_5g)) &&
((req->scan_req.scan_f_2ghz &&

Parādīt failu

@@ -330,7 +330,7 @@ util_scan_get_chan_from_he_6g_params(struct wlan_objmgr_pdev *pdev,
band_mask);
if (scan_obj->drop_bcn_on_invalid_freq &&
wlan_reg_is_disable_for_pwrmode(pdev, *chan_freq,
REG_CURRENT_PWR_MODE)) {
REG_BEST_PWR_MODE)) {
scm_debug_rl(QDF_MAC_ADDR_FMT": Drop as invalid channel %d freq %d in HE 6Ghz params",
QDF_MAC_ADDR_REF(scan_params->bssid.bytes),
he_6g_params->primary_channel, *chan_freq);