1 /*
2  * Copyright (c) 2016-2019, 2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: Define the global data structure of UMAC
22  */
23 #ifndef _WLAN_OBJMGR_GLOBAL_OBJ_I_H_
24 #define _WLAN_OBJMGR_GLOBAL_OBJ_I_H_
25 
26 #include "wlan_objmgr_cmn.h"
27 #ifdef WLAN_FEATURE_11BE_MLO
28 #include "wlan_mlo_mgr_public_structs.h"
29 #endif
30 
31 struct wlan_objmgr_debug_info;
32 /**
33  * struct wlan_objmgr_global - Global object definition
34  * @psoc:                      Array of PSOCs to maintain PSOC's list,
35  *                             its optional
36  * @mlo_ctx:                   MLO manager global context
37  * @global_ctx:                DP global context
38  * @psoc_create_handler:       PSOC create handler array
39  * @psoc_create_handler_arg:   PSOC create handler args array
40  * @psoc_destroy_handler:      PSOC destroy handler array
41  * @psoc_destroy_handler_arg:  PSOC destroy handler args array
42  * @psoc_status_handler:       PSOC status handler array
43  * @psoc_status_handler_arg:   PSOC status handler args array
44  * @pdev_create_handler:       PDEV create handler array
45  * @pdev_create_handler_arg:   PDEV create handler args array
46  * @pdev_destroy_handler:      PDEV destroy handler array
47  * @pdev_destroy_handler_arg:  PDEV destroy handler args array
48  * @pdev_status_handler:       PDEV status handler array
49  * @pdev_status_handler_arg:   PDEV status handler args array
50  * @vdev_create_handler:       VDEV create handler array
51  * @vdev_create_handler_arg:   VDEV create handler args array
52  * @vdev_destroy_handler:      VDEV destroy handler array
53  * @vdev_destroy_handler_arg:  VDEV destroy handler args array
54  * @vdev_peer_free_notify_handler: VDEV peer free notify handler array
55  * @vdev_status_handler:       VDEV status handler array
56  * @vdev_status_handler_arg:   VDEV status handler args array
57  * @peer_create_handler:       PEER create handler array
58  * @peer_create_handler_arg:   PEER create handler args array
59  * @peer_destroy_handler:      PEER destroy handler array
60  * @peer_destroy_handler_arg:  PEER destroy handler args array
61  * @peer_status_handler:       PEER status handler array
62  * @peer_status_handler_arg:   PEER status handler args array
63  * @debug_info:                Objmgr debug information
64  * @global_lock:               Global lock
65  */
66 struct wlan_objmgr_global {
67 	struct wlan_objmgr_psoc *psoc[WLAN_OBJMGR_MAX_DEVICES];
68 #ifdef WLAN_FEATURE_11BE_MLO
69 	struct mlo_mgr_context *mlo_ctx;
70 #endif
71 #ifdef QCA_SUPPORT_DP_GLOBAL_CTX
72 	struct dp_global_context *global_ctx;
73 #endif
74 	wlan_objmgr_psoc_create_handler
75 		psoc_create_handler[WLAN_UMAC_MAX_COMPONENTS];
76 	void *psoc_create_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
77 	wlan_objmgr_psoc_destroy_handler
78 		psoc_destroy_handler[WLAN_UMAC_MAX_COMPONENTS];
79 	void *psoc_destroy_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
80 	wlan_objmgr_psoc_status_handler
81 		psoc_status_handler[WLAN_UMAC_MAX_COMPONENTS];
82 	void *psoc_status_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
83 	wlan_objmgr_pdev_create_handler
84 		pdev_create_handler[WLAN_UMAC_MAX_COMPONENTS];
85 	void *pdev_create_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
86 	wlan_objmgr_pdev_destroy_handler
87 		pdev_destroy_handler[WLAN_UMAC_MAX_COMPONENTS];
88 	void *pdev_destroy_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
89 	wlan_objmgr_pdev_status_handler
90 		pdev_status_handler[WLAN_UMAC_MAX_COMPONENTS];
91 	void *pdev_status_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
92 	wlan_objmgr_vdev_create_handler
93 		vdev_create_handler[WLAN_UMAC_MAX_COMPONENTS];
94 	void *vdev_create_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
95 	wlan_objmgr_vdev_destroy_handler
96 		vdev_destroy_handler[WLAN_UMAC_MAX_COMPONENTS];
97 	void *vdev_destroy_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
98 	wlan_objmgr_vdev_peer_free_notify_handler
99 		vdev_peer_free_notify_handler[WLAN_UMAC_MAX_COMPONENTS];
100 	wlan_objmgr_vdev_status_handler
101 		vdev_status_handler[WLAN_UMAC_MAX_COMPONENTS];
102 	void *vdev_status_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
103 	wlan_objmgr_peer_create_handler
104 		peer_create_handler[WLAN_UMAC_MAX_COMPONENTS];
105 	void *peer_create_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
106 	wlan_objmgr_peer_destroy_handler
107 		peer_destroy_handler[WLAN_UMAC_MAX_COMPONENTS];
108 	void *peer_destroy_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
109 	wlan_objmgr_peer_status_handler
110 		peer_status_handler[WLAN_UMAC_MAX_COMPONENTS];
111 	void *peer_status_handler_arg[WLAN_UMAC_MAX_COMPONENTS];
112 	struct wlan_objmgr_debug_info *debug_info;
113 	qdf_spinlock_t	global_lock;
114 };
115 
116 #define MAX_SLEEP_ITERATION 5
117 
118 extern struct wlan_objmgr_global *g_umac_glb_obj;
119 
120 /**
121  * wlan_objmgr_psoc_object_attach() - attach psoc to global object
122  * @psoc: PSOC object
123  *
124  * attaches PSOC to global psoc list
125  *
126  * Return: SUCCESS
127  *         Failure (Max supported PSOCs exceeded)
128  */
129 QDF_STATUS wlan_objmgr_psoc_object_attach(
130 			struct wlan_objmgr_psoc *psoc);
131 
132 /**
133  * wlan_objmgr_psoc_object_detach() - detach psoc from global object
134  * @psoc: PSOC object
135  *
136  * detaches PSOC from global psoc list
137  *
138  * Return: SUCCESS
139  *         Failure (if list is empty and PSOC is not present)
140  */
141 QDF_STATUS wlan_objmgr_psoc_object_detach(
142 			struct wlan_objmgr_psoc *psoc);
143 
144 /**
145  * wlan_objmgr_print_ref_ids() - Print ref counts of modules
146  * @id: array of ref debug
147  * @log_level: log level
148  *
149  * Iterates through array, and prints the ref count debug
150  *
151  * Return: nothing
152  */
153 void wlan_objmgr_print_ref_ids(qdf_atomic_t *id,
154 				QDF_TRACE_LEVEL log_level);
155 #endif /* _WLAN_OBJMGR_GLOBAL_OBJ_I_H_ */
156