diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c
index ae6837b384..c922c753db 100644
--- a/mlme/core/src/wlan_mlme_main.c
+++ b/mlme/core/src/wlan_mlme_main.c
@@ -1903,6 +1903,18 @@ static void mlme_init_fe_rrm_in_cfg(struct wlan_objmgr_psoc *psoc,
}
}
+static void mlme_init_powersave_params(struct wlan_objmgr_psoc *psoc,
+ struct wlan_mlme_powersave *ps_cfg)
+{
+ ps_cfg->is_imps_enabled = cfg_get(psoc, CFG_ENABLE_IMPS);
+ ps_cfg->is_bmps_enabled = cfg_get(psoc, CFG_ENABLE_PS);
+ ps_cfg->auto_bmps_timer_val = cfg_get(psoc, CFG_AUTO_BMPS_ENABLE_TIMER);
+ ps_cfg->bmps_min_listen_interval = cfg_get(psoc, CFG_BMPS_MINIMUM_LI);
+ ps_cfg->bmps_max_listen_interval = cfg_get(psoc, CFG_BMPS_MAXIMUM_LI);
+ ps_cfg->dtim_selection_diversity =
+ cfg_get(psoc, CFG_DTIM_SELECTION_DIVERSITY);
+}
+
QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
{
struct wlan_mlme_psoc_obj *mlme_obj;
@@ -1933,6 +1945,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
mlme_init_he_cap_in_cfg(psoc, mlme_cfg);
mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40);
mlme_init_product_details_cfg(&mlme_cfg->product_details);
+ mlme_init_powersave_params(psoc, &mlme_cfg->ps_params);
mlme_init_sta_cfg(psoc, &mlme_cfg->sta);
mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg);
mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr);
diff --git a/mlme/dispatcher/inc/cfg_mlme.h b/mlme/dispatcher/inc/cfg_mlme.h
index 1c7f0f8272..bc5e0e236d 100644
--- a/mlme/dispatcher/inc/cfg_mlme.h
+++ b/mlme/dispatcher/inc/cfg_mlme.h
@@ -43,6 +43,7 @@
#include "cfg_mlme_sta.h"
#include "cfg_sap_protection.h"
#include "cfg_mlme_fe_wmm.h"
+#include "cfg_mlme_powersave.h"
#include "cfg_mlme_sap.h"
#include "cfg_mlme_twt.h"
#include "cfg_mlme_scoring.h"
@@ -75,6 +76,7 @@
CFG_NSS_CHAINS_ALL \
CFG_OBSS_HT40_ALL \
CFG_OCE_ALL \
+ CFG_POWERSAVE_ALL \
CFG_QOS_ALL \
CFG_RATES_ALL \
CFG_WMM_PARAMS_ALL\
diff --git a/mlme/dispatcher/inc/cfg_mlme_powersave.h b/mlme/dispatcher/inc/cfg_mlme_powersave.h
new file mode 100644
index 0000000000..45445a6cef
--- /dev/null
+++ b/mlme/dispatcher/inc/cfg_mlme_powersave.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: This file contains centralized definitions of power save related
+ * converged configurations.
+ */
+
+#ifndef __CFG_MLME_POWERSAVE_H
+#define __CFG_MLME_POWERSAVE_H
+
+/*
+ *
+ * gEnableImps - Enable/Disable IMPS
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * This ini is used to enable/Disable IMPS(IdleModePowerSave) Mode
+ *
+ * Related: None
+ *
+ * Supported Feature: Power Save
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_ENABLE_IMPS CFG_INI_BOOL( \
+ "gEnableImps", \
+ 1,\
+ "Enable/disable IMPS")
+
+/*
+ *
+ * gEnableBmps - Enable/Disable BMPS
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * This ini is used to enable/Disable BMPS(BeaconModePowerSave) Mode
+ *
+ * Related: None
+ *
+ * Supported Feature: Power Save
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_ENABLE_PS CFG_INI_BOOL( \
+ "gEnableBmps", \
+ 1,\
+ "Enable/disable BMPS")
+
+/*
+ *
+ * gAutoBmpsTimerValue - Set Auto BMPS Timer value
+ * @Min: 0
+ * @Max: 120
+ * @Default: 90
+ *
+ * This ini is used to set Auto BMPS Timer value in seconds
+ *
+ * Related: gEnableBmps
+ *
+ * Supported Feature: Power Save
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_AUTO_BMPS_ENABLE_TIMER CFG_INI_UINT( \
+ "gAutoBmpsTimerValue", \
+ 0, \
+ 120, \
+ 90, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Auto BMPS Timer value")
+
+/*
+ *
+ * gBmpsMinListenInterval - Set BMPS Minimum Listen Interval
+ * @Min: 1
+ * @Max: 65535
+ * @Default: 1
+ *
+ * This ini is used to set BMPS Minimum Listen Interval. If gPowerUsage
+ * is set "Min", this INI need to be set.
+ *
+ * Related: gEnableBmps, gPowerUsage
+ *
+ * Supported Feature: Power Save
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_BMPS_MINIMUM_LI CFG_INI_UINT( \
+ "gBmpsMinListenInterval", \
+ 1, \
+ 65535, \
+ 1, \
+ CFG_VALUE_OR_DEFAULT, \
+ "BMPS Minimum Listen Interval")
+
+/*
+ *
+ * gBmpsMaxListenInterval - Set BMPS Maximum Listen Interval
+ * @Min: 1
+ * @Max: 65535
+ * @Default: 1
+ *
+ * This ini is used to set BMPS Maximum Listen Interval. If gPowerUsage
+ * is set "Max", this INI need to be set.
+ *
+ * Related: gEnableBmps, gPowerUsage
+ *
+ * Supported Feature: Power Save
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_BMPS_MAXIMUM_LI CFG_INI_UINT( \
+ "gBmpsMaxListenInterval", \
+ 1, \
+ 65535, \
+ 1, \
+ CFG_VALUE_OR_DEFAULT, \
+ "BMPS Maximum Listen Interval")
+
+/*
+ *
+ * gEnableDTIMSelectionDiversity - Enable/Disable chain
+ * selection optimization for one chain dtim
+ * @Min: 0
+ * @Max: 30
+ * @Default: 5
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_DTIM_SELECTION_DIVERSITY CFG_INI_UINT( \
+ "gEnableDTIMSelectionDiversity", \
+ 0, \
+ 30, \
+ 5, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Chain selection diversity value")
+
+#define CFG_POWERSAVE_ALL \
+ CFG(CFG_ENABLE_IMPS) \
+ CFG(CFG_ENABLE_PS) \
+ CFG(CFG_AUTO_BMPS_ENABLE_TIMER) \
+ CFG(CFG_BMPS_MINIMUM_LI) \
+ CFG(CFG_BMPS_MAXIMUM_LI) \
+ CFG(CFG_DTIM_SELECTION_DIVERSITY)
+
+#endif /* __CFG_MLME_POWERSAVE_H */
diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index c6366d2162..8982212ac0 100644
--- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -598,10 +598,13 @@ struct wlan_mlme_dfs_cfg {
/**
* struct wlan_mlme_mbo - Multiband Operation related ini configs
- * @mbo_candidate_rssi_thres:
- * @mbo_current_rssi_thres:
- * @mbo_current_rssi_mcc_thres:
- * @mbo_candidate_rssi_btc_thres:
+ * @mbo_candidate_rssi_thres: candidate AP's min rssi to accept it
+ * @mbo_current_rssi_thres: Connected AP's rssi threshold below which
+ * transition is considered
+ * @mbo_current_rssi_mcc_thres: connected AP's RSSI threshold value to prefer
+ * against MCC
+ * @mbo_candidate_rssi_btc_thres: Candidate AP's minimum RSSI threshold to
+ * prefer it even in BT coex.
*/
struct wlan_mlme_mbo {
int8_t mbo_candidate_rssi_thres;
@@ -610,6 +613,24 @@ struct wlan_mlme_mbo {
int8_t mbo_candidate_rssi_btc_thres;
};
+/**
+ * struct wlan_mlme_powersave - Powersave related ini configs
+ * @is_imps_enabled: flag to enable/disable IMPS
+ * @is_bmps_enabled: flag to enable/disable BMPS
+ * @auto_bmps_timer: auto BMPS timer value
+ * @bmps_min_listen_interval: BMPS listen inteval minimum value
+ * @bmps_max_listen_interval: BMPS listen interval maximum value
+ * @dtim_selection_diversity: dtim selection diversity value to be sent to fw
+ */
+struct wlan_mlme_powersave {
+ bool is_imps_enabled;
+ bool is_bmps_enabled;
+ uint32_t auto_bmps_timer_val;
+ uint32_t bmps_min_listen_interval;
+ uint32_t bmps_max_listen_interval;
+ uint32_t dtim_selection_diversity;
+};
+
/**
* struct wlan_mlme_vht_caps - MLME VHT config items
* @supp_chan_width: Supported Channel Width
@@ -1753,6 +1774,7 @@ struct wlan_mlme_fe_rrm {
* @wlan_mlme_power: power related items
* @acs: ACS related CFG items
* @feature_flags: Feature flag config items
+ * @ps_params: Powersave related ini configs
* @wep_params: WEP related config items
* @wifi_pos_cfg: WIFI POS config
* @wmm_params: WMM related CFG & INI Items
@@ -1789,6 +1811,7 @@ struct wlan_mlme_cfg {
struct wlan_mlme_power power;
struct wlan_mlme_acs acs;
struct wlan_mlme_feature_flag feature_flags;
+ struct wlan_mlme_powersave ps_params;
struct wlan_mlme_wep_cfg wep_params;
struct wlan_mlme_wifi_pos_cfg wifi_pos_cfg;
struct wlan_mlme_wmm_params wmm_params;