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