浏览代码

qcacld-3.0: Infra for mlme_priv_obj with VDEV_SM enable/disable

Define two different mlme priv obj structures
based upon the flag CONFIG_VDEV_SM, for the
support of dynamic nss, chains update.

Change-Id: I00f39eb82973da86233ddfc8bdcc94b6ca8a439a
CRs-Fixed: 2349200
gaurank kathpalia 6 年之前
父节点
当前提交
24ed0f4056

+ 74 - 0
components/mlme/core/inc/wlan_mlme_main.h

@@ -26,6 +26,8 @@
 #include <wlan_objmgr_psoc_obj.h>
 #include <wlan_objmgr_global_obj.h>
 #include <wlan_cmn.h>
+#include <wlan_objmgr_vdev_obj.h>
+
 
 #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

+ 1 - 51
components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h

@@ -25,39 +25,7 @@
 #ifdef CONFIG_VDEV_SM
 #include <wlan_objmgr_vdev_obj.h>
 #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

+ 88 - 0
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)

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

+ 1 - 1
components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h

@@ -27,7 +27,7 @@
 #include <wlan_objmgr_global_obj.h>
 #include <wlan_cmn.h>
 #include <wlan_mlme_api.h>
-#include <wlan_mlme_vdev_mgr_interface.h>
+#include <wlan_mlme_main.h>
 
 /**
  * ucfg_mlme_init() - initialize mlme_ctx context.

+ 77 - 10
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;
 }
 

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

+ 4 - 3
core/sme/src/common/sme_api.c

@@ -60,6 +60,7 @@
 #include <qca_vendor.h>
 #include <wlan_spectral_utils_api.h>
 #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 =

+ 1 - 0
core/wma/src/wma_dev_if.c

@@ -76,6 +76,7 @@
 #include <target_if.h>
 #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

+ 1 - 0
core/wma/src/wma_utils.c

@@ -61,6 +61,7 @@
 #include "cds_reg_service.h"
 #include "target_if.h"
 #include <wlan_utility.h>
+#include <wlan_mlme_main.h>
 
 
 /* MCS Based rate table */