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