qcacmn: Find proper radar-found secondary frequency when preCAC is running

Bring up a Hawkeye AP in ETSI domain in HT80_80 mode and enable preCAC
(preCACEn). When preCAC timer is running, if radar gets detected in the
secondary segment (which is DFS), dfs_get_bonding_channels() gets invoked
to find the radar affected channels's IEEE. The radar-found channel's IEEE
gets computed from "dfs_precac_secondary_freq" variable which does not get
populated for Lithium chipsets as "dfs_precac_secondary_freq" is specific
to legacy preCAC.

Since the secondary 80 channel's IEEE gets assigned as 0, radar-found
frequency gets computed wrongly and channels are not added to NOL.
Ensure that "dfs_precac_secondary_freq" is used for secondary frequency
computation only for legacy chips. For chips that have a separate agile
radar detector engine, use "dfs_ch_vhtop_ch_freq_seg2" variable to
compute the secondary frequency.

CRs-Fixed: 2521686
Change-Id: I50e1c496ce81d532408d61d21bac568c8d755b2c
This commit is contained in:
Priyadarshnee S
2019-09-06 12:25:50 +05:30
committed by nshrivas
부모 fe93761b89
커밋 e0440bc502

파일 보기

@@ -530,9 +530,19 @@ uint8_t dfs_get_bonding_channels(struct wlan_dfs *dfs,
else {
/* When precac is running "dfs_ch_vhtop_ch_freq_seg2" is
* zero and "dfs_precac_secondary_freq" holds the secondary
* frequency.
* frequency in case of legacy chips.
* For chips that support a separate agile detector engine,
* "dfs_agile_precac_freq" holds the frequency that agile
* engine operates on.
*
* In case of radar detected by the HW in the secondary 80
* channel,"dfs_ch_vhtop_ch_freq_seg2" holds the secondary
* segment center frequency in the below cases:
* 1. preCAC timer is running in chips that support separate
* agile engines.
* 2. preCAC timer is not running.
*/
if (dfs_is_precac_timer_running(dfs))
if (dfs_is_precac_timer_running(dfs) && dfs->dfs_precac_enable)
center_chan = dfs->dfs_precac_secondary_freq;
else
center_chan = curchan->dfs_ch_vhtop_ch_freq_seg2;