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
这个提交包含在:
Aditya Sathish
2022-03-03 14:47:04 +05:30
提交者 Madan Koyyalamudi
父节点 f8beed3fc7
当前提交 1cebff1228
修改 4 个文件,包含 13 行新增6 行删除

查看文件

@@ -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 &&

查看文件

@@ -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);