From 53d838dcb3266714cd144e8b96b748eeb678e859 Mon Sep 17 00:00:00 2001 From: Alan Chen Date: Wed, 16 Sep 2020 12:17:39 -0700 Subject: [PATCH] qcacld-3.0: Add check for OPM power save enabled Qpower config should not be allowed if Qpower config/OPM power save config is disabled in ini file. Change-Id: Iff21159f30731f7188506ab5e5e3133d02203b6b CRs-Fixed: 2778632 --- components/pmo/core/src/wlan_pmo_main.c | 1 + .../inc/wlan_pmo_common_public_struct.h | 1 + .../pmo/dispatcher/inc/wlan_pmo_ucfg_api.h | 16 ++++++++++++++++ .../pmo/dispatcher/src/wlan_pmo_ucfg_api.c | 8 ++++++++ core/hdd/src/wlan_hdd_cfg80211.c | 5 +++++ 5 files changed, 31 insertions(+) diff --git a/components/pmo/core/src/wlan_pmo_main.c b/components/pmo/core/src/wlan_pmo_main.c index f2a87e23b6ed..58f0290fe254 100644 --- a/components/pmo/core/src/wlan_pmo_main.c +++ b/components/pmo/core/src/wlan_pmo_main.c @@ -188,6 +188,7 @@ static void wlan_pmo_init_cfg(struct wlan_objmgr_psoc *psoc, psoc_cfg->sta_mod_dtim = cfg_get(psoc, CFG_PMO_ENABLE_MODULATED_DTIM); psoc_cfg->enable_mc_list = cfg_get(psoc, CFG_PMO_MC_ADDR_LIST_ENABLE); psoc_cfg->power_save_mode = cfg_get(psoc, CFG_PMO_POWERSAVE_MODE); + psoc_cfg->default_power_save_mode = psoc_cfg->power_save_mode; psoc_cfg->max_ps_poll = cfg_get(psoc, CFG_PMO_MAX_PS_POLL); psoc_cfg->wow_enable = cfg_get(psoc, CFG_PMO_WOW_ENABLE); diff --git a/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h b/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h index 40786a7b9e5a..80c6d5716b98 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h @@ -333,6 +333,7 @@ struct pmo_psoc_cfg { uint8_t sta_max_li_mod_dtim; enum pmo_wow_enable_type wow_enable; enum powersave_mode power_save_mode; + enum powersave_mode default_power_save_mode; #ifdef FEATURE_RUNTIME_PM uint32_t runtime_pm_delay; #endif diff --git a/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h b/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h index 999bd5fe9c9e..c1b30b1a4da9 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h @@ -216,6 +216,16 @@ ucfg_pmo_is_mc_addr_list_enabled(struct wlan_objmgr_psoc *psoc); enum powersave_mode ucfg_pmo_get_power_save_mode(struct wlan_objmgr_psoc *psoc); +/** + * ucfg_pmo_get_default_power_save_mode() - Get default power save mode + * from ini config + * @psoc: pointer to psoc object + * + * Return: power save mode + */ +enum powersave_mode +ucfg_pmo_get_default_power_save_mode(struct wlan_objmgr_psoc *psoc); + /** * ucfg_pmo_set_power_save_mode() - Set power save mode * @psoc: pointer to psoc object @@ -1730,6 +1740,12 @@ ucfg_pmo_get_power_save_mode(struct wlan_objmgr_psoc *psoc) return 0; } +static inline enum powersave_mode +ucfg_pmo_get_default_power_save_mode(struct wlan_objmgr_psoc *psoc) +{ + return PMO_PS_ADVANCED_POWER_SAVE_DISABLE; +} + static inline void ucfg_pmo_set_power_save_mode(struct wlan_objmgr_psoc *psoc, enum powersave_mode val) diff --git a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c index 0e8f95516459..c2875060f201 100644 --- a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c +++ b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c @@ -691,6 +691,14 @@ ucfg_pmo_get_power_save_mode(struct wlan_objmgr_psoc *psoc) return pmo_psoc_ctx->psoc_cfg.power_save_mode; } +enum powersave_mode +ucfg_pmo_get_default_power_save_mode(struct wlan_objmgr_psoc *psoc) +{ + struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc); + + return pmo_psoc_ctx->psoc_cfg.default_power_save_mode; +} + void ucfg_pmo_set_power_save_mode(struct wlan_objmgr_psoc *psoc, enum powersave_mode val) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 5ad29a94e092..0c006bb8adcc 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -7755,6 +7755,11 @@ static int hdd_config_power(struct hdd_adapter *adapter, struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); uint8_t power; + if (!ucfg_pmo_get_default_power_save_mode(hdd_ctx->psoc)) { + hdd_err_rl("OPM power save is disabled in ini"); + return -EINVAL; + } + power = nla_get_u8(attr); return hdd_set_power_config(hdd_ctx, adapter, power);