From f1f2db4791a481285e7d8b86c660af1671c138cd Mon Sep 17 00:00:00 2001 From: Pragaspathi Thilagaraj Date: Tue, 20 Nov 2018 00:05:44 +0530 Subject: [PATCH] qcacld-3.0: Converge Powersave related ini items to MLME Add basic infra to move the following Powersave related ini to MLME component: CFG_ENABLE_IMPS CFG_ENABLE_PS CFG_AUTO_PS_ENABLE_TIMER CFG_ICMP_DISABLE_PS CFG_BMPS_MINIMUM_LI CFG_BMPS_MAXIMUM_LI CFG_DTIM_SELECTION_DIVERSITY This change brings in mlme_init changes, mlme_public_struct.h changes and cfg_mlme file changes for power save parameters. Also remove the ini CFG_ICMP_DISABLE_PS_NAME as it is not used. Change-Id: Ifd74d276b12acc8cd9740c25ee3ca261ed7d0143 CRs-Fixed: 2356897 --- mlme/core/src/wlan_mlme_main.c | 13 ++ mlme/dispatcher/inc/cfg_mlme.h | 2 + mlme/dispatcher/inc/cfg_mlme_powersave.h | 176 ++++++++++++++++++ mlme/dispatcher/inc/wlan_mlme_public_struct.h | 31 ++- 4 files changed, 218 insertions(+), 4 deletions(-) create mode 100644 mlme/dispatcher/inc/cfg_mlme_powersave.h 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;