From d57e7836dc389f88871517cfeedfdd0f572e4b31 Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Mon, 14 Sep 2020 17:06:55 -0700 Subject: [PATCH] qcacmn: Initialize the interface module Initialize the interface module. Change-Id: Ia62d17c7f92f001f00ee5cff7cf0a6d1dc4f08ce CRs-Fixed: 2776686 --- .../dispatcher/src/dispatcher_init_deinit.c | 33 +++++++++++++ .../interface_mgr/inc/wlan_if_mgr_main.h | 14 ++++++ .../interface_mgr/src/wlan_if_mgr_main.c | 48 +++++++++++++++++++ 3 files changed, 95 insertions(+) diff --git a/init_deinit/dispatcher/src/dispatcher_init_deinit.c b/init_deinit/dispatcher/src/dispatcher_init_deinit.c index 2687fdd7848e..9eab1952a9c1 100644 --- a/init_deinit/dispatcher/src/dispatcher_init_deinit.c +++ b/init_deinit/dispatcher/src/dispatcher_init_deinit.c @@ -81,6 +81,10 @@ #include #endif +#ifdef WLAN_FEATURE_INTERFACE_MGR +#include +#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()); diff --git a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_main.h b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_main.h index cefe5ca52d1c..ddbb94f0d329 100644 --- a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_main.h +++ b/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 diff --git a/umac/cmn_services/interface_mgr/src/wlan_if_mgr_main.c b/umac/cmn_services/interface_mgr/src/wlan_if_mgr_main.c index 6ae8e25951ef..e3bffdd822b6 100644 --- a/umac/cmn_services/interface_mgr/src/wlan_if_mgr_main.c +++ b/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) {