qcacmn: Add DFS APIs for Rolling CAC feature

Feature Description:
FCC/JP domains do not support PreCAC. However, we can always start
beaconning in a channel if we have completed CAC in that channel for more
than or equal to the CAC period of that channel.
If an Agile engine is available and the next channel is known, we can
start CAC in the next channel using agile, while continuing the Tx/Rx
in the current channel. And when we want to start beaconning in the
next channel after a radar detection (or after/for a user request) we can
do so without any new CAC. This allows us to jump to the new channel
without having to disrupt any ongoing data traffic. This type of
continuous CAC in the next channel while operating in the current channel
is known as Rolling CAC.

Following changes are implemented:
I)Per DFS PDEV:
1) 'dfs_agile_rcac_freq' to store agile RCAC frequency.
2) 'dfs_agile_rcac_ucfg' to enable/disable RCAC feature.

II)Per DFS PSOC:
1) 'dfs_rcac_timer' is the only RCAC timer for the device/Psoc. This will
be shared by pdev level dfs objects.
2) 'dfs_rcac_timer_running' to indicate if RCAC is running or not.

III) New APIs:
1. A dispatcher API 'ucfg_dfs_set_rcac_enable' to set rcac config.
2. A dispatcher API 'ucfg_dfs_get_rcac_enable' to get rcac_config.
3. A dispatcher API 'ucfg_dfs_set_rcac_freq' to set user configured
rcac freq.
4. A dispatcher API 'ucfg_dfs_get_rcac_freq' to get the user configured
rcac freq.
5. Rolling CAC timer init/deinit APIs.

CRs-Fixed: 2659666
Change-Id: Iae002b2ab77964fca4faf237b0d0a4e2f2afe4c2
Šī revīzija ir iekļauta:
Priyadarshnee S
2020-04-08 14:12:51 +05:30
revīziju iesūtīja nshrivas
vecāks 87df3e8c2d
revīzija 4dab98d3ce
5 mainīti faili ar 280 papildinājumiem un 1 dzēšanām

Parādīt failu

@@ -596,4 +596,77 @@ static inline QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc
return QDF_STATUS_SUCCESS;
}
#endif
/**
* ucfg_dfs_set_rcac_enable() - Set rcac enable flag.
* @pdev: Pointer to DFS pdev object.
* @rcac_en: User input value to enable/disable rolling cac feature.
*
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
QDF_STATUS ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
bool rcac_en);
#else
static inline QDF_STATUS
ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
bool rcac_en)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* ucfg_dfs_get_rcac_enable() - Get rcac enable flag.
* @pdev: Pointer to DFS pdev object.
* @rcac_en: Pointer to hold the "rcac" config.
*
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
uint8_t *rcac_en);
#else
static inline QDF_STATUS
ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
uint8_t *rcac_en)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* ucfg_dfs_set_rcac_freq() - Set rcac freq.
* @pdev: Pointer to DFS pdev object.
* @rcac_freq: User configured rcac freq in MHZ.
*
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
QDF_STATUS ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
qdf_freq_t rcac_freq);
#else
static inline QDF_STATUS
ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
qdf_freq_t rcac_freq)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* ucfg_dfs_get_rcac_freq() - Get rcac freq.
* @pdev: Pointer to DFS pdev object.
* @rcac_freq: Pointer to store the user configured rcac freq in MHZ.
*
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
QDF_STATUS ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
qdf_freq_t *rcac_freq);
#else
static inline QDF_STATUS
ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
qdf_freq_t *rcac_freq)
{
return QDF_STATUS_SUCCESS;
}
#endif
#endif /* _WLAN_DFS_UCFG_API_H_ */