diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index e47ed5d664..0424f34c79 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1279,6 +1279,20 @@ static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc, wmm_params->ac_vi.uapsd_vi_sus_intv = cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV); + wmm_params->ac_be.dir_ac_be = + cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BE); + wmm_params->ac_be.nom_msdu_size_ac_be = + cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE); + wmm_params->ac_be.mean_data_rate_ac_be = + cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE); + wmm_params->ac_be.min_phy_rate_ac_be = + cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BE); + wmm_params->ac_be.sba_ac_be = + cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BE); + wmm_params->ac_be.uapsd_be_srv_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SRV_INTV); + wmm_params->ac_be.uapsd_be_sus_intv = + cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SUS_INTV); } static void mlme_init_wps_params_cfg(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 9ff49a9f36..678ad48ca3 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_fe_wmm.h @@ -406,6 +406,181 @@ CFG_VALUE_OR_DEFAULT, \ "Infra uapsd vi sus intv") +/* + * + * InfraDirAcBe - Set TSPEC direction for BE + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * This ini is used to set TSPEC direction for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_DIR_AC_BE CFG_INI_UINT( \ + "InfraDirAcBe", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "TSPEC direction for BE") + +/* + * + * InfraNomMsduSizeAcBe - Set normal MSDU size for BE + * @Min: 0x0 + * @Max: 0xFFFF + * @Default: 0x85DC + * + * This ini is used to set normal MSDU size for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE CFG_INI_UINT( \ + "InfraNomMsduSizeAcBe", \ + 0x0, \ + 0xFFFF, \ + 0x85DC, \ + CFG_VALUE_OR_DEFAULT, \ + "MSDU size for BE") + +/* + * + * InfraMeanDataRateAcBe - Set mean data rate for BE + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x493E0 + * + * This ini is used to set mean data rate for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE CFG_INI_UINT( \ + "InfraMeanDataRateAcBe", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x493E0, \ + CFG_VALUE_OR_DEFAULT, \ + "data rate for BE") + +/* + * + * InfraMinPhyRateAcBe - Set min PHY rate for BE + * @Min: 0x0 + * @Max: 0xFFFFFFFF + * @Default: 0x5B8D80 + * + * This ini is used to set min PHY rate for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_MIN_PHY_RATE_AC_BE CFG_INI_UINT( \ + "InfraMinPhyRateAcBe", \ + 0x0, \ + 0xFFFFFFFF, \ + 0x5B8D80, \ + CFG_VALUE_OR_DEFAULT, \ + "min PHY rate for BE") + +/* + * + * InfraSbaAcBe - Set surplus bandwidth allowance for BE + * @Min: 0x2001 + * @Max: 0xFFFF + * @Default: 0x2001 + * + * This ini is used to set surplus bandwidth allowance for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_SBA_AC_BE CFG_INI_UINT( \ + "InfraSbaAcBe", \ + 0x2001, \ + 0xFFFF, \ + 0x2001, \ + CFG_VALUE_OR_DEFAULT, \ + "surplus bandwidth allowance for BE") + +/* + * + * InfraUapsdBeSrvIntv - Set Uapsd service interval for BE + * @Min: 0 + * @Max: 4294967295UL + * @Default: 300 + * + * This ini is used to set Uapsd service interval for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_BE_SRV_INTV CFG_INI_UINT( \ + "InfraUapsdBeSrvIntv", \ + 0, \ + 4294967295UL, \ + 300, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd be srv intv") + +/* + * + * InfraUapsdBeSuspIntv - Set Uapsd suspension interval for BE + * @Min: 0 + * @Max: 4294967295UL + * @Default: 2000 + * + * This ini is used to set Uapsd suspension interval for BE + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_QOS_WMM_UAPSD_BE_SUS_INTV CFG_INI_UINT( \ + "InfraUapsdBeSuspIntv", \ + 0, \ + 4294967295UL, \ + 2000, \ + CFG_VALUE_OR_DEFAULT, \ + "Infra uapsd vi sus intv") + #define CFG_WMM_PARAMS_ALL \ CFG(CFG_QOS_ENABLED) \ CFG(CFG_WME_ENABLED) \ @@ -425,6 +600,13 @@ CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_VI) \ CFG(CFG_QOS_WMM_SBA_AC_VI) \ CFG(CFG_QOS_WMM_UAPSD_VI_SRV_INTV) \ - CFG(CFG_QOS_WMM_UAPSD_VI_SUS_INTV) + CFG(CFG_QOS_WMM_UAPSD_VI_SUS_INTV) \ + CFG(CFG_QOS_WMM_DIR_AC_BE) \ + CFG(CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE) \ + CFG(CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE) \ + CFG(CFG_QOS_WMM_MIN_PHY_RATE_AC_BE) \ + CFG(CFG_QOS_WMM_SBA_AC_BE) \ + CFG(CFG_QOS_WMM_UAPSD_BE_SRV_INTV) \ + CFG(CFG_QOS_WMM_UAPSD_BE_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 dd923010b2..dab0de03f4 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -721,6 +721,86 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, uint32_t *value); +/** + * wlan_mlme_get_wmm_dir_ac_be() - Get TSPEC direction + * for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint8_t *value); + +/** + * wlan_mlme_get_wmm_nom_msdu_size_ac_be() - Get normal + * MSDU size for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint16_t *value); + +/** + * wlan_mlme_get_wmm_mean_data_rate_ac_be() - mean data + * rate for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_min_phy_rate_ac_be() - min PHY + * rate for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_sba_ac_be() - surplus bandwidth + * allowance for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint16_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_be_srv_intv() - Get Uapsd service + * interval for BE + * @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_be_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + +/** + * wlan_mlme_get_wmm_uapsd_be_sus_intv() - Get Uapsd suspension + * interval for BE + * @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_be_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value); + /** * wlan_mlme_get_wmm_dir_ac_vo() - Get TSPEC direction * for VO @@ -729,9 +809,8 @@ wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, * * Return: QDF Status */ -QDF_STATUS -wlan_mlme_get_wmm_dir_ac_vo(struct wlan_objmgr_psoc *psoc, - uint8_t *value); +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 diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 36594e4ac1..66def29914 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1039,6 +1039,29 @@ struct wlan_mlme_wmm_ac_vi { uint32_t uapsd_vi_sus_intv; }; +/** + * struct wlan_mlme_wmm_ac_be - Default TSPEC parameters + * for AC_BE + * @dir_ac_be: TSPEC direction for BE + * @nom_msdu_size_ac_be: normal MSDU size for BE + * @mean_data_rate_ac_be: mean data rate for BE + * @min_phy_rate_ac_be: min PHY rate for BE + * @sba_ac_be: surplus bandwidth allowance for BE + * @uapsd_be_srv_intv: Uapsd service interval for BE + * @uapsd_be_sus_intv: Uapsd suspension interval for BE + + */ +struct wlan_mlme_wmm_ac_be { + uint8_t dir_ac_be; + uint16_t nom_msdu_size_ac_be; + uint32_t mean_data_rate_ac_be; + uint32_t min_phy_rate_ac_be; + uint16_t sba_ac_be; + uint32_t uapsd_be_srv_intv; + uint32_t uapsd_be_sus_intv; + +}; + /** * struct wlan_mlme_wmm_params - WMM CFG Items * @qos_enabled: AP is enabled with 11E @@ -1047,6 +1070,7 @@ struct wlan_mlme_wmm_ac_vi { * @wsm_enabled: AP is enabled with WSM * @ac_vo: Default TSPEC parameters for AC_VO * @ac_vi: Default TSPEC parameters for AC_VI + * @ac_be: Default TSPEC parameters for AC_BE */ struct wlan_mlme_wmm_params { bool qos_enabled; @@ -1056,6 +1080,7 @@ struct wlan_mlme_wmm_params { uint32_t edca_profile; 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/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 13f27d729a..4c1deae775 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -1815,4 +1815,121 @@ ucfg_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, return wlan_mlme_get_wmm_uapsd_vi_sus_intv(psoc, value); } +/** + * ucfg_mlme_get_wmm_dir_ac_be() - Get TSPEC direction + * for BE + * @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_be(struct wlan_objmgr_psoc *psoc, uint8_t *value) +{ + return wlan_mlme_get_wmm_dir_ac_be(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_nom_msdu_size_ac_be() - Get normal + * MSDU size for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint16_t *value) +{ + return wlan_mlme_get_wmm_nom_msdu_size_ac_be(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_mean_data_rate_ac_be() - mean data + * rate for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_mean_data_rate_ac_be(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_min_phy_rate_ac_be() - min PHY + * rate for BE + * @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_be(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_min_phy_rate_ac_be(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_sba_ac_be() - surplus bandwidth + * allowance for BE + * @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_be(struct wlan_objmgr_psoc *psoc, uint16_t *value) +{ + return wlan_mlme_get_wmm_sba_ac_be(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_be_srv_intv() - Get Uapsd service + * interval for BE + * @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_be_srv_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_be_srv_intv(psoc, value); +} + +/** + * ucfg_mlme_get_wmm_uapsd_be_sus_intv() - Get Uapsd suspension + * interval for BE + * @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_be_sus_intv(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_wmm_uapsd_be_sus_intv(psoc, value); +} + #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index aef56c3d8b..c0bd5a64f6 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -794,6 +794,120 @@ QDF_STATUS wlan_mlme_get_wmm_uapsd_vi_sus_intv(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +wlan_mlme_get_wmm_dir_ac_be(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_be.dir_ac_be; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_nom_msdu_size_ac_be(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_be.nom_msdu_size_ac_be; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_mean_data_rate_ac_be(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_be.mean_data_rate_ac_be; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_min_phy_rate_ac_be(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_be.min_phy_rate_ac_be; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_wmm_sba_ac_be(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_be.sba_ac_be; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_uapsd_be_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_be.uapsd_be_srv_intv; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_get_wmm_uapsd_be_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_be.uapsd_be_sus_intv; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_set_sap_listen_interval(struct wlan_objmgr_psoc *psoc, int value) { diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index c85a63e8d0..8fe2ee87b3 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2741,50 +2741,6 @@ enum station_keepalive_method { #define CFG_QOS_IMPLICIT_SETUP_ENABLED_MAX (1) #define CFG_QOS_IMPLICIT_SETUP_ENABLED_DEFAULT (0) -/* - * - * InfraUapsdBeSrvIntv - Set Uapsd service interval for BE - * @Min: 0 - * @Max: 4294967295UL - * @Default: 300 - * - * This ini is used to set Uapsd service interval for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_NAME "InfraUapsdBeSrvIntv" -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_MAX (4294967295UL) -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_DEFAULT (300) - -/* - * - * InfraUapsdBeSuspIntv - Set Uapsd suspension interval for BE - * @Min: 0 - * @Max: 4294967295UL - * @Default: 2000 - * - * This ini is used to set Uapsd suspension interval for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_NAME "InfraUapsdBeSuspIntv" -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_MIN (0) -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_MAX (4294967295UL) -#define CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_DEFAULT (2000) - /* * * InfraUapsdBkSrvIntv - Set Uapsd service interval for BK @@ -2829,117 +2785,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_BE*/ -/* - * - * InfraDirAcBe - Set TSPEC direction for BE - * @Min: 0 - * @Max: 3 - * @Default: 3 - * - * This ini is used to set TSPEC direction for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_DIR_AC_BE_NAME "InfraDirAcBe" -#define CFG_QOS_WMM_INFRA_DIR_AC_BE_MIN (0) -#define CFG_QOS_WMM_INFRA_DIR_AC_BE_MAX (3) -#define CFG_QOS_WMM_INFRA_DIR_AC_BE_DEFAULT (3) /*WLAN_QCT_CUST_WMM_TSDIR_BOTH*/ - -/* - * - * InfraNomMsduSizeAcBe - Set normal MSDU size for BE - * @Min: 0x0 - * @Max: 0xFFFF - * @Default: 0x85DC - * - * This ini is used to set normal MSDU size for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_NAME "InfraNomMsduSizeAcBe" -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_MIN (0x0) -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_MAX (0xFFFF) -#define CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_DEFAULT (0x85DC) - -/* - * - * InfraMeanDataRateAcBe - Set mean data rate for BE - * @Min: 0x0 - * @Max: 0xFFFFFFFF - * @Default: 0x493E0 - * - * This ini is used to set mean data rate for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_NAME "InfraMeanDataRateAcBe" -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_MIN (0x0) -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_MAX (0xFFFFFFFF) -#define CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_DEFAULT (0x493E0) - -/* - * - * InfraMinPhyRateAcBe - Set min PHY rate for BE - * @Min: 0x0 - * @Max: 0xFFFFFFFF - * @Default: 0x5B8D80 - * - * This ini is used to set min PHY rate for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_NAME "InfraMinPhyRateAcBe" -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_MIN (0x0) -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_MAX (0xFFFFFFFF) -#define CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_DEFAULT (0x5B8D80) - -/* - * - * InfraSbaAcBe - Set surplus bandwidth allowance for BE - * @Min: 0x2001 - * @Max: 0xFFFF - * @Default: 0x2001 - * - * This ini is used to set surplus bandwidth allowance for BE - * - * Related: None. - * - * Supported Feature: WMM - * - * Usage: Internal/External - * - * - */ - #define CFG_QOS_WMM_INFRA_SBA_AC_BE_NAME "InfraSbaAcBe" - #define CFG_QOS_WMM_INFRA_SBA_AC_BE_MIN (0x2001) - #define CFG_QOS_WMM_INFRA_SBA_AC_BE_MAX (0xFFFF) - #define CFG_QOS_WMM_INFRA_SBA_AC_BE_DEFAULT (0x2001) - /* default TSPEC parameters for AC_Bk*/ /* * @@ -6953,8 +6798,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 InfraUapsdBeSrvIntv; - uint32_t InfraUapsdBeSuspIntv; uint32_t InfraUapsdBkSrvIntv; uint32_t InfraUapsdBkSuspIntv; bool isFastRoamIniFeatureEnabled; @@ -6969,13 +6812,6 @@ struct hdd_config { bool isRoamOffloadScanEnabled; bool bImplicitQosEnabled; - /* default TSPEC parameters for AC_BE */ - enum sme_qos_wmm_dir_type InfraDirAcBe; - uint16_t InfraNomMsduSizeAcBe; - uint32_t InfraMeanDataRateAcBe; - uint32_t InfraMinPhyRateAcBe; - uint16_t InfraSbaAcBe; - /* default TSPEC parameters for AC_BK */ enum sme_qos_wmm_dir_type InfraDirAcBk; uint16_t InfraNomMsduSizeAcBk; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index c6ffd5c048..8e26a155b7 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -770,22 +770,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_BE_SRV_INTV_NAME, - WLAN_PARAM_Integer, - struct hdd_config, InfraUapsdBeSrvIntv, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_MIN, - CFG_QOS_WMM_INFRA_UAPSD_BE_SRV_INTV_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_NAME, - WLAN_PARAM_Integer, - struct hdd_config, InfraUapsdBeSuspIntv, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_DEFAULT, - CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_MIN, - CFG_QOS_WMM_INFRA_UAPSD_BE_SUS_INTV_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_UAPSD_BK_SRV_INTV_NAME, WLAN_PARAM_Integer, struct hdd_config, InfraUapsdBkSrvIntv, @@ -883,44 +867,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_BE_NAME, WLAN_PARAM_Integer, - struct hdd_config, InfraDirAcBe, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_DIR_AC_BE_DEFAULT, - CFG_QOS_WMM_INFRA_DIR_AC_BE_MIN, - CFG_QOS_WMM_INFRA_DIR_AC_BE_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraNomMsduSizeAcBe, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_DEFAULT, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_MIN, - CFG_QOS_WMM_INFRA_NOM_MSDU_SIZE_AC_BE_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraMeanDataRateAcBe, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_DEFAULT, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_MIN, - CFG_QOS_WMM_INFRA_MEAN_DATA_RATE_AC_BE_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, InfraMinPhyRateAcBe, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_DEFAULT, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_MIN, - CFG_QOS_WMM_INFRA_MIN_PHY_RATE_AC_BE_MAX), - - REG_VARIABLE(CFG_QOS_WMM_INFRA_SBA_AC_BE_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, InfraSbaAcBe, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_QOS_WMM_INFRA_SBA_AC_BE_DEFAULT, - CFG_QOS_WMM_INFRA_SBA_AC_BE_MIN, - CFG_QOS_WMM_INFRA_SBA_AC_BE_MAX), - REG_VARIABLE(CFG_QOS_WMM_INFRA_DIR_AC_BK_NAME, WLAN_PARAM_Integer, struct hdd_config, InfraDirAcBk, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, diff --git a/core/hdd/src/wlan_hdd_wmm.c b/core/hdd/src/wlan_hdd_wmm.c index a63bd9b147..e3e6f4f0d2 100644 --- a/core/hdd/src/wlan_hdd_wmm.c +++ b/core/hdd/src/wlan_hdd_wmm.c @@ -1200,22 +1200,61 @@ static void __hdd_wmm_do_implicit_qos(struct work_struct *work) ((WLAN_HDD_GET_CTX(adapter))->config-> UapsdMask & SME_QOS_UAPSD_BE) ? 1 : 0; } - qosInfo.ts_info.direction = - (WLAN_HDD_GET_CTX(adapter))->config->InfraDirAcBe; + status = ucfg_mlme_get_wmm_dir_ac_be(hdd_ctx->psoc, &dir_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get infra_dir_ac_be failed"); + return; + } + qosInfo.ts_info.direction = dir_ac; + qosInfo.ts_info.tid = 255; - qosInfo.mean_data_rate = - (WLAN_HDD_GET_CTX(adapter))->config-> - InfraMeanDataRateAcBe; - qosInfo.min_phy_rate = - (WLAN_HDD_GET_CTX(adapter))->config->InfraMinPhyRateAcBe; - qosInfo.min_service_interval = - (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdBeSrvIntv; - qosInfo.nominal_msdu_size = - (WLAN_HDD_GET_CTX(adapter))->config->InfraNomMsduSizeAcBe; - qosInfo.surplus_bw_allowance = - (WLAN_HDD_GET_CTX(adapter))->config->InfraSbaAcBe; - qosInfo.suspension_interval = - (WLAN_HDD_GET_CTX(adapter))->config->InfraUapsdBeSuspIntv; + status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc, + &uapsd_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_srv_intv failed"); + return; + } + qosInfo.min_service_interval = uapsd_value; + + status = ucfg_mlme_get_wmm_uapsd_be_sus_intv(hdd_ctx->psoc, + &uapsd_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_vi_sus_intv failed"); + return; + } + qosInfo.suspension_interval = uapsd_value; + + status = ucfg_mlme_get_wmm_mean_data_rate_ac_be(hdd_ctx->psoc, + &rate_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get mean_data_rate_ac_be failed"); + return; + } + qosInfo.mean_data_rate = rate_ac; + + status = ucfg_mlme_get_wmm_min_phy_rate_ac_be(hdd_ctx->psoc, + &rate_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get min_phy_rate_ac_be failed"); + return; + } + qosInfo.min_phy_rate = rate_ac; + + status = ucfg_mlme_get_wmm_nom_msdu_size_ac_be(hdd_ctx->psoc, + &nom_msdu_size_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get nom_msdu_size_ac_be failed"); + return; + } + qosInfo.nominal_msdu_size = nom_msdu_size_ac; + + status = ucfg_mlme_get_wmm_sba_ac_be(hdd_ctx->psoc, &sba_ac); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get sba_ac_be failed"); + return; + } + qosInfo.surplus_bw_allowance = sba_ac; + break; case SME_AC_BK: qosInfo.ts_info.up = SME_QOS_WMM_UP_BK; @@ -2003,15 +2042,26 @@ QDF_STATUS hdd_wmm_assoc(struct hdd_adapter *adapter, } if (uapsdMask & HDD_AC_BE) { - status = - sme_enable_uapsd_for_ac((WLAN_HDD_GET_STATION_CTX_PTR - (adapter))->conn_info.staId[0], - SME_AC_BE, 3, 3, - hdd_ctx->config->InfraUapsdBeSrvIntv, - hdd_ctx->config->InfraUapsdBeSuspIntv, - SME_QOS_WMM_TS_DIR_BOTH, 1, - adapter->session_id, - hdd_ctx->config->DelayedTriggerFrmInt); + status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc, + &srv_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_be_srv_intv failed"); + return QDF_STATUS_SUCCESS; + } + status = ucfg_mlme_get_wmm_uapsd_be_sus_intv(hdd_ctx->psoc, + &sus_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_be_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_BE, 3, 3, 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)); } @@ -2172,8 +2222,13 @@ QDF_STATUS hdd_wmm_get_uapsd_mask(struct hdd_adapter *adapter, uapsdMask &= ~HDD_AC_BK; } - if ((WLAN_HDD_GET_CTX(adapter))->config-> - InfraUapsdBeSrvIntv == 0) { + status = ucfg_mlme_get_wmm_uapsd_be_srv_intv(hdd_ctx->psoc, + &uapsd_value); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get uapsd_be_srv_intv failed"); + return QDF_STATUS_E_FAILURE; + } + if (uapsd_value == 0) { uapsdMask &= ~HDD_AC_BE; } }