xref: /wlan-driver/qcacld-3.0/components/dp/core/inc/wlan_dp_objmgr.h (revision 5113495b16420b49004c444715d2daae2066e7dc) !
1 /*
2  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: This file contains various object manager related wrappers and helpers
19  */
20 
21 #ifndef __WLAN_DP_OBJMGR_H
22 #define __WLAN_DP_OBJMGR_H
23 
24 #include "wlan_cmn.h"
25 #include "wlan_objmgr_cmn.h"
26 #include "wlan_objmgr_peer_obj.h"
27 #include "wlan_objmgr_vdev_obj.h"
28 #include "wlan_objmgr_pdev_obj.h"
29 #include "wlan_objmgr_psoc_obj.h"
30 #include "wlan_utility.h"
31 
32 struct wlan_dp_intf;
33 struct wlan_dp_link;
34 
35 /* Get/Put Ref */
36 
37 #define dp_comp_peer_get_ref(peer) wlan_objmgr_peer_try_get_ref(peer, WLAN_DP_ID)
38 #define dp_comp_peer_put_ref(peer) wlan_objmgr_peer_release_ref(peer, WLAN_DP_ID)
39 
40 #define dp_comp_vdev_get_ref(vdev) wlan_objmgr_vdev_try_get_ref(vdev, WLAN_DP_ID)
41 #define dp_comp_vdev_put_ref(vdev) wlan_objmgr_vdev_release_ref(vdev, WLAN_DP_ID)
42 
43 #define dp_comp_pdev_get_ref(pdev) wlan_objmgr_pdev_try_get_ref(pdev, WLAN_DP_ID)
44 #define dp_comp_pdev_put_ref(pdev) wlan_objmgr_pdev_release_ref(pdev, WLAN_DP_ID)
45 
46 #define dp_comp_psoc_get_ref(psoc) wlan_objmgr_psoc_try_get_ref(psoc, WLAN_DP_ID)
47 #define dp_comp_psoc_put_ref(psoc) wlan_objmgr_psoc_release_ref(psoc, WLAN_DP_ID)
48 
49 /**
50  * dp_get_peer_priv_obj: get DP priv object from peer object
51  * @peer: pointer to peer object
52  *
53  * Return: pointer to DP peer private object
54  */
55 static inline struct wlan_dp_sta_info *
dp_get_peer_priv_obj(struct wlan_objmgr_peer * peer)56 dp_get_peer_priv_obj(struct wlan_objmgr_peer *peer)
57 {
58 	struct wlan_dp_sta_info *peer_info;
59 
60 	peer_info = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_COMP_DP);
61 	if (!peer_info) {
62 		dp_err("peer is null");
63 		return NULL;
64 	}
65 
66 	return peer_info;
67 }
68 
69 /**
70  * dp_get_vdev_priv_obj() - Wrapper to retrieve vdev priv obj
71  * @vdev: vdev pointer
72  *
73  * Return: DP vdev private object
74  */
75 static inline struct wlan_dp_link *
dp_get_vdev_priv_obj(struct wlan_objmgr_vdev * vdev)76 dp_get_vdev_priv_obj(struct wlan_objmgr_vdev *vdev)
77 {
78 	struct wlan_dp_link *obj;
79 
80 	if (!vdev) {
81 		dp_err("vdev is null");
82 		return NULL;
83 	}
84 
85 	obj = wlan_objmgr_vdev_get_comp_private_obj(vdev, WLAN_COMP_DP);
86 
87 	return obj;
88 }
89 
90 /**
91  * dp_psoc_get_priv() - Wrapper to retrieve psoc priv obj
92  * @psoc: psoc pointer
93  *
94  * Return: DP psoc private object
95  */
96 static inline struct wlan_dp_psoc_context *
dp_psoc_get_priv(struct wlan_objmgr_psoc * psoc)97 dp_psoc_get_priv(struct wlan_objmgr_psoc *psoc)
98 {
99 	struct wlan_dp_psoc_context *dp_ctx;
100 
101 	dp_ctx = wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_COMP_DP);
102 	QDF_BUG(dp_ctx);
103 
104 	return dp_ctx;
105 }
106 
107 /**
108  * dp_objmgr_get_vdev_by_user() - Get reference of vdev from dp_link
109  *  with user id
110  * @dp_link: DP link handle
111  * @dbgid: reference count dbg id
112  *
113  * Return: pointer to vdev object for success, NULL for failure
114  */
115 #ifdef WLAN_OBJMGR_REF_ID_TRACE
116 #define dp_objmgr_get_vdev_by_user(dp_link, dbgid) \
117 	__dp_objmgr_get_vdev_by_user(dp_link, dbgid, __func__, __LINE__)
118 struct wlan_objmgr_vdev *
119 __dp_objmgr_get_vdev_by_user(struct wlan_dp_link *dp_link,
120 			     wlan_objmgr_ref_dbgid id,
121 			     const char *func,
122 			     int line);
123 #else
124 #define dp_objmgr_get_vdev_by_user(dp_link, dbgid) \
125 	__dp_objmgr_get_vdev_by_user(dp_link, dbgid, __func__)
126 struct wlan_objmgr_vdev *
127 __dp_objmgr_get_vdev_by_user(struct wlan_dp_link *dp_link,
128 			     wlan_objmgr_ref_dbgid id,
129 			     const char *func);
130 #endif
131 
132 /**
133  * dp_objmgr_put_vdev_by_user() - Release reference of vdev object with
134  *  user id
135  * @vdev: pointer to vdev object
136  * @dbgid: reference count dbg id
137  *
138  * This API releases vdev object reference which was acquired using
139  * dp_objmgr_get_vdev_by_user().
140  *
141  * Return: void
142  */
143 #ifdef WLAN_OBJMGR_REF_ID_TRACE
144 #define dp_objmgr_put_vdev_by_user(vdev, dbgid) \
145 	__dp_objmgr_put_vdev_by_user(vdev, dbgid, __func__, __LINE__)
146 void
147 __dp_objmgr_put_vdev_by_user(struct wlan_objmgr_vdev *vdev,
148 			     wlan_objmgr_ref_dbgid id, const char *func,
149 			     int line);
150 #else
151 #define dp_objmgr_put_vdev_by_user(vdev, dbgid) \
152 	__dp_objmgr_put_vdev_by_user(vdev, dbgid, __func__)
153 void
154 __dp_objmgr_put_vdev_by_user(struct wlan_objmgr_vdev *vdev,
155 			     wlan_objmgr_ref_dbgid id, const char *func);
156 #endif
157 
158 #endif /* __WLAN_DP_OBJMGR_H */
159