xref: /wlan-driver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_ap.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /*
19*5113495bSYour Name  * DOC: contains MLO manager public file containing AP functionality
20*5113495bSYour Name  */
21*5113495bSYour Name #ifndef _WLAN_MLO_MGR_AP_H_
22*5113495bSYour Name #define _WLAN_MLO_MGR_AP_H_
23*5113495bSYour Name 
24*5113495bSYour Name #include <wlan_mlo_mgr_cmn.h>
25*5113495bSYour Name #include <wlan_mlo_mgr_public_structs.h>
26*5113495bSYour Name #include "wlan_mlo_mgr_msgq.h"
27*5113495bSYour Name 
28*5113495bSYour Name #define WLAN_RESV_AID_BITS 0xc000
29*5113495bSYour Name #define WLAN_AID(b)    ((b) & ~0xc000)
30*5113495bSYour Name /**
31*5113495bSYour Name  * mlo_ap_vdev_attach() - update vdev obj and vdev count to
32*5113495bSYour Name  *                         wlan_mlo_dev_context
33*5113495bSYour Name  * @vdev: vdev pointer
34*5113495bSYour Name  * @link_id: link id
35*5113495bSYour Name  * @vdev_count: number of vdev in the mlo
36*5113495bSYour Name  *
37*5113495bSYour Name  * Return: true if succeeds
38*5113495bSYour Name  */
39*5113495bSYour Name bool mlo_ap_vdev_attach(struct wlan_objmgr_vdev *vdev,
40*5113495bSYour Name 			uint8_t link_id,
41*5113495bSYour Name 			uint16_t vdev_count);
42*5113495bSYour Name 
43*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
44*5113495bSYour Name /**
45*5113495bSYour Name  * mlo_ap_get_bridge_vdev_list() - get mlo bridge vdev list
46*5113495bSYour Name  * @vdev: vdev pointer
47*5113495bSYour Name  * @vdev_count: vdev count
48*5113495bSYour Name  * @wlan_bridge_vdev_list: bridge vdev list
49*5113495bSYour Name  *
50*5113495bSYour Name  * This API gets all partner bridge vdevs.
51*5113495bSYour Name  *
52*5113495bSYour Name  * It takes references for all vdev's with bit set in the list. Callers
53*5113495bSYour Name  * of this API should properly release references before destroying the
54*5113495bSYour Name  * list.
55*5113495bSYour Name  *
56*5113495bSYour Name  * Return: None
57*5113495bSYour Name  */
58*5113495bSYour Name void mlo_ap_get_bridge_vdev_list(struct wlan_objmgr_vdev *vdev,
59*5113495bSYour Name 				 uint16_t *vdev_count,
60*5113495bSYour Name 				 struct wlan_objmgr_vdev **wlan_bridge_vdev_list);
61*5113495bSYour Name 
62*5113495bSYour Name /**
63*5113495bSYour Name  * mlo_ap_get_bridge_vdev_count() - get mlo bridge vdev count
64*5113495bSYour Name  * @mld_ctx: mld context
65*5113495bSYour Name  * @vdev_count: vdev count
66*5113495bSYour Name  *
67*5113495bSYour Name  * This API gets count of all partner bridge vdevs
68*5113495bSYour Name  *
69*5113495bSYour Name  * Return: None
70*5113495bSYour Name  */
71*5113495bSYour Name QDF_STATUS mlo_ap_get_bridge_vdev_count(struct wlan_mlo_dev_context *mld_ctx,
72*5113495bSYour Name 					uint16_t *vdev_count);
73*5113495bSYour Name 
74*5113495bSYour Name /**
75*5113495bSYour Name  * mlo_ap_get_vdev_list_no_flag() - get mlo vdev list
76*5113495bSYour Name  * @vdev: vdev pointer
77*5113495bSYour Name  * @vdev_count: vdev count
78*5113495bSYour Name  * @wlan_vdev_list: vdev list
79*5113495bSYour Name  *
80*5113495bSYour Name  * This API gets all partner vdev's without checking for WLAN_VDEV_FEXT2_MLO.
81*5113495bSYour Name  *
82*5113495bSYour Name  * It takes references for all vdev's with bit set in the list. Callers
83*5113495bSYour Name  * of this API should properly release references before destroying the
84*5113495bSYour Name  * list.
85*5113495bSYour Name  *
86*5113495bSYour Name  * Return: None
87*5113495bSYour Name  */
88*5113495bSYour Name void mlo_ap_get_vdev_list_no_flag(struct wlan_objmgr_vdev *vdev,
89*5113495bSYour Name 				  uint16_t *vdev_count,
90*5113495bSYour Name 				  struct wlan_objmgr_vdev **wlan_vdev_list);
91*5113495bSYour Name #else
92*5113495bSYour Name static inline void
mlo_ap_get_bridge_vdev_list(struct wlan_objmgr_vdev * vdev,uint16_t * vdev_count,struct wlan_objmgr_vdev ** wlan_bridge_vdev_list)93*5113495bSYour Name mlo_ap_get_bridge_vdev_list(struct wlan_objmgr_vdev *vdev,
94*5113495bSYour Name 			    uint16_t *vdev_count,
95*5113495bSYour Name 			    struct wlan_objmgr_vdev **wlan_bridge_vdev_list)
96*5113495bSYour Name {
97*5113495bSYour Name }
98*5113495bSYour Name 
99*5113495bSYour Name static inline QDF_STATUS
mlo_ap_get_bridge_vdev_count(struct wlan_mlo_dev_context * mld_ctx,uint16_t * vdev_count)100*5113495bSYour Name mlo_ap_get_bridge_vdev_count(struct wlan_mlo_dev_context *mld_ctx,
101*5113495bSYour Name 			     uint16_t *vdev_count)
102*5113495bSYour Name {
103*5113495bSYour Name 	if (!vdev_count)
104*5113495bSYour Name 		return QDF_STATUS_E_NULL_VALUE;
105*5113495bSYour Name 
106*5113495bSYour Name 	*vdev_count = 0;
107*5113495bSYour Name 
108*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
109*5113495bSYour Name }
110*5113495bSYour Name 
111*5113495bSYour Name static inline void
mlo_ap_get_vdev_list_no_flag(struct wlan_objmgr_vdev * vdev,uint16_t * vdev_count,struct wlan_objmgr_vdev ** wlan_vdev_list)112*5113495bSYour Name mlo_ap_get_vdev_list_no_flag(struct wlan_objmgr_vdev *vdev,
113*5113495bSYour Name 			     uint16_t *vdev_count,
114*5113495bSYour Name 			     struct wlan_objmgr_vdev **wlan_vdev_list)
115*5113495bSYour Name {
116*5113495bSYour Name }
117*5113495bSYour Name #endif
118*5113495bSYour Name 
119*5113495bSYour Name /**
120*5113495bSYour Name  * mlo_ap_get_vdev_list() - get mlo vdev list
121*5113495bSYour Name  * @vdev: vdev pointer
122*5113495bSYour Name  * @vdev_count: vdev count
123*5113495bSYour Name  * @wlan_vdev_list: vdev list
124*5113495bSYour Name  *
125*5113495bSYour Name  * This API gets all partner vdev's which have WLAN_VDEV_FEXT2_MLO bit
126*5113495bSYour Name  * set.
127*5113495bSYour Name  *
128*5113495bSYour Name  * It takes references for all vdev's with bit set in the list. Callers
129*5113495bSYour Name  * of this API should properly release references before destroying the
130*5113495bSYour Name  * list.
131*5113495bSYour Name  *
132*5113495bSYour Name  * Return: None
133*5113495bSYour Name  */
134*5113495bSYour Name void mlo_ap_get_vdev_list(struct wlan_objmgr_vdev *vdev,
135*5113495bSYour Name 			  uint16_t *vdev_count,
136*5113495bSYour Name 			  struct wlan_objmgr_vdev **wlan_vdev_list);
137*5113495bSYour Name 
138*5113495bSYour Name /**
139*5113495bSYour Name  * mlo_peer_get_vdev_list() - get mlo peer vdev list
140*5113495bSYour Name  * @peer: peer pointer
141*5113495bSYour Name  * @vdev_count: vdev count
142*5113495bSYour Name  * @wlan_vdev_list: vdev list
143*5113495bSYour Name  *
144*5113495bSYour Name  * This API gets all partner vdev's which have WLAN_VDEV_FEXT2_MLO bit
145*5113495bSYour Name  * set.
146*5113495bSYour Name  *
147*5113495bSYour Name  * It takes references for all vdev's with bit set in the list. Callers
148*5113495bSYour Name  * of this API should properly release references before destroying the
149*5113495bSYour Name  * list.
150*5113495bSYour Name  *
151*5113495bSYour Name  * Return: None
152*5113495bSYour Name  */
153*5113495bSYour Name void mlo_peer_get_vdev_list(struct wlan_objmgr_peer *peer,
154*5113495bSYour Name 			    uint16_t *vdev_count,
155*5113495bSYour Name 			    struct wlan_objmgr_vdev **wlan_vdev_list);
156*5113495bSYour Name 
157*5113495bSYour Name /**
158*5113495bSYour Name  * mlo_ap_get_active_vdev_list() - get mlo vdev list
159*5113495bSYour Name  * @vdev: vdev pointer
160*5113495bSYour Name  * @vdev_count: vdev count
161*5113495bSYour Name  * @wlan_vdev_list: vdev list
162*5113495bSYour Name  *
163*5113495bSYour Name  * This API gets all active partner vdev's which have WLAN_VDEV_FEXT2_MLO bit
164*5113495bSYour Name  * set.
165*5113495bSYour Name  *
166*5113495bSYour Name  * It takes references for all vdev's with bit set in the list. Callers
167*5113495bSYour Name  * of this API should properly release references before destroying the
168*5113495bSYour Name  * list.
169*5113495bSYour Name  *
170*5113495bSYour Name  * Return: None
171*5113495bSYour Name  */
172*5113495bSYour Name void mlo_ap_get_active_vdev_list(struct wlan_objmgr_vdev *vdev,
173*5113495bSYour Name 				 uint16_t *vdev_count,
174*5113495bSYour Name 				 struct wlan_objmgr_vdev **wlan_vdev_list);
175*5113495bSYour Name 
176*5113495bSYour Name /**
177*5113495bSYour Name  * mlo_ap_get_partner_vdev_list_from_mld() - get partner vdev from MLD
178*5113495bSYour Name  *                                           vdev_list without checking
179*5113495bSYour Name  *                                           WLAN_VDEV_FEXT2_MLO bit
180*5113495bSYour Name  * @vdev: vdev pointer
181*5113495bSYour Name  * @vdev_count: vdev count
182*5113495bSYour Name  * @wlan_vdev_list: vdev list
183*5113495bSYour Name  *
184*5113495bSYour Name  * This API gets all partner vdev's irrespective of WLAN_VDEV_FEXT2_MLO
185*5113495bSYour Name  * bit. Ideally, it copies all partners of the MLD with references.
186*5113495bSYour Name  *
187*5113495bSYour Name  * It takes references for all vdev's in the list. The callers of this
188*5113495bSYour Name  * API should properly release references before destroying the list.
189*5113495bSYour Name  *
190*5113495bSYour Name  * Return: None
191*5113495bSYour Name  */
192*5113495bSYour Name void mlo_ap_get_partner_vdev_list_from_mld(
193*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
194*5113495bSYour Name 		uint16_t *vdev_count,
195*5113495bSYour Name 		struct wlan_objmgr_vdev **wlan_vdev_list);
196*5113495bSYour Name 
197*5113495bSYour Name /**
198*5113495bSYour Name  * mlo_ap_link_sync_wait_notify() - notify the mlo manager, once vdev
199*5113495bSYour Name  *                                  enters WLAN_VDEV_SS_MLO_SYNC_WAIT
200*5113495bSYour Name  * @vdev: vdev pointer
201*5113495bSYour Name  *
202*5113495bSYour Name  * Return: true if MLO_SYNC_COMPLETE is posted, else false
203*5113495bSYour Name  */
204*5113495bSYour Name bool mlo_ap_link_sync_wait_notify(struct wlan_objmgr_vdev *vdev);
205*5113495bSYour Name 
206*5113495bSYour Name /**
207*5113495bSYour Name  * mlo_ap_link_start_rsp_notify - Notify that the link start is completed
208*5113495bSYour Name  *
209*5113495bSYour Name  * @vdev: pointer to vdev
210*5113495bSYour Name  *
211*5113495bSYour Name  * Return: none
212*5113495bSYour Name  */
213*5113495bSYour Name void mlo_ap_link_start_rsp_notify(struct wlan_objmgr_vdev *vdev);
214*5113495bSYour Name 
215*5113495bSYour Name /**
216*5113495bSYour Name  * mlo_ap_vdev_detach() - notify the mlo manager to detach given vdev
217*5113495bSYour Name  * @vdev: vdev pointer
218*5113495bSYour Name  *
219*5113495bSYour Name  * Return: None
220*5113495bSYour Name  */
221*5113495bSYour Name void mlo_ap_vdev_detach(struct wlan_objmgr_vdev *vdev);
222*5113495bSYour Name 
223*5113495bSYour Name /**
224*5113495bSYour Name  * mlo_ap_link_down_cmpl_notify() - notify the mlo manager, once vdev
225*5113495bSYour Name  *                                  is down completely
226*5113495bSYour Name  * @vdev: vdev pointer
227*5113495bSYour Name  *
228*5113495bSYour Name  * Return: None
229*5113495bSYour Name  */
230*5113495bSYour Name void mlo_ap_link_down_cmpl_notify(struct wlan_objmgr_vdev *vdev);
231*5113495bSYour Name 
232*5113495bSYour Name /**
233*5113495bSYour Name  * wlan_vdev_mlme_aid_mgr_max_aid_set() - set VDEV Max AID
234*5113495bSYour Name  * @vdev: vdev pointer
235*5113495bSYour Name  * @max_aid: max AID
236*5113495bSYour Name  *
237*5113495bSYour Name  * This function sets max AID for the VDEV
238*5113495bSYour Name  *
239*5113495bSYour Name  * Return: void
240*5113495bSYour Name  */
241*5113495bSYour Name void wlan_vdev_mlme_aid_mgr_max_aid_set(struct wlan_objmgr_vdev *vdev,
242*5113495bSYour Name 					uint16_t max_aid);
243*5113495bSYour Name 
244*5113495bSYour Name /**
245*5113495bSYour Name  * wlan_vdev_mlme_set_start_aid() - set VDEV start AID
246*5113495bSYour Name  * @vdev: vdev pointer
247*5113495bSYour Name  * @start_aid: start AID
248*5113495bSYour Name  *
249*5113495bSYour Name  * This function sets start AID for the VDEV
250*5113495bSYour Name  *
251*5113495bSYour Name  * Return: void
252*5113495bSYour Name  */
253*5113495bSYour Name QDF_STATUS wlan_vdev_mlme_set_start_aid(struct wlan_objmgr_vdev *vdev,
254*5113495bSYour Name 					uint16_t start_aid);
255*5113495bSYour Name 
256*5113495bSYour Name /**
257*5113495bSYour Name  * wlan_vdev_mlme_get_start_aid() - set VDEV start AID
258*5113495bSYour Name  * @vdev: vdev pointer
259*5113495bSYour Name  *
260*5113495bSYour Name  * This function sets start AID for the VDEV
261*5113495bSYour Name  *
262*5113495bSYour Name  * Return: start AID
263*5113495bSYour Name  */
264*5113495bSYour Name uint16_t wlan_vdev_mlme_get_start_aid(struct wlan_objmgr_vdev *vdev);
265*5113495bSYour Name 
266*5113495bSYour Name /**
267*5113495bSYour Name  * wlan_mlo_vdev_init_mbss_aid_mgr() - Assigns tx vdev aid mgr to a VDEV
268*5113495bSYour Name  * @ml_dev: MLO DEV context
269*5113495bSYour Name  * @vdev: VDEV
270*5113495bSYour Name  * @tx_vdev: Transmit VDEV
271*5113495bSYour Name  *
272*5113495bSYour Name  * This function assigns Tx VDEV's AID mgr to non-Tx VDEV
273*5113495bSYour Name  *
274*5113495bSYour Name  * Return: SUCCESS if assigned successfully
275*5113495bSYour Name  */
276*5113495bSYour Name QDF_STATUS wlan_mlo_vdev_init_mbss_aid_mgr(struct wlan_mlo_dev_context *ml_dev,
277*5113495bSYour Name 					   struct wlan_objmgr_vdev *vdev,
278*5113495bSYour Name 					   struct wlan_objmgr_vdev *tx_vdev);
279*5113495bSYour Name 
280*5113495bSYour Name /**
281*5113495bSYour Name  * wlan_mlo_vdev_deinit_mbss_aid_mgr() - Resets aid mgr to a non-Tx VDEV
282*5113495bSYour Name  * @mldev: MLO DEV context
283*5113495bSYour Name  * @vdev: VDEV
284*5113495bSYour Name  * @tx_vdev: Transmit VDEV
285*5113495bSYour Name  *
286*5113495bSYour Name  * This function resets AID mgr of non-Tx VDEV
287*5113495bSYour Name  *
288*5113495bSYour Name  * Return: SUCCESS if reset successfully
289*5113495bSYour Name  */
290*5113495bSYour Name QDF_STATUS wlan_mlo_vdev_deinit_mbss_aid_mgr(struct wlan_mlo_dev_context *mldev,
291*5113495bSYour Name 					     struct wlan_objmgr_vdev *vdev,
292*5113495bSYour Name 					     struct wlan_objmgr_vdev *tx_vdev);
293*5113495bSYour Name 
294*5113495bSYour Name /**
295*5113495bSYour Name  * wlan_mlme_vdev_init_mbss_aid_mgr() - Assigns tx vdev aid mgr to a VDEV
296*5113495bSYour Name  * @vdev: VDEV
297*5113495bSYour Name  * @tx_vdev: Transmit VDEV
298*5113495bSYour Name  *
299*5113495bSYour Name  * This function assigns Tx VDEV's AID mgr to non-Tx VDEV
300*5113495bSYour Name  *
301*5113495bSYour Name  * Return: SUCCESS if assigned successfully
302*5113495bSYour Name  */
303*5113495bSYour Name QDF_STATUS wlan_mlme_vdev_init_mbss_aid_mgr(struct wlan_objmgr_vdev *vdev,
304*5113495bSYour Name 					    struct wlan_objmgr_vdev *tx_vdev);
305*5113495bSYour Name 
306*5113495bSYour Name /**
307*5113495bSYour Name  * wlan_mlme_vdev_deinit_mbss_aid_mgr() - Resets aid mgr to a non-Tx VDEV
308*5113495bSYour Name  * @vdev: VDEV
309*5113495bSYour Name  * @tx_vdev: Transmit VDEV
310*5113495bSYour Name  *
311*5113495bSYour Name  * This function resets AID mgr of non-Tx VDEV
312*5113495bSYour Name  *
313*5113495bSYour Name  * Return: SUCCESS if reset successfully
314*5113495bSYour Name  */
315*5113495bSYour Name QDF_STATUS wlan_mlme_vdev_deinit_mbss_aid_mgr(struct wlan_objmgr_vdev *vdev,
316*5113495bSYour Name 					      struct wlan_objmgr_vdev *tx_vdev);
317*5113495bSYour Name 
318*5113495bSYour Name /**
319*5113495bSYour Name  * wlan_vdev_aid_mgr_init() - VDEV AID mgr init
320*5113495bSYour Name  * @max_aid: max AID
321*5113495bSYour Name  *
322*5113495bSYour Name  * This function is called as part of vdev/MLO DEV initialization.
323*5113495bSYour Name  * This will allocate aid mgr structure for a VDEV
324*5113495bSYour Name  *
325*5113495bSYour Name  * Return: aid_mgr
326*5113495bSYour Name  */
327*5113495bSYour Name struct wlan_vdev_aid_mgr *wlan_vdev_aid_mgr_init(uint16_t max_aid);
328*5113495bSYour Name 
329*5113495bSYour Name /**
330*5113495bSYour Name  * wlan_vdev_aid_mgr_free() - VDEV AID mgr free
331*5113495bSYour Name  * @aid_mgr: AID mgr
332*5113495bSYour Name  *
333*5113495bSYour Name  * This function frees the aid mgr of the VDEV
334*5113495bSYour Name  *
335*5113495bSYour Name  * Return: void
336*5113495bSYour Name  */
337*5113495bSYour Name void wlan_vdev_aid_mgr_free(struct wlan_vdev_aid_mgr *aid_mgr);
338*5113495bSYour Name 
339*5113495bSYour Name /**
340*5113495bSYour Name  * wlan_mlo_vdev_aid_mgr_init() - MLO AID mgr init
341*5113495bSYour Name  * @ml_dev: MLO DEV context
342*5113495bSYour Name  *
343*5113495bSYour Name  * This function allocate AID space for all associated VDEVs of MLD
344*5113495bSYour Name  *
345*5113495bSYour Name  * Return: SUCCESS if allocated successfully
346*5113495bSYour Name  */
347*5113495bSYour Name QDF_STATUS wlan_mlo_vdev_aid_mgr_init(struct wlan_mlo_dev_context *ml_dev);
348*5113495bSYour Name 
349*5113495bSYour Name /**
350*5113495bSYour Name  * wlan_mlo_vdev_aid_mgr_deinit() - MLO AID mgr free
351*5113495bSYour Name  * @ml_dev: MLO DEV context
352*5113495bSYour Name  *
353*5113495bSYour Name  * This function frees AID space for all associated VDEVs of MLD
354*5113495bSYour Name  *
355*5113495bSYour Name  * Return: void
356*5113495bSYour Name  */
357*5113495bSYour Name void wlan_mlo_vdev_aid_mgr_deinit(struct wlan_mlo_dev_context *ml_dev);
358*5113495bSYour Name 
359*5113495bSYour Name /**
360*5113495bSYour Name  * wlan_mlo_vdev_alloc_aid_mgr() - Allocate AID space for a VDEV
361*5113495bSYour Name  * @ml_dev: MLO DEV context
362*5113495bSYour Name  * @vdev: VDEV
363*5113495bSYour Name  *
364*5113495bSYour Name  * This function allocates AID space for an associated VDEV of MLD
365*5113495bSYour Name  *
366*5113495bSYour Name  * Return: SUCCESS if allocated successfully
367*5113495bSYour Name  */
368*5113495bSYour Name QDF_STATUS wlan_mlo_vdev_alloc_aid_mgr(struct wlan_mlo_dev_context *ml_dev,
369*5113495bSYour Name 				       struct wlan_objmgr_vdev *vdev);
370*5113495bSYour Name 
371*5113495bSYour Name /**
372*5113495bSYour Name  * wlan_mlo_vdev_free_aid_mgr() - Free AID space for a VDEV
373*5113495bSYour Name  * @ml_dev: MLO DEV context
374*5113495bSYour Name  * @vdev: VDEV
375*5113495bSYour Name  *
376*5113495bSYour Name  * This function frees AID space for an associated VDEV of MLD
377*5113495bSYour Name  *
378*5113495bSYour Name  * Return: SUCCESS if freed successfully
379*5113495bSYour Name  */
380*5113495bSYour Name QDF_STATUS wlan_mlo_vdev_free_aid_mgr(struct wlan_mlo_dev_context *ml_dev,
381*5113495bSYour Name 				      struct wlan_objmgr_vdev *vdev);
382*5113495bSYour Name 
383*5113495bSYour Name /**
384*5113495bSYour Name  * mlo_peer_allocate_aid() - Allocate AID for MLO peer
385*5113495bSYour Name  * @ml_dev: MLO DEV context
386*5113495bSYour Name  * @ml_peer: MLO peer object
387*5113495bSYour Name  *
388*5113495bSYour Name  * This function allocates AID for an MLO peer
389*5113495bSYour Name  *
390*5113495bSYour Name  * Return: SUCCESS if allocated successfully
391*5113495bSYour Name  */
392*5113495bSYour Name QDF_STATUS mlo_peer_allocate_aid(
393*5113495bSYour Name 		struct wlan_mlo_dev_context *ml_dev,
394*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer);
395*5113495bSYour Name 
396*5113495bSYour Name /**
397*5113495bSYour Name  * mlo_get_aid() - Allocate AID for a associated station
398*5113495bSYour Name  * @vdev: VDEV
399*5113495bSYour Name  *
400*5113495bSYour Name  * This function allocates AID for an associated station of MLD
401*5113495bSYour Name  *
402*5113495bSYour Name  * Return: AID
403*5113495bSYour Name  */
404*5113495bSYour Name uint16_t mlo_get_aid(struct wlan_objmgr_vdev *vdev);
405*5113495bSYour Name 
406*5113495bSYour Name /**
407*5113495bSYour Name  * mlo_free_aid() - Frees AID for a station
408*5113495bSYour Name  * @vdev: VDEV
409*5113495bSYour Name  * @assoc_id: Assoc ID
410*5113495bSYour Name  *
411*5113495bSYour Name  * This function frees AID for an associated station of MLD
412*5113495bSYour Name  *
413*5113495bSYour Name  * Return: SUCCESS if freed
414*5113495bSYour Name  */
415*5113495bSYour Name QDF_STATUS mlo_free_aid(struct wlan_objmgr_vdev *vdev, uint16_t assoc_id);
416*5113495bSYour Name 
417*5113495bSYour Name /**
418*5113495bSYour Name  * mlme_get_aid() - Allocate AID for a non-MLD station
419*5113495bSYour Name  * @vdev: VDEV
420*5113495bSYour Name  *
421*5113495bSYour Name  * This function allocates AID for an associated NON-MLD station of MLD
422*5113495bSYour Name  *
423*5113495bSYour Name  * Return: AID
424*5113495bSYour Name  */
425*5113495bSYour Name uint16_t mlme_get_aid(struct wlan_objmgr_vdev *vdev);
426*5113495bSYour Name 
427*5113495bSYour Name /**
428*5113495bSYour Name  * mlme_is_aid_set() - Check whether the AID is already allocated
429*5113495bSYour Name  * @vdev: VDEV
430*5113495bSYour Name  * @assoc_id: Assoc ID
431*5113495bSYour Name  *
432*5113495bSYour Name  * This function checks whether the AID is already allocated
433*5113495bSYour Name  *
434*5113495bSYour Name  * Return: 1 for AID is already allocated
435*5113495bSYour Name  *         0 for AID is available
436*5113495bSYour Name  */
437*5113495bSYour Name int mlme_is_aid_set(struct wlan_objmgr_vdev *vdev, uint16_t assoc_id);
438*5113495bSYour Name 
439*5113495bSYour Name /**
440*5113495bSYour Name  * wlan_mlo_peer_free_aid() - Free assoc id
441*5113495bSYour Name  * @ml_aid_mgr: MLO AID mgr
442*5113495bSYour Name  * @link_ix: Link index
443*5113495bSYour Name  * @assoc_id: Assoc id to be freed
444*5113495bSYour Name  *
445*5113495bSYour Name  * This function frees assoc id, resets bit in all bitmaps
446*5113495bSYour Name  *
447*5113495bSYour Name  * Return: SUCCESS,if it freed
448*5113495bSYour Name  */
449*5113495bSYour Name QDF_STATUS wlan_mlo_peer_free_aid(
450*5113495bSYour Name 		struct wlan_ml_vdev_aid_mgr *ml_aid_mgr,
451*5113495bSYour Name 		uint8_t link_ix,
452*5113495bSYour Name 		uint16_t assoc_id);
453*5113495bSYour Name 
454*5113495bSYour Name /**
455*5113495bSYour Name  * wlan_mlme_peer_free_aid() - Free link assoc id
456*5113495bSYour Name  * @vdev_aid_mgr: VDEV AID mgr
457*5113495bSYour Name  * @no_lock: lock needed for the operation
458*5113495bSYour Name  * @assoc_id: Assoc id to be freed
459*5113495bSYour Name  *
460*5113495bSYour Name  * This function frees assoc id of a specific VDEV
461*5113495bSYour Name  *
462*5113495bSYour Name  * Return: void
463*5113495bSYour Name  */
464*5113495bSYour Name void wlan_mlme_peer_free_aid(
465*5113495bSYour Name 		struct wlan_vdev_aid_mgr *vdev_aid_mgr,
466*5113495bSYour Name 		bool no_lock, uint16_t assoc_id);
467*5113495bSYour Name 
468*5113495bSYour Name /**
469*5113495bSYour Name  * mlo_peer_free_aid() - public API to free AID
470*5113495bSYour Name  * @ml_dev: MLO DEV context
471*5113495bSYour Name  * @ml_peer: MLO peer object
472*5113495bSYour Name  *
473*5113495bSYour Name  * This function invokes low level API to free assoc id
474*5113495bSYour Name  *
475*5113495bSYour Name  * Return: SUCCESS, if it freed
476*5113495bSYour Name  */
477*5113495bSYour Name QDF_STATUS mlo_peer_free_aid(struct wlan_mlo_dev_context *ml_dev,
478*5113495bSYour Name 			     struct wlan_mlo_peer_context *ml_peer);
479*5113495bSYour Name 
480*5113495bSYour Name /**
481*5113495bSYour Name  * mlme_free_aid() - public API to free link assoc id
482*5113495bSYour Name  * @vdev: VDEV object
483*5113495bSYour Name  * @assoc_id: Assoc id to be freed
484*5113495bSYour Name  *
485*5113495bSYour Name  * This function invokes low level API to free assoc id of a specific VDEV
486*5113495bSYour Name  *
487*5113495bSYour Name  * Return: void
488*5113495bSYour Name  */
489*5113495bSYour Name void mlme_free_aid(struct wlan_objmgr_vdev *vdev, uint16_t assoc_id);
490*5113495bSYour Name 
491*5113495bSYour Name /**
492*5113495bSYour Name  * mlo_set_aid() - public API to reserve AID
493*5113495bSYour Name  * @vdev: VDEV object
494*5113495bSYour Name  * @assoc_id: Assoc id to be reserved
495*5113495bSYour Name  *
496*5113495bSYour Name  * This function reserves AID of MLO VDEV
497*5113495bSYour Name  *
498*5113495bSYour Name  * Return: SUCCESS, if it is reserved
499*5113495bSYour Name  *         FAILURE, if it is already allocated
500*5113495bSYour Name  */
501*5113495bSYour Name QDF_STATUS mlo_set_aid(struct wlan_objmgr_vdev *vdev,
502*5113495bSYour Name 		       uint16_t assoc_id);
503*5113495bSYour Name 
504*5113495bSYour Name /**
505*5113495bSYour Name  * mlme_set_aid() - public API to reserve AID
506*5113495bSYour Name  * @vdev: VDEV object
507*5113495bSYour Name  * @assoc_id: Assoc id to be reserved
508*5113495bSYour Name  *
509*5113495bSYour Name  * This function reserves AID of VDEV
510*5113495bSYour Name  *
511*5113495bSYour Name  * Return: SUCCESS, if it is reserved
512*5113495bSYour Name  *         FAILURE, if it is already allocated
513*5113495bSYour Name  */
514*5113495bSYour Name QDF_STATUS mlme_set_aid(struct wlan_objmgr_vdev *vdev,
515*5113495bSYour Name 			uint16_t assoc_id);
516*5113495bSYour Name 
517*5113495bSYour Name /**
518*5113495bSYour Name  * wlan_mlme_get_aid_count() - public API to get AID count
519*5113495bSYour Name  * @vdev: VDEV object
520*5113495bSYour Name  *
521*5113495bSYour Name  * This function counts number AIDs allocated for the VDEV
522*5113495bSYour Name  *
523*5113495bSYour Name  * Return: aid count value
524*5113495bSYour Name  */
525*5113495bSYour Name uint16_t wlan_mlme_get_aid_count(struct wlan_objmgr_vdev *vdev);
526*5113495bSYour Name 
527*5113495bSYour Name /**
528*5113495bSYour Name  * mlo_ap_update_max_ml_peer_ids() - public API to update max MLO peer ids
529*5113495bSYour Name  * @pdev_id: PDEV id
530*5113495bSYour Name  * @max_ml_peer_ids: maximum ml peer ids supported
531*5113495bSYour Name  *
532*5113495bSYour Name  * This function updated the maximum MLO peer ids supported for the psoc
533*5113495bSYour Name  */
534*5113495bSYour Name QDF_STATUS mlo_ap_update_max_ml_peer_ids(
535*5113495bSYour Name 		uint32_t pdev_id, uint32_t max_ml_peer_ids);
536*5113495bSYour Name 
537*5113495bSYour Name /**
538*5113495bSYour Name  * mlo_ap_ml_peerid_alloc() - public API to allocate MLO peer id
539*5113495bSYour Name  *
540*5113495bSYour Name  * This function allocates MLO peer ID
541*5113495bSYour Name  *
542*5113495bSYour Name  * Return: mlo_peer_id on success,
543*5113495bSYour Name  *	 MLO_INVALID_PEER_ID on failure
544*5113495bSYour Name  */
545*5113495bSYour Name uint16_t mlo_ap_ml_peerid_alloc(void);
546*5113495bSYour Name 
547*5113495bSYour Name /**
548*5113495bSYour Name  * mlo_ap_ml_peerid_free() - public API to free MLO peer id
549*5113495bSYour Name  * @mlo_peer_id: ML peer id
550*5113495bSYour Name  *
551*5113495bSYour Name  * This function frees MLO peer ID
552*5113495bSYour Name  *
553*5113495bSYour Name  * Return: void
554*5113495bSYour Name  */
555*5113495bSYour Name void mlo_ap_ml_peerid_free(uint16_t mlo_peer_id);
556*5113495bSYour Name 
557*5113495bSYour Name #define ML_PRIMARY_UMAC_ID_INVAL 0xff
558*5113495bSYour Name /**
559*5113495bSYour Name  * mlo_peer_assign_primary_umac() - Assign Primary UMAC
560*5113495bSYour Name  * @ml_peer: MLO peer object
561*5113495bSYour Name  * @peer_entry: Link peer entry
562*5113495bSYour Name  *
563*5113495bSYour Name  * This function assigns primary UMAC flag in peer entry
564*5113495bSYour Name  *
565*5113495bSYour Name  * Return: SUCCESS,if it allocated
566*5113495bSYour Name  */
567*5113495bSYour Name void mlo_peer_assign_primary_umac(
568*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
569*5113495bSYour Name 		struct wlan_mlo_link_peer_entry *peer_entry);
570*5113495bSYour Name 
571*5113495bSYour Name /**
572*5113495bSYour Name  * mlo_peer_allocate_primary_umac() - Allocate Primary UMAC
573*5113495bSYour Name  * @ml_dev: MLO DEV context
574*5113495bSYour Name  * @ml_peer: MLO peer object
575*5113495bSYour Name  * @link_vdevs: link vdev array
576*5113495bSYour Name  *
577*5113495bSYour Name  * This function allocates primary UMAC for a MLO peer
578*5113495bSYour Name  *
579*5113495bSYour Name  * Return: SUCCESS,if it allocated
580*5113495bSYour Name  */
581*5113495bSYour Name QDF_STATUS mlo_peer_allocate_primary_umac(
582*5113495bSYour Name 		struct wlan_mlo_dev_context *ml_dev,
583*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
584*5113495bSYour Name 		struct wlan_objmgr_vdev *link_vdevs[]);
585*5113495bSYour Name 
586*5113495bSYour Name /**
587*5113495bSYour Name  * mlo_peer_free_primary_umac() - Free Primary UMAC
588*5113495bSYour Name  * @ml_dev: MLO DEV context
589*5113495bSYour Name  * @ml_peer: MLO peer object
590*5113495bSYour Name  *
591*5113495bSYour Name  * This function frees primary UMAC for a MLO peer
592*5113495bSYour Name  *
593*5113495bSYour Name  * Return: SUCCESS,if it is freed
594*5113495bSYour Name  */
595*5113495bSYour Name QDF_STATUS mlo_peer_free_primary_umac(
596*5113495bSYour Name 		struct wlan_mlo_dev_context *ml_dev,
597*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer);
598*5113495bSYour Name 
599*5113495bSYour Name /**
600*5113495bSYour Name  * mlo_ap_vdev_quiet_set() - Set quiet bitmap for requested vdev
601*5113495bSYour Name  * @vdev: Pointer to object manager vdev
602*5113495bSYour Name  *
603*5113495bSYour Name  * Return: void
604*5113495bSYour Name  */
605*5113495bSYour Name void mlo_ap_vdev_quiet_set(struct wlan_objmgr_vdev *vdev);
606*5113495bSYour Name 
607*5113495bSYour Name /**
608*5113495bSYour Name  * mlo_ap_vdev_quiet_clear() - Clear quiet bitmap for requested vdev
609*5113495bSYour Name  * @vdev: Pointer to object manager vdev
610*5113495bSYour Name  *
611*5113495bSYour Name  * Return: void
612*5113495bSYour Name  */
613*5113495bSYour Name void mlo_ap_vdev_quiet_clear(struct wlan_objmgr_vdev *vdev);
614*5113495bSYour Name 
615*5113495bSYour Name /**
616*5113495bSYour Name  * mlo_ap_vdev_quiet_is_any_idx_set() - Check if any index is set in
617*5113495bSYour Name  * quiet bitmap
618*5113495bSYour Name  * @vdev: Pointer to object manager vdev
619*5113495bSYour Name  *
620*5113495bSYour Name  * Return: true, if any index is set, else false
621*5113495bSYour Name  */
622*5113495bSYour Name bool mlo_ap_vdev_quiet_is_any_idx_set(struct wlan_objmgr_vdev *vdev);
623*5113495bSYour Name 
624*5113495bSYour Name #if defined(MESH_MODE_SUPPORT) && defined(WLAN_FEATURE_11BE_MLO)
625*5113495bSYour Name /**
626*5113495bSYour Name  * mlo_peer_populate_mesh_params() - Populate mesh parameters in ml_peer
627*5113495bSYour Name  * @ml_peer: ml_peer to which mesh config parameters need to be populated
628*5113495bSYour Name  * @ml_info: ml_info with mesh config associated with this link
629*5113495bSYour Name  *
630*5113495bSYour Name  * Return: void
631*5113495bSYour Name  */
632*5113495bSYour Name void mlo_peer_populate_mesh_params(
633*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
634*5113495bSYour Name 		struct mlo_partner_info *ml_info);
635*5113495bSYour Name #else
636*5113495bSYour Name static inline
mlo_peer_populate_mesh_params(struct wlan_mlo_peer_context * ml_peer,struct mlo_partner_info * ml_info)637*5113495bSYour Name void mlo_peer_populate_mesh_params(
638*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
639*5113495bSYour Name 		struct mlo_partner_info *ml_info)
640*5113495bSYour Name {
641*5113495bSYour Name }
642*5113495bSYour Name #endif
643*5113495bSYour Name 
644*5113495bSYour Name #ifdef UMAC_SUPPORT_MLNAWDS
645*5113495bSYour Name /**
646*5113495bSYour Name  * mlo_peer_populate_nawds_params() - Populate nawds parameters in ml_peer
647*5113495bSYour Name  * @ml_peer: ml_peer to which nawds config parameters need to be populated
648*5113495bSYour Name  * @ml_info: ml_info with nawds config associated with this link
649*5113495bSYour Name  *
650*5113495bSYour Name  * Return: void
651*5113495bSYour Name  */
652*5113495bSYour Name void mlo_peer_populate_nawds_params(
653*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
654*5113495bSYour Name 		struct mlo_partner_info *ml_info);
655*5113495bSYour Name #else
656*5113495bSYour Name static inline
mlo_peer_populate_nawds_params(struct wlan_mlo_peer_context * ml_peer,struct mlo_partner_info * ml_info)657*5113495bSYour Name void mlo_peer_populate_nawds_params(
658*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
659*5113495bSYour Name 		struct mlo_partner_info *ml_info)
660*5113495bSYour Name {
661*5113495bSYour Name }
662*5113495bSYour Name #endif
663*5113495bSYour Name 
664*5113495bSYour Name /**
665*5113495bSYour Name  * mlo_peer_create_get_frm_buf() - get frm_buf to peer_create
666*5113495bSYour Name  * @ml_peer: MLO peer
667*5113495bSYour Name  * @peer_create: pointer to peer_create_notif context
668*5113495bSYour Name  * @frm_buf: pointer to frame buffer to be cloned to peer_create
669*5113495bSYour Name  *
670*5113495bSYour Name  * Return: SUCCESS if
671*5113495bSYour Name  * - peer_create frame buffer cloned successfully in non NAWDS case Or
672*5113495bSYour Name  * - ml_peer is in NAWDS mode.
673*5113495bSYour Name  */
674*5113495bSYour Name QDF_STATUS mlo_peer_create_get_frm_buf(
675*5113495bSYour Name 		struct wlan_mlo_peer_context *ml_peer,
676*5113495bSYour Name 		struct peer_create_notif_s *peer_create,
677*5113495bSYour Name 		qdf_nbuf_t frm_buf);
678*5113495bSYour Name 
679*5113495bSYour Name /**
680*5113495bSYour Name  * wlan_mlo_ap_get_active_links() - Get number of active link VDEVs of MLD
681*5113495bSYour Name  * @vdev: vdev pointer
682*5113495bSYour Name  *
683*5113495bSYour Name  * Return: active vdev count.
684*5113495bSYour Name  */
685*5113495bSYour Name uint16_t wlan_mlo_ap_get_active_links(struct wlan_objmgr_vdev *vdev);
686*5113495bSYour Name 
687*5113495bSYour Name #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE
688*5113495bSYour Name /**
689*5113495bSYour Name  * mlo_ap_ml_ptqm_peerid_free() - API to clear ml peer id bmap set for
690*5113495bSYour Name  * ptqm migration
691*5113495bSYour Name  * @ml_dev: ML dev pointer
692*5113495bSYour Name  * @mlo_peer_id: MLO peer id
693*5113495bSYour Name  *
694*5113495bSYour Name  * Return: none
695*5113495bSYour Name  */
696*5113495bSYour Name void mlo_ap_ml_ptqm_peerid_free(struct wlan_mlo_dev_context *ml_dev,
697*5113495bSYour Name 				uint16_t mlo_peer_id);
698*5113495bSYour Name #else
699*5113495bSYour Name static inline
mlo_ap_ml_ptqm_peerid_free(struct wlan_mlo_dev_context * ml_dev,uint16_t mlo_peer_id)700*5113495bSYour Name void mlo_ap_ml_ptqm_peerid_free(struct wlan_mlo_dev_context *ml_dev,
701*5113495bSYour Name 				uint16_t mlo_peer_id)
702*5113495bSYour Name { }
703*5113495bSYour Name #endif /* QCA_SUPPORT_PRIMARY_LINK_MIGRATE */
704*5113495bSYour Name #endif
705