xref: /wlan-dirver/qca-wifi-host-cmn/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj_i.h (revision 1b9674e21e24478fba4530f5ae7396b9555e9c6a)
1 /*
2  * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18  /**
19   * DOC: Public APIs to perform operations on Global objects
20   */
21 #ifndef _WLAN_OBJMGR_PSOC_OBJ_I_H_
22 #define _WLAN_OBJMGR_PSOC_OBJ_I_H_
23 
24 /**
25  * wlan_objmgr_for_each_psoc_pdev() - iterate over each pdev for @psoc
26  * @psoc: the psoc whose pdevs should be iterated
27  * @pdev_id: pdev Id index cursor
28  * @pdev: pdev object cursor
29  *
30  * Note: The caller is responsible for grabbing @psoc's object lock before
31  * using this iterator
32  */
33 #define wlan_objmgr_for_each_psoc_pdev(psoc, pdev_id, pdev) \
34 	for (pdev_id = 0; pdev_id < WLAN_UMAC_MAX_PDEVS; pdev_id++) \
35 		if ((pdev = (psoc)->soc_objmgr.wlan_pdev_list[pdev_id]))
36 
37 /**
38  * wlan_objmgr_for_each_psoc_vdev() - iterate over each vdev for @psoc
39  * @psoc: the psoc whose vdevs should be iterated
40  * @vdev_id: vdev Id index cursor
41  * @vdev: vdev object cursor
42  *
43  * Note: The caller is responsible for grabbing @psoc's object lock before
44  * using this iterator
45  */
46 #define wlan_objmgr_for_each_psoc_vdev(psoc, vdev_id, vdev) \
47 	for (vdev_id = 0; vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS; vdev_id++) \
48 		if ((vdev = (psoc)->soc_objmgr.wlan_vdev_list[vdev_id]))
49 
50 /**
51  * wlan_objmgr_for_each_refs() - iterate non-zero ref counts in @ref_id_dbg
52  * @ref_id_dbg: the ref count array to iterate
53  * @ref_id: the reference Id index cursor
54  * @refs: the ref count cursor
55  *
56  * Note: The caller is responsible for grabbing @ref_id_dbg's parent object lock
57  * before using this iterator
58  */
59 #define wlan_objmgr_for_each_refs(ref_id_dbg, ref_id, refs) \
60 	for (ref_id = 0; ref_id < WLAN_REF_ID_MAX; ref_id++) \
61 		if ((refs = qdf_atomic_read(&(ref_id_dbg)[ref_id])) > 0)
62 
63 /**
64  * wlan_objmgr_psoc_pdev_attach() - store pdev in psoc's pdev list
65  * @psoc - PSOC object
66  * @pdev - PDEV object
67  *
68  * Attaches PDEV to PSOC, allocates PDEV id
69  *
70  * Return: SUCCESS
71  *         Failure (Max PDEVs are exceeded)
72  */
73 QDF_STATUS wlan_objmgr_psoc_pdev_attach(struct wlan_objmgr_psoc *psoc,
74 					 struct wlan_objmgr_pdev *pdev);
75 
76 /**
77  * wlan_objmgr_psoc_pdev_detach() - remove pdev from psoc's pdev list
78  * @psoc - PSOC object
79  * @pdev - PDEV object
80  *
81  * detaches PDEV to PSOC, frees PDEV id
82  *
83  * Return: SUCCESS
84  *         Failure (No PDEVs are present)
85  */
86 QDF_STATUS wlan_objmgr_psoc_pdev_detach(struct wlan_objmgr_psoc *psoc,
87 						struct wlan_objmgr_pdev *pdev);
88 
89 /**
90  * wlan_objmgr_psoc_vdev_attach() - store vdev in psoc's vdev list
91  * @psoc - PSOC object
92  * @vdev - VDEV object
93  *
94  * Attaches VDEV to PSOC, allocates VDEV id
95  *
96  * Return: SUCCESS
97  *         Failure (Max VDEVs are exceeded)
98  */
99 QDF_STATUS wlan_objmgr_psoc_vdev_attach(struct wlan_objmgr_psoc *psoc,
100 					struct wlan_objmgr_vdev *vdev);
101 
102 /**
103  * wlan_objmgr_psoc_vdev_detach() - remove vdev from psoc's vdev list
104  * @psoc - PSOC object
105  * @vdev - VDEV object
106  *
107  * detaches VDEV to PSOC, frees VDEV id
108  *
109  * Return: SUCCESS
110  *         Failure (No VDEVs are present)
111  */
112 QDF_STATUS wlan_objmgr_psoc_vdev_detach(struct wlan_objmgr_psoc *psoc,
113 					struct wlan_objmgr_vdev *vdev);
114 
115 /**
116  * wlan_objmgr_psoc_peer_attach() - store peer in psoc's peer table
117  * @psoc - PSOC object
118  * @peer - PEER object
119  *
120  * Attaches PEER to PSOC, derives the HASH, add peer to its peer list
121  *
122  * Return: SUCCESS
123  *         Failure (Max PEERs are exceeded)
124  */
125 QDF_STATUS wlan_objmgr_psoc_peer_attach(struct wlan_objmgr_psoc *psoc,
126 					 struct wlan_objmgr_peer *peer);
127 
128 /**
129  * wlan_objmgr_psoc_peer_detach() - remove peer from psoc's peer table
130  * @psoc - PSOC object
131  * @peer - PEER object
132  *
133  * detaches PEER to PSOC, removes the peer from the peer list
134  *
135  * Return: SUCCESS
136  *         Failure (PEER is not present)
137  */
138 QDF_STATUS wlan_objmgr_psoc_peer_detach(struct wlan_objmgr_psoc *psoc,
139 						struct wlan_objmgr_peer *peer);
140 #endif /* _WLAN_OBJMGR_PSOC_OBJ_I_H_ */
141