qcacmn: Add a dispatcher API to determine if RCAC is supported

Add a dispatcher API ucfg_dfs_is_agile_rcac_enabled() to determine
if RCAC is supported for the given pdev.
Change the prototype of dfs_get_rcac_enable() to store rcac
config in a bool datatype.
Also, do a structure copy of ch_params of RCAC channel in
utils_dfs_get_rcac_channel().

CRs-Fixed: 2679975
Change-Id: I4b033463fc8111144bfffd3bb7e7d2bef6568c46
This commit is contained in:
Priyadarshnee S 2020-05-06 18:48:12 +05:30 • committed by nshrivas
commit 78bb108d7c
6 changed files with 47 additions and 26 deletions

View file

@ -1171,11 +1171,11 @@ dfs_set_rcac_enable(struct wlan_dfs *dfs,
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
QDF_STATUS dfs_get_rcac_enable(struct wlan_dfs *dfs,
uint8_t *rcac_en);
bool *rcac_en);
#else
static inline QDF_STATUS
dfs_get_rcac_enable(struct wlan_dfs *dfs,
uint8_t *rcac_en)
bool *rcac_en)
{
return QDF_STATUS_SUCCESS;
}
@ -1241,25 +1241,6 @@ dfs_rcac_timer_deinit(struct dfs_soc_priv_obj *dfs_soc_obj)
}
#endif
/**
* dfs_is_host_agile_rcac_config_enabled() - Check if agile rCAC is enabled.
* This considers the user config and DFS domain of the pdev to
* to decide if agile RCAC is supported or not.
* @dfs: Pointer to the wlan_dfs object.
*
* Return: True if agile DFS is enabled, else false.
*
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
bool dfs_is_host_agile_rcac_config_enabled(struct wlan_dfs *dfs);
#else
static inline bool
dfs_is_host_agile_rcac_config_enabled(struct wlan_dfs *dfs)
{
return false;
}
#endif
#ifdef QCA_SUPPORT_ADFS_RCAC
#define DFS_RCAC_SM_SPIN_LOCK(_soc_obj) \
qdf_spin_lock_bh(&((_soc_obj)->dfs_rcac_sm_lock))

View file

@ -623,11 +623,11 @@ ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
uint8_t *rcac_en);
bool *rcac_en);
#else
static inline QDF_STATUS
ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
uint8_t *rcac_en)
bool *rcac_en)
{
return QDF_STATUS_SUCCESS;
}
@ -669,4 +669,27 @@ ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
}
#endif
/**
* ucfg_dfs_is_agile_rcac_enabled() - Determine if Rolling CAC is supported
* or not.
* @pdev: Pointer to struct wlan_objmgr_pdev.
*
* Following are the conditions needed to assertain that rolling CAC
* is enabled:
* 1. DFS domain of the PDEV must be FCC or MKK.
* 2. User has enabled Rolling CAC configuration.
* 3. FW capability to support ADFS.
*
* Return: True if RCAC support is enabled, false otherwise.
*/
#ifdef QCA_SUPPORT_ADFS_RCAC
bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev);
#else
static inline bool
ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev)
{
return false;
}
#endif
#endif /* _WLAN_DFS_UCFG_API_H_ */

View file

@ -469,7 +469,7 @@ QDF_STATUS ucfg_dfs_set_rcac_enable(struct wlan_objmgr_pdev *pdev,
qdf_export_symbol(ucfg_dfs_set_rcac_enable);
QDF_STATUS ucfg_dfs_get_rcac_enable(struct wlan_objmgr_pdev *pdev,
uint8_t *rcac_en)
bool *rcac_en)
{
struct wlan_dfs *dfs;
@ -521,4 +521,19 @@ QDF_STATUS ucfg_dfs_get_rcac_freq(struct wlan_objmgr_pdev *pdev,
}
qdf_export_symbol(ucfg_dfs_get_rcac_freq);
bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev)
{
struct wlan_dfs *dfs;
dfs = wlan_pdev_get_dfs_obj(pdev);
if (!dfs) {
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
return false;
}
return dfs_is_agile_rcac_enabled(dfs);
}
qdf_export_symbol(ucfg_dfs_is_agile_rcac_enabled);
#endif

View file

@ -1668,7 +1668,7 @@ QDF_STATUS utils_dfs_get_rcac_channel(struct wlan_objmgr_pdev *pdev,
return status;
*target_chan_freq = dfs->dfs_rcac_param.rcac_pri_freq;
chan_params = &dfs->dfs_rcac_param.rcac_ch_params;
*chan_params = dfs->dfs_rcac_param.rcac_ch_params;
return QDF_STATUS_SUCCESS;
}

View file

@ -1636,13 +1636,14 @@ struct wlan_lmac_if_dfs_rx_ops {
QDF_STATUS (*dfs_set_rcac_enable)(struct wlan_objmgr_pdev *pdev,
bool rcac_en);
QDF_STATUS (*dfs_get_rcac_enable)(struct wlan_objmgr_pdev *pdev,
uint8_t *rcac_en);
bool *rcac_en);
QDF_STATUS (*dfs_set_rcac_freq)(struct wlan_objmgr_pdev *pdev,
qdf_freq_t rcac_freq);
QDF_STATUS (*dfs_get_rcac_freq)(struct wlan_objmgr_pdev *pdev,
qdf_freq_t *rcac_freq);
void (*dfs_rcac_sm_deliver_evt)(struct wlan_objmgr_pdev *pdev,
enum dfs_rcac_sm_evt event);
bool (*dfs_is_agile_rcac_enabled)(struct wlan_objmgr_pdev *pdev);
#endif
};

View file

@ -500,6 +500,7 @@ static void register_rcac_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
rx_ops->dfs_set_rcac_freq = ucfg_dfs_set_rcac_freq;
rx_ops->dfs_get_rcac_freq = ucfg_dfs_get_rcac_freq;
rx_ops->dfs_rcac_sm_deliver_evt = utils_dfs_rcac_sm_deliver_evt;
rx_ops->dfs_is_agile_rcac_enabled = ucfg_dfs_is_agile_rcac_enabled;
}
#else
static inline void