diff --git a/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h index c402d945ffe2..386605d14046 100644 --- a/components/mlme/core/inc/wlan_mlme_main.h +++ b/components/mlme/core/inc/wlan_mlme_main.h @@ -26,6 +26,8 @@ #include #include #include +#include + #define mlme_fatal(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_MLME, params) #define mlme_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MLME, params) @@ -41,6 +43,78 @@ struct wlan_mlme_psoc_obj { struct wlan_mlme_cfg cfg; }; +#ifdef CONFIG_VDEV_SM + +/** + * enum vdev_assoc_type - VDEV associate/reassociate type + * @VDEV_ASSOC: associate + * @VDEV_REASSOC: reassociate + * @VDEV_FT_REASSOC: fast reassociate + */ +enum vdev_assoc_type { + VDEV_ASSOC, + VDEV_REASSOC, + VDEV_FT_REASSOC +}; + +/** + * struct mlme_legacy_priv - VDEV MLME legacy priv object + * @chan_switch_in_progress: flag to indicate that channel switch is in progress + * @hidden_ssid_restart_in_progress: flag to indicate hidden ssid restart is + * in progress + * @vdev_start_failed: flag to indicate that vdev start failed. + * @connection_fail: flag to indicate connection failed + * @assoc_type: vdev associate/reassociate type + * @dynamic_cfg: current configuration of nss, chains for vdev. + * @ini_cfg: Max configuration of nss, chains supported for vdev. + */ +struct mlme_legacy_priv { + bool chan_switch_in_progress; + bool hidden_ssid_restart_in_progress; + bool vdev_start_failed; + bool connection_fail; + enum vdev_assoc_type assoc_type; + struct wlan_mlme_nss_chains dynamic_cfg; + struct wlan_mlme_nss_chains ini_cfg; +}; + +#else + +/** + * struct vdev_mlme_obj - VDEV MLME component object + */ +struct vdev_mlme_priv_obj { +}; + +/** + * mlme_vdev_object_created_notification(): mlme vdev create handler + * @vdev: vdev which is going to created by objmgr + * @arg: argument for vdev create handler + * + * Register this api with objmgr to detect vdev is created + * + * Return: QDF_STATUS status in case of success else return error + */ + +QDF_STATUS +mlme_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev, + void *arg); + +/** + * mlme_vdev_object_destroyed_notification(): mlme vdev delete handler + * @psoc: vdev which is going to delete by objmgr + * @arg: argument for vdev delete handler + * + * Register this api with objmgr to detect vdev is deleted + * + * Return: QDF_STATUS status in case of success else return error + */ +QDF_STATUS +mlme_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev, + void *arg); + +#endif + /** * mlme_psoc_object_created_notification(): mlme psoc create handler * @psoc: psoc which is going to created by objmgr diff --git a/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h b/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h index 49a6c24aee2a..90e7d34e8337 100644 --- a/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h +++ b/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h @@ -25,39 +25,7 @@ #ifdef CONFIG_VDEV_SM #include #include "include/wlan_vdev_mlme.h" - -/** - * enum vdev_assoc_type - VDEV associate/reassociate type - * @VDEV_ASSOC: associate - * @VDEV_REASSOC: reassociate - * @VDEV_FT_REASSOC: fast reassociate - */ -enum vdev_assoc_type { - VDEV_ASSOC, - VDEV_REASSOC, - VDEV_FT_REASSOC -}; - -/** - * struct mlme_legacy_priv - VDEV MLME legacy priv object - * @chan_switch_in_progress: flag to indicate that channel switch is in progress - * @hidden_ssid_restart_in_progress: flag to indicate hidden ssid restart is - * in progress - * @vdev_start_failed: flag to indicate that vdev start failed. - * @connection_fail: flag to indicate connection failed - * @assoc_type: vdev associate/reassociate type - * @dynamic_cfg: current configuration of nss, chains for vdev. - * @ini_cfg: Max configuration of nss, chains supported for vdev. - */ -struct mlme_legacy_priv { - bool chan_switch_in_progress; - bool hidden_ssid_restart_in_progress; - bool vdev_start_failed; - bool connection_fail; - enum vdev_assoc_type assoc_type; - struct wlan_mlme_nss_chains dynamic_cfg; - struct wlan_mlme_nss_chains ini_cfg; -}; +#include "wlan_mlme_main.h" /** * mlme_register_vdev_mgr_ops() - Register vdev mgr ops @@ -145,24 +113,6 @@ bool mlme_is_connection_fail(struct wlan_objmgr_vdev *vdev); QDF_STATUS mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val); -/** - * mlme_get_dynamic_vdev_config() - get the vdev dynamic config params - * @vdev: vdev pointer - * - * Return: pointer to the dynamic vdev config structure - */ -struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config( - struct wlan_objmgr_vdev *vdev); - -/** - * mlme_get_ini_vdev_config() - get the vdev ini config params - * @vdev: vdev pointer - * - * Return: pointer to the ini vdev config structure - */ -struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config( - struct wlan_objmgr_vdev *vdev); - /** * mlme_get_vdev_start_failed() - get mlme priv vdev restart fail flag * @vdev: vdev pointer diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index eff84b0a0b21..d2a2a28d6b4c 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -20,9 +20,11 @@ */ #include "wlan_mlme_main.h" +#include "include/wlan_vdev_mlme.h" #include "cfg_ucfg_api.h" #include "wmi_unified.h" #include "wlan_scan_public_structs.h" +#include "wlan_vdev_mlme_api.h" #define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/ @@ -37,6 +39,92 @@ struct wlan_mlme_psoc_obj *mlme_get_psoc_obj(struct wlan_objmgr_psoc *psoc) return mlme_obj; } +#ifdef CONFIG_VDEV_SM + +#else + +static struct vdev_mlme_priv_obj * +wlan_vdev_mlme_get_priv_obj(struct wlan_objmgr_vdev *vdev) +{ + struct vdev_mlme_priv_obj *vdev_mlme; + + if (!vdev) { + mlme_err("vdev is NULL"); + return NULL; + } + + vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(vdev, + WLAN_UMAC_COMP_MLME); + if (!vdev_mlme) { + mlme_err(" MLME component object is NULL"); + return NULL; + } + + return vdev_mlme; +} + +QDF_STATUS +mlme_vdev_object_created_notification(struct wlan_objmgr_vdev *vdev, + void *arg) +{ + struct vdev_mlme_priv_obj *vdev_mlme; + QDF_STATUS status; + + if (!vdev) { + mlme_err(" VDEV is NULL"); + return QDF_STATUS_E_FAILURE; + } + + vdev_mlme = qdf_mem_malloc(sizeof(*vdev_mlme)); + if (!vdev_mlme) { + mlme_err(" MLME component object alloc failed"); + return QDF_STATUS_E_NOMEM; + } + + status = wlan_objmgr_vdev_component_obj_attach(vdev, + WLAN_UMAC_COMP_MLME, + (void *)vdev_mlme, + QDF_STATUS_SUCCESS); + + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("unable to attach vdev priv obj to vdev obj"); + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +mlme_vdev_object_destroyed_notification(struct wlan_objmgr_vdev *vdev, + void *arg) +{ + struct vdev_mlme_priv_obj *vdev_mlme; + QDF_STATUS status; + + if (!vdev) { + mlme_err(" VDEV is NULL"); + return QDF_STATUS_E_FAILURE; + } + + vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(vdev, + WLAN_UMAC_COMP_MLME); + if (!vdev_mlme) { + mlme_err(" VDEV MLME component object is NULL"); + return QDF_STATUS_E_FAILURE; + } + + status = wlan_objmgr_vdev_component_obj_detach(vdev, + WLAN_UMAC_COMP_MLME, + vdev_mlme); + + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("unable to detach vdev priv obj to vdev obj"); + + qdf_mem_free(vdev_mlme); + + return QDF_STATUS_SUCCESS; +} + +#endif + QDF_STATUS mlme_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc, void *arg) diff --git a/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c b/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c index 9d4e7b834eb5..8a3f869be054 100644 --- a/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c +++ b/components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c @@ -595,40 +595,6 @@ mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val) return QDF_STATUS_SUCCESS; } -struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config( - struct wlan_objmgr_vdev *vdev) -{ - struct vdev_mlme_obj *vdev_mlme; - struct mlme_legacy_priv *mlme_priv; - - vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); - if (!vdev_mlme) { - mlme_err("vdev component object is NULL"); - return NULL; - } - - mlme_priv = vdev_mlme->legacy_vdev_ptr; - - return &mlme_priv->dynamic_cfg; -} - -struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config( - struct wlan_objmgr_vdev *vdev) -{ - struct vdev_mlme_obj *vdev_mlme; - struct mlme_legacy_priv *mlme_priv; - - vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); - if (!vdev_mlme) { - mlme_err("vdev component object is NULL"); - return NULL; - } - - mlme_priv = vdev_mlme->legacy_vdev_ptr; - - return &mlme_priv->ini_cfg; -} - bool mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev) { struct vdev_mlme_obj *vdev_mlme; diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index f6e730692ef2..4b6bde295fb2 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -27,7 +27,7 @@ #include #include #include -#include +#include /** * ucfg_mlme_init() - initialize mlme_ctx context. diff --git a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c index 6d4115ed17cd..bb8d88b546ef 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -27,6 +27,67 @@ #include "wlan_objmgr_pdev_obj.h" #include "wlan_mlme_vdev_mgr_interface.h" +#ifdef CONFIG_VDEV_SM +static QDF_STATUS ucfg_mlme_vdev_init(void) +{ + return QDF_STATUS_SUCCESS; +} + +static QDF_STATUS ucfg_mlme_vdev_deinit(void) +{ + return QDF_STATUS_SUCCESS; +} + +#else +static QDF_STATUS ucfg_mlme_vdev_init(void) +{ + QDF_STATUS status; + + status = wlan_objmgr_register_vdev_create_handler( + WLAN_UMAC_COMP_MLME, + mlme_vdev_object_created_notification, + NULL); + if (QDF_IS_STATUS_ERROR(status)) { + mlme_err("unable to register vdev create handle"); + return status; + } + + status = wlan_objmgr_register_vdev_destroy_handler( + WLAN_UMAC_COMP_MLME, + mlme_vdev_object_destroyed_notification, + NULL); + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("unable to register vdev create handle"); + + return status; + +} + +static QDF_STATUS ucfg_mlme_vdev_deinit(void) +{ + QDF_STATUS status; + + status = wlan_objmgr_unregister_vdev_destroy_handler( + WLAN_UMAC_COMP_MLME, + mlme_vdev_object_destroyed_notification, + NULL); + + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("unable to unregister vdev destroy handle"); + + status = wlan_objmgr_unregister_vdev_create_handler( + WLAN_UMAC_COMP_MLME, + mlme_vdev_object_created_notification, + NULL); + + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("unable to unregister vdev create handle"); + + return status; +} + +#endif + QDF_STATUS ucfg_mlme_init(void) { QDF_STATUS status; @@ -44,8 +105,11 @@ QDF_STATUS ucfg_mlme_init(void) WLAN_UMAC_COMP_MLME, mlme_psoc_object_destroyed_notification, NULL); - if (status != QDF_STATUS_SUCCESS) + if (status != QDF_STATUS_SUCCESS) { mlme_err("unable to register psoc create handle"); + return status; + } + status = ucfg_mlme_vdev_init(); return status; } @@ -54,22 +118,25 @@ QDF_STATUS ucfg_mlme_deinit(void) { QDF_STATUS status; - status = wlan_objmgr_unregister_psoc_create_handler( - WLAN_UMAC_COMP_MLME, - mlme_psoc_object_created_notification, - NULL); - if (status != QDF_STATUS_SUCCESS) { - mlme_err("unable to unregister psoc create handle"); - return status; - } + status = ucfg_mlme_vdev_deinit(); + if (QDF_IS_STATUS_ERROR(status)) + mlme_err("unable to unregister vdev destroy handle"); status = wlan_objmgr_unregister_psoc_destroy_handler( WLAN_UMAC_COMP_MLME, mlme_psoc_object_destroyed_notification, NULL); - if (status != QDF_STATUS_SUCCESS) + if (QDF_IS_STATUS_ERROR(status)) mlme_err("unable to unregister psoc destroy handle"); + status = wlan_objmgr_unregister_psoc_create_handler( + WLAN_UMAC_COMP_MLME, + mlme_psoc_object_created_notification, + NULL); + + if (status != QDF_STATUS_SUCCESS) + mlme_err("unable to unregister psoc create handle"); + return status; } diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 25c75b3e488a..4aac3193968b 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -64,6 +64,7 @@ #include "cfg_mlme_obss_ht40.h" #include "cfg_ucfg_api.h" #include "lim_ft.h" +#include "wlan_mlme_main.h" #define ASCII_SPACE_CHARACTER 0x20 diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 50337277a697..aa8dc0de1a5f 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -60,6 +60,7 @@ #include #include #include "wlan_mlme_public_struct.h" +#include "wlan_mlme_main.h" static tSelfRecoveryStats g_self_recovery_stats; @@ -4807,7 +4808,7 @@ static uint8_t sme_get_nss_chain_shift(enum QDF_OPMODE device_mode) } static void -sme_fill_nss_chain_params(struct sAniSirGlobal *mac_ctx, +sme_fill_nss_chain_params(struct mac_context *mac_ctx, struct wlan_mlme_nss_chains *vdev_ini_cfg, enum QDF_OPMODE device_mode, enum nss_chains_band_info band, @@ -4872,7 +4873,7 @@ void sme_populate_nss_chain_params(mac_handle_t mac_handle, enum QDF_OPMODE device_mode, uint8_t rf_chains_supported) { - struct sAniSirGlobal *mac_ctx = MAC_CONTEXT(mac_handle); + struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); enum nss_chains_band_info band; for (band = NSS_CHAINS_BAND_2GHZ; band < NSS_CHAINS_BAND_MAX; band++) @@ -5069,7 +5070,7 @@ sme_nss_chains_update(mac_handle_t mac_handle, struct wlan_mlme_nss_chains *user_cfg, uint8_t vdev_id) { - struct sAniSirGlobal *mac_ctx = MAC_CONTEXT(mac_handle); + struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); QDF_STATUS status; struct wlan_mlme_nss_chains *dynamic_cfg; struct wlan_objmgr_vdev *vdev = diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 8faca3ea2225..85fbae69cd66 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -76,6 +76,7 @@ #include #include "wlan_mlme_public_struct.h" #include "wlan_mlme_api.h" +#include "wlan_mlme_main.h" /** * wma_find_vdev_by_addr() - find vdev_id from mac address diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index 6ce29adff2bf..12598984b4f3 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -61,6 +61,7 @@ #include "cds_reg_service.h" #include "target_if.h" #include +#include /* MCS Based rate table */