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:

committato da
nshrivas

parent
69fd90a11c
commit
4ae200caad
@@ -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_ */
|
||||
|
@@ -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.
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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_ */
|
||||
|
@@ -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);
|
||||
|
Fai riferimento in un nuovo problema
Block a user