Browse Source

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
Alan Chen 4 years ago
parent
commit
53d838dcb3

+ 1 - 0
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);

+ 1 - 0
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

+ 16 - 0
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)

+ 8 - 0
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)

+ 5 - 0
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);