xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h (revision 70a19e16789e308182f63b15c75decec7bf0b342)
1 /*
2  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 /*
19  * DOC: contains MLO manager public file containing STA functionality
20  */
21 #ifndef _WLAN_MLO_MGR_STA_H_
22 #define _WLAN_MLO_MGR_STA_H_
23 
24 #include <wlan_cm_ucfg_api.h>
25 #include <wlan_objmgr_vdev_obj.h>
26 #include <wlan_mlo_mgr_cmn.h>
27 #ifdef WLAN_FEATURE_11BE_MLO
28 #include <wlan_mlo_mgr_public_structs.h>
29 
30 /**
31  * mlo_connect - Start the connection process
32  * @vdev: pointer to vdev
33  * @req: connection request
34  *
35  * Return: QDF_STATUS
36  */
37 QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
38 		       struct wlan_cm_connect_req *req);
39 
40 /**
41  * mlo_sta_link_connect_notify - Called by connection manager to notify the
42  * STA link connect is complete
43  * @vdev: pointer to vdev
44  * @mlo_ie: MLO information element
45  *
46  * Connection manager will notify the MLO manager when the link has started
47  * and MLO manager will start the subsequent connections, if necessary
48  *
49  * Return: none
50  */
51 void
52 mlo_sta_link_connect_notify(struct wlan_objmgr_vdev *vdev,
53 			    struct wlan_cm_connect_resp *rsp);
54 
55 /**
56  * mlo_disconnect - Start the disconnection process
57  * @vdev: pointer to vdev
58  * @source: source of the request (can be connect or disconnect request)
59  * @reason_code: reason for disconnect
60  * @bssid: BSSID
61  *
62  * Return: QDF_STATUS
63  */
64 QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
65 			  enum wlan_cm_source source,
66 			  enum wlan_reason_code reason_code,
67 			  struct qdf_mac_addr *bssid);
68 
69 /**
70  * mlo_sync_disconnect - Start the sync disconnection process
71  * @vdev: pointer to vdev
72  * @source: source of the request (can be connect or disconnect request)
73  * @reason_code: reason for disconnect
74  * @bssid: BSSID
75  *
76  * Return: QDF_STATUS
77  */
78 QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
79 			       enum wlan_cm_source source,
80 			       enum wlan_reason_code reason_code,
81 			       struct qdf_mac_addr *bssid);
82 
83 /**
84  * mlo_sta_link_disconn_notify - Notifies that STA link disconnect completion
85  * @vdev: pointer to vdev
86  * @resp: disconnect resp
87  *
88  * Return: none
89  */
90 void mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev *vdev,
91 				 struct wlan_cm_discon_rsp *resp);
92 
93 /**
94  * mlo_handle_sta_link_connect_failure - Notifies that STA link connect failure
95  * @vdev: pointer to vdev
96  * @rsp: connect resp
97  *
98  * Return: none
99  */
100 void mlo_handle_sta_link_connect_failure(struct wlan_objmgr_vdev *vdev,
101 					 struct wlan_cm_connect_resp *rsp);
102 
103 /**
104  * mlo_handle_pending_disconnect - Handle pending disconnect if received
105  * while link connect is ongoing.
106  * @vdev: pointer to vdev
107  *
108  * Return: none
109  */
110 void mlo_handle_pending_disconnect(struct wlan_objmgr_vdev *vdev);
111 
112 /**
113  * mlo_is_mld_sta - Check if MLD associated with the vdev is a station
114  * @vdev: pointer to vdev
115  *
116  * Return: true if MLD is a station, false otherwise
117  */
118 bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev);
119 
120 /**
121  * ucfg_mlo_is_mld_disconnected - Check whether MLD is disconnected
122  * @vdev: pointer to vdev
123  *
124  * Return: true if mld is disconnected, false otherwise
125  */
126 bool ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev *vdev);
127 
128 /**
129  * mlo_is_mld_disconnecting_connecting - Check whether MLD is disconnecting or
130  * connecting
131  * @vdev: pointer to vdev
132  *
133  * Return: true if mld is disconnecting or connecting, false otherwise
134  */
135 bool mlo_is_mld_disconnecting_connecting(struct wlan_objmgr_vdev *vdev);
136 
137 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
138 /**
139  * ucfg_mlo_is_mld_connected - Check whether MLD is connected
140  * @vdev: pointer to vdev
141  *
142  * Return: true if mld is connected, false otherwise
143  */
144 bool ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev *vdev);
145 
146 /**
147  * ucfg_mlo_mld_clear_mlo_cap - Clear MLO cap for all vdevs in MLD
148  * @vdev: pointer to vdev
149  *
150  * Return: None
151  */
152 void ucfg_mlo_mld_clear_mlo_cap(struct wlan_objmgr_vdev *vdev);
153 #endif
154 
155 /**
156  * ucfg_mlo_get_assoc_link_vdev - API to get assoc link vdev
157  * @mlo_dev_ctx: mlo dev ctx
158  *
159  * Return: MLD assoc link vdev
160  */
161 struct wlan_objmgr_vdev *
162 ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev);
163 
164 /**
165  * wlan_mlo_get_assoc_link_vdev - API to get assoc link vdev
166  * @mlo_dev_ctx: mlo dev ctx
167  *
168  * Return: MLD assoc link vdev
169  */
170 struct wlan_objmgr_vdev *
171 wlan_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev);
172 
173 /**
174  * mlo_update_connected_links_bmap: update connected links bitmap
175  * @mlo_dev_ctx: mlo dev context ptr
176  * @ml_partner_info: ml parnter info ptr
177  *
178  * Return: none
179  */
180 void
181 mlo_update_connected_links_bmap(struct wlan_mlo_dev_context *mlo_dev_ctx,
182 				struct mlo_partner_info ml_parnter_info);
183 
184 /**
185  * mlo_clear_connected_links: clear connected links bitmap
186  * @vdev: vdev object
187  *
188  * Return: none
189  */
190 void mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev *vdev);
191 
192 /**
193  * API to have operation on ml vdevs
194  */
195 typedef void (*mlo_vdev_op_handler)(struct wlan_objmgr_vdev *vdev,
196 				    void *arg);
197 
198 /**
199  * mlo_iterate_connected_vdev_list: Iterate on connected ML links
200  * @vdev: vdev object
201  * @handler: the handler will be called for each object in ML list
202  * @arg: argument to be passed to handler
203  *
204  * Return: none
205  */
206 static inline
207 void mlo_iterate_connected_vdev_list(struct wlan_objmgr_vdev *vdev,
208 				     mlo_vdev_op_handler handler,
209 				     void *arg)
210 {
211 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
212 	struct wlan_mlo_sta *sta_ctx = NULL;
213 	uint8_t i = 0;
214 
215 	if (!mlo_dev_ctx || !(wlan_vdev_mlme_is_mlo_vdev(vdev)))
216 		return;
217 
218 	sta_ctx = mlo_dev_ctx->sta_ctx;
219 	if (!sta_ctx)
220 		return;
221 
222 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
223 		if (!mlo_dev_ctx->wlan_vdev_list[i])
224 			continue;
225 		if (qdf_test_bit(i, sta_ctx->wlan_connected_links)) {
226 			if (handler)
227 				handler(mlo_dev_ctx->wlan_vdev_list[i], arg);
228 		}
229 	}
230 }
231 
232 /**
233  * call_handler_for_standalone_ap: Iterate on all standalone ML vdevs in
234  * ML AP context and call handler only for standalone AP
235  *
236  * @vdev: vdev object
237  * @handler: the handler will be called for each object in ML list
238  * @arg: argument to be passed to handler
239  *
240  * Return: none
241  */
242 static inline void
243 call_handler_for_standalone_ap(struct wlan_mlo_dev_context *ap_dev_ctx,
244 			       mlo_vdev_op_handler handler, void *arg)
245 {
246 	struct wlan_objmgr_vdev *ml_ap_vdev = NULL;
247 	int i;
248 
249 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
250 		/* For each vdev in ML AP context, check if its PDEV has any
251 		 * STA. If it doesn't, call the handler for that particular
252 		 * VDEV.
253 		 */
254 		if (!ap_dev_ctx->wlan_vdev_list[i])
255 			continue;
256 		ml_ap_vdev = ap_dev_ctx->wlan_vdev_list[i];
257 		handler(ml_ap_vdev, arg);
258 	}
259 }
260 
261 /*
262  * mlo_iterate_ml_standalone_vdev_list: Iterate on all standalone ML vdevs in
263  * ML link
264  *
265  * @vdev: vdev object
266  * @handler: the handler will be called for each object in ML list
267  * @arg: argument to be passed to handler
268  *
269  * Return: none
270  */
271 static inline
272 void mlo_iterate_ml_standalone_vdev_list(struct wlan_objmgr_vdev *vdev,
273 					 mlo_vdev_op_handler handler,
274 					 void *arg)
275 {
276 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
277 	struct wlan_mlo_sta *sta_ctx = NULL;
278 	uint8_t i = 0;
279 	struct wlan_objmgr_pdev *pdev = NULL;
280 	struct wlan_objmgr_vdev *vdev_temp = NULL;
281 	struct wlan_mlo_dev_context *ap_ml_ctx;
282 	qdf_list_t *vdev_list;
283 
284 	if (!mlo_dev_ctx || !(wlan_vdev_mlme_is_mlo_vdev(vdev)) || !handler)
285 		return;
286 
287 	sta_ctx = mlo_dev_ctx->sta_ctx;
288 	if (!sta_ctx)
289 		return;
290 
291 	/* If repeater is configured as dependent WDS repeater,
292 	 * bring up/bring down all the standalone AP vaps in it once all
293 	 * the other AP vaps present in the AP ML context are up/down.
294 	 */
295 
296 	for (i =  0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
297 		if (!mlo_dev_ctx->wlan_vdev_list[i])
298 			continue;
299 
300 		pdev = wlan_vdev_get_pdev(mlo_dev_ctx->wlan_vdev_list[i]);
301 		vdev_list = &pdev->pdev_objmgr.wlan_vdev_list;
302 		vdev_temp = wlan_pdev_vdev_list_peek_head(vdev_list);
303 		while (vdev_temp) {
304 			// Get all VDEVs of the STA vap from its PDEV
305 			if ((vdev_temp != vdev) &&
306 			    wlan_vdev_mlme_get_opmode(vdev_temp) ==
307 			    QDF_SAP_MODE) {
308 				ap_ml_ctx = vdev_temp->mlo_dev_ctx;
309 				if (!ap_ml_ctx)
310 					return;
311 
312 				call_handler_for_standalone_ap(ap_ml_ctx,
313 							       handler, arg);
314 			}
315 
316 			vdev_temp = wlan_vdev_get_next_vdev_of_pdev(
317 							vdev_list, vdev_temp);
318 		}
319 	}
320 }
321 
322 /**
323  * mlo_update_connect_req_links: update connect req links index
324  * @vdev: vdev object
325  * @value: set/clear the bit
326  *
327  * Return: none
328  */
329 static inline void
330 mlo_update_connect_req_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
331 {
332 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
333 	struct wlan_mlo_sta *sta_ctx = NULL;
334 	uint8_t i = 0;
335 
336 	if (!mlo_dev_ctx)
337 		return;
338 
339 	sta_ctx = mlo_dev_ctx->sta_ctx;
340 	if (!sta_ctx)
341 		return;
342 
343 	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
344 		if (!mlo_dev_ctx->wlan_vdev_list[i])
345 			continue;
346 
347 		if (vdev == mlo_dev_ctx->wlan_vdev_list[i]) {
348 			if (value)
349 				qdf_set_bit(i, sta_ctx->wlan_connect_req_links);
350 			else
351 				qdf_clear_bit(
352 					i, sta_ctx->wlan_connect_req_links);
353 		}
354 	}
355 }
356 
357 /**
358  * mlo_is_vdev_connect_req_link: API to check if vdev is in active connection
359  * @vdev: vdev object
360  *
361  * Return: true is vdev is participating in active connect else false
362  */
363 static inline bool
364 mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev *vdev)
365 {
366 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
367 	struct wlan_mlo_sta *sta_ctx = NULL;
368 
369 	if (!mlo_dev_ctx)
370 		return false;
371 
372 	sta_ctx = mlo_dev_ctx->sta_ctx;
373 	if (!sta_ctx)
374 		return false;
375 
376 	if (qdf_test_bit(
377 		mlo_get_link_vdev_ix(vdev->mlo_dev_ctx, vdev),
378 		sta_ctx->wlan_connect_req_links))
379 		return true;
380 
381 	return false;
382 }
383 
384 /**
385  * mlo_clear_connect_req_links: clear connect req links bitmap
386  * @vdev: vdev object
387  *
388  * Return: none
389  */
390 static inline
391 void mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev *vdev)
392 {
393 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
394 	struct wlan_mlo_sta *sta_ctx = NULL;
395 
396 	if (!mlo_dev_ctx)
397 		return;
398 
399 	sta_ctx = mlo_dev_ctx->sta_ctx;
400 	if (!sta_ctx)
401 		return;
402 
403 	qdf_mem_zero(sta_ctx->wlan_connect_req_links,
404 		     sizeof(sta_ctx->wlan_connect_req_links));
405 }
406 
407 /**
408  * mlo_update_connected_links: update connected links index
409  * @vdev: vdev object
410  * @value: set/clear the bit
411  *
412  * Return: none
413  */
414 static inline void
415 mlo_update_connected_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
416 {
417 	struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
418 	struct wlan_mlo_sta *sta_ctx = NULL;
419 	uint8_t i = 0;
420 
421 	if (!mlo_dev_ctx)
422 		return;
423 
424 	sta_ctx = mlo_dev_ctx->sta_ctx;
425 	if (!sta_ctx)
426 		return;
427 
428 	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
429 		if (!mlo_dev_ctx->wlan_vdev_list[i])
430 			continue;
431 
432 		if (vdev == mlo_dev_ctx->wlan_vdev_list[i]) {
433 			if (value)
434 				qdf_set_bit(i, sta_ctx->wlan_connected_links);
435 			else
436 				qdf_clear_bit(i, sta_ctx->wlan_connected_links);
437 		}
438 	}
439 }
440 
441 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
442 /**
443  * mlo_get_ml_vdev_by_mac: get ml vdev from mac
444  * @vdev: vdev object
445  * @macaddr: mac of vdev to be returned
446  *
447  * Return: vdev object if found else NULL
448  */
449 struct wlan_objmgr_vdev *
450 mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,
451 		       struct qdf_mac_addr *macaddr);
452 #endif
453 
454 /**
455  * mlo_set_keys_saved: set mlo keys saved bool for vdev
456  * @vdev: vdev object
457  * @mac_address: peer mac address
458  * @value: bool true or false
459  * Return: none
460  */
461 void mlo_set_keys_saved(struct wlan_objmgr_vdev *vdev,
462 			struct qdf_mac_addr *mac_address, bool value);
463 
464 /**
465  * mlo_get_keys_saved: get if mlo keys are saved for vdev
466  * @vdev: vdev object
467  * @mac_address: peer mac address
468  * Return: boolean value true or false
469  */
470 bool mlo_get_keys_saved(struct wlan_objmgr_vdev *vdev, uint8_t *mac_address);
471 
472 /**
473  * mlo_get_chan_freq_by_bssid - Get channel freq by bssid
474  * @pdev: pdev pointer
475  * @bssid: link mac address
476  *
477  * Return: chan frequency
478  */
479 qdf_freq_t
480 mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev *pdev,
481 			   struct qdf_mac_addr *bssid);
482 
483 /**
484  * mlo_get_assoc_rsp - Get Assoc response from mlo manager
485  * @vdev: vdev obj mgr
486  * @assoc_rsp_frame: association response frame ptr
487  *
488  * Return: none
489  */
490 void mlo_get_assoc_rsp(struct wlan_objmgr_vdev *vdev,
491 		       struct element_info *assoc_rsp_frame);
492 
493 /**
494  * mlo_sta_save_quiet_status - save quiet status for given link of mlo station
495  * @mlo_dev_ctx: mlo context
496  * @link_id: link id
497  * @quiet_status: True if quiet starts. False if quiet stops.
498  *
499  * Return: QDF_STATUS
500  */
501 QDF_STATUS mlo_sta_save_quiet_status(struct wlan_mlo_dev_context *mlo_dev_ctx,
502 				     uint8_t link_id,
503 				     bool quiet_status);
504 
505 /**
506  * mlo_is_sta_in_quiet_status - is the link of given mlo sta is in quiet status
507  * @mlo_dev_ctx: mlo context
508  * @link_id: link id
509  *
510  * Return: true if the link of given mlo sta is in quiet status
511  */
512 bool mlo_is_sta_in_quiet_status(struct wlan_mlo_dev_context *mlo_dev_ctx,
513 				uint8_t link_id);
514 
515 /**
516  * mlo_is_sta_inactivity_allowed_with_quiet() - Is link OK to force inactivity
517  *                                              based on current quiet status
518  *                                              of mlo connection
519  * @psoc: pointer to psoc
520  * @vdev_id_list: vdev id list
521  * @num_mlo: number of mlo vdev
522  * @mlo_idx: list of index of vdev_id_list if it is vdev id of mlo vdev
523  * @affected_links: number of links to be set inactivity
524  * @affected_list: list of vdev id to be set inactivity
525  *
526  * Return: true if any link not in mlo_vdev_list is not in quiet mode
527  */
528 bool mlo_is_sta_inactivity_allowed_with_quiet(struct wlan_objmgr_psoc *psoc,
529 					      uint8_t *vdev_id_list,
530 					      uint8_t num_mlo, uint8_t *mlo_idx,
531 					      uint8_t affected_links,
532 					      uint8_t *affected_list);
533 
534 /**
535  * mlo_is_sta_csa_synced - Is mlo sta csa parameters are synced or not
536  * @mlo_dev_ctx: mlo context
537  * @link_id: link id
538  *
539  * Return: true if mlo sta csa parameters of given link id is synced
540  */
541 bool mlo_is_sta_csa_synced(struct wlan_mlo_dev_context *mlo_dev_ctx,
542 			   uint8_t link_id);
543 
544 /**
545  * mlo_sta_csa_save_params - Save csa parameters for mlo station
546  * @mlo_dev_ctx: mlo context
547  * @link_id: link id
548  * @csa_param: csa parameters to be saved
549  *
550  * Return: QDF_STATUS
551  */
552 QDF_STATUS mlo_sta_csa_save_params(struct wlan_mlo_dev_context *mlo_dev_ctx,
553 				   uint8_t link_id,
554 				   struct csa_offload_params *csa_param);
555 
556 /**
557  * mlo_sta_up_active_notify - mlo sta up active notify
558  * @vdev: vdev obj mgr
559  *
560  * Return: QDF_STATUS
561  */
562 QDF_STATUS mlo_sta_up_active_notify(struct wlan_objmgr_vdev *vdev);
563 
564 /**
565  * mlo_is_sta_csa_param_handled - Is given csa_param handled or not
566  * @vdev: vdev obj mgr
567  * @csa_param: csa parameters to be checked
568  *
569  * Return: true if given csa parameters is handled
570  */
571 bool mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
572 				  struct csa_offload_params *csa_param);
573 
574 /**
575  * mlo_internal_disconnect_links - Internal disconnect for connection manager
576  * @vdev: vdev obj mgr
577  *
578  * Return: none
579  */
580 void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev);
581 
582 /**
583  * mlo_sta_get_vdev_list() - get mlo vdev list
584  * @vdev: vdev pointer
585  * @vdev_count: vdev count
586  * @wlan_vdev_list: vdev list
587  *
588  * Return: None
589  */
590 void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, uint16_t *vdev_count,
591 			   struct wlan_objmgr_vdev **wlan_vdev_list);
592 
593 /**
594  * mlo_process_ml_reconfig_ie() - process ml reconfig ie for vdev
595  * @vdev: vdev pointer
596  * @scan_entry: RootAP scan entry
597  * @ml_ie: Pointer to ML IE
598  * @ml_ie_len: Length of ML IE
599  * @partner_info: Cached partner info
600  *
601  * Return: None
602  */
603 void mlo_process_ml_reconfig_ie(struct wlan_objmgr_vdev *vdev,
604 				struct scan_cache_entry *scan_entry,
605 				uint8_t *ml_ie, qdf_size_t ml_ie_len,
606 				struct mlo_partner_info *partner_info);
607 /**
608  * mlo_allocate_and_copy_ies() - allocate and copy ies
609  * @target: target connect req pointer
610  * @source: source connect req pointer
611  *
612  * Return: None
613  */
614 void
615 mlo_allocate_and_copy_ies(struct wlan_cm_connect_req *target,
616 			  struct wlan_cm_connect_req *source);
617 
618 /**
619  * mlo_free_connect_ies() - free connect ies
620  * @connect_req: connect req pointer
621  *
622  * Return: None
623  */
624 void
625 mlo_free_connect_ies(struct wlan_cm_connect_req *connect_req);
626 #else
627 static inline
628 QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
629 		       struct wlan_cm_connect_req *req)
630 {
631 	return wlan_cm_start_connect(vdev, req);
632 }
633 
634 static inline
635 void mlo_sta_link_connect_notify(struct wlan_objmgr_vdev *vdev,
636 				 struct wlan_cm_connect_resp *rsp)
637 { }
638 
639 static inline
640 QDF_STATUS mlo_disconnect(struct wlan_objmgr_vdev *vdev,
641 			  enum wlan_cm_source source,
642 			  enum wlan_reason_code reason_code,
643 			  struct qdf_mac_addr *bssid)
644 {
645 	QDF_STATUS status;
646 
647 	status = wlan_cm_disconnect(vdev, source,
648 				    reason_code,
649 				    bssid);
650 	return status;
651 }
652 
653 static inline
654 QDF_STATUS mlo_sync_disconnect(struct wlan_objmgr_vdev *vdev,
655 			       enum wlan_cm_source source,
656 			       enum wlan_reason_code reason_code,
657 			       struct qdf_mac_addr *bssid)
658 {
659 	return wlan_cm_disconnect_sync(vdev, CM_OSIF_DISCONNECT,
660 				       reason_code);
661 }
662 
663 static inline
664 void mlo_sta_link_disconn_notify(struct wlan_objmgr_vdev *vdev,
665 				 struct wlan_cm_discon_rsp *resp)
666 { }
667 
668 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
669 static inline
670 bool ucfg_mlo_is_mld_connected(struct wlan_objmgr_vdev *vdev)
671 {
672 	return true;
673 }
674 
675 static inline
676 bool ucfg_mlo_is_mld_disconnected(struct wlan_objmgr_vdev *vdev)
677 {
678 	return true;
679 }
680 #endif
681 
682 static inline
683 bool mlo_is_mld_disconnecting_connecting(struct wlan_objmgr_vdev *vdev)
684 {
685 	return false;
686 }
687 
688 static inline
689 bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev)
690 {
691 	return false;
692 }
693 
694 static inline
695 struct wlan_objmgr_vdev *
696 ucfg_mlo_get_assoc_link_vdev(struct wlan_objmgr_vdev *vdev)
697 {
698 	return vdev;
699 }
700 
701 static inline void
702 mlo_update_connect_req_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
703 { }
704 
705 static inline void
706 mlo_update_connected_links_bmap(struct wlan_mlo_dev_context *mlo_dev_ctx,
707 				struct mlo_partner_info ml_parnter_info)
708 { }
709 
710 static inline bool
711 mlo_is_vdev_connect_req_link(struct wlan_objmgr_vdev *vdev)
712 {
713 	return true;
714 }
715 
716 static inline void
717 mlo_update_connected_links(struct wlan_objmgr_vdev *vdev, uint8_t value)
718 { }
719 
720 static inline void
721 mlo_clear_connect_req_links_bmap(struct wlan_objmgr_vdev *vdev)
722 { }
723 
724 static inline void
725 mlo_clear_connected_links_bmap(struct wlan_objmgr_vdev *vdev)
726 { }
727 
728 static inline struct wlan_objmgr_vdev *
729 mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,
730 		       struct qdf_mac_addr *macaddr)
731 {
732 	return vdev;
733 }
734 
735 static inline qdf_freq_t
736 mlo_get_chan_freq_by_bssid(struct wlan_objmgr_pdev *pdev,
737 			   struct qdf_mac_addr *bssid)
738 {
739 	return 0;
740 }
741 
742 static inline void
743 mlo_get_assoc_rsp(struct wlan_objmgr_vdev *vdev,
744 		  struct element_info *assoc_rsp_frame)
745 {
746 }
747 
748 static inline bool
749 mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
750 			     struct csa_offload_params *csa_param)
751 {
752 	return false;
753 }
754 
755 static inline void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev)
756 {
757 }
758 
759 static inline
760 void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev,
761 			   uint16_t *vdev_count,
762 			   struct wlan_objmgr_vdev **wlan_vdev_list)
763 {
764 }
765 
766 static inline
767 void mlo_set_keys_saved(struct wlan_objmgr_vdev *vdev,
768 			struct qdf_mac_addr *mac_address, bool value)
769 {
770 }
771 
772 static inline
773 bool mlo_get_keys_saved(struct wlan_objmgr_vdev *vdev,
774 			uint8_t *mac_address)
775 {
776 	return false;
777 }
778 
779 static inline
780 void mlo_process_ml_reconfig_ie(struct wlan_objmgr_vdev *vdev,
781 				struct scan_cache_entry *scan_entry,
782 				uint8_t *ml_ie, qdf_size_t ml_ie_len,
783 				struct mlo_partner_info *partner_info)
784 { }
785 #endif
786 #endif
787