Эх сурвалжийг харах

qcacmn: Initialize the interface module

Initialize the interface module.

Change-Id: Ia62d17c7f92f001f00ee5cff7cf0a6d1dc4f08ce
CRs-Fixed: 2776686
Sandeep Puligilla 4 жил өмнө
parent
commit
d57e7836dc

+ 33 - 0
init_deinit/dispatcher/src/dispatcher_init_deinit.c

@@ -81,6 +81,10 @@
 #include <wlan_dcs_init_deinit_api.h>
 #endif
 
+#ifdef WLAN_FEATURE_INTERFACE_MGR
+#include <wlan_if_mgr_main.h>
+#endif
+
 /**
  * DOC: This file provides various init/deinit trigger point for new
  * components.
@@ -862,6 +866,28 @@ static QDF_STATUS fd_psoc_disable(struct wlan_objmgr_psoc *psoc)
 }
 #endif /* WLAN_SUPPORT_FILS */
 
+#ifdef WLAN_FEATURE_INTERFACE_MGR
+static QDF_STATUS dispatcher_if_mgr_init(void)
+{
+	return wlan_if_mgr_init();
+}
+
+static QDF_STATUS dispatcher_if_mgr_deinit(void)
+{
+	return wlan_if_mgr_deinit();
+}
+#else
+static QDF_STATUS dispatcher_if_mgr_init(void)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+static QDF_STATUS dispatcher_if_mgr_deinit(void)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+
 #ifdef FEATURE_COEX
 static QDF_STATUS dispatcher_coex_init(void)
 {
@@ -977,6 +1003,9 @@ QDF_STATUS dispatcher_init(void)
 	if (QDF_STATUS_SUCCESS != dispatcher_coex_init())
 		goto coex_init_fail;
 
+	if (QDF_STATUS_SUCCESS != dispatcher_if_mgr_init())
+		goto ifmgr_init_fail;
+
 	/*
 	 * scheduler INIT has to be the last as each component's
 	 * initialization has to happen first and then at the end
@@ -988,6 +1017,8 @@ QDF_STATUS dispatcher_init(void)
 	return QDF_STATUS_SUCCESS;
 
 scheduler_init_fail:
+	dispatcher_if_mgr_deinit();
+ifmgr_init_fail:
 	dispatcher_coex_deinit();
 coex_init_fail:
 	dispatcher_deinit_cfr();
@@ -1045,6 +1076,8 @@ QDF_STATUS dispatcher_deinit(void)
 
 	QDF_BUG(QDF_STATUS_SUCCESS == scheduler_deinit());
 
+	QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_if_mgr_deinit());
+
 	QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_coex_deinit());
 
 	QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_cfr());

+ 14 - 0
umac/cmn_services/interface_mgr/inc/wlan_if_mgr_main.h

@@ -74,6 +74,20 @@ struct wlan_if_mgr_obj {
 
 };
 
+/*
+ * wlan_if_mgr_init() - Interface manager module initialization API
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_if_mgr_init(void);
+
+/**
+ * wlan_if_mgr_deinit() - interface manager module deinitialization API
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_if_mgr_deinit(void);
+
 /**
  * wlan_if_mgr_psoc_created_notification() - interface mgr psoc create handler
  * @psoc: psoc object

+ 48 - 0
umac/cmn_services/interface_mgr/src/wlan_if_mgr_main.c

@@ -19,6 +19,54 @@
  */
 #include "wlan_if_mgr_main.h"
 
+QDF_STATUS wlan_if_mgr_init(void)
+{
+	QDF_STATUS status;
+
+	status = wlan_objmgr_register_psoc_create_handler(WLAN_UMAC_COMP_IF_MGR,
+		wlan_if_mgr_psoc_created_notification, NULL);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		ifmgr_err("Failed to register psoc create handler");
+		goto fail_create_psoc;
+	}
+
+	status = wlan_objmgr_register_psoc_destroy_handler(
+			WLAN_UMAC_COMP_IF_MGR,
+			wlan_if_mgr_psoc_destroyed_notification, NULL);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		ifmgr_err("Failed to create psoc delete handler");
+		goto fail_psoc_destroy;
+	}
+	ifmgr_debug("interface mgr psoc create and delete handler registered with objmgr");
+
+fail_psoc_destroy:
+	wlan_objmgr_unregister_psoc_create_handler(WLAN_UMAC_COMP_IF_MGR,
+			wlan_if_mgr_psoc_created_notification, NULL);
+fail_create_psoc:
+	return status;
+}
+
+QDF_STATUS wlan_if_mgr_deinit(void)
+{
+	QDF_STATUS status;
+
+	status = wlan_objmgr_unregister_psoc_create_handler(
+			WLAN_UMAC_COMP_IF_MGR,
+			wlan_if_mgr_psoc_created_notification, NULL);
+	if (QDF_IS_STATUS_ERROR(status))
+		ifmgr_err("Failed to deregister psoc create handler");
+
+	status = wlan_objmgr_unregister_psoc_destroy_handler(
+			WLAN_UMAC_COMP_IF_MGR,
+			wlan_if_mgr_psoc_destroyed_notification, NULL);
+	if (QDF_IS_STATUS_ERROR(status))
+		ifmgr_err("Failed to deregister psoc delete handler");
+
+	ifmgr_debug("interface mgr psoc create and delete handler deregistered with objmgr");
+
+	return status;
+}
+
 QDF_STATUS wlan_if_mgr_psoc_created_notification(struct wlan_objmgr_psoc *psoc,
 						 void *arg_list)
 {