xref: /wlan-driver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 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 STA functionality
20*5113495bSYour Name  */
21*5113495bSYour Name #ifndef _WLAN_MLO_MGR_STA_H_
22*5113495bSYour Name #define _WLAN_MLO_MGR_STA_H_
23*5113495bSYour Name 
24*5113495bSYour Name #include <wlan_cm_ucfg_api.h>
25*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h>
26*5113495bSYour Name #include <wlan_mlo_mgr_cmn.h>
27*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
28*5113495bSYour Name #include <wlan_mlo_mgr_public_structs.h>
29*5113495bSYour Name #include <wlan_mlo_mgr_peer.h>
30*5113495bSYour Name 
31*5113495bSYour Name /**
32*5113495bSYour Name  * mlo_connect - Start the connection process
33*5113495bSYour Name  * @vdev: pointer to vdev
34*5113495bSYour Name  * @req: connection request
35*5113495bSYour Name  *
36*5113495bSYour Name  * Return: QDF_STATUS
37*5113495bSYour Name  */
38*5113495bSYour Name QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
39*5113495bSYour Name 		       struct wlan_cm_connect_req *req);
40*5113495bSYour Name 
41*5113495bSYour Name /**
42*5113495bSYour Name  * mlo_sta_link_connect_notify - Called by connection manager to notify the
43*5113495bSYour Name  * STA link connect is complete
44*5113495bSYour Name  * @vdev: pointer to vdev
45*5113495bSYour Name  * @rsp: MLO connect response
46*5113495bSYour Name  *
47*5113495bSYour Name  * Connection manager will notify the MLO manager when the link has started
48*5113495bSYour Name  * and MLO manager will start the subsequent connections, if necessary
49*5113495bSYour Name  *
50*5113495bSYour Name  * Return: none
51*5113495bSYour Name  */
52*5113495bSYour Name void
53*5113495bSYour Name mlo_sta_link_connect_notify(struct wlan_objmgr_vdev *vdev,
54*5113495bSYour Name 			    struct wlan_cm_connect_resp *rsp);
55*5113495bSYour Name 
56*5113495bSYour Name /**
57*5113495bSYour Name  * mlo_disconnect - Start the disconnection process
58*5113495bSYour Name  * @vdev: pointer to vdev
59*5113495bSYour Name  * @source: source of the request (can be connect or disconnect request)
60*5113495bSYour Name  * @reason_code: reason for disconnect
61*5113495bSYour Name  * @bssid: BSSID
62*5113495bSYour Name  *
63*5113495bSYour Name  * Return: QDF_STATUS
64*5113495bSYour Name  */
65*5113495bSYour Name QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
66*5113495bSYour Name 			  enum wlan_cm_source source,
67*5113495bSYour Name 			  enum wlan_reason_code reason_code,
68*5113495bSYour Name 			  struct qdf_mac_addr *bssid);
69*5113495bSYour Name 
70*5113495bSYour Name /**
71*5113495bSYour Name  * mlo_sync_disconnect - Start the sync disconnection process
72*5113495bSYour Name  * @vdev: pointer to vdev
73*5113495bSYour Name  * @source: source of the request (can be connect or disconnect request)
74*5113495bSYour Name  * @reason_code: reason for disconnect
75*5113495bSYour Name  * @bssid: BSSID
76*5113495bSYour Name  *
77*5113495bSYour Name  * Return: QDF_STATUS
78*5113495bSYour Name  */
79*5113495bSYour Name QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
80*5113495bSYour Name 			       enum wlan_cm_source source,
81*5113495bSYour Name 			       enum wlan_reason_code reason_code,
82*5113495bSYour Name 			       struct qdf_mac_addr *bssid);
83*5113495bSYour Name 
84*5113495bSYour Name /**
85*5113495bSYour Name  * mlo_sta_link_disconn_notify - Notifies that STA link disconnect completion
86*5113495bSYour Name  * @vdev: pointer to vdev
87*5113495bSYour Name  * @resp: disconnect resp
88*5113495bSYour Name  *
89*5113495bSYour Name  * Return: none
90*5113495bSYour Name  */
91*5113495bSYour Name void mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev *vdev,
92*5113495bSYour Name 				 struct wlan_cm_discon_rsp *resp);
93*5113495bSYour Name 
94*5113495bSYour Name /**
95*5113495bSYour Name  * mlo_handle_sta_link_connect_failure - Notifies that STA link connect failure
96*5113495bSYour Name  * @vdev: pointer to vdev
97*5113495bSYour Name  * @rsp: connect resp
98*5113495bSYour Name  *
99*5113495bSYour Name  * Return: none
100*5113495bSYour Name  */
101*5113495bSYour Name void mlo_handle_sta_link_connect_failure(struct wlan_objmgr_vdev *vdev,
102*5113495bSYour Name 					 struct wlan_cm_connect_resp *rsp);
103*5113495bSYour Name 
104*5113495bSYour Name /**
105*5113495bSYour Name  * mlo_handle_pending_disconnect - Handle pending disconnect if received
106*5113495bSYour Name  * while link connect is ongoing.
107*5113495bSYour Name  * @vdev: pointer to vdev
108*5113495bSYour Name  *
109*5113495bSYour Name  * Return: none
110*5113495bSYour Name  */
111*5113495bSYour Name void mlo_handle_pending_disconnect(struct wlan_objmgr_vdev *vdev);
112*5113495bSYour Name 
113*5113495bSYour Name /**
114*5113495bSYour Name  * mlo_is_mld_sta - Check if MLD associated with the vdev is a station
115*5113495bSYour Name  * @vdev: pointer to vdev
116*5113495bSYour Name  *
117*5113495bSYour Name  * Return: true if MLD is a station, false otherwise
118*5113495bSYour Name  */
119*5113495bSYour Name bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev);
120*5113495bSYour Name 
121*5113495bSYour Name /**
122*5113495bSYour Name  * ucfg_mlo_is_mld_disconnected - Check whether MLD is disconnected
123*5113495bSYour Name  * @vdev: pointer to vdev
124*5113495bSYour Name  *
125*5113495bSYour Name  * Return: true if mld is disconnected, false otherwise
126*5113495bSYour Name  */
127*5113495bSYour Name bool ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev *vdev);
128*5113495bSYour Name 
129*5113495bSYour Name /**
130*5113495bSYour Name  * mlo_is_mld_disconnecting_connecting - Check whether MLD is disconnecting or
131*5113495bSYour Name  * connecting
132*5113495bSYour Name  * @vdev: pointer to vdev
133*5113495bSYour Name  *
134*5113495bSYour Name  * Return: true if mld is disconnecting or connecting, false otherwise
135*5113495bSYour Name  */
136*5113495bSYour Name bool mlo_is_mld_disconnecting_connecting(struct wlan_objmgr_vdev *vdev);
137*5113495bSYour Name 
138*5113495bSYour Name /**
139*5113495bSYour Name  * mlo_is_ml_connection_in_progress - Check whether MLD assoc or link vdev is
140*5113495bSYour Name  * connecting
141*5113495bSYour Name  *
142*5113495bSYour Name  * @psoc: pointer to psoc
143*5113495bSYour Name  * @vdev_id: vdev id
144*5113495bSYour Name  *
145*5113495bSYour Name  * Return: true if mld is disconnecting, false otherwise
146*5113495bSYour Name  */
147*5113495bSYour Name bool mlo_is_ml_connection_in_progress(struct wlan_objmgr_psoc *psoc,
148*5113495bSYour Name 				      uint8_t vdev_id);
149*5113495bSYour Name 
150*5113495bSYour Name #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
151*5113495bSYour Name /**
152*5113495bSYour Name  * ucfg_mlo_is_mld_connected - Check whether MLD is connected
153*5113495bSYour Name  * @vdev: pointer to vdev
154*5113495bSYour Name  *
155*5113495bSYour Name  * Return: true if mld is connected, false otherwise
156*5113495bSYour Name  */
157*5113495bSYour Name bool ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev *vdev);
158*5113495bSYour Name 
159*5113495bSYour Name /**
160*5113495bSYour Name  * ucfg_mlo_mld_clear_mlo_cap - Clear MLO cap for all vdevs in MLD
161*5113495bSYour Name  * @vdev: pointer to vdev
162*5113495bSYour Name  *
163*5113495bSYour Name  * Return: None
164*5113495bSYour Name  */
165*5113495bSYour Name void ucfg_mlo_mld_clear_mlo_cap(struct wlan_objmgr_vdev *vdev);
166*5113495bSYour Name #endif
167*5113495bSYour Name 
168*5113495bSYour Name #ifdef WLAN_MLO_MULTI_CHIP
169*5113495bSYour Name /**
170*5113495bSYour Name  * mlo_get_central_umac_id - get central umac in 3 link topology
171*5113495bSYour Name  * @psoc_ids: pointer to psoc_ids
172*5113495bSYour Name  *
173*5113495bSYour Name  * Return: central umac if success, -1 all soc are adjacent to each other
174*5113495bSYour Name  */
175*5113495bSYour Name 
176*5113495bSYour Name int8_t mlo_get_central_umac_id(uint8_t *psoc_ids);
177*5113495bSYour Name 
178*5113495bSYour Name /**
179*5113495bSYour Name  * mlo_check_topology() - check topology of the psoc's in STA
180*5113495bSYour Name  * @pdev: pdev pointer
181*5113495bSYour Name  * @vdev: vdev pointer
182*5113495bSYour Name  * @aplinks: Number of active links on ap side
183*5113495bSYour Name  *
184*5113495bSYour Name  * Return: QDF_STATUS
185*5113495bSYour Name  */
186*5113495bSYour Name 
187*5113495bSYour Name QDF_STATUS mlo_check_topology(struct wlan_objmgr_pdev *pdev,
188*5113495bSYour Name 			      struct wlan_objmgr_vdev *vdev,
189*5113495bSYour Name 			      uint8_t aplinks);
190*5113495bSYour Name /**
191*5113495bSYour Name  * mlo_update_partner_bridge_info() - Update parter info of bridge vap
192*5113495bSYour Name  * @ml_dev: ML dev context
193*5113495bSYour Name  * @partner_info: partner info that needs to be updated
194*5113495bSYour Name  *
195*5113495bSYour Name  * Return: none
196*5113495bSYour Name  */
197*5113495bSYour Name 
198*5113495bSYour Name void mlo_update_partner_bridge_info(struct wlan_mlo_dev_context *ml_dev,
199*5113495bSYour Name 				    struct mlo_partner_info *partner_info);
200*5113495bSYour Name /**
201*5113495bSYour Name  * mlo_get_total_links() - get total links supported by device
202*5113495bSYour Name  * @pdev: pdev pointer
203*5113495bSYour Name  *
204*5113495bSYour Name  * Return: Number of total links supported
205*5113495bSYour Name  */
206*5113495bSYour Name 
207*5113495bSYour Name uint8_t mlo_get_total_links(struct wlan_objmgr_pdev *pdev);
208*5113495bSYour Name 
209*5113495bSYour Name /**
210*5113495bSYour Name  * mlo_is_sta_bridge_vdev() - Check if the vdev is sta bridge vdev
211*5113495bSYour Name  * @vdev: vdev pointer
212*5113495bSYour Name  *
213*5113495bSYour Name  * Return: True if STA bridge vdev else false
214*5113495bSYour Name  */
215*5113495bSYour Name 
216*5113495bSYour Name bool mlo_is_sta_bridge_vdev(struct wlan_objmgr_vdev *vdev);
217*5113495bSYour Name 
218*5113495bSYour Name /**
219*5113495bSYour Name  * mlo_sta_bridge_exists() - Check if bridge vdev exists in a STA MLD
220*5113495bSYour Name  * @vdev: vdev pointer
221*5113495bSYour Name  *
222*5113495bSYour Name  * Return: True if Bridge Vdev exists else false
223*5113495bSYour Name  */
224*5113495bSYour Name bool mlo_sta_bridge_exists(struct wlan_objmgr_vdev *vdev);
225*5113495bSYour Name 
226*5113495bSYour Name /**
227*5113495bSYour Name  * mlo_is_force_central_primary() - Check if central vdev is forced
228*5113495bSYour Name  * as primary
229*5113495bSYour Name  * @vdev: vdev pointer
230*5113495bSYour Name  *
231*5113495bSYour Name  * Return: True if Central Vdev is force as primary else false
232*5113495bSYour Name  */
233*5113495bSYour Name 
234*5113495bSYour Name bool mlo_is_force_central_primary(struct wlan_objmgr_vdev *vdev);
235*5113495bSYour Name 
236*5113495bSYour Name /**
237*5113495bSYour Name  * mlo_set_sta_ctx_bss_mld_addr() - Save BSS MLD in sta ctx
238*5113495bSYour Name  * @vdev: vdev pointer
239*5113495bSYour Name  * @bss_mld_addr: MLD Address of BSS
240*5113495bSYour Name  *
241*5113495bSYour Name  * Return: none
242*5113495bSYour Name  */
243*5113495bSYour Name 
244*5113495bSYour Name static inline
mlo_set_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bss_mld_addr)245*5113495bSYour Name void mlo_set_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev *vdev,
246*5113495bSYour Name 				  struct qdf_mac_addr *bss_mld_addr)
247*5113495bSYour Name {
248*5113495bSYour Name 	struct wlan_mlo_dev_context *ml_dev = NULL;
249*5113495bSYour Name 
250*5113495bSYour Name 	if (!vdev || !vdev->mlo_dev_ctx || !bss_mld_addr)
251*5113495bSYour Name 		return;
252*5113495bSYour Name 
253*5113495bSYour Name 	ml_dev = vdev->mlo_dev_ctx;
254*5113495bSYour Name 	if (mlo_sta_bridge_exists(vdev) &&
255*5113495bSYour Name 	    qdf_is_macaddr_zero(&ml_dev->bridge_sta_ctx->bss_mld_addr)) {
256*5113495bSYour Name 		if (qdf_is_macaddr_zero(bss_mld_addr))
257*5113495bSYour Name 			return;
258*5113495bSYour Name 		qdf_copy_macaddr(&ml_dev->bridge_sta_ctx->bss_mld_addr,
259*5113495bSYour Name 				 bss_mld_addr);
260*5113495bSYour Name 	}
261*5113495bSYour Name }
262*5113495bSYour Name 
263*5113495bSYour Name /**
264*5113495bSYour Name  * mlo_get_sta_ctx_bss_mld_addr() - Get BSS MLD from sta ctx
265*5113495bSYour Name  * @vdev: vdev pointer
266*5113495bSYour Name  *
267*5113495bSYour Name  * Return: pointer to qdf_mac_addr
268*5113495bSYour Name  */
269*5113495bSYour Name 
270*5113495bSYour Name static inline
mlo_get_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev * vdev)271*5113495bSYour Name struct qdf_mac_addr *mlo_get_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev *vdev)
272*5113495bSYour Name {
273*5113495bSYour Name 	struct wlan_mlo_dev_context *ml_dev = NULL;
274*5113495bSYour Name 	struct qdf_mac_addr *mld_addr;
275*5113495bSYour Name 
276*5113495bSYour Name 	if (!vdev || !vdev->mlo_dev_ctx)
277*5113495bSYour Name 		return NULL;
278*5113495bSYour Name 
279*5113495bSYour Name 	ml_dev = vdev->mlo_dev_ctx;
280*5113495bSYour Name 	if (mlo_sta_bridge_exists(vdev) &&
281*5113495bSYour Name 	    !qdf_is_macaddr_zero(&ml_dev->bridge_sta_ctx->bss_mld_addr)) {
282*5113495bSYour Name 		mld_addr = &ml_dev->bridge_sta_ctx->bss_mld_addr;
283*5113495bSYour Name 		return mld_addr;
284*5113495bSYour Name 	}
285*5113495bSYour Name 	return NULL;
286*5113495bSYour Name }
287*5113495bSYour Name 
288*5113495bSYour Name /**
289*5113495bSYour Name  * mlo_clear_bridge_sta_ctx() - clear bridge_sta_ctx
290*5113495bSYour Name  * @vdev: vdev object
291*5113495bSYour Name  *
292*5113495bSYour Name  * Return: none
293*5113495bSYour Name  */
294*5113495bSYour Name static inline
mlo_clear_bridge_sta_ctx(struct wlan_objmgr_vdev * vdev)295*5113495bSYour Name void mlo_clear_bridge_sta_ctx(struct wlan_objmgr_vdev *vdev)
296*5113495bSYour Name {
297*5113495bSYour Name 	struct wlan_mlo_dev_context *ml_dev = NULL;
298*5113495bSYour Name 	struct wlan_objmgr_vdev *tmp_vdev = NULL;
299*5113495bSYour Name 	uint8_t bridge_umac_id = -1;
300*5113495bSYour Name 
301*5113495bSYour Name 	if (!vdev || !vdev->mlo_dev_ctx)
302*5113495bSYour Name 		return;
303*5113495bSYour Name 
304*5113495bSYour Name 	ml_dev = vdev->mlo_dev_ctx;
305*5113495bSYour Name 	if (ml_dev->bridge_sta_ctx) {
306*5113495bSYour Name 		bridge_umac_id = ml_dev->bridge_sta_ctx->bridge_umac_id;
307*5113495bSYour Name 		qdf_mem_zero(ml_dev->bridge_sta_ctx,
308*5113495bSYour Name 			     sizeof(struct wlan_mlo_bridge_sta));
309*5113495bSYour Name 	}
310*5113495bSYour Name 	if (mlo_is_force_central_primary(vdev)) {
311*5113495bSYour Name 		tmp_vdev = mlo_get_link_vdev_from_psoc_id(ml_dev,
312*5113495bSYour Name 							  bridge_umac_id,
313*5113495bSYour Name 							  false);
314*5113495bSYour Name 		if (!tmp_vdev) {
315*5113495bSYour Name 			mlo_err("VDEV derivation failed for %u psoc wds bridge",
316*5113495bSYour Name 				bridge_umac_id);
317*5113495bSYour Name 			return;
318*5113495bSYour Name 		}
319*5113495bSYour Name 		tmp_vdev->vdev_objmgr.mlo_central_vdev = false;
320*5113495bSYour Name 		wlan_objmgr_vdev_release_ref(tmp_vdev, WLAN_MLO_MGR_ID);
321*5113495bSYour Name 	}
322*5113495bSYour Name }
323*5113495bSYour Name 
324*5113495bSYour Name #else
325*5113495bSYour Name static inline
mlo_set_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bss_mld_addr)326*5113495bSYour Name void mlo_set_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev *vdev,
327*5113495bSYour Name 				  struct qdf_mac_addr *bss_mld_addr)
328*5113495bSYour Name { }
329*5113495bSYour Name 
330*5113495bSYour Name static inline
mlo_get_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev * vdev)331*5113495bSYour Name struct qdf_mac_addr *mlo_get_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev *vdev)
332*5113495bSYour Name {
333*5113495bSYour Name 	return NULL;
334*5113495bSYour Name }
335*5113495bSYour Name 
336*5113495bSYour Name static inline
mlo_is_sta_bridge_vdev(struct wlan_objmgr_vdev * vdev)337*5113495bSYour Name bool mlo_is_sta_bridge_vdev(struct wlan_objmgr_vdev *vdev)
338*5113495bSYour Name {
339*5113495bSYour Name 	return false;
340*5113495bSYour Name }
341*5113495bSYour Name 
342*5113495bSYour Name static inline
mlo_sta_bridge_exists(struct wlan_objmgr_vdev * vdev)343*5113495bSYour Name bool mlo_sta_bridge_exists(struct wlan_objmgr_vdev *vdev)
344*5113495bSYour Name {
345*5113495bSYour Name 	return false;
346*5113495bSYour Name }
347*5113495bSYour Name 
348*5113495bSYour Name static inline
mlo_is_force_central_primary(struct wlan_objmgr_vdev * vdev)349*5113495bSYour Name bool mlo_is_force_central_primary(struct wlan_objmgr_vdev *vdev)
350*5113495bSYour Name {
351*5113495bSYour Name 	return false;
352*5113495bSYour Name }
353*5113495bSYour Name 
354*5113495bSYour Name static inline
mlo_clear_bridge_sta_ctx(struct wlan_objmgr_vdev * vdev)355*5113495bSYour Name void mlo_clear_bridge_sta_ctx(struct wlan_objmgr_vdev *vdev)
356*5113495bSYour Name { }
357*5113495bSYour Name #endif
358*5113495bSYour Name /**
359*5113495bSYour Name  * wlan_mlo_get_tdls_link_vdev() - API to get tdls link vdev
360*5113495bSYour Name  * @vdev: vdev object
361*5113495bSYour Name  *
362*5113495bSYour Name  * Return: MLD tdls link vdev
363*5113495bSYour Name  */
364*5113495bSYour Name struct wlan_objmgr_vdev *
365*5113495bSYour Name wlan_mlo_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev);
366*5113495bSYour Name 
367*5113495bSYour Name /**
368*5113495bSYour Name  * ucfg_mlo_get_assoc_link_vdev - API to get assoc link vdev
369*5113495bSYour Name  * @vdev: vdev object
370*5113495bSYour Name  *
371*5113495bSYour Name  * Return: MLD assoc link vdev
372*5113495bSYour Name  */
373*5113495bSYour Name struct wlan_objmgr_vdev *
374*5113495bSYour Name ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev);
375*5113495bSYour Name 
376*5113495bSYour Name /**
377*5113495bSYour Name  * wlan_mlo_get_assoc_link_vdev - API to get assoc link vdev
378*5113495bSYour Name  * @vdev: vdev object
379*5113495bSYour Name  *
380*5113495bSYour Name  * Return: MLD assoc link vdev
381*5113495bSYour Name  */
382*5113495bSYour Name struct wlan_objmgr_vdev *
383*5113495bSYour Name wlan_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev);
384*5113495bSYour Name 
385*5113495bSYour Name /**
386*5113495bSYour Name  * mlo_update_connected_links_bmap: update connected links bitmap
387*5113495bSYour Name  * @mlo_dev_ctx: mlo dev context ptr
388*5113495bSYour Name  * @ml_partner_info: ml parnter info ptr
389*5113495bSYour Name  *
390*5113495bSYour Name  * Return: none
391*5113495bSYour Name  */
392*5113495bSYour Name void
393*5113495bSYour Name mlo_update_connected_links_bmap(struct wlan_mlo_dev_context *mlo_dev_ctx,
394*5113495bSYour Name 				struct mlo_partner_info ml_partner_info);
395*5113495bSYour Name 
396*5113495bSYour Name /**
397*5113495bSYour Name  * mlo_clear_connected_links_bmap() - clear connected links bitmap
398*5113495bSYour Name  * @vdev: vdev object
399*5113495bSYour Name  *
400*5113495bSYour Name  * Return: none
401*5113495bSYour Name  */
402*5113495bSYour Name void mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev *vdev);
403*5113495bSYour Name 
404*5113495bSYour Name /**
405*5113495bSYour Name  * mlo_set_cu_bpcc() - set the bpcc per link id
406*5113495bSYour Name  * @vdev: vdev object
407*5113495bSYour Name  * @vdev_id: the id of vdev
408*5113495bSYour Name  * @bpcc: bss parameters change count
409*5113495bSYour Name  *
410*5113495bSYour Name  * Return: QDF_STATUS
411*5113495bSYour Name  */
412*5113495bSYour Name QDF_STATUS mlo_set_cu_bpcc(struct wlan_objmgr_vdev *vdev, uint8_t vdev_id,
413*5113495bSYour Name 			   uint8_t bpcc);
414*5113495bSYour Name 
415*5113495bSYour Name /**
416*5113495bSYour Name  * mlo_get_cu_bpcc() - get the bpcc per link id
417*5113495bSYour Name  * @vdev: vdev object
418*5113495bSYour Name  * @vdev_id: the id of vdev
419*5113495bSYour Name  * @bpcc: the bss parameters change count pointer to save value
420*5113495bSYour Name  *
421*5113495bSYour Name  * Return: QDF_STATUS
422*5113495bSYour Name  */
423*5113495bSYour Name QDF_STATUS mlo_get_cu_bpcc(struct wlan_objmgr_vdev *vdev, uint8_t vdev_id,
424*5113495bSYour Name 			   uint8_t *bpcc);
425*5113495bSYour Name 
426*5113495bSYour Name /**
427*5113495bSYour Name  * mlo_init_cu_bpcc() - initialize the bpcc for vdev
428*5113495bSYour Name  * @mlo_dev_ctx: wlan mlo dev context
429*5113495bSYour Name  * @vdev_id: vdev id
430*5113495bSYour Name  *
431*5113495bSYour Name  * Return: void
432*5113495bSYour Name  */
433*5113495bSYour Name void mlo_init_cu_bpcc(struct wlan_mlo_dev_context *mlo_dev_ctx,
434*5113495bSYour Name 		      uint8_t vdev_id);
435*5113495bSYour Name 
436*5113495bSYour Name /**
437*5113495bSYour Name  * mlo_clear_cu_bpcc() - clear the bpcc info
438*5113495bSYour Name  * @vdev: vdev object
439*5113495bSYour Name  *
440*5113495bSYour Name  * Return: void
441*5113495bSYour Name  */
442*5113495bSYour Name void mlo_clear_cu_bpcc(struct wlan_objmgr_vdev *vdev);
443*5113495bSYour Name 
444*5113495bSYour Name /**
445*5113495bSYour Name  * typedef mlo_vdev_op_handler() - API to have operation on ml vdevs
446*5113495bSYour Name  * @vdev: vdev object
447*5113495bSYour Name  * @arg: operation-specific argument
448*5113495bSYour Name  */
449*5113495bSYour Name typedef void (*mlo_vdev_op_handler)(struct wlan_objmgr_vdev *vdev,
450*5113495bSYour Name 				    void *arg);
451*5113495bSYour Name 
452*5113495bSYour Name /**
453*5113495bSYour Name  * mlo_iterate_connected_vdev_list: Iterate on connected ML links
454*5113495bSYour Name  * @vdev: vdev object
455*5113495bSYour Name  * @handler: the handler will be called for each object in ML list
456*5113495bSYour Name  * @arg: argument to be passed to handler
457*5113495bSYour Name  *
458*5113495bSYour Name  * Return: none
459*5113495bSYour Name  */
460*5113495bSYour Name static inline
mlo_iterate_connected_vdev_list(struct wlan_objmgr_vdev * vdev,mlo_vdev_op_handler handler,void * arg)461*5113495bSYour Name void mlo_iterate_connected_vdev_list(struct wlan_objmgr_vdev *vdev,
462*5113495bSYour Name 				     mlo_vdev_op_handler handler,
463*5113495bSYour Name 				     void *arg)
464*5113495bSYour Name {
465*5113495bSYour Name 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
466*5113495bSYour Name 	struct wlan_mlo_sta *sta_ctx = NULL;
467*5113495bSYour Name 	uint8_t i = 0;
468*5113495bSYour Name 
469*5113495bSYour Name 	if (!mlo_dev_ctx || !(wlan_vdev_mlme_is_mlo_vdev(vdev)))
470*5113495bSYour Name 		return;
471*5113495bSYour Name 
472*5113495bSYour Name 	sta_ctx = mlo_dev_ctx->sta_ctx;
473*5113495bSYour Name 	if (!sta_ctx)
474*5113495bSYour Name 		return;
475*5113495bSYour Name 
476*5113495bSYour Name 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
477*5113495bSYour Name 		if (!mlo_dev_ctx->wlan_vdev_list[i])
478*5113495bSYour Name 			continue;
479*5113495bSYour Name 		if (qdf_test_bit(i, sta_ctx->wlan_connected_links)) {
480*5113495bSYour Name 			if (handler)
481*5113495bSYour Name 				handler(mlo_dev_ctx->wlan_vdev_list[i], arg);
482*5113495bSYour Name 		}
483*5113495bSYour Name 	}
484*5113495bSYour Name }
485*5113495bSYour Name 
486*5113495bSYour Name /**
487*5113495bSYour Name  * call_handler_for_standalone_ap: Iterate on all standalone ML vdevs in
488*5113495bSYour Name  * ML AP context and call handler only for standalone AP
489*5113495bSYour Name  *
490*5113495bSYour Name  * @ap_dev_ctx: AP vdev context
491*5113495bSYour Name  * @handler: the handler will be called for each object in ML list
492*5113495bSYour Name  * @arg: argument to be passed to handler
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: none
495*5113495bSYour Name  */
496*5113495bSYour Name static inline void
call_handler_for_standalone_ap(struct wlan_mlo_dev_context * ap_dev_ctx,mlo_vdev_op_handler handler,void * arg)497*5113495bSYour Name call_handler_for_standalone_ap(struct wlan_mlo_dev_context *ap_dev_ctx,
498*5113495bSYour Name 			       mlo_vdev_op_handler handler, void *arg)
499*5113495bSYour Name {
500*5113495bSYour Name 	struct wlan_objmgr_vdev *ml_ap_vdev = NULL;
501*5113495bSYour Name 	int i;
502*5113495bSYour Name 
503*5113495bSYour Name 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
504*5113495bSYour Name 		/* For each vdev in ML AP context, check if its PDEV has any
505*5113495bSYour Name 		 * STA. If it doesn't, call the handler for that particular
506*5113495bSYour Name 		 * VDEV.
507*5113495bSYour Name 		 */
508*5113495bSYour Name 		if (!ap_dev_ctx->wlan_vdev_list[i])
509*5113495bSYour Name 			continue;
510*5113495bSYour Name 		ml_ap_vdev = ap_dev_ctx->wlan_vdev_list[i];
511*5113495bSYour Name 		handler(ml_ap_vdev, arg);
512*5113495bSYour Name 	}
513*5113495bSYour Name }
514*5113495bSYour Name 
515*5113495bSYour Name /**
516*5113495bSYour Name  * mlo_iterate_ml_standalone_vdev_list: Iterate on all standalone ML vdevs in
517*5113495bSYour Name  * ML link
518*5113495bSYour Name  *
519*5113495bSYour Name  * @vdev: vdev object
520*5113495bSYour Name  * @handler: the handler will be called for each object in ML list
521*5113495bSYour Name  * @arg: argument to be passed to handler
522*5113495bSYour Name  *
523*5113495bSYour Name  * Return: none
524*5113495bSYour Name  */
525*5113495bSYour Name static inline
mlo_iterate_ml_standalone_vdev_list(struct wlan_objmgr_vdev * vdev,mlo_vdev_op_handler handler,void * arg)526*5113495bSYour Name void mlo_iterate_ml_standalone_vdev_list(struct wlan_objmgr_vdev *vdev,
527*5113495bSYour Name 					 mlo_vdev_op_handler handler,
528*5113495bSYour Name 					 void *arg)
529*5113495bSYour Name {
530*5113495bSYour Name 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
531*5113495bSYour Name 	struct wlan_mlo_sta *sta_ctx = NULL;
532*5113495bSYour Name 	uint8_t i = 0;
533*5113495bSYour Name 	struct wlan_objmgr_pdev *pdev = NULL;
534*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev_temp = NULL;
535*5113495bSYour Name 	struct wlan_mlo_dev_context *ap_ml_ctx;
536*5113495bSYour Name 	qdf_list_t *vdev_list;
537*5113495bSYour Name 
538*5113495bSYour Name 	if (!mlo_dev_ctx || !(wlan_vdev_mlme_is_mlo_vdev(vdev)) || !handler)
539*5113495bSYour Name 		return;
540*5113495bSYour Name 
541*5113495bSYour Name 	sta_ctx = mlo_dev_ctx->sta_ctx;
542*5113495bSYour Name 	if (!sta_ctx)
543*5113495bSYour Name 		return;
544*5113495bSYour Name 
545*5113495bSYour Name 	/* If repeater is configured as dependent WDS repeater,
546*5113495bSYour Name 	 * bring up/bring down all the standalone AP vaps in it once all
547*5113495bSYour Name 	 * the other AP vaps present in the AP ML context are up/down.
548*5113495bSYour Name 	 */
549*5113495bSYour Name 
550*5113495bSYour Name 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
551*5113495bSYour Name 		if (!mlo_dev_ctx->wlan_vdev_list[i])
552*5113495bSYour Name 			continue;
553*5113495bSYour Name 
554*5113495bSYour Name 		pdev = wlan_vdev_get_pdev(mlo_dev_ctx->wlan_vdev_list[i]);
555*5113495bSYour Name 		vdev_list = &pdev->pdev_objmgr.wlan_vdev_list;
556*5113495bSYour Name 		vdev_temp = wlan_pdev_vdev_list_peek_head(vdev_list);
557*5113495bSYour Name 		while (vdev_temp) {
558*5113495bSYour Name 			// Get all VDEVs of the STA vap from its PDEV
559*5113495bSYour Name 			if ((vdev_temp != vdev) &&
560*5113495bSYour Name 			    wlan_vdev_mlme_get_opmode(vdev_temp) ==
561*5113495bSYour Name 			    QDF_SAP_MODE) {
562*5113495bSYour Name 				ap_ml_ctx = vdev_temp->mlo_dev_ctx;
563*5113495bSYour Name 				if (!ap_ml_ctx)
564*5113495bSYour Name 					return;
565*5113495bSYour Name 
566*5113495bSYour Name 				call_handler_for_standalone_ap(ap_ml_ctx,
567*5113495bSYour Name 							       handler, arg);
568*5113495bSYour Name 			}
569*5113495bSYour Name 
570*5113495bSYour Name 			vdev_temp = wlan_vdev_get_next_vdev_of_pdev(
571*5113495bSYour Name 							vdev_list, vdev_temp);
572*5113495bSYour Name 		}
573*5113495bSYour Name 	}
574*5113495bSYour Name }
575*5113495bSYour Name 
576*5113495bSYour Name /**
577*5113495bSYour Name  * mlo_update_connect_req_links: update connect req links index
578*5113495bSYour Name  * @vdev: vdev object
579*5113495bSYour Name  * @value: set/clear the bit
580*5113495bSYour Name  *
581*5113495bSYour Name  * Return: none
582*5113495bSYour Name  */
583*5113495bSYour Name static inline void
mlo_update_connect_req_links(struct wlan_objmgr_vdev * vdev,uint8_t value)584*5113495bSYour Name mlo_update_connect_req_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
585*5113495bSYour Name {
586*5113495bSYour Name 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
587*5113495bSYour Name 	struct wlan_mlo_sta *sta_ctx = NULL;
588*5113495bSYour Name 	uint8_t i = 0;
589*5113495bSYour Name 
590*5113495bSYour Name 	if (!mlo_dev_ctx)
591*5113495bSYour Name 		return;
592*5113495bSYour Name 
593*5113495bSYour Name 	sta_ctx = mlo_dev_ctx->sta_ctx;
594*5113495bSYour Name 	if (!sta_ctx)
595*5113495bSYour Name 		return;
596*5113495bSYour Name 
597*5113495bSYour Name 	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
598*5113495bSYour Name 		if (!mlo_dev_ctx->wlan_vdev_list[i])
599*5113495bSYour Name 			continue;
600*5113495bSYour Name 
601*5113495bSYour Name 		if (vdev == mlo_dev_ctx->wlan_vdev_list[i]) {
602*5113495bSYour Name 			if (value)
603*5113495bSYour Name 				qdf_set_bit(i, sta_ctx->wlan_connect_req_links);
604*5113495bSYour Name 			else
605*5113495bSYour Name 				qdf_clear_bit(
606*5113495bSYour Name 					i, sta_ctx->wlan_connect_req_links);
607*5113495bSYour Name 		}
608*5113495bSYour Name 	}
609*5113495bSYour Name }
610*5113495bSYour Name 
611*5113495bSYour Name /**
612*5113495bSYour Name  * mlo_is_vdev_connect_req_link: API to check if vdev is in active connection
613*5113495bSYour Name  * @vdev: vdev object
614*5113495bSYour Name  *
615*5113495bSYour Name  * Return: true is vdev is participating in active connect else false
616*5113495bSYour Name  */
617*5113495bSYour Name static inline bool
mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev * vdev)618*5113495bSYour Name mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev *vdev)
619*5113495bSYour Name {
620*5113495bSYour Name 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
621*5113495bSYour Name 	struct wlan_mlo_sta *sta_ctx = NULL;
622*5113495bSYour Name 
623*5113495bSYour Name 	if (!mlo_dev_ctx)
624*5113495bSYour Name 		return false;
625*5113495bSYour Name 
626*5113495bSYour Name 	sta_ctx = mlo_dev_ctx->sta_ctx;
627*5113495bSYour Name 	if (!sta_ctx)
628*5113495bSYour Name 		return false;
629*5113495bSYour Name 
630*5113495bSYour Name 	if (qdf_test_bit(
631*5113495bSYour Name 		mlo_get_link_vdev_ix(vdev->mlo_dev_ctx, vdev),
632*5113495bSYour Name 		sta_ctx->wlan_connect_req_links))
633*5113495bSYour Name 		return true;
634*5113495bSYour Name 
635*5113495bSYour Name 	return false;
636*5113495bSYour Name }
637*5113495bSYour Name 
638*5113495bSYour Name /**
639*5113495bSYour Name  * mlo_clear_connect_req_links_bmap() - clear connect req links bitmap
640*5113495bSYour Name  * @vdev: vdev object
641*5113495bSYour Name  *
642*5113495bSYour Name  * Return: none
643*5113495bSYour Name  */
644*5113495bSYour Name static inline
mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev * vdev)645*5113495bSYour Name void mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev *vdev)
646*5113495bSYour Name {
647*5113495bSYour Name 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
648*5113495bSYour Name 	struct wlan_mlo_sta *sta_ctx = NULL;
649*5113495bSYour Name 
650*5113495bSYour Name 	if (!mlo_dev_ctx)
651*5113495bSYour Name 		return;
652*5113495bSYour Name 
653*5113495bSYour Name 	sta_ctx = mlo_dev_ctx->sta_ctx;
654*5113495bSYour Name 	if (!sta_ctx)
655*5113495bSYour Name 		return;
656*5113495bSYour Name 
657*5113495bSYour Name 	qdf_mem_zero(sta_ctx->wlan_connect_req_links,
658*5113495bSYour Name 		     sizeof(sta_ctx->wlan_connect_req_links));
659*5113495bSYour Name }
660*5113495bSYour Name 
661*5113495bSYour Name /**
662*5113495bSYour Name  * mlo_update_connected_links: update connected links index
663*5113495bSYour Name  * @vdev: vdev object
664*5113495bSYour Name  * @value: set/clear the bit
665*5113495bSYour Name  *
666*5113495bSYour Name  * Return: none
667*5113495bSYour Name  */
668*5113495bSYour Name static inline void
mlo_update_connected_links(struct wlan_objmgr_vdev * vdev,uint8_t value)669*5113495bSYour Name mlo_update_connected_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
670*5113495bSYour Name {
671*5113495bSYour Name 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
672*5113495bSYour Name 	struct wlan_mlo_sta *sta_ctx = NULL;
673*5113495bSYour Name 	uint8_t i = 0;
674*5113495bSYour Name 
675*5113495bSYour Name 	if (!mlo_dev_ctx)
676*5113495bSYour Name 		return;
677*5113495bSYour Name 
678*5113495bSYour Name 	sta_ctx = mlo_dev_ctx->sta_ctx;
679*5113495bSYour Name 	if (!sta_ctx)
680*5113495bSYour Name 		return;
681*5113495bSYour Name 
682*5113495bSYour Name 	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
683*5113495bSYour Name 		if (!mlo_dev_ctx->wlan_vdev_list[i])
684*5113495bSYour Name 			continue;
685*5113495bSYour Name 
686*5113495bSYour Name 		if (vdev == mlo_dev_ctx->wlan_vdev_list[i]) {
687*5113495bSYour Name 			if (value)
688*5113495bSYour Name 				qdf_set_bit(i, sta_ctx->wlan_connected_links);
689*5113495bSYour Name 			else
690*5113495bSYour Name 				qdf_clear_bit(i, sta_ctx->wlan_connected_links);
691*5113495bSYour Name 		}
692*5113495bSYour Name 	}
693*5113495bSYour Name }
694*5113495bSYour Name 
695*5113495bSYour Name #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
696*5113495bSYour Name /**
697*5113495bSYour Name  * mlo_get_ml_vdev_by_mac: get ml vdev from mac
698*5113495bSYour Name  * @vdev: vdev object
699*5113495bSYour Name  * @macaddr: mac of vdev to be returned
700*5113495bSYour Name  *
701*5113495bSYour Name  * Return: vdev object if found else NULL
702*5113495bSYour Name  */
703*5113495bSYour Name struct wlan_objmgr_vdev *
704*5113495bSYour Name mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,
705*5113495bSYour Name 		       struct qdf_mac_addr *macaddr);
706*5113495bSYour Name #endif
707*5113495bSYour Name 
708*5113495bSYour Name /**
709*5113495bSYour Name  * mlo_get_chan_freq_by_bssid - Get channel freq by bssid
710*5113495bSYour Name  * @pdev: pdev pointer
711*5113495bSYour Name  * @bssid: link mac address
712*5113495bSYour Name  *
713*5113495bSYour Name  * Return: chan frequency
714*5113495bSYour Name  */
715*5113495bSYour Name qdf_freq_t
716*5113495bSYour Name mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev *pdev,
717*5113495bSYour Name 			   struct qdf_mac_addr *bssid);
718*5113495bSYour Name 
719*5113495bSYour Name /**
720*5113495bSYour Name  * mlo_get_assoc_rsp - Get Assoc response from mlo manager
721*5113495bSYour Name  * @vdev: vdev obj mgr
722*5113495bSYour Name  * @assoc_rsp_frame: association response frame ptr
723*5113495bSYour Name  *
724*5113495bSYour Name  * Return: none
725*5113495bSYour Name  */
726*5113495bSYour Name void mlo_get_assoc_rsp(struct wlan_objmgr_vdev *vdev,
727*5113495bSYour Name 		       struct element_info *assoc_rsp_frame);
728*5113495bSYour Name 
729*5113495bSYour Name /**
730*5113495bSYour Name  * mlo_sta_save_quiet_status - save quiet status for given link of mlo station
731*5113495bSYour Name  * @mlo_dev_ctx: mlo context
732*5113495bSYour Name  * @link_id: link id
733*5113495bSYour Name  * @quiet_status: True if quiet starts. False if quiet stops.
734*5113495bSYour Name  *
735*5113495bSYour Name  * Return: QDF_STATUS
736*5113495bSYour Name  */
737*5113495bSYour Name QDF_STATUS mlo_sta_save_quiet_status(struct wlan_mlo_dev_context *mlo_dev_ctx,
738*5113495bSYour Name 				     uint8_t link_id,
739*5113495bSYour Name 				     bool quiet_status);
740*5113495bSYour Name 
741*5113495bSYour Name /**
742*5113495bSYour Name  * mlo_is_sta_in_quiet_status - is the link of given mlo sta is in quiet status
743*5113495bSYour Name  * @mlo_dev_ctx: mlo context
744*5113495bSYour Name  * @link_id: link id
745*5113495bSYour Name  *
746*5113495bSYour Name  * Return: true if the link of given mlo sta is in quiet status
747*5113495bSYour Name  */
748*5113495bSYour Name bool mlo_is_sta_in_quiet_status(struct wlan_mlo_dev_context *mlo_dev_ctx,
749*5113495bSYour Name 				uint8_t link_id);
750*5113495bSYour Name 
751*5113495bSYour Name /**
752*5113495bSYour Name  * mlo_is_sta_inactivity_allowed_with_quiet() - Is link OK to force inactivity
753*5113495bSYour Name  *                                              based on current quiet status
754*5113495bSYour Name  *                                              of mlo connection
755*5113495bSYour Name  * @psoc: pointer to psoc
756*5113495bSYour Name  * @vdev_id_list: vdev id list
757*5113495bSYour Name  * @num_mlo: number of mlo vdev
758*5113495bSYour Name  * @mlo_idx: list of index of vdev_id_list if it is vdev id of mlo vdev
759*5113495bSYour Name  * @affected_links: number of links to be set inactivity
760*5113495bSYour Name  * @affected_list: list of vdev id to be set inactivity
761*5113495bSYour Name  *
762*5113495bSYour Name  * Return: true if any link not in mlo_vdev_list is not in quiet mode
763*5113495bSYour Name  */
764*5113495bSYour Name bool mlo_is_sta_inactivity_allowed_with_quiet(struct wlan_objmgr_psoc *psoc,
765*5113495bSYour Name 					      uint8_t *vdev_id_list,
766*5113495bSYour Name 					      uint8_t num_mlo, uint8_t *mlo_idx,
767*5113495bSYour Name 					      uint8_t affected_links,
768*5113495bSYour Name 					      uint8_t *affected_list);
769*5113495bSYour Name 
770*5113495bSYour Name /**
771*5113495bSYour Name  * mlo_is_sta_csa_synced - Is mlo sta csa parameters are synced or not
772*5113495bSYour Name  * @mlo_dev_ctx: mlo context
773*5113495bSYour Name  * @link_id: link id
774*5113495bSYour Name  *
775*5113495bSYour Name  * Return: true if mlo sta csa parameters of given link id is synced
776*5113495bSYour Name  */
777*5113495bSYour Name bool mlo_is_sta_csa_synced(struct wlan_mlo_dev_context *mlo_dev_ctx,
778*5113495bSYour Name 			   uint8_t link_id);
779*5113495bSYour Name 
780*5113495bSYour Name /**
781*5113495bSYour Name  * mlo_sta_csa_save_params - Save csa parameters for mlo station
782*5113495bSYour Name  * @mlo_dev_ctx: mlo context
783*5113495bSYour Name  * @link_id: link id
784*5113495bSYour Name  * @csa_param: csa parameters to be saved
785*5113495bSYour Name  *
786*5113495bSYour Name  * Return: QDF_STATUS
787*5113495bSYour Name  */
788*5113495bSYour Name QDF_STATUS mlo_sta_csa_save_params(struct wlan_mlo_dev_context *mlo_dev_ctx,
789*5113495bSYour Name 				   uint8_t link_id,
790*5113495bSYour Name 				   struct csa_offload_params *csa_param);
791*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
792*5113495bSYour Name /**
793*5113495bSYour Name  * mlo_sta_handle_csa_standby_link - Handle csa parameters for standby link
794*5113495bSYour Name  * @mlo_dev_ctx: mlo context
795*5113495bSYour Name  * @link_id: link id
796*5113495bSYour Name  * @csa_param: csa parameters to be saved
797*5113495bSYour Name  * @vdev: vdev obj mgr
798*5113495bSYour Name  *
799*5113495bSYour Name  * Return: QDF_STATUS
800*5113495bSYour Name  */
801*5113495bSYour Name QDF_STATUS mlo_sta_handle_csa_standby_link(
802*5113495bSYour Name 			struct wlan_mlo_dev_context *mlo_dev_ctx,
803*5113495bSYour Name 			uint8_t link_id,
804*5113495bSYour Name 			struct csa_offload_params *csa_param,
805*5113495bSYour Name 			struct wlan_objmgr_vdev *vdev);
806*5113495bSYour Name #else
807*5113495bSYour Name static inline
mlo_sta_handle_csa_standby_link(struct wlan_mlo_dev_context * mlo_dev_ctx,uint8_t link_id,struct csa_offload_params * csa_param,struct wlan_objmgr_vdev * vdev)808*5113495bSYour Name QDF_STATUS mlo_sta_handle_csa_standby_link(
809*5113495bSYour Name 			struct wlan_mlo_dev_context *mlo_dev_ctx,
810*5113495bSYour Name 			uint8_t link_id,
811*5113495bSYour Name 			struct csa_offload_params *csa_param,
812*5113495bSYour Name 			struct wlan_objmgr_vdev *vdev)
813*5113495bSYour Name {
814*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
815*5113495bSYour Name }
816*5113495bSYour Name #endif
817*5113495bSYour Name /**
818*5113495bSYour Name  * mlo_sta_up_active_notify - mlo sta up active notify
819*5113495bSYour Name  * @vdev: vdev obj mgr
820*5113495bSYour Name  *
821*5113495bSYour Name  * Return: QDF_STATUS
822*5113495bSYour Name  */
823*5113495bSYour Name QDF_STATUS mlo_sta_up_active_notify(struct wlan_objmgr_vdev *vdev);
824*5113495bSYour Name 
825*5113495bSYour Name /**
826*5113495bSYour Name  * mlo_is_sta_csa_param_handled - Is given csa_param handled or not
827*5113495bSYour Name  * @vdev: vdev obj mgr
828*5113495bSYour Name  * @csa_param: csa parameters to be checked
829*5113495bSYour Name  *
830*5113495bSYour Name  * Return: true if given csa parameters is handled
831*5113495bSYour Name  */
832*5113495bSYour Name bool mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
833*5113495bSYour Name 				  struct csa_offload_params *csa_param);
834*5113495bSYour Name 
835*5113495bSYour Name /**
836*5113495bSYour Name  * mlo_internal_disconnect_links - Internal disconnect for connection manager
837*5113495bSYour Name  * @vdev: vdev obj mgr
838*5113495bSYour Name  *
839*5113495bSYour Name  * Return: none
840*5113495bSYour Name  */
841*5113495bSYour Name void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev);
842*5113495bSYour Name 
843*5113495bSYour Name /**
844*5113495bSYour Name  * mlo_sta_vdev_get_reconfig_timer_state() - Get ml reconfig timer state on
845*5113495bSYour Name  * vdev
846*5113495bSYour Name  * @vdev: vdev pointer
847*5113495bSYour Name  *
848*5113495bSYour Name  * Return: true if reconfig timer is active, otherwise false
849*5113495bSYour Name  */
850*5113495bSYour Name bool mlo_sta_vdev_get_reconfig_timer_state(struct wlan_objmgr_vdev *vdev);
851*5113495bSYour Name 
852*5113495bSYour Name /**
853*5113495bSYour Name  * mlo_sta_stop_reconfig_timer_by_vdev() - Stop ml reconfig timer
854*5113495bSYour Name  * @vdev: vdev pointer
855*5113495bSYour Name  *
856*5113495bSYour Name  * Return: None
857*5113495bSYour Name  */
858*5113495bSYour Name void mlo_sta_stop_reconfig_timer_by_vdev(struct wlan_objmgr_vdev *vdev);
859*5113495bSYour Name 
860*5113495bSYour Name /**
861*5113495bSYour Name  * mlo_sta_stop_reconfig_timer() - Stop reconfig timer on all vdev on ml dev
862*5113495bSYour Name  * @vdev: vdev pointer
863*5113495bSYour Name  *
864*5113495bSYour Name  * Return: None
865*5113495bSYour Name  */
866*5113495bSYour Name void mlo_sta_stop_reconfig_timer(struct wlan_objmgr_vdev *vdev);
867*5113495bSYour Name 
868*5113495bSYour Name /**
869*5113495bSYour Name  * mlo_sta_get_vdev_list() - get mlo vdev list
870*5113495bSYour Name  * @vdev: vdev pointer
871*5113495bSYour Name  * @vdev_count: vdev count
872*5113495bSYour Name  * @wlan_vdev_list: vdev list
873*5113495bSYour Name  *
874*5113495bSYour Name  * Return: None
875*5113495bSYour Name  */
876*5113495bSYour Name void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, uint16_t *vdev_count,
877*5113495bSYour Name 			   struct wlan_objmgr_vdev **wlan_vdev_list);
878*5113495bSYour Name 
879*5113495bSYour Name /**
880*5113495bSYour Name  * mlo_process_ml_reconfig_ie() - process ml reconfig ie for vdev
881*5113495bSYour Name  * @vdev: vdev pointer
882*5113495bSYour Name  * @scan_entry: RootAP scan entry
883*5113495bSYour Name  * @ml_ie: Pointer to ML IE
884*5113495bSYour Name  * @ml_ie_len: Length of ML IE
885*5113495bSYour Name  * @partner_info: Cached partner info
886*5113495bSYour Name  *
887*5113495bSYour Name  * Return: None
888*5113495bSYour Name  */
889*5113495bSYour Name void mlo_process_ml_reconfig_ie(struct wlan_objmgr_vdev *vdev,
890*5113495bSYour Name 				struct scan_cache_entry *scan_entry,
891*5113495bSYour Name 				uint8_t *ml_ie, qdf_size_t ml_ie_len,
892*5113495bSYour Name 				struct mlo_partner_info *partner_info);
893*5113495bSYour Name 
894*5113495bSYour Name /**
895*5113495bSYour Name  * wlan_mlo_send_vdev_pause() - send MLO vdev pause to FW
896*5113495bSYour Name  * @psoc: pointer to psoc
897*5113495bSYour Name  * @vdev: vdev pointer
898*5113495bSYour Name  * @session_id: session ID
899*5113495bSYour Name  * @vdev_pause_dur: vdev pause duration
900*5113495bSYour Name  *
901*5113495bSYour Name  * Return: None
902*5113495bSYour Name  */
903*5113495bSYour Name void wlan_mlo_send_vdev_pause(struct wlan_objmgr_psoc *psoc,
904*5113495bSYour Name 			      struct wlan_objmgr_vdev *vdev,
905*5113495bSYour Name 			      uint16_t session_id,
906*5113495bSYour Name 			      uint16_t vdev_pause_dur);
907*5113495bSYour Name 
908*5113495bSYour Name /**
909*5113495bSYour Name  * mlo_allocate_and_copy_ies() - allocate and copy ies
910*5113495bSYour Name  * @target: target connect req pointer
911*5113495bSYour Name  * @source: source connect req pointer
912*5113495bSYour Name  *
913*5113495bSYour Name  * Return: None
914*5113495bSYour Name  */
915*5113495bSYour Name void
916*5113495bSYour Name mlo_allocate_and_copy_ies(struct wlan_cm_connect_req *target,
917*5113495bSYour Name 			  struct wlan_cm_connect_req *source);
918*5113495bSYour Name 
919*5113495bSYour Name /**
920*5113495bSYour Name  * mlo_free_connect_ies() - free connect ies
921*5113495bSYour Name  * @connect_req: connect req pointer
922*5113495bSYour Name  *
923*5113495bSYour Name  * Return: None
924*5113495bSYour Name  */
925*5113495bSYour Name void
926*5113495bSYour Name mlo_free_connect_ies(struct wlan_cm_connect_req *connect_req);
927*5113495bSYour Name 
928*5113495bSYour Name /**
929*5113495bSYour Name  * mlo_get_link_state_context() - get ml link context
930*5113495bSYour Name  * @psoc: psoc handler
931*5113495bSYour Name  * @resp_cb: api to handle link state callback
932*5113495bSYour Name  * @context: response context
933*5113495bSYour Name  * @vdev_id: vdev id
934*5113495bSYour Name  */
935*5113495bSYour Name QDF_STATUS
936*5113495bSYour Name mlo_get_link_state_context(struct wlan_objmgr_psoc *psoc,
937*5113495bSYour Name 			   get_ml_link_state_cb *resp_cb,
938*5113495bSYour Name 			   void **context, uint8_t vdev_id);
939*5113495bSYour Name #else
940*5113495bSYour Name static inline
mlo_clear_bridge_sta_ctx(struct wlan_objmgr_vdev * vdev)941*5113495bSYour Name void mlo_clear_bridge_sta_ctx(struct wlan_objmgr_vdev *vdev)
942*5113495bSYour Name { }
943*5113495bSYour Name 
944*5113495bSYour Name static inline
mlo_set_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bss_mld_addr)945*5113495bSYour Name void mlo_set_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev *vdev,
946*5113495bSYour Name 				  struct qdf_mac_addr *bss_mld_addr)
947*5113495bSYour Name { }
948*5113495bSYour Name 
949*5113495bSYour Name static inline
mlo_get_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev * vdev)950*5113495bSYour Name struct qdf_mac_addr *mlo_get_sta_ctx_bss_mld_addr(struct wlan_objmgr_vdev *vdev)
951*5113495bSYour Name {
952*5113495bSYour Name 	return NULL;
953*5113495bSYour Name }
954*5113495bSYour Name 
955*5113495bSYour Name static inline
mlo_is_sta_bridge_vdev(struct wlan_objmgr_vdev * vdev)956*5113495bSYour Name bool mlo_is_sta_bridge_vdev(struct wlan_objmgr_vdev *vdev)
957*5113495bSYour Name {
958*5113495bSYour Name 	return false;
959*5113495bSYour Name }
960*5113495bSYour Name 
961*5113495bSYour Name static inline
mlo_sta_bridge_exists(struct wlan_objmgr_vdev * vdev)962*5113495bSYour Name bool mlo_sta_bridge_exists(struct wlan_objmgr_vdev *vdev)
963*5113495bSYour Name {
964*5113495bSYour Name 	return false;
965*5113495bSYour Name }
966*5113495bSYour Name 
967*5113495bSYour Name static inline
mlo_is_force_central_primary(struct wlan_objmgr_vdev * vdev)968*5113495bSYour Name bool mlo_is_force_central_primary(struct wlan_objmgr_vdev *vdev)
969*5113495bSYour Name {
970*5113495bSYour Name 	return false;
971*5113495bSYour Name }
972*5113495bSYour Name 
973*5113495bSYour Name static inline
mlo_connect(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_req * req)974*5113495bSYour Name QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
975*5113495bSYour Name 		       struct wlan_cm_connect_req *req)
976*5113495bSYour Name {
977*5113495bSYour Name 	return wlan_cm_start_connect(vdev, req);
978*5113495bSYour Name }
979*5113495bSYour Name 
980*5113495bSYour Name static inline
mlo_sta_link_connect_notify(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_resp * rsp)981*5113495bSYour Name void mlo_sta_link_connect_notify(struct wlan_objmgr_vdev *vdev,
982*5113495bSYour Name 				 struct wlan_cm_connect_resp *rsp)
983*5113495bSYour Name { }
984*5113495bSYour Name 
985*5113495bSYour Name static inline
mlo_disconnect(struct wlan_objmgr_vdev * vdev,enum wlan_cm_source source,enum wlan_reason_code reason_code,struct qdf_mac_addr * bssid)986*5113495bSYour Name QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
987*5113495bSYour Name 			  enum wlan_cm_source source,
988*5113495bSYour Name 			  enum wlan_reason_code reason_code,
989*5113495bSYour Name 			  struct qdf_mac_addr *bssid)
990*5113495bSYour Name {
991*5113495bSYour Name 	QDF_STATUS status;
992*5113495bSYour Name 
993*5113495bSYour Name 	status = wlan_cm_disconnect(vdev, source,
994*5113495bSYour Name 				    reason_code,
995*5113495bSYour Name 				    bssid);
996*5113495bSYour Name 	return status;
997*5113495bSYour Name }
998*5113495bSYour Name 
999*5113495bSYour Name static inline
mlo_sync_disconnect(struct wlan_objmgr_vdev * vdev,enum wlan_cm_source source,enum wlan_reason_code reason_code,struct qdf_mac_addr * bssid)1000*5113495bSYour Name QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
1001*5113495bSYour Name 			       enum wlan_cm_source source,
1002*5113495bSYour Name 			       enum wlan_reason_code reason_code,
1003*5113495bSYour Name 			       struct qdf_mac_addr *bssid)
1004*5113495bSYour Name {
1005*5113495bSYour Name 	return wlan_cm_disconnect_sync(vdev, CM_OSIF_DISCONNECT,
1006*5113495bSYour Name 				       reason_code);
1007*5113495bSYour Name }
1008*5113495bSYour Name 
1009*5113495bSYour Name static inline
mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev * vdev,struct wlan_cm_discon_rsp * resp)1010*5113495bSYour Name void mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev *vdev,
1011*5113495bSYour Name 				 struct wlan_cm_discon_rsp *resp)
1012*5113495bSYour Name { }
1013*5113495bSYour Name 
1014*5113495bSYour Name #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
1015*5113495bSYour Name static inline
ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev * vdev)1016*5113495bSYour Name bool ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev *vdev)
1017*5113495bSYour Name {
1018*5113495bSYour Name 	return true;
1019*5113495bSYour Name }
1020*5113495bSYour Name 
1021*5113495bSYour Name static inline
ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev * vdev)1022*5113495bSYour Name bool ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev *vdev)
1023*5113495bSYour Name {
1024*5113495bSYour Name 	return true;
1025*5113495bSYour Name }
1026*5113495bSYour Name #endif
1027*5113495bSYour Name 
1028*5113495bSYour Name static inline
mlo_is_mld_disconnecting_connecting(struct wlan_objmgr_vdev * vdev)1029*5113495bSYour Name bool mlo_is_mld_disconnecting_connecting(struct wlan_objmgr_vdev *vdev)
1030*5113495bSYour Name {
1031*5113495bSYour Name 	return false;
1032*5113495bSYour Name }
1033*5113495bSYour Name 
1034*5113495bSYour Name static inline
mlo_is_ml_connection_in_progress(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1035*5113495bSYour Name bool mlo_is_ml_connection_in_progress(struct wlan_objmgr_psoc *psoc,
1036*5113495bSYour Name 				      uint8_t vdev_id)
1037*5113495bSYour Name {
1038*5113495bSYour Name 	return false;
1039*5113495bSYour Name }
1040*5113495bSYour Name 
1041*5113495bSYour Name static inline
mlo_is_mld_sta(struct wlan_objmgr_vdev * vdev)1042*5113495bSYour Name bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev)
1043*5113495bSYour Name {
1044*5113495bSYour Name 	return false;
1045*5113495bSYour Name }
1046*5113495bSYour Name 
1047*5113495bSYour Name static inline
1048*5113495bSYour Name struct wlan_objmgr_vdev *
ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev * vdev)1049*5113495bSYour Name ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev)
1050*5113495bSYour Name {
1051*5113495bSYour Name 	return vdev;
1052*5113495bSYour Name }
1053*5113495bSYour Name 
1054*5113495bSYour Name static inline void
mlo_update_connect_req_links(struct wlan_objmgr_vdev * vdev,uint8_t value)1055*5113495bSYour Name mlo_update_connect_req_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
1056*5113495bSYour Name { }
1057*5113495bSYour Name 
1058*5113495bSYour Name static inline void
mlo_update_connected_links_bmap(struct wlan_mlo_dev_context * mlo_dev_ctx,struct mlo_partner_info ml_parnter_info)1059*5113495bSYour Name mlo_update_connected_links_bmap(struct wlan_mlo_dev_context *mlo_dev_ctx,
1060*5113495bSYour Name 				struct mlo_partner_info ml_parnter_info)
1061*5113495bSYour Name { }
1062*5113495bSYour Name 
1063*5113495bSYour Name static inline bool
mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev * vdev)1064*5113495bSYour Name mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev *vdev)
1065*5113495bSYour Name {
1066*5113495bSYour Name 	return true;
1067*5113495bSYour Name }
1068*5113495bSYour Name 
1069*5113495bSYour Name static inline void
mlo_update_connected_links(struct wlan_objmgr_vdev * vdev,uint8_t value)1070*5113495bSYour Name mlo_update_connected_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
1071*5113495bSYour Name { }
1072*5113495bSYour Name 
1073*5113495bSYour Name static inline void
mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev * vdev)1074*5113495bSYour Name mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev *vdev)
1075*5113495bSYour Name { }
1076*5113495bSYour Name 
1077*5113495bSYour Name static inline void
mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev * vdev)1078*5113495bSYour Name mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev *vdev)
1079*5113495bSYour Name { }
1080*5113495bSYour Name 
1081*5113495bSYour Name static inline struct wlan_objmgr_vdev *
mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * macaddr)1082*5113495bSYour Name mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,
1083*5113495bSYour Name 		       struct qdf_mac_addr *macaddr)
1084*5113495bSYour Name {
1085*5113495bSYour Name 	return vdev;
1086*5113495bSYour Name }
1087*5113495bSYour Name 
1088*5113495bSYour Name static inline qdf_freq_t
mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev * pdev,struct qdf_mac_addr * bssid)1089*5113495bSYour Name mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev *pdev,
1090*5113495bSYour Name 			   struct qdf_mac_addr *bssid)
1091*5113495bSYour Name {
1092*5113495bSYour Name 	return 0;
1093*5113495bSYour Name }
1094*5113495bSYour Name 
1095*5113495bSYour Name static inline void
mlo_get_assoc_rsp(struct wlan_objmgr_vdev * vdev,struct element_info * assoc_rsp_frame)1096*5113495bSYour Name mlo_get_assoc_rsp(struct wlan_objmgr_vdev *vdev,
1097*5113495bSYour Name 		  struct element_info *assoc_rsp_frame)
1098*5113495bSYour Name {
1099*5113495bSYour Name }
1100*5113495bSYour Name 
1101*5113495bSYour Name static inline bool
mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev * vdev,struct csa_offload_params * csa_param)1102*5113495bSYour Name mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
1103*5113495bSYour Name 			     struct csa_offload_params *csa_param)
1104*5113495bSYour Name {
1105*5113495bSYour Name 	return false;
1106*5113495bSYour Name }
1107*5113495bSYour Name 
mlo_internal_disconnect_links(struct wlan_objmgr_vdev * vdev)1108*5113495bSYour Name static inline void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev)
1109*5113495bSYour Name {
1110*5113495bSYour Name }
1111*5113495bSYour Name 
1112*5113495bSYour Name static inline
mlo_sta_get_vdev_list(struct wlan_objmgr_vdev * vdev,uint16_t * vdev_count,struct wlan_objmgr_vdev ** wlan_vdev_list)1113*5113495bSYour Name void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev,
1114*5113495bSYour Name 			   uint16_t *vdev_count,
1115*5113495bSYour Name 			   struct wlan_objmgr_vdev **wlan_vdev_list)
1116*5113495bSYour Name {
1117*5113495bSYour Name }
1118*5113495bSYour Name 
1119*5113495bSYour Name static inline bool
mlo_sta_vdev_get_reconfig_timer_state(struct wlan_objmgr_vdev * vdev)1120*5113495bSYour Name mlo_sta_vdev_get_reconfig_timer_state(struct wlan_objmgr_vdev *vdev)
1121*5113495bSYour Name {
1122*5113495bSYour Name 	return false;
1123*5113495bSYour Name }
1124*5113495bSYour Name 
1125*5113495bSYour Name static inline void
mlo_sta_stop_reconfig_timer_by_vdev(struct wlan_objmgr_vdev * vdev)1126*5113495bSYour Name mlo_sta_stop_reconfig_timer_by_vdev(struct wlan_objmgr_vdev *vdev)
1127*5113495bSYour Name {
1128*5113495bSYour Name }
1129*5113495bSYour Name 
mlo_sta_stop_reconfig_timer(struct wlan_objmgr_vdev * vdev)1130*5113495bSYour Name static inline void mlo_sta_stop_reconfig_timer(struct wlan_objmgr_vdev *vdev)
1131*5113495bSYour Name {
1132*5113495bSYour Name }
1133*5113495bSYour Name 
1134*5113495bSYour Name static inline
mlo_process_ml_reconfig_ie(struct wlan_objmgr_vdev * vdev,struct scan_cache_entry * scan_entry,uint8_t * ml_ie,qdf_size_t ml_ie_len,struct mlo_partner_info * partner_info)1135*5113495bSYour Name void mlo_process_ml_reconfig_ie(struct wlan_objmgr_vdev *vdev,
1136*5113495bSYour Name 				struct scan_cache_entry *scan_entry,
1137*5113495bSYour Name 				uint8_t *ml_ie, qdf_size_t ml_ie_len,
1138*5113495bSYour Name 				struct mlo_partner_info *partner_info)
1139*5113495bSYour Name { }
1140*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
1141*5113495bSYour Name static inline QDF_STATUS
mlo_get_link_state_context(struct wlan_objmgr_psoc * psoc,get_ml_link_state_cb * resp_cb,void ** context,uint8_t vdev_id)1142*5113495bSYour Name mlo_get_link_state_context(struct wlan_objmgr_psoc *psoc,
1143*5113495bSYour Name 			   get_ml_link_state_cb *resp_cb,
1144*5113495bSYour Name 			   void **context, uint8_t vdev_id)
1145*5113495bSYour Name {
1146*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1147*5113495bSYour Name }
1148*5113495bSYour Name #endif
1149*5113495bSYour Name 
1150*5113495bSYour Name static inline
wlan_mlo_send_vdev_pause(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_vdev * vdev,uint16_t session_id,uint16_t vdev_pause_dur)1151*5113495bSYour Name void wlan_mlo_send_vdev_pause(struct wlan_objmgr_psoc *psoc,
1152*5113495bSYour Name 			      struct wlan_objmgr_vdev *vdev,
1153*5113495bSYour Name 			      uint16_t session_id,
1154*5113495bSYour Name 			      uint16_t vdev_pause_dur)
1155*5113495bSYour Name {}
1156*5113495bSYour Name #endif
1157*5113495bSYour Name 
1158*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO_ADV_FEATURE) && defined(WLAN_FEATURE_11BE_MLO)
1159*5113495bSYour Name /**
1160*5113495bSYour Name  * mlo_defer_set_keys: Defer MLO set keys for link
1161*5113495bSYour Name  * @vdev: vdev obj
1162*5113495bSYour Name  * @link_id: link_id
1163*5113495bSYour Name  * @value: bool true or false
1164*5113495bSYour Name  * Return: none
1165*5113495bSYour Name  */
1166*5113495bSYour Name void mlo_defer_set_keys(struct wlan_objmgr_vdev *vdev,
1167*5113495bSYour Name 			uint8_t link_id, bool value);
1168*5113495bSYour Name 
1169*5113495bSYour Name /**
1170*5113495bSYour Name  * mlo_is_set_key_defered: Verify whether the set key deferred for the link
1171*5113495bSYour Name  * @vdev: vdev obj
1172*5113495bSYour Name  * @link_id: link_id
1173*5113495bSYour Name  * Return: boolean value true or false
1174*5113495bSYour Name  */
1175*5113495bSYour Name bool mlo_is_set_key_defered(struct wlan_objmgr_vdev *vdev,
1176*5113495bSYour Name 			    uint8_t link_id);
1177*5113495bSYour Name 
1178*5113495bSYour Name /**
1179*5113495bSYour Name  * mlo_is_any_link_disconnecting: Check if any ML link is disconnecting
1180*5113495bSYour Name  * @vdev: vdev obj
1181*5113495bSYour Name  *
1182*5113495bSYour Name  * Check connection manager state machine if any ML link is disconnecting
1183*5113495bSYour Name  *
1184*5113495bSYour Name  * Return: boolean value true or false
1185*5113495bSYour Name  */
1186*5113495bSYour Name bool mlo_is_any_link_disconnecting(struct wlan_objmgr_vdev *vdev);
1187*5113495bSYour Name 
1188*5113495bSYour Name /**
1189*5113495bSYour Name  * mlo_set_chan_switch_in_progress: Set/clear the flag upon CSA at MLD level
1190*5113495bSYour Name  * @vdev: vdev obj
1191*5113495bSYour Name  * @val: Carries true if CSA is started on any of the ML links. This carries
1192*5113495bSYour Name  *       false once CSA is completed.
1193*5113495bSYour Name  *
1194*5113495bSYour Name  * This API is to set/clear the flag ml_chan_switch_in_progress upon
1195*5113495bSYour Name  * CSA start/CSA completion on any of the ML links.
1196*5113495bSYour Name  *
1197*5113495bSYour Name  * Return: QDF_STATUS
1198*5113495bSYour Name  */
1199*5113495bSYour Name QDF_STATUS
1200*5113495bSYour Name mlo_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev, bool val);
1201*5113495bSYour Name 
1202*5113495bSYour Name /**
1203*5113495bSYour Name  * mlo_is_chan_switch_in_progress: Check if ML level CSA flag is set
1204*5113495bSYour Name  * @vdev: vdev obj
1205*5113495bSYour Name  *
1206*5113495bSYour Name  * This API is to check the flag ml_chan_switch_in_progress upon
1207*5113495bSYour Name  * CSA start/CSA completion on any of the ML links.
1208*5113495bSYour Name  *
1209*5113495bSYour Name  * Return: True if flag ml_chan_switch_in_progress is set, false otherwise
1210*5113495bSYour Name  */
1211*5113495bSYour Name bool mlo_is_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev);
1212*5113495bSYour Name #else
1213*5113495bSYour Name static inline
mlo_defer_set_keys(struct wlan_objmgr_vdev * vdev,uint8_t link_id,bool value)1214*5113495bSYour Name void mlo_defer_set_keys(struct wlan_objmgr_vdev *vdev,
1215*5113495bSYour Name 			uint8_t link_id, bool value)
1216*5113495bSYour Name {
1217*5113495bSYour Name }
1218*5113495bSYour Name 
1219*5113495bSYour Name static inline
mlo_is_set_key_defered(struct wlan_objmgr_vdev * vdev,uint8_t link_id)1220*5113495bSYour Name bool mlo_is_set_key_defered(struct wlan_objmgr_vdev *vdev,
1221*5113495bSYour Name 			    uint8_t link_id)
1222*5113495bSYour Name {
1223*5113495bSYour Name 	return false;
1224*5113495bSYour Name }
1225*5113495bSYour Name 
1226*5113495bSYour Name static inline
mlo_is_any_link_disconnecting(struct wlan_objmgr_vdev * vdev)1227*5113495bSYour Name bool mlo_is_any_link_disconnecting(struct wlan_objmgr_vdev *vdev)
1228*5113495bSYour Name {
1229*5113495bSYour Name 	return false;
1230*5113495bSYour Name }
1231*5113495bSYour Name 
1232*5113495bSYour Name static inline QDF_STATUS
mlo_set_chan_switch_in_progress(struct wlan_objmgr_vdev * vdev,bool val)1233*5113495bSYour Name mlo_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev, bool val)
1234*5113495bSYour Name {
1235*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
1236*5113495bSYour Name }
1237*5113495bSYour Name 
1238*5113495bSYour Name static inline bool
mlo_is_chan_switch_in_progress(struct wlan_objmgr_vdev * vdev)1239*5113495bSYour Name mlo_is_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev)
1240*5113495bSYour Name {
1241*5113495bSYour Name 	return false;
1242*5113495bSYour Name }
1243*5113495bSYour Name #endif
1244*5113495bSYour Name 
1245*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
1246*5113495bSYour Name /**
1247*5113495bSYour Name  * mlo_mgr_get_per_link_chan_info: Get wlan channel info per link id
1248*5113495bSYour Name  * @vdev: vdev obj
1249*5113495bSYour Name  * @link_id: link id
1250*5113495bSYour Name  * @chan_info: wlan channel info buffer
1251*5113495bSYour Name  *
1252*5113495bSYour Name  * Return: zero for success, non-zero for failure
1253*5113495bSYour Name  */
1254*5113495bSYour Name int mlo_mgr_get_per_link_chan_info(struct wlan_objmgr_vdev *vdev, int link_id,
1255*5113495bSYour Name 				   struct wlan_channel *chan_info);
1256*5113495bSYour Name #else
1257*5113495bSYour Name static inline int
mlo_mgr_get_per_link_chan_info(struct wlan_objmgr_vdev * vdev,int link_id,struct wlan_channel * chan_info)1258*5113495bSYour Name mlo_mgr_get_per_link_chan_info(struct wlan_objmgr_vdev *vdev, int link_id,
1259*5113495bSYour Name 			       struct wlan_channel *chan_info)
1260*5113495bSYour Name {
1261*5113495bSYour Name 	return -EINVAL;
1262*5113495bSYour Name }
1263*5113495bSYour Name #endif
1264*5113495bSYour Name 
1265*5113495bSYour Name #endif
1266