Pārlūkot izejas kodu

qcacld-3.0: ADD MLME INI items of WMM Configuration

Add the following WMM config  ini configs to MLME cfg:

1. CFG_QOS_WMM_MODE_NAME
2. CFG_QOS_WMM_80211E_ENABLED_NAME
3. CFG_QOS_WMM_UAPSD_MASK_NAME
4. CFG_QOS_IMPLICIT_SETUP_ENABLED_NAME

Change-Id: I0c6354960b49d680e3efe304ea3300059c37015c
CRs-Fixed: 2327691
Abhinav Kumar 6 gadi atpakaļ
vecāks
revīzija
56b4f86e48

+ 9 - 0
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,

+ 100 - 1
mlme/dispatcher/inc/cfg_mlme_fe_wmm.h

@@ -756,6 +756,101 @@
 		CFG_VALUE_OR_DEFAULT, \
 		"Infra uapsd bk sus intv")
 
+/* WMM configuration */
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#define CFG_QOS_WMM_MODE CFG_INI_UINT( \
+		"WmmIsEnabled", \
+		0, \
+		2, \
+		2, \
+		CFG_VALUE_OR_DEFAULT, \
+		"Enable WMM feature")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#define CFG_QOS_WMM_80211E_ENABLED CFG_INI_BOOL( \
+		"80211eIsEnabled", \
+		0, \
+		"Enable 802.11e feature")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#define CFG_QOS_WMM_UAPSD_MASK CFG_INI_UINT( \
+		"UapsdMask", \
+		0x00, \
+		0xFF, \
+		0x00, \
+		CFG_VALUE_OR_DEFAULT, \
+		"setup U-APSD mask for ACs")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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 */

+ 41 - 0
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

+ 15 - 0
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;

+ 61 - 0
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_ */

+ 65 - 0
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)
 {