qcacld-3.0: Add legacy mlme component
Add legacy mlme component main APIs and init/deinit from HDD.
Change-Id: I3d3de3bca9a4fd0896a9d6a076b5e60bb1a5ca83
CRs-Fixed: 2272959
diff --git a/Kbuild b/Kbuild
index e955704..634908c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -726,6 +726,14 @@
$(IPA_DIR)/core/src/wlan_ipa_rm.o
endif
+
+######## MLME ##############
+MLME_DIR := components/mlme
+MLME_INC := -I$(WLAN_ROOT)/$(MLME_DIR)/core/inc \
+ -I$(WLAN_ROOT)/$(MLME_DIR)/dispatcher/inc
+
+MLME_OBJS := $(MLME_DIR)/core/src/wlan_mlme_main.o
+
########## CLD TARGET_IF #######
CLD_TARGET_IF_DIR := components/target_if
@@ -1433,6 +1441,7 @@
INCS += $(OCB_INC)
INCS += $(IPA_INC)
+INCS += $(MLME_INC)
ifeq ($(CONFIG_REMOVE_PKT_LOG), n)
INCS += $(PKTLOG_INC)
@@ -1509,6 +1518,7 @@
OBJS += $(PTT_OBJS)
OBJS += $(UMAC_SER_OBJS)
OBJS += $(PLD_OBJS)
+OBJS += $(MLME_OBJS)
ifeq ($(CONFIG_WLAN_FEATURE_DSRC), y)
OBJS += $(OCB_OBJS)
diff --git a/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h
new file mode 100644
index 0000000..812f634
--- /dev/null
+++ b/components/mlme/core/inc/wlan_mlme_main.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2018 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/**
+ * DOC: declare utility API related to the pmo component
+ * called by other components
+ */
+
+#ifndef _WLAN_MLME_MAIN_H_
+#define _WLAN_MLME_MAIN_H_
+
+#include <wlan_mlme_public_struct.h>
+#include <qdf_atomic.h>
+#include <wlan_objmgr_psoc_obj.h>
+#include <wlan_objmgr_global_obj.h>
+#include <wlan_cmn.h>
+#include <qdf_time.h>
+#include <qdf_list.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)
+#define mlme_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MLME, params)
+#define mlme_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_MLME, params)
+#define mlme_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MLME, params)
+
+/**
+ * struct wlan_mlme_psoc_obj -MLME psoc priv object
+ * @cfg: cfg items
+ */
+struct wlan_mlme_psoc_obj {
+ struct wlan_mlme_cfg cfg;
+};
+
+/**
+ * mlme_init() - initialize mlme_ctx context.
+ *
+ * This function initializes the mlme context.
+ *
+ * Return: QDF_STATUS_SUCCESS - in case of success else return error
+ */
+QDF_STATUS mlme_init(void);
+
+/**
+ * mlme_deinit() - De initialize mlme_ctx context.
+ *
+ * This function De initializes mlme contex.
+ *
+ * Return: QDF_STATUS_SUCCESS - in case of success else return error
+ */
+QDF_STATUS mlme_deinit(void);
+
+/**
+ * mlme_psoc_object_created_notification(): mlme psoc create handler
+ * @psoc: psoc which is going to created by objmgr
+ * @arg: argument for vdev create handler
+ *
+ * Register this api with objmgr to detect psoc is created
+ *
+ * Return QDF_STATUS status in case of success else return error
+ */
+QDF_STATUS mlme_psoc_object_created_notification(
+ struct wlan_objmgr_psoc *psoc, void *arg);
+
+/**
+ * mlme_psoc_object_destroyed_notification(): mlme psoc delete handler
+ * @psoc: psoc which is going to delete by objmgr
+ * @arg: argument for vdev delete handler
+ *
+ * Register this api with objmgr to detect psoc is deleted
+ *
+ * Return QDF_STATUS status in case of success else return error
+ */
+QDF_STATUS mlme_psoc_object_destroyed_notification(
+ struct wlan_objmgr_psoc *psoc, void *arg);
+#endif
diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
new file mode 100644
index 0000000..6e16008
--- /dev/null
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2018 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/**
+ * DOC: define utility API related to the mlme component
+ * called by other components
+ */
+
+#include "wlan_mlme_main.h"
+
+/**
+ * wlan_psoc_get_mlme_obj() - private API to get mlme object from psoc
+ * @psoc: psoc object
+ *
+ * Return: mlme object
+ */
+static inline struct wlan_mlme_psoc_obj *
+wlan_psoc_get_mlme_obj(struct wlan_objmgr_psoc *psoc)
+{
+ struct wlan_mlme_psoc_obj *mlme_obj;
+
+ mlme_obj = (struct wlan_mlme_psoc_obj *)
+ wlan_objmgr_psoc_get_comp_private_obj(psoc,
+ WLAN_UMAC_COMP_MLME);
+
+ return mlme_obj;
+}
+
+QDF_STATUS mlme_init(void)
+{
+ QDF_STATUS status;
+
+ status = wlan_objmgr_register_psoc_create_handler(
+ WLAN_UMAC_COMP_MLME,
+ mlme_psoc_object_created_notification,
+ NULL);
+ if (status != QDF_STATUS_SUCCESS) {
+ mlme_err("unable to register psoc create handle");
+ return status;
+ }
+
+ status = wlan_objmgr_register_psoc_destroy_handler(
+ WLAN_UMAC_COMP_MLME,
+ mlme_psoc_object_destroyed_notification,
+ NULL);
+ if (status != QDF_STATUS_SUCCESS)
+ mlme_err("unable to register psoc create handle");
+
+ return status;
+}
+
+QDF_STATUS 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 = wlan_objmgr_unregister_psoc_destroy_handler(
+ WLAN_UMAC_COMP_MLME,
+ mlme_psoc_object_destroyed_notification,
+ NULL);
+ if (status != QDF_STATUS_SUCCESS)
+ mlme_err("unable to unregister psoc destroy handle");
+
+ return status;
+}
+
+QDF_STATUS mlme_psoc_object_created_notification(
+ struct wlan_objmgr_psoc *psoc, void *arg)
+{
+ QDF_STATUS status;
+ struct wlan_mlme_psoc_obj *mlme_obj;
+
+ mlme_obj = qdf_mem_malloc(sizeof(struct wlan_mlme_psoc_obj));
+ if (!mlme_obj) {
+ mlme_err("Failed to allocate memory");
+ return QDF_STATUS_E_NOMEM;
+ }
+
+ status = wlan_objmgr_psoc_component_obj_attach(psoc,
+ WLAN_UMAC_COMP_MLME,
+ mlme_obj,
+ QDF_STATUS_SUCCESS);
+ if (status != QDF_STATUS_SUCCESS) {
+ mlme_err("Failed to attach psoc_ctx with psoc");
+ qdf_mem_free(mlme_obj);
+ }
+
+ return status;
+}
+
+QDF_STATUS mlme_psoc_object_destroyed_notification(
+ struct wlan_objmgr_psoc *psoc, void *arg)
+{
+ struct wlan_mlme_psoc_obj *mlme_obj = NULL;
+ QDF_STATUS status;
+
+ mlme_obj = wlan_psoc_get_mlme_obj(psoc);
+
+ status = wlan_objmgr_psoc_component_obj_detach(psoc,
+ WLAN_UMAC_COMP_MLME,
+ mlme_obj);
+ if (status != QDF_STATUS_SUCCESS) {
+ mlme_err("Failed to detach psoc_ctx from psoc");
+ status = QDF_STATUS_E_FAILURE;
+ goto out;
+ }
+
+ qdf_mem_free(mlme_obj);
+
+out:
+ return status;
+}
+
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
new file mode 100644
index 0000000..67b1e36
--- /dev/null
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * DOC: contains mlme structure definations
+ */
+
+#ifndef _WLAN_MLME_STRUCT_H_
+#define _WLAN_MLME_STRUCT_H_
+
+#include <wlan_cmn.h>
+
+/**
+ * struct wlan_mlme_cfg -MLME config items
+ * @cfg: cfg items
+ */
+struct wlan_mlme_cfg {
+ uint8_t test;
+ /* VHT config */
+ /* HT config */
+};
+
+#endif
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 0bc2e77..3e8c7b0 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -134,7 +134,7 @@
#include "wlan_hdd_apf.h"
#include "wlan_hdd_twt.h"
#include "qc_sap_ioctl.h"
-
+#include "wlan_mlme_main.h"
#ifdef CNSS_GENL
#include <net/cnss_nl.h>
#endif
@@ -12334,6 +12334,7 @@
*/
static void component_init(void)
{
+ mlme_init();
pmo_init();
disa_init();
ucfg_ocb_init();
@@ -12351,6 +12352,7 @@
ucfg_ocb_deinit();
pmo_deinit();
disa_deinit();
+ mlme_deinit();
}
void hdd_component_psoc_enable(struct wlan_objmgr_psoc *psoc)