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