diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 6a2f32da89..4bf374ecd2 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -1308,6 +1308,15 @@ static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SRV_INTV); wmm_params->ac_bk.uapsd_bk_sus_intv = cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SUS_INTV); + + wmm_params->wmm_config.wmm_mode = + cfg_get(psoc, CFG_QOS_WMM_MODE); + wmm_params->wmm_config.b80211e_is_enabled = + cfg_get(psoc, CFG_QOS_WMM_80211E_ENABLED); + wmm_params->wmm_config.uapsd_mask = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_MASK); + wmm_params->wmm_config.bimplicit_qos_enabled = + cfg_get(psoc, CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED); } static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h b/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h index 872ac5ed5e..3ac32832af 100644 --- a/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h +++ b/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h @@ -756,6 +756,101 @@ CFG_VALUE_OR_DEFAULT, \ "Infra uapsd bk sus intv") +/* WMM configuration */ +/* + * + * WmmIsEnabled - Enable WMM feature + * @Min: 0 + * @Max: 2 + * @Default: 0 + * + * This ini is used to enable/disable WMM. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MODE CFG_INI_UINT( \ + "WmmIsEnabled", \ + 0, \ + 2, \ + 2, \ + CFG_VALUE_OR_DEFAULT, \ + "Enable WMM feature") + +/* + * + * 80211eIsEnabled - Enable 802.11e feature + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable 802.11e. + * + * Related: None. + * + * Supported Feature: 802.11e + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_80211E_ENABLED CFG_INI_BOOL( \ + "80211eIsEnabled", \ + 0, \ + "Enable 802.11e feature") + +/* + * + * UapsdMask - To setup U-APSD mask for ACs + * @Min: 0x00 + * @Max: 0xFF + * @Default: 0x00 + * + * This ini is used to setup U-APSD mask for ACs. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_MASK CFG_INI_UINT( \ + "UapsdMask", \ + 0x00, \ + 0xFF, \ + 0x00, \ + CFG_VALUE_OR_DEFAULT, \ + "setup U-APSD mask for ACs") + +/* + * + * ImplicitQosIsEnabled - Enableimplicit QOS + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable implicit QOS. + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED CFG_INI_BOOL( \ + "ImplicitQosIsEnabled", \ + 0, \ + "Enable implicit QOS") + #define CFG_WMM_PARAMS_ALL \ CFG(CFG_QOS_ENABLED) \ CFG(CFG_WME_ENABLED) \ @@ -789,6 +884,10 @@ CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_BK) \ CFG(CFG_QOS_WMM_SBA_AC_BK) \ CFG(CFG_QOS_WMM_UAPSD_BK_SRV_INTV) \ - CFG(CFG_QOS_WMM_UAPSD_BK_SUS_INTV) + CFG(CFG_QOS_WMM_UAPSD_BK_SUS_INTV) \ + CFG(CFG_QOS_WMM_MODE) \ + CFG(CFG_QOS_WMM_80211E_ENABLED) \ + CFG(CFG_QOS_WMM_UAPSD_MASK) \ + CFG(CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED) #endif /* __CFG_MLME_FE_WMM_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_api.h b/mlme/dispatcher/inc/wlan_mlme_api.h index 0010f1a166..39a3c9ae97 100644 --- a/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_api.h @@ -883,6 +883,47 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_bk_sus_intv(struct wlan_objmgr_psoc *psoc, uint32_t *value); +/** + * wlan_mlme_get_wmm_mode() - Enable WMM feature + * @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_mode(struct wlan_objmgr_psoc *psoc, uint8_t *value); + +/** + * wlan_mlme_get_80211e_is_enabled() - Enable 802.11e feature + * @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_80211e_is_enabled(struct wlan_objmgr_psoc *psoc, bool *value); + +/** + * wlan_mlme_get_wmm_uapsd_mask() - setup U-APSD mask for ACs + * @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_mask(struct wlan_objmgr_psoc *psoc, uint8_t *value); + +/** + * wlan_mlme_get_implicit_qos_is_enabled() - Enable implicit QOS + * @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_implicit_qos_is_enabled(struct wlan_objmgr_psoc *psoc, + bool *value); + /** * wlan_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction * for VO diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index f734d1fbe9..e3b4bd0cc6 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -997,6 +997,20 @@ struct wlan_mlme_lfr_cfg { uint32_t roam_preauth_no_ack_timeout; }; +/** + * struct wlan_mlme_wmm_config - WMM configuration + * @wmm_mode: Enable WMM feature + * @b80211e_is_enabled: Enable 802.11e feature + * @uapsd_mask: what ACs to setup U-APSD for at assoc + * @bimplicit_qos_enabled: Enable implicit QOS + */ +struct wlan_mlme_wmm_config { + uint8_t wmm_mode; + bool b80211e_is_enabled; + uint8_t uapsd_mask; + bool bimplicit_qos_enabled; +}; + /** * struct wlan_mlme_wmm_ac_vo - Default TSPEC parameters * for AC_VO @@ -1100,6 +1114,7 @@ struct wlan_mlme_wmm_params { uint8_t max_sp_length; bool wsm_enabled; uint32_t edca_profile; + struct wlan_mlme_wmm_config wmm_config; struct wlan_mlme_wmm_ac_vo ac_vo; struct wlan_mlme_wmm_ac_vi ac_vi; struct wlan_mlme_wmm_ac_be ac_be; diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index abee54832c..1ad51b486d 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -2049,4 +2049,65 @@ ucfg_mlme_get_wmm_uapsd_bk_sus_intv(struct wlan_objmgr_psoc *psoc, return wlan_mlme_get_wmm_uapsd_bk_sus_intv(psoc, value); } +/** + * ucfg_mlme_get_wmm_mode() - Enable WMM feature + * @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_mode(struct wlan_objmgr_psoc *psoc, uint8_t *value) +{ + return wlan_mlme_get_wmm_mode(psoc, value); +} + +/** + * ucfg_mlme_get_80211e_is_enabled() - Enable 802.11e feature + * @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_80211e_is_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + return wlan_mlme_get_80211e_is_enabled(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_mask() - setup U-APSD mask for ACs + * @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_mask(struct wlan_objmgr_psoc *psoc, uint8_t *value) +{ + return wlan_mlme_get_wmm_uapsd_mask(psoc, value); +} + +/** + * ucfg_mlme_get_implicit_qos_is_enabled() - Enable implicit QOS + * @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_implicit_qos_is_enabled(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + return wlan_mlme_get_implicit_qos_is_enabled(psoc, value); +} + #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/mlme/dispatcher/src/wlan_mlme_api.c b/mlme/dispatcher/src/wlan_mlme_api.c index 76841212a9..bbd4375ab3 100644 --- a/mlme/dispatcher/src/wlan_mlme_api.c +++ b/mlme/dispatcher/src/wlan_mlme_api.c @@ -1024,6 +1024,71 @@ wlan_mlme_get_wmm_uapsd_bk_sus_intv(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +wlan_mlme_get_wmm_mode(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.wmm_config.wmm_mode; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_80211e_is_enabled(struct wlan_objmgr_psoc *psoc, bool *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.wmm_config.b80211e_is_enabled; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_uapsd_mask(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.wmm_config.uapsd_mask; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_implicit_qos_is_enabled(struct wlan_objmgr_psoc *psoc, + bool *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.wmm_config.bimplicit_qos_enabled; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_listen_interval(struct wlan_objmgr_psoc *psoc, int value) {