diff --git a/mlme/dispatcher/inc/wlan_mlme_api.h b/mlme/dispatcher/inc/wlan_mlme_api.h index 14e2483d6c..cdbe3acffa 100644 --- a/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_api.h @@ -1973,4 +1973,81 @@ wlan_mlme_get_mcc_feature(struct wlan_objmgr_psoc *psoc, */ QDF_STATUS wlan_mlme_get_rrm_enabled(struct wlan_objmgr_psoc *psoc, bool *value); + +/* + * wlan_mlme_get_dtim_selection_diversity() - get dtim selection diversity + * bitmap + * @psoc: pointer to psoc object + * @dtim_selection_div: value that is requested by the caller + * This function gets the dtim selection diversity bitmap to be + * sent to the firmware + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_get_dtim_selection_diversity(struct wlan_objmgr_psoc *psoc, + uint32_t *dtim_selection_div); + +/** + * wlan_mlme_get_bmps_min_listen_interval() - get beacon mode powersave + * minimum listen interval value + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_get_bmps_min_listen_interval(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_bmps_max_listen_interval() - get beacon mode powersave + * maximum listen interval value + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_get_bmps_max_listen_interval(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_auto_bmps_timer_value() - get bmps timer value + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_get_auto_bmps_timer_value(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_is_bmps_enabled() - check if beacon mode powersave is + * enabled/disabled + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_is_bmps_enabled(struct wlan_objmgr_psoc *psoc, + bool *value); + +/** + * wlan_mlme_override_bmps_imps() - disable imps/bmps + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_override_bmps_imps(struct wlan_objmgr_psoc *psoc); + +/** + * wlan_mlme_is_imps_enabled() - check if idle mode powersave is + * enabled/disabled + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS wlan_mlme_is_imps_enabled(struct wlan_objmgr_psoc *psoc, + bool *value); + #endif /* _WLAN_MLME_API_H_ */ diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 4c40f589ac..03e726ce40 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -3219,4 +3219,118 @@ QDF_STATUS ucfg_wlan_mlme_get_rrm_enabled(struct wlan_objmgr_psoc *psoc, QDF_STATUS ucfg_mlme_get_latency_enable(struct wlan_objmgr_psoc *psoc, bool *value); +/** + * ucfg_mlme_get_dtim_selection_diversity() - get dtim selection diversity + * bitmap + * @psoc: pointer to psoc object + * @dtim_selection_div: value that is requested by the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_get_dtim_selection_diversity(struct wlan_objmgr_psoc *psoc, + uint32_t *dtim_selection_div) +{ + return wlan_mlme_get_dtim_selection_diversity(psoc, dtim_selection_div); +} + +/** + * ucfg_mlme_get_bmps_min_listen_interval() - get beacon mode powersave + * minimum listen interval value + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_get_bmps_min_listen_interval(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_bmps_min_listen_interval(psoc, value); +} + +/** + * ucfg_mlme_get_bmps_max_listen_interval() - get beacon mode powersave + * maximum listen interval value + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_get_bmps_max_listen_interval(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_bmps_max_listen_interval(psoc, value); +} + +/** + * ucfg_mlme_get_auto_bmps_timer_value() - get bmps timer value + * minimum listen interval value + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_get_auto_bmps_timer_value(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_auto_bmps_timer_value(psoc, value); +} + +/** + * ucfg_mlme_is_bmps_enabled() - check if beacon mode powersave is + * enabled/disabled + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_is_bmps_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + return wlan_mlme_is_bmps_enabled(psoc, value); +} + +/** + * ucfg_mlme_is_imps_enabled() - check if idle mode powersave is + * enabled/disabled + * @psoc: pointer to psoc object + * @value: value that is requested by the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_is_imps_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + return wlan_mlme_is_imps_enabled(psoc, value); +} + +/** + * ucfg_mlme_override_bmps_imps() - disable imps/bmps as part of + * override to disable all ps features + * @psoc: pointer to psoc object + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +static inline QDF_STATUS +ucfg_mlme_override_bmps_imps(struct wlan_objmgr_psoc *psoc) +{ + return wlan_mlme_override_bmps_imps(psoc); +} + #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/mlme/dispatcher/src/wlan_mlme_api.c b/mlme/dispatcher/src/wlan_mlme_api.c index 8247025d11..241ba24018 100644 --- a/mlme/dispatcher/src/wlan_mlme_api.c +++ b/mlme/dispatcher/src/wlan_mlme_api.c @@ -2876,6 +2876,54 @@ QDF_STATUS wlan_mlme_is_sap_uapsd_enabled(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS wlan_mlme_get_dtim_selection_diversity(struct wlan_objmgr_psoc *psoc, + uint32_t *dtim_selection_div) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *dtim_selection_div = cfg_default(CFG_DTIM_SELECTION_DIVERSITY); + return QDF_STATUS_E_FAILURE; + } + + *dtim_selection_div = mlme_obj->cfg.ps_params.dtim_selection_diversity; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_bmps_min_listen_interval(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *value = cfg_default(CFG_BMPS_MINIMUM_LI); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.ps_params.bmps_min_listen_interval; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_bmps_max_listen_interval(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *value = cfg_default(CFG_BMPS_MAXIMUM_LI); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.ps_params.bmps_max_listen_interval; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_uapsd_flag(struct wlan_objmgr_psoc *psoc, bool value) { @@ -2900,6 +2948,67 @@ QDF_STATUS wlan_mlme_get_rrm_enabled(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_E_FAILURE; *value = mlme_obj->cfg.rrm_config.rrm_enabled; + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_auto_bmps_timer_value(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *value = cfg_default(CFG_AUTO_BMPS_ENABLE_TIMER); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.ps_params.auto_bmps_timer_val; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_is_bmps_enabled(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *value = cfg_default(CFG_ENABLE_PS); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.ps_params.is_bmps_enabled; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_is_imps_enabled(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *value = cfg_default(CFG_ENABLE_IMPS); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.ps_params.is_imps_enabled; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_override_bmps_imps(struct wlan_objmgr_psoc *psoc) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_FAILURE; + + mlme_obj->cfg.ps_params.is_imps_enabled = 0; + mlme_obj->cfg.ps_params.is_bmps_enabled = 0; return QDF_STATUS_SUCCESS; }