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;
}
}