From 18b45cd8f37952a4a8bd15b51d31c03d460750be Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Fri, 21 Sep 2018 12:35:22 +0530 Subject: [PATCH] qcacld-3.0: ADD MLME INI items of WMM AC_VO Add the following WMM AC VO ini configs to MLME cfg: 1. CFG_QOS_WMM_INFRA_DIR_AC_VO_NAME 2. CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_NAME 3. CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_NAME 4. CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_NAME 5. CFG_QOS_WMM_INFRA_SBA_AC_VO_NAME 6. CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_NAME 7. CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_NAME Introduce the basic infra APIs related to these configs from mlme. Change-Id: I402ff46aad528d7c4bbaa794b6fba498439f8e97 CRs-Fixed: 2327048 --- components/mlme/core/src/wlan_mlme_main.c | 13 ++ .../mlme/dispatcher/inc/cfg_mlme_fe_wmm.h | 185 +++++++++++++++++- .../mlme/dispatcher/inc/wlan_mlme_api.h | 80 ++++++++ .../dispatcher/inc/wlan_mlme_public_struct.h | 28 ++- .../mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 118 ++++++++++- .../mlme/dispatcher/src/wlan_mlme_api.c | 113 ++++++++++- .../mlme/dispatcher/src/wlan_mlme_ucfg_api.c | 1 - core/hdd/inc/wlan_hdd_cfg.h | 163 --------------- core/hdd/src/wlan_hdd_cfg.c | 55 ------ core/hdd/src/wlan_hdd_wmm.c | 124 +++++++++--- core/mac/src/pe/lim/lim_process_cfg_updates.c | 6 +- 11 files changed, 631 insertions(+), 255 deletions(-) diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 7c0e571f21..9713d08863 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1131,6 +1131,19 @@ static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc, wmm_params->max_sp_length = cfg_default(CFG_MAX_SP_LENGTH); wmm_params->wsm_enabled = cfg_default(CFG_WSM_ENABLED); wmm_params->edca_profile = cfg_default(CFG_EDCA_PROFILE); + + wmm_params->ac_vo.dir_ac_vo = cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VO); + wmm_params->ac_vo.nom_msdu_size_ac_vo = + cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO); + wmm_params->ac_vo.mean_data_rate_ac_vo = + cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO); + wmm_params->ac_vo.min_phy_rate_ac_vo = + cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VO); + wmm_params->ac_vo.sba_ac_vo = cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VO); + wmm_params->ac_vo.uapsd_vo_srv_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV); + wmm_params->ac_vo.uapsd_vo_sus_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV); } QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) diff --git a/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h b/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h index c0b19ac818..60dcadda34 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h @@ -54,11 +54,194 @@ CFG_VALUE_OR_DEFAULT, \ "Edca Profile") +/* default TSPEC parameters for AC_VO */ +/* + * + * InfraDirAcVo - Set TSPEC direction for VO + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * This ini is used to set TSPEC direction for VO + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_DIR_AC_VO CFG_INI_UINT( \ + "InfraDirAcVo", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "direction for vo") + +/* + * + * InfraNomMsduSizeAcVo - Set normal MSDU size for VO + * @Min: 0x0 + * @Max: 0xFFFF + * @Default: 0x80D0 + * + * This ini is used to set normal MSDU size for VO + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO CFG_INI_UINT( \ + "InfraNomMsduSizeAcVo", \ + 0x0, \ + 0xFFFF, \ + 0x80D0, \ + CFG_VALUE_OR_DEFAULT, \ + "MSDU size for VO") + +/* + * + * InfraMeanDataRateAcVo - Set mean data rate for VO + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x14500 + * + * This ini is used to set mean data rate for VO + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO CFG_INI_UINT( \ + "InfraMeanDataRateAcVo", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x14500, \ + CFG_VALUE_OR_DEFAULT, \ + "mean data rate for VO") + +/* + * + * InfraMinPhyRateAcVo - Set min PHY rate for VO + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x5B8D80 + * + * This ini is used to set min PHY rate for VO + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MIN_PHY_RATE_AC_VO CFG_INI_UINT( \ + "InfraMinPhyRateAcVo", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x5B8D80, \ + CFG_VALUE_OR_DEFAULT, \ + "min PHY rate for VO") + +/* + * + * InfraSbaAcVo - Set surplus bandwidth allowance for VO + * @Min: 0x2001 + * @Max: 0xFFFF + * @Default: 0x2001 + * + * This ini is used to set surplus bandwidth allowance for VO + * + * Related: None. + * + * Supported Feature: WMM +* + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_SBA_AC_VO CFG_INI_UINT( \ + "InfraSbaAcVo", \ + 0x2001, \ + 0xFFFF, \ + 0x2001, \ + CFG_VALUE_OR_DEFAULT, \ + "surplus bandwidth allowance for VO") + +/* + * + * InfraUapsdVoSrvIntv - Set Uapsd service interval for voice + * @Min: 0 + * @Max: 4294967295UL + * @Default: 20 + * + * This ini is used to set Uapsd service interval for voice. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_VO_SRV_INTV CFG_INI_UINT( \ + "InfraUapsdVoSrvIntv", \ + 0, \ + 4294967295UL, \ + 20, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vo srv intv") + +/* + * + * InfraUapsdVoSuspIntv - Set Uapsd suspension interval for voice + * @Min: 0 + * @Max: 4294967295UL + * @Default: 2000 + * + * This ini is used to set Uapsd suspension interval for voice. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_VO_SUS_INTV CFG_INI_UINT( \ + "InfraUapsdVoSuspIntv", \ + 0, \ + 4294967295UL, \ + 2000, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vo sus intv") + #define CFG_WMM_PARAMS_ALL \ CFG(CFG_QOS_ENABLED) \ CFG(CFG_WME_ENABLED) \ CFG(CFG_MAX_SP_LENGTH) \ CFG(CFG_WSM_ENABLED) \ - CFG(CFG_EDCA_PROFILE) + CFG(CFG_EDCA_PROFILE) \ + CFG(CFG_QOS_WMM_DIR_AC_VO) \ + CFG(CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO) \ + CFG(CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO) \ + CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_VO) \ + CFG(CFG_QOS_WMM_SBA_AC_VO) \ + CFG(CFG_QOS_WMM_UAPSD_VO_SRV_INTV) \ + CFG(CFG_QOS_WMM_UAPSD_VO_SUS_INTV) #endif /* __CFG_MLME_FE_WMM_H */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index e58f1615bc..65242c4c6e 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -538,6 +538,61 @@ QDF_STATUS wlan_mlme_get_fils_enabled_info(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc, bool value); +/** + * wlan_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction + * for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_dir_ac_vo(struct wlan_objmgr_psoc *psoc, + uint8_t *value); + +/** + * wlan_mlme_get_wmm_nom_msdu_size_ac_vo() - Get normal + * MSDU size for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_nom_msdu_size_ac_vo(struct wlan_objmgr_psoc *psoc, + uint16_t *value); + +/** + * wlan_mlme_get_wmm_mean_data_rate_ac_vo() - mean data rate for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_vo(struct wlan_objmgr_psoc *psoc, + uint32_t *value); +/** + * wlan_mlme_get_wmm_min_phy_rate_ac_vo() - min PHY + * rate for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_vo(struct wlan_objmgr_psoc *psoc, + uint32_t *value); +/** + * wlan_mlme_get_wmm_sba_ac_vo() - surplus bandwidth allowance for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_sba_ac_vo(struct wlan_objmgr_psoc *psoc, uint16_t *value); + /** * wlan_mlme_set_enable_bcast_probe_rsp() - Set enable bcast probe resp info * @psoc: pointer to psoc object @@ -547,4 +602,29 @@ QDF_STATUS wlan_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc, */ QDF_STATUS wlan_mlme_set_enable_bcast_probe_rsp(struct wlan_objmgr_psoc *psoc, bool value); + +/** + * wlan_mlme_get_wmm_uapsd_vo_srv_intv() - Get Uapsd service + * interval for voice + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vo_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_vo_sus_intv() - Get Uapsd suspension + * interval for voice + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +wlan_mlme_get_wmm_uapsd_vo_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + #endif /* _WLAN_MLME_API_H_ */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 143a2e3386..ccc2015048 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -835,12 +835,33 @@ struct wlan_mlme_lfr_cfg { }; /** -* struct wlan_mlme_wmm_params - WMM CFG Items + * struct wlan_mlme_wmm_ac_vo - Default TSPEC parameters + * for AC_VO + * @dir_ac_vo: TSPEC direction for VO + * @nom_msdu_size_ac_vo: normal MSDU size for VO + * @mean_data_rate_ac_vo: mean data rate for VO + * @min_phy_rate_ac_vo: min PHY rate for VO + * @sba_ac_vo: surplus bandwidth allowance for VO + * @uapsd_vo_srv_intv: Uapsd service interval for voice + * @uapsd_vo_sus_intv: Uapsd suspension interval for voice + */ +struct wlan_mlme_wmm_ac_vo { + uint8_t dir_ac_vo; + uint16_t nom_msdu_size_ac_vo; + uint32_t mean_data_rate_ac_vo; + uint32_t min_phy_rate_ac_vo; + uint16_t sba_ac_vo; + uint32_t uapsd_vo_srv_intv; + uint32_t uapsd_vo_sus_intv; +}; + +/** + * struct wlan_mlme_wmm_params - WMM CFG Items * @qos_enabled: AP is enabled with 11E * @wme_enabled: AP is enabled with WMM * @max_sp_length: Maximum SP Length * @wsm_enabled: AP is enabled with WSM - * @edca_profile: edca profile id + * @ac_vo: Default TSPEC parameters for AC_VO */ struct wlan_mlme_wmm_params { bool qos_enabled; @@ -848,6 +869,7 @@ struct wlan_mlme_wmm_params { uint8_t max_sp_length; bool wsm_enabled; uint32_t edca_profile; + struct wlan_mlme_wmm_ac_vo ac_vo; }; /** @@ -1082,7 +1104,7 @@ struct wlan_mlme_wep_cfg { * @acs: ACS related CFG items * @feature_flags: Feature flag config items * @wep_params: WEP related config items - * @wmm_params: WMM related CFG Items + * @wmm_params: WMM related CFG & INI Items */ struct wlan_mlme_cfg { struct wlan_mlme_chainmask chainmask_cfg; diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 6d57c2c16c..86db89a374 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -168,7 +168,6 @@ QDF_STATUS ucfg_mlme_get_acs_with_more_param(struct wlan_objmgr_psoc *psoc, /** * ucfg_mlme_get_auto_channel_weight() - Get the auto channel select weight - * * @psoc: pointer to psoc object * @value: Value that needs to be set from the caller * @@ -234,6 +233,123 @@ ucfg_mlme_get_acs_support_for_dfs_ltecoex(struct wlan_objmgr_psoc *psoc, return wlan_mlme_get_acs_support_for_dfs_ltecoex(psoc, value); } +/** + * ucfg_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_dir_ac_vo(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_wmm_dir_ac_vo(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_nom_msdu_size_ac_vo() - Get normal + * MSDU size for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_nom_msdu_size_ac_vo(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + return wlan_mlme_get_wmm_nom_msdu_size_ac_vo(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_mean_data_rate_ac_vo() - mean data rate for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_mean_data_rate_ac_vo(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_mean_data_rate_ac_vo(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_min_phy_rate_ac_vo() - min PHY + * rate for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_min_phy_rate_ac_vo(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_min_phy_rate_ac_vo(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_sba_ac_vo() - surplus bandwidth + * allowance for VO + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_sba_ac_vo(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + return wlan_mlme_get_wmm_sba_ac_vo(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_vo_srv_intv() - Get Uapsd service + * interval for voice + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_uapsd_vo_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_vo_srv_intv(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_vo_sus_intv() - Get Uapsd suspension + * interval for voice + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_get_wmm_uapsd_vo_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_vo_sus_intv(psoc, value); +} + /** * * ucfg_mlme_get_sap_inactivity_override() - Check if sap max inactivity diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index d9ca187f75..21fc10840a 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -349,6 +349,7 @@ wlan_mlme_get_model_number(struct wlan_objmgr_psoc *psoc, *plen = qdf_str_lcopy(pbuf, mlme_obj->cfg.product_details.model_number, *plen); + return QDF_STATUS_SUCCESS; } @@ -363,7 +364,6 @@ wlan_mlme_get_model_name(struct wlan_objmgr_psoc *psoc, mlme_err("Failed to get MLME Obj"); return QDF_STATUS_E_FAILURE; } - *plen = qdf_str_lcopy(pbuf, mlme_obj->cfg.product_details.model_name, *plen); @@ -406,6 +406,117 @@ wlan_mlme_get_manufacture_product_name(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS wlan_mlme_get_wmm_dir_ac_vo(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + *value = mlme_obj->cfg.wmm_params.ac_vo.dir_ac_vo; + + return QDF_STATUS_SUCCESS; +} + + +QDF_STATUS wlan_mlme_get_wmm_nom_msdu_size_ac_vo(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vo.nom_msdu_size_ac_vo; + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_vo(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) { + mlme_err("failed to get mlme obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vo.mean_data_rate_ac_vo; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_min_phy_rate_ac_vo(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) { + mlme_err("failed to get mlme obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vo.min_phy_rate_ac_vo; + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_sba_ac_vo(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vo.sba_ac_vo; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_uapsd_vo_srv_intv(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) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vo.uapsd_vo_srv_intv; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_uapsd_vo_sus_intv(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) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.wmm_params.ac_vo.uapsd_vo_sus_intv; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_listen_interval(struct wlan_objmgr_psoc *psoc, int value) { diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c index 6c2ed84cc8..09ddc0e467 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -298,4 +298,3 @@ ucfg_mlme_get_first_scan_bucket_threshold(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } - diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index f0042fa751..de8a2c39fe 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2845,50 +2845,6 @@ enum station_keepalive_method { #define CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX (1) #define CFG_QOS_IMPLICIT_SETUP_ENABLED_DEFAULT (0) -/* - * - * InfraUapsdVoSrvIntv - Set Uapsd service interval for voice - * @Min: 0 - * @Max: 4294967295UL - * @Default: 20 - * - * This ini is used to set Uapsd service interval for voice. - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_NAME "InfraUapsdVoSrvIntv" -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MAX (4294967295UL) -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_DEFAULT (20) - -/* - * - * InfraUapsdVoSuspIntv - Set Uapsd suspension interval for voice - * @Min: 0 - * @Max: 4294967295UL - * @Default: 2000 - * - * This ini is used to set Uapsd suspension interval for voice. - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_NAME "InfraUapsdVoSuspIntv" -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_MAX (4294967295UL) -#define CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_DEFAULT (2000) - /* * * InfraUapsdViSrvIntv - Set Uapsd service interval for video @@ -3021,116 +2977,6 @@ enum station_keepalive_method { #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_MAX (4294967295UL) #define CFG_QOS_WMM_INFRA_UAPSD_BK_SUS_INTV_DEFAULT (2000) -/* default TSPEC parameters for AC_VO */ -/* - * - * InfraDirAcVo - Set TSPEC direction for VO - * @Min: 0 - * @Max: 3 - * @Default: 3 - * - * This ini is used to set TSPEC direction for VO - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_DIR_AC_VO_NAME "InfraDirAcVo" -#define CFG_QOS_WMM_INFRA_DIR_AC_VO_MIN (0) -#define CFG_QOS_WMM_INFRA_DIR_AC_VO_MAX (3) -#define CFG_QOS_WMM_INFRA_DIR_AC_VO_DEFAULT (3) /*WLAN_QCT_CUST_WMM_TSDIR_BOTH*/ - -/* - * - * InfraNomMsduSizeAcVo - Set normal MSDU size for VO - * @Min: 0x0 - * @Max: 0xFFFF - * @Default: 0x80D0 - * - * This ini is used to set normal MSDU size for VO - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_NAME "InfraNomMsduSizeAcVo" -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_MIN (0x0) -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_MAX (0xFFFF) -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_DEFAULT (0x80D0) - -/* - * - * InfraMeanDataRateAcVo - Set mean data rate for VO - * @Min: 0x0 - * @Max: 0xFFFFFFFF - * @Default: 0x14500 - * - * This ini is used to set mean data rate for VO - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_NAME "InfraMeanDataRateAcVo" -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_MIN (0x0) -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_MAX (0xFFFFFFFF) -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_DEFAULT (0x14500) - -/* - * - * InfraMinPhyRateAcVo - Set min PHY rate for VO - * @Min: 0x0 - * @Max: 0xFFFFFFFF - * @Default: 0x5B8D80 - * - * This ini is used to set min PHY rate for VO - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_NAME "InfraMinPhyRateAcVo" -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_MIN (0x0) -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_MAX (0xFFFFFFFF) -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_DEFAULT (0x5B8D80) -/* - * - * InfraSbaAcVo - Set surplus bandwidth allowance for VO - * @Min: 0x2001 - * @Max: 0xFFFF - * @Default: 0x2001 - * - * This ini is used to set surplus bandwidth allowance for VO - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ - #define CFG_QOS_WMM_INFRA_SBA_AC_VO_NAME "InfraSbaAcVo" - #define CFG_QOS_WMM_INFRA_SBA_AC_VO_MIN (0x2001) - #define CFG_QOS_WMM_INFRA_SBA_AC_VO_MAX (0xFFFF) - #define CFG_QOS_WMM_INFRA_SBA_AC_VO_DEFAULT (0x2001) - /* default TSPEC parameters for AC_VI */ /* * @@ -9396,8 +9242,6 @@ struct hdd_config { enum hdd_wmm_user_mode WmmMode; bool b80211eIsEnabled; uint8_t UapsdMask; /* what ACs to setup U-APSD for at assoc */ - uint32_t InfraUapsdVoSrvIntv; - uint32_t InfraUapsdVoSuspIntv; uint32_t InfraUapsdViSrvIntv; uint32_t InfraUapsdViSuspIntv; uint32_t InfraUapsdBeSrvIntv; @@ -9416,13 +9260,6 @@ struct hdd_config { bool isRoamOffloadScanEnabled; bool bImplicitQosEnabled; - /* default TSPEC parameters for AC_VO */ - enum sme_qos_wmm_dir_type InfraDirAcVo; - uint16_t InfraNomMsduSizeAcVo; - uint32_t InfraMeanDataRateAcVo; - uint32_t InfraMinPhyRateAcVo; - uint16_t InfraSbaAcVo; - /* default TSPEC parameters for AC_VI */ enum sme_qos_wmm_dir_type InfraDirAcVi; uint16_t InfraNomMsduSizeAcVi; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 98aed220a9..ee72ac4a88 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -768,22 +768,6 @@ struct reg_table_entry g_registry_table[] = { CFG_QOS_WMM_UAPSD_MASK_MIN, CFG_QOS_WMM_UAPSD_MASK_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_NAME, - WLAN_PARAM_Integer, - struct hdd_config, InfraUapsdVoSrvIntv, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MIN, - CFG_QOS_WMM_INFRA_UAPSD_VO_SRV_INTV_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_NAME, - WLAN_PARAM_Integer, - struct hdd_config, InfraUapsdVoSuspIntv, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_MIN, - CFG_QOS_WMM_INFRA_UAPSD_VO_SUS_INTV_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_VI_SRV_INTV_NAME, WLAN_PARAM_Integer, struct hdd_config, InfraUapsdViSrvIntv, @@ -913,44 +897,6 @@ struct reg_table_entry g_registry_table[] = { CFG_ROAM_SCAN_OFFLOAD_ENABLED_MAX, cb_notify_update_roam_scan_offload_enabled, 0), - REG_VARIABLE(CFG_QOS_WMM_INFRA_DIR_AC_VO_NAME, WLAN_PARAM_Integer, - struct hdd_config, InfraDirAcVo, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_DIR_AC_VO_DEFAULT, - CFG_QOS_WMM_INFRA_DIR_AC_VO_MIN, - CFG_QOS_WMM_INFRA_DIR_AC_VO_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraNomMsduSizeAcVo, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_DEFAULT, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_MIN, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_VO_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraMeanDataRateAcVo, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_DEFAULT, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_MIN, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_VO_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraMinPhyRateAcVo, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_DEFAULT, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_MIN, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_VO_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_SBA_AC_VO_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, InfraSbaAcVo, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_SBA_AC_VO_DEFAULT, - CFG_QOS_WMM_INFRA_SBA_AC_VO_MIN, - CFG_QOS_WMM_INFRA_SBA_AC_VO_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_DIR_AC_VI_NAME, WLAN_PARAM_Integer, struct hdd_config, InfraDirAcVi, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -4369,7 +4315,6 @@ static void hdd_set_power_save_offload_config(struct hdd_context *hdd_ctx) ucfg_mlme_set_sap_listen_interval(hdd_ctx->psoc, listenInterval); } - } /** diff --git a/core/hdd/src/wlan_hdd_wmm.c b/core/hdd/src/wlan_hdd_wmm.c index 16981e7e5c..e2d63991a2 100644 --- a/core/hdd/src/wlan_hdd_wmm.c +++ b/core/hdd/src/wlan_hdd_wmm.c @@ -53,6 +53,7 @@ #include #include #include "sme_api.h" +#include "wlan_mlme_ucfg_api.h" #define WLAN_HDD_MAX_DSCP 0x3f @@ -1015,6 +1016,12 @@ static void __hdd_wmm_do_implicit_qos(struct work_struct *work) struct sme_qos_wmmtspecinfo qosInfo; struct hdd_context *hdd_ctx; mac_handle_t mac_handle; + QDF_STATUS status = QDF_STATUS_SUCCESS; + uint8_t dir_ac = 0; + uint16_t nom_msdu_size_ac = 0; + uint32_t rate_ac = 0; + uint16_t sba_ac = 0; + uint32_t uapsd_value = 0; hdd_debug("Entered, context %pK", pQosContext); @@ -1059,22 +1066,64 @@ static void __hdd_wmm_do_implicit_qos(struct work_struct *work) ((WLAN_HDD_GET_CTX(adapter))->config-> UapsdMask & SME_QOS_UAPSD_VO) ? 1 : 0; } - qosInfo.ts_info.direction = - (WLAN_HDD_GET_CTX(adapter))->config->InfraDirAcVo; + status = ucfg_mlme_get_wmm_dir_ac_vo(hdd_ctx->psoc, + &dir_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get infra_dir_ac_vo failed"); + return; + } + qosInfo.ts_info.direction = dir_ac; + qosInfo.ts_info.tid = 255; - qosInfo.mean_data_rate = - (WLAN_HDD_GET_CTX(adapter))->config-> - InfraMeanDataRateAcVo; - qosInfo.min_phy_rate = - (WLAN_HDD_GET_CTX(adapter))->config->InfraMinPhyRateAcVo; - qosInfo.min_service_interval = - (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdVoSrvIntv; - qosInfo.nominal_msdu_size = - (WLAN_HDD_GET_CTX(adapter))->config->InfraNomMsduSizeAcVo; - qosInfo.surplus_bw_allowance = - (WLAN_HDD_GET_CTX(adapter))->config->InfraSbaAcVo; - qosInfo.suspension_interval = - (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdVoSuspIntv; + + status = ucfg_mlme_get_wmm_uapsd_vo_srv_intv(hdd_ctx->psoc, + &uapsd_value); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get uapsd_srv_intv failed"); + return; + } + qosInfo.min_service_interval = uapsd_value; + + status = ucfg_mlme_get_wmm_uapsd_vo_sus_intv(hdd_ctx->psoc, + &uapsd_value); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get uapsd_vo_sus_intv failed"); + return; + } + qosInfo.suspension_interval = uapsd_value; + + status = ucfg_mlme_get_wmm_mean_data_rate_ac_vo(hdd_ctx->psoc, + &rate_ac); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get mean_data_rate_ac_vo failed"); + return; + } + qosInfo.mean_data_rate = rate_ac; + + status = ucfg_mlme_get_wmm_min_phy_rate_ac_vo(hdd_ctx->psoc, + &rate_ac); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get min_phy_rate_ac_vo failed"); + return; + } + qosInfo.min_phy_rate = rate_ac; + + status = ucfg_mlme_get_wmm_nom_msdu_size_ac_vo(hdd_ctx->psoc, + &nom_msdu_size_ac); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get nom_msdu_size_ac_vo failed"); + return; + } + qosInfo.nominal_msdu_size = nom_msdu_size_ac; + + status = ucfg_mlme_get_wmm_sba_ac_vo(hdd_ctx->psoc, + &sba_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get sba_ac_vo failed"); + return; + } + qosInfo.surplus_bw_allowance = sba_ac; + break; case SME_AC_VI: qosInfo.ts_info.up = SME_QOS_WMM_UP_VI; @@ -1818,6 +1867,8 @@ QDF_STATUS hdd_wmm_assoc(struct hdd_adapter *adapter, { uint8_t uapsdMask; QDF_STATUS status; + uint32_t srv_value = 0; + uint32_t sus_value = 0; struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); /* when we associate we need to notify TL if it needs to @@ -1847,15 +1898,26 @@ QDF_STATUS hdd_wmm_assoc(struct hdd_adapter *adapter, hdd_debug("U-APSD mask is 0x%02x", (int)uapsdMask); if (uapsdMask & HDD_AC_VO) { - status = - sme_enable_uapsd_for_ac((WLAN_HDD_GET_STATION_CTX_PTR - (adapter))->conn_info.staId[0], - SME_AC_VO, 7, 7, - hdd_ctx->config->InfraUapsdVoSrvIntv, - hdd_ctx->config->InfraUapsdVoSuspIntv, - SME_QOS_WMM_TS_DIR_BOTH, 1, - adapter->session_id, - hdd_ctx->config->DelayedTriggerFrmInt); + status = ucfg_mlme_get_wmm_uapsd_vo_srv_intv(hdd_ctx->psoc, + &srv_value); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get uapsd_srv_intv failed"); + return QDF_STATUS_SUCCESS; + } + status = ucfg_mlme_get_wmm_uapsd_vo_sus_intv(hdd_ctx->psoc, + &sus_value); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get uapsd_vo_sus_intv failed"); + return QDF_STATUS_SUCCESS; + } + + status = sme_enable_uapsd_for_ac( + (WLAN_HDD_GET_STATION_CTX_PTR( + adapter))->conn_info.staId[0], + SME_AC_VO, 7, 7, srv_value, sus_value, + SME_QOS_WMM_TS_DIR_BOTH, 1, + adapter->session_id, + hdd_ctx->config->DelayedTriggerFrmInt); QDF_ASSERT(QDF_IS_STATUS_SUCCESS(status)); } @@ -2020,6 +2082,9 @@ QDF_STATUS hdd_wmm_get_uapsd_mask(struct hdd_adapter *adapter, uint8_t *pUapsdMask) { uint8_t uapsdMask; + QDF_STATUS status; + struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); + uint32_t uapsd_value = 0; if (HDD_WMM_USER_MODE_NO_QOS == (WLAN_HDD_GET_CTX(adapter))->config->WmmMode) { @@ -2030,11 +2095,16 @@ QDF_STATUS hdd_wmm_get_uapsd_mask(struct hdd_adapter *adapter, uapsdMask = (WLAN_HDD_GET_CTX(adapter))->config->UapsdMask; /* disable UAPSD for any ACs with a 0 Service Interval */ - if ((WLAN_HDD_GET_CTX(adapter))->config-> - InfraUapsdVoSrvIntv == 0) { - uapsdMask &= ~HDD_AC_VO; + status = ucfg_mlme_get_wmm_uapsd_vo_srv_intv(hdd_ctx->psoc, + &uapsd_value); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Get uapsd_srv_intv failed"); + return QDF_STATUS_E_FAILURE; } + if (uapsd_value == 0) + uapsdMask &= ~HDD_AC_VO; + if ((WLAN_HDD_GET_CTX(adapter))->config-> InfraUapsdViSrvIntv == 0) { uapsdMask &= ~HDD_AC_VI; diff --git a/core/mac/src/pe/lim/lim_process_cfg_updates.c b/core/mac/src/pe/lim/lim_process_cfg_updates.c index a2e20c5d4a..819f3e55ae 100644 --- a/core/mac/src/pe/lim/lim_process_cfg_updates.c +++ b/core/mac/src/pe/lim/lim_process_cfg_updates.c @@ -307,10 +307,10 @@ static void lim_update_config(tpAniSirGlobal pMac, tpPESession psessionEntry) if (LIM_IS_AP_ROLE(psessionEntry) || LIM_IS_IBSS_ROLE(psessionEntry)) { enabled = pMac->mlme_cfg->wmm_params.wme_enabled; - psessionEntry->limWmeEnabled = (enabled) ? 1 : 0; + psessionEntry->limWmeEnabled = enabled; } enabled = pMac->mlme_cfg->wmm_params.wsm_enabled; - psessionEntry->limWsmEnabled = (enabled) ? 1 : 0; + psessionEntry->limWsmEnabled = enabled; if ((!psessionEntry->limWmeEnabled) && (psessionEntry->limWsmEnabled)) { pe_err("Can't enable WSM without WME"); @@ -319,7 +319,7 @@ static void lim_update_config(tpAniSirGlobal pMac, tpPESession psessionEntry) /* In STA , this parameter is filled during the join request */ if (LIM_IS_AP_ROLE(psessionEntry) || LIM_IS_IBSS_ROLE(psessionEntry)) { enabled = pMac->mlme_cfg->wmm_params.qos_enabled; - psessionEntry->limQosEnabled = (enabled) ? 1 : 0; + psessionEntry->limQosEnabled = enabled; } psessionEntry->limHcfEnabled = pMac->mlme_cfg->feature_flags.enable_hcf;