From 00a2d6550f043f89a86146b9e236b03defa7cb2e Mon Sep 17 00:00:00 2001 From: Sandeep Puligilla Date: Tue, 16 Jun 2020 13:37:53 -0700 Subject: [PATCH] qcacmn: Add interface manager module - Add interface manager module files - Add start_connect event processing - Add stubs for start_connect_complete and start_bss event processing API's Change-Id: I91a2bf38755abef38b6a9348d3eb69983217916c CRs-Fixed: 2759226 --- qdf/inc/qdf_types.h | 2 + umac/cmn_services/inc/wlan_cmn.h | 2 + .../interface_mgr/inc/wlan_if_mgr_ap.h | 37 +++++++ .../interface_mgr/inc/wlan_if_mgr_api.h | 40 ++++++++ .../interface_mgr/inc/wlan_if_mgr_main.h | 97 +++++++++++++++++++ .../inc/wlan_if_mgr_public_struct.h | 64 ++++++++++++ .../interface_mgr/inc/wlan_if_mgr_sta.h | 50 ++++++++++ .../interface_mgr/inc/wlan_if_mgr_ucfg_api.h | 45 +++++++++ .../interface_mgr/src/wlan_if_mgr_core.c | 53 ++++++++++ .../interface_mgr/src/wlan_if_mgr_main.c | 72 ++++++++++++++ 10 files changed, 462 insertions(+) create mode 100644 umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ap.h create mode 100644 umac/cmn_services/interface_mgr/inc/wlan_if_mgr_api.h create mode 100644 umac/cmn_services/interface_mgr/inc/wlan_if_mgr_main.h create mode 100644 umac/cmn_services/interface_mgr/inc/wlan_if_mgr_public_struct.h create mode 100644 umac/cmn_services/interface_mgr/inc/wlan_if_mgr_sta.h create mode 100644 umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ucfg_api.h create mode 100644 umac/cmn_services/interface_mgr/src/wlan_if_mgr_core.c create mode 100644 umac/cmn_services/interface_mgr/src/wlan_if_mgr_main.c diff --git a/qdf/inc/qdf_types.h b/qdf/inc/qdf_types.h index e274fde2df..c99152bbf5 100644 --- a/qdf/inc/qdf_types.h +++ b/qdf/inc/qdf_types.h @@ -388,6 +388,7 @@ typedef bool (*qdf_irqlocked_func_t)(void *); * @QDF_MODULE_ID_RPTR: Repeater module ID * @QDF_MODULE_ID_6GHZ: 6Ghz specific feature ID * @QDF_MODULE_ID_IOT_SIM: IOT Simulation for rogue AP module ID + * @QDF_MODULE_ID_IFMGR: Interface Manager feature ID * @QDF_MODULE_ID_ANY: anything * @QDF_MODULE_ID_MAX: Max place holder module ID */ @@ -514,6 +515,7 @@ typedef enum { QDF_MODULE_ID_RPTR, QDF_MODULE_ID_6GHZ, QDF_MODULE_ID_IOT_SIM, + QDF_MODULE_ID_IFMGR, QDF_MODULE_ID_ANY, QDF_MODULE_ID_MAX, } QDF_MODULE_ID; diff --git a/umac/cmn_services/inc/wlan_cmn.h b/umac/cmn_services/inc/wlan_cmn.h index 06c0f91993..89bd70382b 100644 --- a/umac/cmn_services/inc/wlan_cmn.h +++ b/umac/cmn_services/inc/wlan_cmn.h @@ -279,6 +279,7 @@ * @WLAN_UMAC_COMP_PKT_CAPTURE: Packet capture component * @WLAN_UMAC_COMP_DCS: DCS * @WLAN_IOT_SIM_COMP: IOT Simulation component + * @WLAN_UMAC_COMP_IF_MGR: Interface manager component * @WLAN_UMAC_COMP_ID_MAX: Maximum components in UMAC * * This id is static. @@ -323,6 +324,7 @@ enum wlan_umac_comp_id { WLAN_UMAC_COMP_PKT_CAPTURE = 35, WLAN_UMAC_COMP_DCS = 36, WLAN_IOT_SIM_COMP = 37, + WLAN_UMAC_COMP_IF_MGR = 38, WLAN_UMAC_COMP_ID_MAX, }; diff --git a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ap.h b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ap.h new file mode 100644 index 0000000000..abb55c4cc4 --- /dev/null +++ b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ap.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020, 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 interface manager public file containing AP event handlers + */ + +#ifndef _WLAN_IF_MGR_AP_H_ +#define _WLAN_IF_MGR_AP_H_ + +/** + * wlan_process_start_bss_start() - Start BSS event handler + * + * Interface manager connect start bss event handler + * + * @vdev: vdev object + * @event_data: Interface mgr event data + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_process_ap_start_bss(struct wlan_objmgr_vdev *vdev, + struct if_mgr_event_data *event_data); + +#endif diff --git a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_api.h b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_api.h new file mode 100644 index 0000000000..9224423b59 --- /dev/null +++ b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_api.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2020, 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 interface manager public api + */ + +#ifndef _WLAN_IF_MGR_API_H_ +#define _WLAN_IF_MGR_API_H_ + +#include "wlan_objmgr_psoc_obj.h" +#include "wlan_objmgr_vdev_obj.h" +#include "wlan_if_mgr_public_struct.h" + +/** + * if_mgr_deliver_event() - interface mgr event handler + * @vdev: vdev object + * @event: interface mangaer event + * @event_data: Interface mgr event data + * + * Return: QDF_STATUS + */ +QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev, + enum wlan_if_mgr_evt event, + struct if_mgr_event_data *event_data); + +#endif 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 new file mode 100644 index 0000000000..cefe5ca52d --- /dev/null +++ b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_main.h @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2020, 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 Interface MGR init/deinit public api + */ + +#ifndef _WLAN_IF_MGR_MAIN_API_H_ +#define _WLAN_IF_MGR_MAIN_API_H_ + +#include +#include +#include +#include +#include + +#define ifmgr_alert(params...) \ + QDF_TRACE_FATAL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_err(params...) \ + QDF_TRACE_ERROR(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_warn(params...) \ + QDF_TRACE_WARN(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_notice(params...) \ + QDF_TRACE_INFO(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_info(params...) \ + QDF_TRACE_INFO(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_debug(params...) \ + QDF_TRACE_DEBUG(QDF_MODULE_ID_IFMGR, params) + +/* Rate Limited Logs */ +#define ifmgr_alert_rl(params...) \ + QDF_TRACE_FATAL_RL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_err_rl(params...) \ + QDF_TRACE_ERROR_RL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_warn_rl(params...) \ + QDF_TRACE_WARN_RL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_info_rl(params...) \ + QDF_TRACE_INFO_RL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_debug_rl(params...) \ + QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_IFMGR, params) + +#define ifmgr_nofl_alert(params...) \ + QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_nofl_err(params...) \ + QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_nofl_warn(params...) \ + QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_nofl_info(params...) \ + QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_IFMGR, params) +#define ifmgr_nofl_debug(params...) \ + QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_IFMGR, params) + +#define ifmgr_hex_dump(level, data, buf_len) \ + qdf_trace_hex_dump(QDF_MODULE_ID_IFMGR, level, data, buf_len) + +/** + * struct wlan_if_mgr_obj - interface object definition + * + */ +struct wlan_if_mgr_obj { + +}; + +/** + * wlan_if_mgr_psoc_created_notification() - interface mgr psoc create handler + * @psoc: psoc object + * @arg_list: Argument list + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_if_mgr_psoc_created_notification(struct wlan_objmgr_psoc *psoc, + void *arg_list); + +/** + * wlan_scan_psoc_deleted_notification() - scan psoc delete handler + * @psoc: psoc object + * @arg_list: Argument list + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_if_mgr_psoc_destroyed_notification(struct wlan_objmgr_psoc *psoc, + void *arg_list); + +#endif diff --git a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_public_struct.h b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_public_struct.h new file mode 100644 index 0000000000..459e47ffb4 --- /dev/null +++ b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_public_struct.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020, 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 interface manager structure definations + */ +#ifndef __IF_MGR_PUBLIC_STRUCTS_H +#define __IF_MGR_PUBLIC_STRUCTS_H + +#include +#include +#include +#include +#include +#include +#include + +/** + * enum wlan_if_mgr_evt: interface manager events + * @WLAN_IF_MGR_EV_CONNECT_START: + * @WLAN_IF_MGR_EV_CONNECT_COMPLETE: + * @WLAN_IF_MGR_EV_DISCONNECT_START: + * @WLAN_IF_MGR_EV_DISCONNECT_COMPLETE: + * @WLAN_IF_MGR_EV_VALIDATE_CANDIDATE: + * @WLAN_IF_MGR_EV_AP_START_BSS: + * @WLAN_IF_MGR_EV_AP_START_COMPLETE: + * @WLAN_IF_MGR_EV_AP_STOP_BSS: + * @WLAN_IF_MGR_EV_AP_STOP_COMPLETE: + */ +enum wlan_if_mgr_evt { + WLAN_IF_MGR_EV_CONNECT_START = 0, + WLAN_IF_MGR_EV_CONNECT_COMPLETE = 1, + WLAN_IF_MGR_EV_DISCONNECT_START = 2, + WLAN_IF_MGR_EV_DISCONNECT_COMPLETE = 3, + WLAN_IF_MGR_EV_VALIDATE_CANDIDATE = 4, + WLAN_IF_MGR_EV_AP_START_BSS = 5, + WLAN_IF_MGR_EV_AP_START_COMPLETE = 6, + WLAN_IF_MGR_EV_AP_STOP_BSS = 7, + WLAN_IF_MGR_EV_AP_STOP_COMPLETE = 8, + WLAN_IF_MGR_EV_MAX = 9, +}; + +/** + * struct if_mgr_event_data - interface manager event data + * @status: status + */ +struct if_mgr_event_data { + QDF_STATUS status; +}; + +#endif diff --git a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_sta.h b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_sta.h new file mode 100644 index 0000000000..cda5eb0501 --- /dev/null +++ b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_sta.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020, 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 interface manager public file containing STA event handlers + */ + +#ifndef _WLAN_IF_MGR_STA_H_ +#define _WLAN_IF_MGR_STA_H_ + +/** + * wlan_process_connect_start() - connect start event handler + * + * Interface manager connect start event handler + * + * @vdev: vdev object + * @event_data: Interface mgr event data + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_process_connect_start(struct wlan_objmgr_vdev *vdev, + struct if_mgr_event_data *event_data); + +/** + * wlan_process_connect_complete() - connect complete event handler + * + * Interface manager connect complete event handler + * + * @vdev: vdev object + * @event_data: Interface manager complete event data + * + * Return: QDF_STATUS + */ +QDF_STATUS wlan_process_connect_complete(struct wlan_objmgr_vdev *vdev, + struct if_mgr_event_data *event_data); + +#endif diff --git a/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ucfg_api.h b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ucfg_api.h new file mode 100644 index 0000000000..ae332d2275 --- /dev/null +++ b/umac/cmn_services/interface_mgr/inc/wlan_if_mgr_ucfg_api.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020, 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 interface manager public api + */ + +#ifndef _WLAN_IF_MGR_UCFG_API_H_ +#define _WLAN_IF_MGR_UCFG_API_H_ + +#include +#include +#include +#include + +/** + * ucfg_if_mgr_deliver_event() - interface mgr event handler + * @vdev: vdev object + * @event: interface mangaer event + * @event_data: Interface mgr event data + * + * Return: QDF_STATUS + */ +static inline +QDF_STATUS ucfg_if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev, + enum wlan_if_mgr_evt event, + struct if_mgr_event_data *event_data) +{ + return if_mgr_deliver_event(vdev, event, event_data); +} + +#endif diff --git a/umac/cmn_services/interface_mgr/src/wlan_if_mgr_core.c b/umac/cmn_services/interface_mgr/src/wlan_if_mgr_core.c new file mode 100644 index 0000000000..ca648404ae --- /dev/null +++ b/umac/cmn_services/interface_mgr/src/wlan_if_mgr_core.c @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2020, 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 interface manager public api + */ +#include "wlan_if_mgr_public_struct.h" +#include "wlan_if_mgr_api.h" +#include "wlan_if_mgr_sta.h" +#include "wlan_if_mgr_ap.h" + +QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev, + enum wlan_if_mgr_evt event, + struct if_mgr_event_data *event_data) +{ + struct wlan_objmgr_psoc *psoc; + + psoc = wlan_vdev_get_psoc(vdev); + if (!psoc) + return QDF_STATUS_E_FAILURE; + + switch (event) { + case WLAN_IF_MGR_EV_CONNECT_START: + wlan_process_connect_start(vdev, event_data); + break; + + case WLAN_IF_MGR_EV_CONNECT_COMPLETE: + wlan_process_connect_complete(vdev, event_data); + break; + + case WLAN_IF_MGR_EV_AP_START_BSS: + wlan_process_ap_start_bss(vdev, event_data); + break; + + default: + break; + } + + return QDF_STATUS_SUCCESS; +} 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 new file mode 100644 index 0000000000..6ae8e25951 --- /dev/null +++ b/umac/cmn_services/interface_mgr/src/wlan_if_mgr_main.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2020, 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 core interface manager function definitions + */ +#include "wlan_if_mgr_main.h" + +QDF_STATUS wlan_if_mgr_psoc_created_notification(struct wlan_objmgr_psoc *psoc, + void *arg_list) +{ + struct wlan_if_mgr_obj *ifmgr_obj; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + ifmgr_obj = qdf_mem_malloc_atomic(sizeof(struct wlan_if_mgr_obj)); + if (!ifmgr_obj) { + ifmgr_err("Failed to allocate memory"); + return QDF_STATUS_E_NOMEM; + } + + /* Attach scan private date to psoc */ + status = wlan_objmgr_psoc_component_obj_attach(psoc, + WLAN_UMAC_COMP_IF_MGR, + (void *)ifmgr_obj, + QDF_STATUS_SUCCESS); + if (QDF_IS_STATUS_ERROR(status)) + ifmgr_err("Failed to attach psoc scan component"); + else + ifmgr_debug("interface mgr object attach to psoc successful"); + + return status; +} + +QDF_STATUS +wlan_if_mgr_psoc_destroyed_notification(struct wlan_objmgr_psoc *psoc, + void *arg_list) +{ + void *ifmgr_obj = NULL; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + ifmgr_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, + WLAN_UMAC_COMP_IF_MGR); + + if (!ifmgr_obj) { + ifmgr_err("Failed to detach interface mgr in psoc ctx"); + return QDF_STATUS_E_FAILURE; + } + + status = wlan_objmgr_psoc_component_obj_detach(psoc, + WLAN_UMAC_COMP_IF_MGR, + ifmgr_obj); + if (QDF_IS_STATUS_ERROR(status)) + ifmgr_err("Failed to detach psoc interface mgr component"); + + qdf_mem_free(ifmgr_obj); + + return status; +} +