qcacmn: Add DFS APIs to reset ADFS and reinitialize DFS Timers

Add DFS APIs to
1. reset Agile DFS config
2. reinitialize DFS Timers

Change-Id: I7ede1b961f899f2e713b9be56aa8f5fe29360d66
CRs-Fixed: 2481535
This commit is contained in:
Priyadarshnee S
2019-07-28 15:05:45 +05:30
committato da nshrivas
parent 69fd90a11c
commit 4ae200caad
5 ha cambiato i file con 102 aggiunte e 1 eliminazioni

Vedi File

@@ -2655,4 +2655,18 @@ static inline int dfs_is_disable_radar_marking_set(struct wlan_dfs *dfs,
#if defined(WLAN_DFS_FULL_OFFLOAD) && defined(QCA_DFS_NOL_OFFLOAD)
bool dfs_get_disable_radar_marking(struct wlan_dfs *dfs);
#endif
/**
* dfs_reset_agile_config() - Reset the ADFS config variables.
* @dfs: Pointer to dfs_soc_priv_obj.
*/
#ifdef QCA_SUPPORT_AGILE_DFS
void dfs_reset_agile_config(struct dfs_soc_priv_obj *dfs_soc);
#endif
/**
* dfs_reinit_timers() - Reinit timers in DFS.
* @dfs: Pointer to wlan_dfs.
*/
int dfs_reinit_timers(struct wlan_dfs *dfs);
#endif /* _DFS_H_ */

Vedi File

@@ -63,6 +63,10 @@
#define MIN_WEATHER_PRECAC_DURATION (60 * 60 * 1000) /* 1 hour */
#define MAX_PRECAC_DURATION (4 * 60 * 60 * 1000) /* 4 hours */
#define MAX_WEATHER_PRECAC_DURATION (24 * 60 * 60 * 1000) /* 24 hours */
#define PCAC_DFS_INDEX_ZERO 0
#define PCAC_TIMER_NOT_RUNNING 0
#define PRECAC_NOT_STARTED 0
/**
* struct precac_tree_node - Individual tree node structure for every node in
* the precac forest maintained.

Vedi File

@@ -755,3 +755,12 @@ void dfs_update_cur_chan_flags(struct wlan_dfs *dfs,
dfs->dfs_curchan->dfs_ch_flags = flags;
dfs->dfs_curchan->dfs_ch_flagext = flagext;
}
int dfs_reinit_timers(struct wlan_dfs *dfs)
{
dfs_cac_attach(dfs);
dfs_zero_cac_timer_init(dfs->dfs_soc_obj);
dfs_nol_timer_init(dfs);
dfs_main_task_testtimer_init(dfs);
return 0;
}

Vedi File

@@ -434,4 +434,32 @@ QDF_STATUS ucfg_dfs_set_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
*/
QDF_STATUS ucfg_dfs_get_nol_subchannel_marking(struct wlan_objmgr_pdev *pdev,
bool *nol_subchannel_marking);
/**
* ucfg_dfs_reinit_timers() - Init DFS timers.
* @pdev: Pointer to wlan_objmgr_pdev structure.
*
* Wrapper function to reset CAC, NOL, DFS Test Timer and ZeroCAC Timer.
* This is invoked per pdev to reinitialize timers after HW Mode Switch is
* triggered.
*/
QDF_STATUS ucfg_dfs_reinit_timers(struct wlan_objmgr_pdev *pdev);
/**
* ucfg_dfs_reset_agile_config() - Reset ADFS config.
* @pdev: Pointer to wlan_objmgr_pdev structure.
*
* Wrapper function to reset Agile DFS config such as the variables which hold
* information about the state of the preCAC timer, active precac
* dfs index and OCAC status. It is invoked before HW Mode switch is triggered
* to ensure ADFS config is in a well known consistent state.
*/
#ifdef QCA_SUPPORT_AGILE_DFS
QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc *psoc);
#else
static inline QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc
*psoc)
{
return QDF_STATUS_SUCCESS;
}
#endif
#endif /* _WLAN_DFS_UCFG_API_H_ */

Vedi File

@@ -341,7 +341,7 @@ bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev)
dfs = wlan_pdev_get_dfs_obj(pdev);
if (!dfs) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "dfs is NULL");
return false;
return;
}
return dfs_is_hw_pulses_allowed(dfs);
@@ -349,3 +349,49 @@ bool ucfg_dfs_is_hw_pulses_allowed(struct wlan_objmgr_pdev *pdev)
qdf_export_symbol(ucfg_dfs_is_hw_pulses_allowed);
#endif
#ifdef QCA_SUPPORT_AGILE_DFS
QDF_STATUS ucfg_dfs_reset_agile_config(struct wlan_objmgr_psoc *psoc)
{
struct dfs_soc_priv_obj *soc_obj;
if (!psoc) {
dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS, "psoc is null");
return QDF_STATUS_E_FAILURE;
}
soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
WLAN_UMAC_COMP_DFS);
if (!soc_obj) {
dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,
"Failed to get dfs psoc component");
return QDF_STATUS_E_FAILURE;
}
dfs_reset_agile_config(soc_obj);
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(ucfg_dfs_reset_agile_config);
#endif
QDF_STATUS ucfg_dfs_reinit_timers(struct wlan_objmgr_pdev *pdev)
{
struct wlan_dfs *dfs;
if (!tgt_dfs_is_pdev_5ghz(pdev))
return QDF_STATUS_SUCCESS;
dfs = wlan_pdev_get_dfs_obj(pdev);
if (!dfs) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "dfs is NULL");
return QDF_STATUS_E_FAILURE;
}
dfs_reinit_timers(dfs);
return QDF_STATUS_SUCCESS;
}
qdf_export_symbol(ucfg_dfs_reinit_timers);