1*5113495bSYour Name /*
2*5113495bSYour Name * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name *
5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name * above copyright notice and this permission notice appear in all
8*5113495bSYour Name * copies.
9*5113495bSYour Name *
10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name */
19*5113495bSYour Name /**
20*5113495bSYour Name * DOC: This file provides the common definitions for object manager
21*5113495bSYour Name */
22*5113495bSYour Name
23*5113495bSYour Name #ifndef _WLAN_OBJMGR_CMN_H_
24*5113495bSYour Name #define _WLAN_OBJMGR_CMN_H_
25*5113495bSYour Name
26*5113495bSYour Name #include "qdf_lock.h"
27*5113495bSYour Name #include "qdf_list.h"
28*5113495bSYour Name #include "qdf_status.h"
29*5113495bSYour Name #include "wlan_cmn.h"
30*5113495bSYour Name #include "qdf_atomic.h"
31*5113495bSYour Name
32*5113495bSYour Name /* No. of PSOCs can be supported */
33*5113495bSYour Name #define WLAN_OBJMGR_MAX_DEVICES 5
34*5113495bSYour Name
35*5113495bSYour Name /* size of Hash */
36*5113495bSYour Name #define WLAN_PEER_HASHSIZE 64
37*5113495bSYour Name
38*5113495bSYour Name /* simple hash is enough for variation of macaddr */
39*5113495bSYour Name #define WLAN_PEER_HASH(addr) \
40*5113495bSYour Name (((const uint8_t *)(addr))[QDF_MAC_ADDR_SIZE - 1] % WLAN_PEER_HASHSIZE)
41*5113495bSYour Name
42*5113495bSYour Name #define obj_mgr_log(level, args...) \
43*5113495bSYour Name QDF_TRACE(QDF_MODULE_ID_OBJ_MGR, level, ## args)
44*5113495bSYour Name #define obj_mgr_logfl(level, format, args...) \
45*5113495bSYour Name obj_mgr_log(level, FL(format), ## args)
46*5113495bSYour Name #define obj_mgr_log_level(level, format, args...)\
47*5113495bSYour Name obj_mgr_logfl(level, format, ## args)
48*5113495bSYour Name
49*5113495bSYour Name #define obj_mgr_alert(params...) \
50*5113495bSYour Name QDF_TRACE_FATAL(QDF_MODULE_ID_OBJ_MGR, params)
51*5113495bSYour Name #define obj_mgr_err(params...) \
52*5113495bSYour Name QDF_TRACE_ERROR(QDF_MODULE_ID_OBJ_MGR, params)
53*5113495bSYour Name #define obj_mgr_warn(params...) \
54*5113495bSYour Name QDF_TRACE_WARN(QDF_MODULE_ID_OBJ_MGR, params)
55*5113495bSYour Name #define obj_mgr_info(params...) \
56*5113495bSYour Name QDF_TRACE_INFO(QDF_MODULE_ID_OBJ_MGR, params)
57*5113495bSYour Name #define obj_mgr_debug(params...) \
58*5113495bSYour Name QDF_TRACE_DEBUG(QDF_MODULE_ID_OBJ_MGR, params)
59*5113495bSYour Name
60*5113495bSYour Name #define objmgr_nofl_alert(params...) \
61*5113495bSYour Name QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_OBJ_MGR, params)
62*5113495bSYour Name #define objmgr_nofl_err(params...) \
63*5113495bSYour Name QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_OBJ_MGR, params)
64*5113495bSYour Name #define objmgr_nofl_warn(params...) \
65*5113495bSYour Name QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_OBJ_MGR, params)
66*5113495bSYour Name #define objmgr_nofl_info(params...) \
67*5113495bSYour Name QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_OBJ_MGR, params)
68*5113495bSYour Name #define objmgr_nofl_debug(params...) \
69*5113495bSYour Name QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_OBJ_MGR, params)
70*5113495bSYour Name
71*5113495bSYour Name #define obj_mgr_debug_hex(ptr, size) \
72*5113495bSYour Name qdf_trace_hex_dump(QDF_MODULE_ID_OBJ_MGR, \
73*5113495bSYour Name QDF_TRACE_LEVEL_DEBUG, ptr, size)
74*5113495bSYour Name
75*5113495bSYour Name /**
76*5113495bSYour Name * enum WLAN_OBJ_STATE - State of Object
77*5113495bSYour Name * @WLAN_OBJ_STATE_ALLOCATED: Common object is allocated, but not
78*5113495bSYour Name * fully initialized
79*5113495bSYour Name * @WLAN_OBJ_STATE_CREATED: All component objects are created
80*5113495bSYour Name * @WLAN_OBJ_STATE_DELETED: All component objects are destroyed
81*5113495bSYour Name * @WLAN_OBJ_STATE_PARTIALLY_CREATED: Few/All component objects creation is
82*5113495bSYour Name * in progress
83*5113495bSYour Name * @WLAN_OBJ_STATE_PARTIALLY_DELETED: Component objects deletion is triggered,
84*5113495bSYour Name * they are yet to be destroyed
85*5113495bSYour Name * @WLAN_OBJ_STATE_COMP_DEL_PROGRESS: If a component is disabled run time,
86*5113495bSYour Name * and this state is used to represent the
87*5113495bSYour Name * deletion in progress after that
88*5113495bSYour Name * component object is destroyed, object
89*5113495bSYour Name * state would be moved to CREATED state
90*5113495bSYour Name * @WLAN_OBJ_STATE_LOGICALLY_DELETED: Object deletion has been initiated,
91*5113495bSYour Name * object destroy invoked once references
92*5113495bSYour Name * are released
93*5113495bSYour Name * @WLAN_OBJ_STATE_CREATION_FAILED: any component object is failed to be
94*5113495bSYour Name * created
95*5113495bSYour Name * @WLAN_OBJ_STATE_DELETION_FAILED: any component object is failed to be
96*5113495bSYour Name * destroyed
97*5113495bSYour Name */
98*5113495bSYour Name typedef enum {
99*5113495bSYour Name WLAN_OBJ_STATE_ALLOCATED = 0,
100*5113495bSYour Name WLAN_OBJ_STATE_CREATED = 1,
101*5113495bSYour Name WLAN_OBJ_STATE_DELETED = 2,
102*5113495bSYour Name WLAN_OBJ_STATE_PARTIALLY_CREATED = 3,
103*5113495bSYour Name WLAN_OBJ_STATE_PARTIALLY_DELETED = 4,
104*5113495bSYour Name WLAN_OBJ_STATE_COMP_DEL_PROGRESS = 5,
105*5113495bSYour Name WLAN_OBJ_STATE_LOGICALLY_DELETED = 6,
106*5113495bSYour Name WLAN_OBJ_STATE_CREATION_FAILED = 7,
107*5113495bSYour Name WLAN_OBJ_STATE_DELETION_FAILED = 8,
108*5113495bSYour Name } WLAN_OBJ_STATE;
109*5113495bSYour Name
110*5113495bSYour Name /* Object type is assigned with value */
111*5113495bSYour Name enum wlan_objmgr_obj_type {
112*5113495bSYour Name WLAN_PSOC_OP = 0,
113*5113495bSYour Name WLAN_PDEV_OP = 1,
114*5113495bSYour Name WLAN_VDEV_OP = 2,
115*5113495bSYour Name WLAN_PEER_OP = 3,
116*5113495bSYour Name WLAN_OBJ_TYPE_MAX = 4,
117*5113495bSYour Name };
118*5113495bSYour Name
119*5113495bSYour Name /**
120*5113495bSYour Name * struct wlan_peer_list - peer list hash
121*5113495bSYour Name * @peer_hash: peer sub lists
122*5113495bSYour Name * @peer_list_lock: List lock, this has to be acquired on
123*5113495bSYour Name * accessing/updating the list
124*5113495bSYour Name *
125*5113495bSYour Name * Peer list, it maintains sublists based on the MAC address as hash
126*5113495bSYour Name * Note: For DA WDS similar peer list has to be maintained
127*5113495bSYour Name * This peer list will not have WDS nodes
128*5113495bSYour Name */
129*5113495bSYour Name struct wlan_peer_list {
130*5113495bSYour Name qdf_list_t peer_hash[WLAN_PEER_HASHSIZE];
131*5113495bSYour Name qdf_spinlock_t peer_list_lock;
132*5113495bSYour Name };
133*5113495bSYour Name
134*5113495bSYour Name struct wlan_objmgr_psoc;
135*5113495bSYour Name struct wlan_objmgr_pdev;
136*5113495bSYour Name struct wlan_objmgr_vdev;
137*5113495bSYour Name struct wlan_objmgr_peer;
138*5113495bSYour Name
139*5113495bSYour Name /* Create handler would return the following status
140*5113495bSYour Name QDF_STATUS_SUCCESS--
141*5113495bSYour Name For synchronous handler:- this is returned on successful
142*5113495bSYour Name component object creation
143*5113495bSYour Name
144*5113495bSYour Name QDF_STATUS_COMP_DISABLED--
145*5113495bSYour Name For synchronous handler:- this is returned on if component
146*5113495bSYour Name doesn't want to allocate
147*5113495bSYour Name
148*5113495bSYour Name QDF_STATUS_COMP_ASYNC--
149*5113495bSYour Name For asynchronous handler:- this is returned on if component
150*5113495bSYour Name needs a context break
151*5113495bSYour Name
152*5113495bSYour Name QDF_STATUS_E_NOMEM--
153*5113495bSYour Name For synchronous handler:- this is returned on if component
154*5113495bSYour Name can't allocate
155*5113495bSYour Name QDF_STATUS_E_FAILURE--
156*5113495bSYour Name For synchronous handler:- If it is failed,
157*5113495bSYour Name For asynchronous handler:- If it is failed to post message
158*5113495bSYour Name (means, not required)/feature is not supported
159*5113495bSYour Name */
160*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_psoc_create_handler)(
161*5113495bSYour Name struct wlan_objmgr_psoc *psoc, void *arg);
162*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_psoc_destroy_handler)(
163*5113495bSYour Name struct wlan_objmgr_psoc *psoc, void *arg);
164*5113495bSYour Name typedef void (*wlan_objmgr_psoc_status_handler)(struct wlan_objmgr_psoc *psoc,
165*5113495bSYour Name void *arg, QDF_STATUS status);
166*5113495bSYour Name
167*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_pdev_create_handler)(
168*5113495bSYour Name struct wlan_objmgr_pdev *pdev, void *arg);
169*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_pdev_destroy_handler)(
170*5113495bSYour Name struct wlan_objmgr_pdev *pdev, void *arg);
171*5113495bSYour Name typedef void (*wlan_objmgr_pdev_status_handler)(
172*5113495bSYour Name struct wlan_objmgr_pdev *pdev, void *arg,
173*5113495bSYour Name QDF_STATUS status);
174*5113495bSYour Name
175*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_vdev_create_handler)(
176*5113495bSYour Name struct wlan_objmgr_vdev *vdev, void *arg);
177*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_vdev_destroy_handler)(
178*5113495bSYour Name struct wlan_objmgr_vdev *vdev, void *arg);
179*5113495bSYour Name typedef void (*wlan_objmgr_vdev_status_handler)(
180*5113495bSYour Name struct wlan_objmgr_vdev *vdev, void *arg,
181*5113495bSYour Name QDF_STATUS status);
182*5113495bSYour Name typedef void (*wlan_objmgr_vdev_peer_free_notify_handler)(
183*5113495bSYour Name struct wlan_objmgr_vdev *vdev);
184*5113495bSYour Name
185*5113495bSYour Name
186*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_peer_create_handler)(
187*5113495bSYour Name struct wlan_objmgr_peer *peer, void *arg);
188*5113495bSYour Name typedef QDF_STATUS (*wlan_objmgr_peer_destroy_handler)(
189*5113495bSYour Name struct wlan_objmgr_peer *peer, void *arg);
190*5113495bSYour Name typedef void (*wlan_objmgr_peer_status_handler)(
191*5113495bSYour Name struct wlan_objmgr_peer *peer, void *arg,
192*5113495bSYour Name QDF_STATUS status);
193*5113495bSYour Name
194*5113495bSYour Name /**
195*5113495bSYour Name * enum wlan_objmgr_ref_dbgid - ref count debug id
196*5113495bSYour Name * @WLAN_OBJMGR_ID: Object manager internal operations
197*5113495bSYour Name * @WLAN_MLME_SB_ID: MLME Southbound operations
198*5113495bSYour Name * @WLAN_MLME_NB_ID: MLME Northbound operations
199*5113495bSYour Name * @WLAN_MGMT_SB_ID: MGMT Northbound operations
200*5113495bSYour Name * @WLAN_MGMT_NB_ID: MGMT Southbound operations
201*5113495bSYour Name * @WLAN_HDD_ID_OBJ_MGR: HDD Object Manager operations
202*5113495bSYour Name * @WLAN_OSIF_ID: New component's OS IF ID
203*5113495bSYour Name * @WLAN_LEGACY_MAC_ID: Legacy MAC operations
204*5113495bSYour Name * @WLAN_LEGACY_WMA_ID: Legacy WMA operations
205*5113495bSYour Name * @WLAN_SERIALIZATION_ID: Serialization operations
206*5113495bSYour Name * @WLAN_PMO_ID: power manager offload (PMO) ID
207*5113495bSYour Name * @WLAN_LEGACY_SME_ID: Legacy SME operations
208*5113495bSYour Name * @WLAN_SCAN_ID: scan operations
209*5113495bSYour Name * @WLAN_WIFI_POS_CORE_ID: wifi positioning (CORE)
210*5113495bSYour Name * @WLAN_DFS_ID: DFS operations
211*5113495bSYour Name * @WLAN_P2P_ID: P2P operations
212*5113495bSYour Name * @WLAN_TDLS_SB_ID: TDLS Southbound operations
213*5113495bSYour Name * @WLAN_TDLS_NB_ID: TDLS Northbound operations
214*5113495bSYour Name * @WLAN_ATF_ID: Airtime Fairness operations
215*5113495bSYour Name * @WLAN_CRYPTO_ID: Crypto service operation
216*5113495bSYour Name * @WLAN_NAN_ID: nan operations
217*5113495bSYour Name * @WLAN_REGULATORY_SB_ID: SB regulatory operations
218*5113495bSYour Name * @WLAN_REGULATORY_NB_ID: NB regulatory operations
219*5113495bSYour Name * @WLAN_OFFCHAN_TXRX_ID: Offchannel TxRx
220*5113495bSYour Name * @WLAN_POLICY_MGR_ID: Policy Manager operations
221*5113495bSYour Name * @WLAN_SON_ID: SON
222*5113495bSYour Name * @WLAN_SA_API_ID: SA PAI
223*5113495bSYour Name * @WLAN_SPECTRAL_ID: Spectral operations
224*5113495bSYour Name * @WLAN_SPLITMAC_ID: SplitMac
225*5113495bSYour Name * @WLAN_DEBUG_ID: Debug operations
226*5113495bSYour Name * @WLAN_DIRECT_BUF_RX_ID: Direct Buffer Receive operations
227*5113495bSYour Name * @WLAN_DISA_ID: DISA (encryption test) operations
228*5113495bSYour Name * @WLAN_FTM_ID: FTM module
229*5113495bSYour Name * @WLAN_FD_ID: FILS Discovery
230*5113495bSYour Name * @WLAN_OCB_NB_ID: OCB Northbound operations
231*5113495bSYour Name * @WLAN_OCB_SB_ID: OCB Southbound operations
232*5113495bSYour Name * @WLAN_INIT_DEINIT_ID: Init deinit module
233*5113495bSYour Name * @WLAN_IPA_ID: IPA operations
234*5113495bSYour Name * @WLAN_CP_STATS_ID: Control Plane Statistics Module
235*5113495bSYour Name * @WLAN_GREEN_AP_ID: Green AP operations
236*5113495bSYour Name * @WLAN_WIFI_POS_OSIF_ID: wifi positioning (OSID)
237*5113495bSYour Name * @WLAN_WIFI_POS_TGT_IF_ID: wifi positioning (Target IF)
238*5113495bSYour Name * @WLAN_MLME_OBJ_DEL_ID: Object delete req/resp tracking with FW
239*5113495bSYour Name * @WLAN_ACTION_OUI_ID: action oui operations
240*5113495bSYour Name * @WLAN_LEGACY_SAP_ID: legacy sap fsm
241*5113495bSYour Name * @WLAN_PDEV_TARGET_IF_ID: Target interface layer for pdev APIs
242*5113495bSYour Name * @WLAN_MLME_SER_IF_ID: mlme serialization interface layer
243*5113495bSYour Name * @WLAN_SCHEDULER_ID: mlme scheduler
244*5113495bSYour Name * @WLAN_CFR_ID: CFG Capture method
245*5113495bSYour Name * @WLAN_VDEV_TARGET_IF_ID: Target interface layer
246*5113495bSYour Name * @WLAN_RX_PKT_TAG_ID: RX protocol tag operations
247*5113495bSYour Name * @WLAN_INTEROP_ISSUES_AP_ID: interop issues ap operation
248*5113495bSYour Name * @WLAN_WDS_ID: WDS operations
249*5113495bSYour Name * @WLAN_PROXY_ARP_ID: AP proxy ARP
250*5113495bSYour Name * @WLAN_WNM_ID: wireless network management operations
251*5113495bSYour Name * @WLAN_RRM_ID: Radio resource management operations
252*5113495bSYour Name * @WLAN_TR69_ID: TR69 operations
253*5113495bSYour Name * @WLAN_MGMT_RX_ID: Legacy offload management frame input handler
254*5113495bSYour Name * @WLAN_MGMT_TX_ID: Legacy offload management frame output handler
255*5113495bSYour Name * @WLAN_NSS_IF_ID: NSS offload interface operations
256*5113495bSYour Name * @WLAN_MBO_ID: MBO operations
257*5113495bSYour Name * @WLAN_RTT_ID: RTT operations
258*5113495bSYour Name * @WLAN_ALD_ID: Ath Link Diagnostic operations
259*5113495bSYour Name * @WLAN_ME_ID: Multicast enhancement operations
260*5113495bSYour Name * @WLAN_MGMT_HANDLER_ID: Management frame handler
261*5113495bSYour Name * @WLAN_MLME_HANDLER_ID: MLME handler
262*5113495bSYour Name * @WLAN_DBDC_ID: Dual Band Dual Concurrent mode operations
263*5113495bSYour Name * @WLAN_MLME_OBJMGR_ID: MLME object manager operations VAP, Node
264*5113495bSYour Name * @WLAN_OFFCHAN_TX_ID: Offchannel Tx operations
265*5113495bSYour Name * @WLAN_MISC_ID: power manager, PAPI, rate set, etc.
266*5113495bSYour Name * @WLAN_FWOL_NB_ID: fw offload northbound operations
267*5113495bSYour Name * @WLAN_FWOL_SB_ID: fw offload southbound operations
268*5113495bSYour Name * @WLAN_PSOC_TARGET_IF_ID: PSOC related target_if operations
269*5113495bSYour Name * @FTM_TIME_SYNC_ID: ftm time sync operations
270*5113495bSYour Name * @WLAN_PKT_CAPTURE_ID: Packet capture operations
271*5113495bSYour Name * @WLAN_DCS_ID: DCS operations
272*5113495bSYour Name * @WLAN_IOT_SIM_ID: IOT Simulation feature
273*5113495bSYour Name * @WLAN_MLME_CM_ID: Connection Manager reference ID
274*5113495bSYour Name * @WLAN_IF_MGR_ID: Interface manager reference ID
275*5113495bSYour Name * @WLAN_OSIF_SCAN_ID: SCAN operations in OS IF
276*5113495bSYour Name * @WLAN_OSIF_MGMT_ID: MGMT frame operations in OS IF
277*5113495bSYour Name * @WLAN_OSIF_STATS_ID: STATS request operations in OS IF
278*5113495bSYour Name * @WLAN_OSIF_NAN_ID: NAN operations in OS IF
279*5113495bSYour Name * @WLAN_OSIF_P2P_ID: P2P operations in OS IF
280*5113495bSYour Name * @WLAN_OSIF_OCB_ID: OCB operations in OS IF
281*5113495bSYour Name * @WLAN_OSIF_SPECTRAL_ID: spectal operations in OS IF
282*5113495bSYour Name * @WLAN_OSIF_POWER_ID: power operations in OS IF
283*5113495bSYour Name * @WLAN_OSIF_TDLS_ID: TDLS operations in OS IF
284*5113495bSYour Name * @WLAN_OSIF_CM_ID: Connection manager osif reference id
285*5113495bSYour Name * @WLAN_TXRX_STREAMS_ID: Preferred TX & RX streams operations
286*5113495bSYour Name * @WLAN_MLO_MGR_ID: MLO manager reference id
287*5113495bSYour Name * @WLAN_MBSS_ID: MBSS reference ID
288*5113495bSYour Name * @WLAN_MGMT_RX_REO_ID: Management rx reorder reference id
289*5113495bSYour Name * @WLAN_MGMT_RX_REO_SIM_ID: Management rx reorder simulation reference id
290*5113495bSYour Name * @WLAN_TWT_ID: TWT component id
291*5113495bSYour Name * @WLAN_LITE_MON_ID: Lite monitor operations
292*5113495bSYour Name * @WLAN_PRE_CAC_ID: Pre-CAC operations
293*5113495bSYour Name * @WLAN_DP_ID: DP component
294*5113495bSYour Name * @WLAN_UMAC_RESET_ID: Umac reset feature reference id
295*5113495bSYour Name * @WLAN_COAP_ID: Constrained Application Protocol reference id
296*5113495bSYour Name * @WLAN_SAWF_ID: Service Aware Wifi reference id
297*5113495bSYour Name * @WLAN_QMI_ID: QMI component id
298*5113495bSYour Name * @WLAN_AFC_ID: AFC reference id
299*5113495bSYour Name * @WLAN_INTRA_BSS: Intra bss reference id
300*5113495bSYour Name * @WLAN_ROAM_ID: Roam reference id
301*5113495bSYour Name * @WLAN_LL_SAP_ID: LL SAP reference id
302*5113495bSYour Name * @WLAN_COEX_ID: COEX reference id
303*5113495bSYour Name * @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
304*5113495bSYour Name */
305*5113495bSYour Name /* New value added to the enum must also be reflected in function
306*5113495bSYour Name * string_from_dbgid()
307*5113495bSYour Name */
308*5113495bSYour Name typedef enum {
309*5113495bSYour Name WLAN_OBJMGR_ID = 0,
310*5113495bSYour Name WLAN_MLME_SB_ID = 1,
311*5113495bSYour Name WLAN_MLME_NB_ID = 2,
312*5113495bSYour Name WLAN_MGMT_SB_ID = 3,
313*5113495bSYour Name WLAN_MGMT_NB_ID = 4,
314*5113495bSYour Name WLAN_HDD_ID_OBJ_MGR = 5,
315*5113495bSYour Name WLAN_OSIF_ID = 6,
316*5113495bSYour Name WLAN_LEGACY_MAC_ID = 7,
317*5113495bSYour Name WLAN_LEGACY_WMA_ID = 8,
318*5113495bSYour Name WLAN_SERIALIZATION_ID = 9,
319*5113495bSYour Name WLAN_PMO_ID = 10,
320*5113495bSYour Name WLAN_LEGACY_SME_ID = 11,
321*5113495bSYour Name WLAN_SCAN_ID = 12,
322*5113495bSYour Name WLAN_WIFI_POS_CORE_ID = 13,
323*5113495bSYour Name WLAN_DFS_ID = 14,
324*5113495bSYour Name WLAN_P2P_ID = 15,
325*5113495bSYour Name WLAN_TDLS_SB_ID = 16,
326*5113495bSYour Name WLAN_TDLS_NB_ID = 17,
327*5113495bSYour Name WLAN_ATF_ID = 18,
328*5113495bSYour Name WLAN_CRYPTO_ID = 19,
329*5113495bSYour Name WLAN_NAN_ID = 20,
330*5113495bSYour Name WLAN_REGULATORY_SB_ID = 21,
331*5113495bSYour Name WLAN_REGULATORY_NB_ID = 22,
332*5113495bSYour Name WLAN_OFFCHAN_TXRX_ID = 23,
333*5113495bSYour Name WLAN_POLICY_MGR_ID = 24,
334*5113495bSYour Name WLAN_SON_ID = 25,
335*5113495bSYour Name WLAN_SA_API_ID = 26,
336*5113495bSYour Name WLAN_SPECTRAL_ID = 27,
337*5113495bSYour Name WLAN_SPLITMAC_ID = 28,
338*5113495bSYour Name WLAN_DEBUG_ID = 29,
339*5113495bSYour Name WLAN_DIRECT_BUF_RX_ID = 30,
340*5113495bSYour Name WLAN_DISA_ID = 31,
341*5113495bSYour Name WLAN_FTM_ID = 32,
342*5113495bSYour Name WLAN_FD_ID = 33,
343*5113495bSYour Name WLAN_OCB_NB_ID = 34,
344*5113495bSYour Name WLAN_OCB_SB_ID = 35,
345*5113495bSYour Name WLAN_INIT_DEINIT_ID = 36,
346*5113495bSYour Name WLAN_IPA_ID = 37,
347*5113495bSYour Name WLAN_CP_STATS_ID = 38,
348*5113495bSYour Name WLAN_GREEN_AP_ID = 39,
349*5113495bSYour Name WLAN_WIFI_POS_OSIF_ID = 40,
350*5113495bSYour Name WLAN_WIFI_POS_TGT_IF_ID = 41,
351*5113495bSYour Name WLAN_MLME_OBJ_DEL_ID = 42,
352*5113495bSYour Name WLAN_ACTION_OUI_ID = 43,
353*5113495bSYour Name WLAN_LEGACY_SAP_ID = 44,
354*5113495bSYour Name WLAN_PDEV_TARGET_IF_ID = 45,
355*5113495bSYour Name WLAN_MLME_SER_IF_ID = 46,
356*5113495bSYour Name WLAN_SCHEDULER_ID = 47,
357*5113495bSYour Name WLAN_CFR_ID = 48,
358*5113495bSYour Name WLAN_VDEV_TARGET_IF_ID = 49,
359*5113495bSYour Name WLAN_RX_PKT_TAG_ID = 50,
360*5113495bSYour Name WLAN_INTEROP_ISSUES_AP_ID = 51,
361*5113495bSYour Name WLAN_WDS_ID = 52,
362*5113495bSYour Name WLAN_PROXY_ARP_ID = 53,
363*5113495bSYour Name WLAN_WNM_ID = 54,
364*5113495bSYour Name WLAN_RRM_ID = 55,
365*5113495bSYour Name WLAN_TR69_ID = 56,
366*5113495bSYour Name WLAN_MGMT_RX_ID = 57,
367*5113495bSYour Name WLAN_MGMT_TX_ID = 58,
368*5113495bSYour Name WLAN_NSS_IF_ID = 59,
369*5113495bSYour Name WLAN_MBO_ID = 60,
370*5113495bSYour Name WLAN_RTT_ID = 61,
371*5113495bSYour Name WLAN_ALD_ID = 62,
372*5113495bSYour Name WLAN_ME_ID = 63,
373*5113495bSYour Name WLAN_MGMT_HANDLER_ID = 64,
374*5113495bSYour Name WLAN_MLME_HANDLER_ID = 65,
375*5113495bSYour Name WLAN_DBDC_ID = 66,
376*5113495bSYour Name WLAN_MLME_OBJMGR_ID = 67,
377*5113495bSYour Name WLAN_OFFCHAN_TX_ID = 68,
378*5113495bSYour Name WLAN_MISC_ID = 69,
379*5113495bSYour Name WLAN_FWOL_NB_ID = 70,
380*5113495bSYour Name WLAN_FWOL_SB_ID = 71,
381*5113495bSYour Name WLAN_PSOC_TARGET_IF_ID = 72,
382*5113495bSYour Name FTM_TIME_SYNC_ID = 73,
383*5113495bSYour Name WLAN_PKT_CAPTURE_ID = 74,
384*5113495bSYour Name WLAN_DCS_ID = 75,
385*5113495bSYour Name WLAN_IOT_SIM_ID = 76,
386*5113495bSYour Name WLAN_MLME_CM_ID = 77,
387*5113495bSYour Name WLAN_IF_MGR_ID = 78,
388*5113495bSYour Name /* Create WLAN_OSIF sub id based on functionality */
389*5113495bSYour Name WLAN_OSIF_SCAN_ID = 79,
390*5113495bSYour Name WLAN_OSIF_MGMT_ID = 80,
391*5113495bSYour Name WLAN_OSIF_STATS_ID = 81,
392*5113495bSYour Name WLAN_OSIF_NAN_ID = 82,
393*5113495bSYour Name WLAN_OSIF_P2P_ID = 83,
394*5113495bSYour Name WLAN_OSIF_OCB_ID = 84,
395*5113495bSYour Name WLAN_OSIF_SPECTRAL_ID = 85,
396*5113495bSYour Name WLAN_OSIF_POWER_ID = 86,
397*5113495bSYour Name WLAN_OSIF_TDLS_ID = 87,
398*5113495bSYour Name WLAN_OSIF_CM_ID = 88,
399*5113495bSYour Name WLAN_TXRX_STREAMS_ID = 89,
400*5113495bSYour Name WLAN_MLO_MGR_ID = 90,
401*5113495bSYour Name WLAN_MBSS_ID = 91,
402*5113495bSYour Name WLAN_MGMT_RX_REO_ID = 92,
403*5113495bSYour Name WLAN_MGMT_RX_REO_SIM_ID = 93,
404*5113495bSYour Name WLAN_TWT_ID = 94,
405*5113495bSYour Name WLAN_LITE_MON_ID = 95,
406*5113495bSYour Name WLAN_PRE_CAC_ID = 96,
407*5113495bSYour Name WLAN_DP_ID = 97,
408*5113495bSYour Name WLAN_UMAC_RESET_ID = 98,
409*5113495bSYour Name WLAN_COAP_ID = 99,
410*5113495bSYour Name WLAN_SAWF_ID = 100,
411*5113495bSYour Name WLAN_QMI_ID = 101,
412*5113495bSYour Name WLAN_AFC_ID = 102,
413*5113495bSYour Name WLAN_INTRA_BSS = 103,
414*5113495bSYour Name WLAN_ROAM_ID = 104,
415*5113495bSYour Name WLAN_LL_SAP_ID = 105,
416*5113495bSYour Name WLAN_COEX_ID = 106,
417*5113495bSYour Name WLAN_REF_ID_MAX,
418*5113495bSYour Name } wlan_objmgr_ref_dbgid;
419*5113495bSYour Name
420*5113495bSYour Name /**
421*5113495bSYour Name * string_from_dbgid() - Convert Refcnt dbgid to respective string
422*5113495bSYour Name * @id: Reference count debug id
423*5113495bSYour Name *
424*5113495bSYour Name * Debug support function to convert refcnt dbgid to string.
425*5113495bSYour Name * Please note to add new string in the array at index equal to
426*5113495bSYour Name * its enum value in wlan_objmgr_ref_dbgid.
427*5113495bSYour Name */
string_from_dbgid(wlan_objmgr_ref_dbgid id)428*5113495bSYour Name static inline const char *string_from_dbgid(wlan_objmgr_ref_dbgid id)
429*5113495bSYour Name {
430*5113495bSYour Name static const char *strings[WLAN_REF_ID_MAX] = { "WLAN_OBJMGR_ID",
431*5113495bSYour Name "WLAN_MLME_SB_ID",
432*5113495bSYour Name "WLAN_MLME_NB_ID",
433*5113495bSYour Name "WLAN_MGMT_SB_ID",
434*5113495bSYour Name "WLAN_MGMT_NB_ID",
435*5113495bSYour Name "WLAN_HDD_ID_OBJ_MGR",
436*5113495bSYour Name "WLAN_OSIF_ID",
437*5113495bSYour Name "WLAN_LEGACY_MAC_ID",
438*5113495bSYour Name "WLAN_LEGACY_WMA_ID",
439*5113495bSYour Name "WLAN_SERIALIZATION_ID",
440*5113495bSYour Name "WLAN_PMO_ID",
441*5113495bSYour Name "WLAN_LEGACY_SME_ID",
442*5113495bSYour Name "WLAN_SCAN_ID",
443*5113495bSYour Name "WLAN_WIFI_POS_CORE_ID",
444*5113495bSYour Name "WLAN_DFS_ID",
445*5113495bSYour Name "WLAN_P2P_ID",
446*5113495bSYour Name "WLAN_TDLS_SB_ID",
447*5113495bSYour Name "WLAN_TDLS_NB_ID",
448*5113495bSYour Name "WLAN_ATF_ID",
449*5113495bSYour Name "WLAN_CRYPTO_ID",
450*5113495bSYour Name "WLAN_NAN_ID",
451*5113495bSYour Name "WLAN_REGULATORY_SB_ID",
452*5113495bSYour Name "WLAN_REGULATORY_NB_ID",
453*5113495bSYour Name "WLAN_OFFCHAN_TXRX_ID",
454*5113495bSYour Name "WLAN_POLICY_MGR_ID",
455*5113495bSYour Name "WLAN_SON_ID",
456*5113495bSYour Name "WLAN_SA_API_ID",
457*5113495bSYour Name "WLAN_SPECTRAL_ID",
458*5113495bSYour Name "WLAN_SPLITMAC_ID",
459*5113495bSYour Name "WLAN_DEBUG_ID",
460*5113495bSYour Name "WLAN_DIRECT_BUF_RX_ID",
461*5113495bSYour Name "WLAN_DISA_ID",
462*5113495bSYour Name "WLAN_FTM_ID",
463*5113495bSYour Name "WLAN_FD_ID",
464*5113495bSYour Name "WLAN_OCB_NB_ID",
465*5113495bSYour Name "WLAN_OCB_SB_ID",
466*5113495bSYour Name "WLAN_INIT_DEINIT_ID",
467*5113495bSYour Name "WLAN_IPA_ID",
468*5113495bSYour Name "WLAN_CP_STATS_ID",
469*5113495bSYour Name "WLAN_GREEN_AP_ID",
470*5113495bSYour Name "WLAN_WIFI_POS_OSIF_ID",
471*5113495bSYour Name "WLAN_WIFI_POS_TGT_IF_ID",
472*5113495bSYour Name "WLAN_MLME_OBJ_DEL_ID",
473*5113495bSYour Name "WLAN_ACTION_OUI_ID",
474*5113495bSYour Name "WLAN_LEGACY_SAP_ID",
475*5113495bSYour Name "WLAN_PDEV_TARGET_IF_ID",
476*5113495bSYour Name "WLAN_MLME_SER_IF_ID",
477*5113495bSYour Name "WLAN_SCHEDULER_ID",
478*5113495bSYour Name "WLAN_CFR_ID",
479*5113495bSYour Name "WLAN_VDEV_TARGET_IF_ID",
480*5113495bSYour Name "WLAN_RX_PKT_TAG_ID",
481*5113495bSYour Name "WLAN_INTEROP_ISSUES_AP_ID",
482*5113495bSYour Name "WLAN_WDS_ID",
483*5113495bSYour Name "WLAN_PROXY_ARP_ID",
484*5113495bSYour Name "WLAN_WNM_ID",
485*5113495bSYour Name "WLAN_RRM_ID",
486*5113495bSYour Name "WLAN_TR69_ID",
487*5113495bSYour Name "WLAN_MGMT_RX_ID",
488*5113495bSYour Name "WLAN_MGMT_TX_ID",
489*5113495bSYour Name "WLAN_NSS_IF_ID",
490*5113495bSYour Name "WLAN_MBO_ID",
491*5113495bSYour Name "WLAN_RTT_ID",
492*5113495bSYour Name "WLAN_ALD_ID",
493*5113495bSYour Name "WLAN_ME_ID",
494*5113495bSYour Name "WLAN_MGMT_HANDLER_ID",
495*5113495bSYour Name "WLAN_MLME_HANDLER_ID",
496*5113495bSYour Name "WLAN_DBDC_ID",
497*5113495bSYour Name "WLAN_MLME_OBJMGR_ID",
498*5113495bSYour Name "WLAN_OFFCHAN_TX_ID",
499*5113495bSYour Name "WLAN_MISC_ID",
500*5113495bSYour Name "WLAN_FWOL_NB_ID",
501*5113495bSYour Name "WLAN_FWOL_SB_ID",
502*5113495bSYour Name "WLAN_PSOC_TARGET_IF_ID",
503*5113495bSYour Name "FTM_TIME_SYNC_ID",
504*5113495bSYour Name "WLAN_PKT_CAPTURE_ID",
505*5113495bSYour Name "WLAN_DCS_ID",
506*5113495bSYour Name "WLAN_IOT_SIM_ID",
507*5113495bSYour Name "WLAN_MLME_CM_ID",
508*5113495bSYour Name "WLAN_IF_MGR_ID",
509*5113495bSYour Name "WLAN_OSIF_SCAN_ID",
510*5113495bSYour Name "WLAN_OSIF_MGMT_ID",
511*5113495bSYour Name "WLAN_OSIF_STATS_ID",
512*5113495bSYour Name "WLAN_OSIF_NAN_ID",
513*5113495bSYour Name "WLAN_OSIF_P2P_ID",
514*5113495bSYour Name "WLAN_OSIF_OCB_ID",
515*5113495bSYour Name "WLAN_OSIF_SPECTRAL_ID",
516*5113495bSYour Name "WLAN_OSIF_POWER_ID",
517*5113495bSYour Name "WLAN_OSIF_TDLS_ID",
518*5113495bSYour Name "WLAN_OSIF_CM_ID",
519*5113495bSYour Name "WLAN_TXRX_STREAMS_ID",
520*5113495bSYour Name "WLAN_MLO_MGR_ID",
521*5113495bSYour Name "WLAN_MBSS_ID",
522*5113495bSYour Name "WLAN_MGMT_RX_REO_ID",
523*5113495bSYour Name "WLAN_MGMT_RX_REO_SIM_ID",
524*5113495bSYour Name "WLAN_TWT_ID",
525*5113495bSYour Name "WLAN_LITE_MON_ID",
526*5113495bSYour Name "WLAN_PRE_CAC_ID",
527*5113495bSYour Name "WLAN_DP_ID",
528*5113495bSYour Name "WLAN_UMAC_RESET_ID",
529*5113495bSYour Name "WLAN_COAP_ID",
530*5113495bSYour Name "WLAN_SAWF_ID",
531*5113495bSYour Name "WLAN_QMI_ID",
532*5113495bSYour Name "WLAN_AFC_ID",
533*5113495bSYour Name "WLAN_INTRA_BSS",
534*5113495bSYour Name "WLAN_ROAM_ID",
535*5113495bSYour Name "WLAN_LL_SAP_ID",
536*5113495bSYour Name "WLAN_COEX_ID"
537*5113495bSYour Name };
538*5113495bSYour Name
539*5113495bSYour Name if (id >= WLAN_REF_ID_MAX)
540*5113495bSYour Name return "Unknown";
541*5113495bSYour Name
542*5113495bSYour Name return strings[id];
543*5113495bSYour Name }
544*5113495bSYour Name
545*5113495bSYour Name #ifdef WLAN_OBJMGR_DEBUG
546*5113495bSYour Name #define WLAN_OBJMGR_BUG(val) QDF_BUG(val)
547*5113495bSYour Name #else
548*5113495bSYour Name #define WLAN_OBJMGR_BUG(val)
549*5113495bSYour Name #endif
550*5113495bSYour Name
551*5113495bSYour Name #ifndef WLAN_OBJMGR_RATELIMIT_THRESH
552*5113495bSYour Name #define WLAN_OBJMGR_RATELIMIT_THRESH 2
553*5113495bSYour Name #endif
554*5113495bSYour Name
555*5113495bSYour Name #ifdef WLAN_OBJMGR_REF_ID_TRACE
556*5113495bSYour Name #define WLAN_OBJMGR_TRACE_FUNC_SIZE 30
557*5113495bSYour Name /**
558*5113495bSYour Name * struct wlan_objmgr_line_ref - line reference data
559*5113495bSYour Name * @line: line number
560*5113495bSYour Name * @cnt: line reference count
561*5113495bSYour Name */
562*5113495bSYour Name struct wlan_objmgr_line_ref {
563*5113495bSYour Name uint32_t line;
564*5113495bSYour Name qdf_atomic_t cnt;
565*5113495bSYour Name };
566*5113495bSYour Name
567*5113495bSYour Name /**
568*5113495bSYour Name * struct wlan_objmgr_line_ref_node - line reference node
569*5113495bSYour Name * @line_ref: line reference data
570*5113495bSYour Name * @next: pointer to next line reference
571*5113495bSYour Name */
572*5113495bSYour Name struct wlan_objmgr_line_ref_node {
573*5113495bSYour Name struct wlan_objmgr_line_ref line_ref;
574*5113495bSYour Name struct wlan_objmgr_line_ref_node *next;
575*5113495bSYour Name };
576*5113495bSYour Name
577*5113495bSYour Name /**
578*5113495bSYour Name * struct wlan_objmgr_trace_func - trace function data
579*5113495bSYour Name * @func: function pointer
580*5113495bSYour Name * @line_head: pointer to head line trace reference
581*5113495bSYour Name * @next: pointer to next function reference
582*5113495bSYour Name */
583*5113495bSYour Name struct wlan_objmgr_trace_func {
584*5113495bSYour Name char func[WLAN_OBJMGR_TRACE_FUNC_SIZE];
585*5113495bSYour Name struct wlan_objmgr_line_ref_node *line_head;
586*5113495bSYour Name struct wlan_objmgr_trace_func *next;
587*5113495bSYour Name };
588*5113495bSYour Name
589*5113495bSYour Name /**
590*5113495bSYour Name * struct wlan_objmgr_trace_id - trace reference data
591*5113495bSYour Name * @num_func: num of functions
592*5113495bSYour Name * @head: head pointer to function reference
593*5113495bSYour Name */
594*5113495bSYour Name struct wlan_objmgr_trace_id {
595*5113495bSYour Name uint32_t num_func;
596*5113495bSYour Name struct wlan_objmgr_trace_func *head;
597*5113495bSYour Name };
598*5113495bSYour Name
599*5113495bSYour Name /**
600*5113495bSYour Name * struct wlan_objmgr_trace - trace reference data
601*5113495bSYour Name * @references: reference data
602*5113495bSYour Name * @dereferences: dereference data
603*5113495bSYour Name * @trace_lock: lock
604*5113495bSYour Name */
605*5113495bSYour Name struct wlan_objmgr_trace {
606*5113495bSYour Name struct wlan_objmgr_trace_id references[WLAN_REF_ID_MAX];
607*5113495bSYour Name struct wlan_objmgr_trace_id dereferences[WLAN_REF_ID_MAX];
608*5113495bSYour Name qdf_spinlock_t trace_lock;
609*5113495bSYour Name };
610*5113495bSYour Name #endif /*WLAN_OBJMGR_REF_ID_TRACE*/
611*5113495bSYour Name
612*5113495bSYour Name #endif /* _WLAN_OBJMGR_CMN_H_*/
613