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