diff --git a/Kbuild b/Kbuild
index 60d836dc1e..0a250085d7 100644
--- a/Kbuild
+++ b/Kbuild
@@ -3956,6 +3956,9 @@ cppflags-$(CONFIG_ADAPTIVE_11R) += -DWLAN_ADAPTIVE_11R
#Flag to enable/disable sae single pmk feature feature
cppflags-$(CONFIG_SAE_SINGLE_PMK) += -DWLAN_SAE_SINGLE_PMK
+#Flag to enable/disable multi client low latency feature support
+cppflags-$(CONFIG_MULTI_CLIENT_LL_SUPPORT) += -DMULTI_CLIENT_LL_SUPPORT
+
#Flag to enable/disable mscs feature
cppflags-$(CONFIG_FEATURE_MSCS) += -DWLAN_FEATURE_MSCS
diff --git a/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h
index c2cfcc4997..224be771aa 100644
--- a/components/mlme/core/inc/wlan_mlme_main.h
+++ b/components/mlme/core/inc/wlan_mlme_main.h
@@ -1017,6 +1017,42 @@ mlme_clear_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
QDF_STATUS mlme_get_cfg_wlm_level(struct wlan_objmgr_psoc *psoc,
uint8_t *level);
+#ifdef MULTI_CLIENT_LL_SUPPORT
+/**
+ * wlan_mlme_get_wlm_multi_client_ll_caps() - Get the wlm multi client latency
+ * level capability flag
+ * @psoc: pointer to psoc object
+ *
+ * Return: True is multi client ll cap present
+ */
+bool wlan_mlme_get_wlm_multi_client_ll_caps(struct wlan_objmgr_psoc *psoc);
+
+/**
+ * mlme_get_cfg_multi_client_ll_ini_support() - Get the ini value of wlm multi
+ * client latency level feature
+ * @psoc: pointer to psoc object
+ * @multi_client_ll_support: parameter that needs to be filled.
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+mlme_get_cfg_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
+ bool *multi_client_ll_support);
+#else
+static inline bool
+wlan_mlme_get_wlm_multi_client_ll_caps(struct wlan_objmgr_psoc *psoc)
+{
+ return false;
+}
+
+static inline QDF_STATUS
+mlme_get_cfg_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
+ bool *multi_client_ll_support)
+{
+ return QDF_STATUS_E_FAILURE;
+}
+#endif
+
/**
* mlme_get_cfg_wlm_reset() - Get the WLM reset flag
* @psoc: pointer to psoc object
diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index 9c06ccdb05..c778212f77 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -2276,6 +2276,45 @@ mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
}
+#ifdef MULTI_CLIENT_LL_SUPPORT
+static void
+mlme_init_wlm_multi_client_ll_support(struct wlan_objmgr_psoc *psoc,
+ struct wlan_mlme_fe_wlm *wlm_config)
+{
+ wlm_config->multi_client_ll_support =
+ cfg_get(psoc, CFG_WLM_MULTI_CLIENT_LL_SUPPORT);
+}
+
+QDF_STATUS
+mlme_get_cfg_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
+ bool *multi_client_ll_support)
+{
+ struct wlan_mlme_psoc_ext_obj *mlme_obj;
+
+ mlme_obj = mlme_get_psoc_ext_obj(psoc);
+ if (!mlme_obj)
+ return QDF_STATUS_E_FAILURE;
+
+ *multi_client_ll_support =
+ mlme_obj->cfg.wlm_config.multi_client_ll_support;
+
+ return QDF_STATUS_SUCCESS;
+}
+
+bool wlan_mlme_get_wlm_multi_client_ll_caps(struct wlan_objmgr_psoc *psoc)
+{
+ return wlan_psoc_nif_fw_ext2_cap_get(psoc,
+ WLAN_SOC_WLM_MULTI_CLIENT_LL_SUPPORT);
+}
+
+#else
+static inline void
+mlme_init_wlm_multi_client_ll_support(struct wlan_objmgr_psoc *psoc,
+ struct wlan_mlme_fe_wlm *wlm_config)
+{
+}
+#endif
+
/**
* mlme_init_fe_wlm_in_cfg() - Populate WLM INI in MLME cfg
* @psoc: pointer to the psoc object
@@ -2292,6 +2331,7 @@ static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
wlm_config->latency_reset = cfg_get(psoc, CFG_LATENCY_RESET);
wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
+ mlme_init_wlm_multi_client_ll_support(psoc, wlm_config);
status = qdf_uint64_parse(cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL),
&flags);
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h b/components/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h
index 1f62cd242c..fb47730432 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_fe_wlm.h
@@ -106,6 +106,29 @@
CFG_VALUE_OR_DEFAULT, \
"WLM latency level")
+#ifdef MULTI_CLIENT_LL_SUPPORT
+/*
+ *
+ * wlm_multi_client_ll - Ini to configure multi client latency feature
+ *
+ * @min: 0
+ * @max: 1
+ * @default: 0
+ *
+ * 0 - disable
+ * 1 - enable
+ *
+ *
+ */
+#define CFG_WLM_MULTI_CLIENT_LL_SUPPORT CFG_INI_BOOL("wlm_multi_client_ll", \
+ 0, \
+ "wlm multi client ll feature")
+
+#define WLM_MULTI_CLIENT_LL_CFG CFG(CFG_WLM_MULTI_CLIENT_LL_SUPPORT)
+#else
+#define WLM_MULTI_CLIENT_LL_CFG
+#endif
+
/*
*
* wlm_latency_flags_normal - WLM flags setting for normal level
@@ -348,6 +371,7 @@
CFG(CFG_LATENCY_ENABLE) \
CFG(CFG_LATENCY_RESET) \
CFG(CFG_LATENCY_LEVEL) \
+ WLM_MULTI_CLIENT_LL_CFG \
CFG(CFG_LATENCY_FLAGS_NORMAL) \
CFG(CFG_LATENCY_FLAGS_XR) \
CFG(CFG_LATENCY_FLAGS_LOW) \
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
index 4c7e9b848b..f9d052c3db 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -2414,6 +2414,7 @@ struct wlan_mlme_btm {
* @latency_level: WLM latency level
* @latency_flags: WLM latency flags setting
* @latency_host_flags: WLM latency host flags setting
+ * @multi_client_ll_support: To check whether host support multi client feature
*/
struct wlan_mlme_fe_wlm {
bool latency_enable;
@@ -2421,6 +2422,9 @@ struct wlan_mlme_fe_wlm {
uint8_t latency_level;
uint32_t latency_flags[MLME_NUM_WLM_LATENCY_LEVEL];
uint32_t latency_host_flags[MLME_NUM_WLM_LATENCY_LEVEL];
+#ifdef MULTI_CLIENT_LL_SUPPORT
+ bool multi_client_ll_support;
+#endif
};
/**
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
index 082a0f7612..e02a5f927f 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h
@@ -242,6 +242,42 @@ QDF_STATUS ucfg_mlme_get_band_capability(struct wlan_objmgr_psoc *psoc,
return wlan_mlme_get_band_capability(psoc, band_capability);
}
+#ifdef MULTI_CLIENT_LL_SUPPORT
+/**
+ * ucfg_mlme_get_wlm_multi_client_ll_caps() - Get multi client latency level
+ * capability of FW
+ * @psoc: pointer to psoc object
+ *
+ * Return: true if multi client feature supported
+ */
+bool ucfg_mlme_get_wlm_multi_client_ll_caps(struct wlan_objmgr_psoc *psoc);
+
+/**
+ * ucfg_mlme_cfg_get_multi_client_ll_ini_support() - Get multi client latency
+ * level ini support value
+ * @psoc: pointer to psoc object
+ * @multi_client_ll_support: parameter that needs to be filled
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+ucfg_mlme_cfg_get_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
+ bool *multi_client_ll_support);
+#else
+static inline
+bool ucfg_mlme_get_wlm_multi_client_ll_caps(struct wlan_objmgr_psoc *psoc)
+{
+ return false;
+}
+
+static inline QDF_STATUS
+ucfg_mlme_cfg_get_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
+ bool *multi_client_ll_support)
+{
+ return QDF_STATUS_E_FAILURE;
+}
+#endif
+
/**
* ucfg_mlme_set_band_capability() - Set the Band capability config
* @psoc: pointer to psoc object
diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
index 62ab6b541a..73f3e50d85 100644
--- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
+++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c
@@ -952,6 +952,21 @@ ucfg_mlme_set_fast_roam_in_concurrency_enabled(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
+#ifdef MULTI_CLIENT_LL_SUPPORT
+bool ucfg_mlme_get_wlm_multi_client_ll_caps(struct wlan_objmgr_psoc *psoc)
+{
+ return wlan_mlme_get_wlm_multi_client_ll_caps(psoc);
+}
+
+QDF_STATUS
+ucfg_mlme_cfg_get_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
+ bool *multi_client_ll_support)
+{
+ return mlme_get_cfg_multi_client_ll_ini_support(psoc,
+ multi_client_ll_support);
+}
+#endif
+
#ifdef FEATURE_WLAN_ESE
QDF_STATUS
ucfg_mlme_is_ese_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
diff --git a/configs/default_defconfig b/configs/default_defconfig
index 1c4a2d3ad2..6febb5e3e1 100644
--- a/configs/default_defconfig
+++ b/configs/default_defconfig
@@ -441,6 +441,9 @@ CONFIG_ADAPTIVE_11R := y
#Flag to enable sae single pmk feature
CONFIG_SAE_SINGLE_PMK := y
+#Flag to enable/disable multi client low latency feature support
+CONFIG_MULTI_CLIENT_LL_SUPPORT := y
+
#Flag to enable mscs feature
CONFIG_FEATURE_MSCS := y