xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h (revision 959b66b917e2f07b1683b9e2b273aba33400252c)
1 /*
2  * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-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: wlan_cm_api.h
20  *
21  * This file maintains declarations of public apis
22  */
23 
24 #ifndef __WLAN_CM_API_H
25 #define __WLAN_CM_API_H
26 
27 #include "wlan_cm_public_struct.h"
28 #include "wlan_ext_mlme_obj_types.h"
29 
30 /**
31  * wlan_cm_start_connect() - connect start request
32  * @vdev: vdev pointer
33  * @req: connect req
34  *
35  * Return: QDF_STATUS
36  */
37 QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev,
38 				 struct wlan_cm_connect_req *req);
39 
40 /**
41  * wlan_cm_disconnect() - disconnect start request
42  * @vdev: vdev pointer
43  * @source: disconnect source
44  * @reason_code: disconnect reason
45  * @bssid: bssid of AP to disconnect, can be null if not known
46  *
47  * Context: can be called from any context
48  *
49  * Return: QDF_STATUS
50  */
51 QDF_STATUS wlan_cm_disconnect(struct wlan_objmgr_vdev *vdev,
52 			      enum wlan_cm_source source,
53 			      enum wlan_reason_code reason_code,
54 			      struct qdf_mac_addr *bssid);
55 
56 /**
57  * wlan_cm_disconnect_sync() - disconnect request with wait till
58  * completed
59  * @vdev: vdev pointer
60  * @source: disconnect source
61  * @reason_code: disconnect reason
62  *
63  * Context: Only call for north bound disconnect req, if wait till complete
64  * is required, e.g. during vdev delete. Do not call from scheduler context.
65  *
66  * Return: QDF_STATUS
67  */
68 QDF_STATUS wlan_cm_disconnect_sync(struct wlan_objmgr_vdev *vdev,
69 				   enum wlan_cm_source source,
70 				   enum wlan_reason_code reason_code);
71 
72 /**
73  * wlan_cm_bss_select_ind_rsp() - Connection manager resp for bss
74  * select indication
75  * @vdev: vdev pointer
76  * @status: Status
77  *
78  * Return: QDF_STATUS
79  */
80 QDF_STATUS wlan_cm_bss_select_ind_rsp(struct wlan_objmgr_vdev *vdev,
81 				      QDF_STATUS status);
82 
83 /**
84  * wlan_cm_bss_peer_create_rsp() - Connection manager bss peer create response
85  * @vdev: vdev pointer
86  * @status: Status
87  * @peer_mac: Peer mac address
88  *
89  * Return: QDF_STATUS
90  */
91 QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
92 				       QDF_STATUS status,
93 				       struct qdf_mac_addr *peer_mac);
94 
95 /**
96  * wlan_cm_connect_rsp() - Connection manager connect response
97  * @vdev: vdev pointer
98  * @resp: Connect response
99  *
100  * Return: QDF_STATUS
101  */
102 QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev,
103 			       struct wlan_cm_connect_resp *resp);
104 
105 /**
106  * wlan_cm_bss_peer_delete_ind() - Connection manager peer delete indication
107  * @vdev: vdev pointer
108  * @peer_mac: Peer mac address
109  *
110  * Return: QDF_STATUS
111  */
112 QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev,
113 				       struct qdf_mac_addr *peer_mac);
114 
115 /**
116  * wlan_cm_bss_peer_delete_rsp() - Connection manager peer delete response
117  * @vdev: vdev pointer
118  * @status: status
119  *
120  * Return: QDF_STATUS
121  */
122 QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev,
123 				       uint32_t status);
124 
125 /**
126  * wlan_cm_disconnect_rsp() - Connection manager disconnect response
127  * @vdev: vdev pointer
128  * @resp: disconnect response
129  *
130  * Return: QDF_STATUS
131  */
132 QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev,
133 				  struct wlan_cm_discon_rsp *resp);
134 
135 /**
136  * wlan_cm_set_max_connect_attempts() - Set max connect attempts
137  * @vdev: vdev pointer
138  * @max_connect_attempts: max connect attempts to be set.
139  *
140  * Set max connect attempts. Max value is limited to CM_MAX_CONNECT_ATTEMPTS.
141  *
142  * Return: void
143  */
144 void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev,
145 				      uint8_t max_connect_attempts);
146 
147 /**
148  * wlan_cm_set_max_connect_timeout() - Set max connect timeout
149  * @vdev: vdev pointer
150  * @max_connect_timeout: max connect timeout to be set.
151  *
152  * Set max connect timeout.
153  *
154  * Return: void
155  */
156 void wlan_cm_set_max_connect_timeout(struct wlan_objmgr_vdev *vdev,
157 				     uint32_t max_connect_timeout);
158 
159 /**
160  * wlan_cm_is_vdev_connecting() - check if vdev is in connecting state
161  * @vdev: vdev pointer
162  *
163  * Return: bool
164  */
165 bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev);
166 
167 /**
168  * wlan_cm_is_vdev_connected() - check if vdev is in connected state
169  * @vdev: vdev pointer
170  *
171  * Return: bool
172  */
173 bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev);
174 
175 /**
176  * wlan_cm_is_vdev_active() - check if vdev is in active state ie connected or
177  * roaming state
178  * @vdev: vdev pointer
179  *
180  * Return: bool
181  */
182 bool wlan_cm_is_vdev_active(struct wlan_objmgr_vdev *vdev);
183 
184 /**
185  * wlan_cm_is_vdev_disconnecting() - check if vdev is in disconnecting state
186  * @vdev: vdev pointer
187  *
188  * Return: bool
189  */
190 bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev);
191 
192 /**
193  * wlan_cm_is_vdev_disconnected() - check if vdev is disconnected/init state
194  * @vdev: vdev pointer
195  *
196  * Return: bool
197  */
198 bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev);
199 
200 /**
201  * wlan_cm_is_vdev_roaming() - check if vdev is in roaming state
202  * @vdev: vdev pointer
203  *
204  * Return: bool
205  */
206 bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev);
207 
208 /**
209  * wlan_cm_free_connect_req() - free up connect request and its sub memory
210  * @connect_req: Connect request
211  *
212  * Return: void
213  */
214 void wlan_cm_free_connect_req(struct wlan_cm_connect_req *connect_req);
215 
216 /**
217  * wlan_cm_free_connect_resp() - free up connect response and its sub memory
218  * @connect_rsp: Connect response
219  *
220  * Return: void
221  */
222 void wlan_cm_free_connect_resp(struct wlan_cm_connect_resp *connect_rsp);
223 
224 /**
225  * wlan_cm_free_connect_req_param() - free up connect request sub memory
226  * @req: Connect request
227  *
228  * Return: void
229  */
230 void wlan_cm_free_connect_req_param(struct wlan_cm_connect_req *req);
231 
232 /**
233  * wlan_cm_is_link_switch_disconnect_resp() - Check if the disconnect response
234  * is for link switch request.
235  * @resp: Connection manager disconnect response.
236  *
237  * Return: bool
238  */
239 bool wlan_cm_is_link_switch_disconnect_resp(struct wlan_cm_discon_rsp *resp);
240 
241 /**
242  * wlan_cm_is_link_switch_connect_resp() - Check if the connect response if for
243  * link switch request.
244  * @resp: Connection manager connect response.
245  *
246  * Return: bool
247  */
248 bool wlan_cm_is_link_switch_connect_resp(struct wlan_cm_connect_resp *resp);
249 
250 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
251 /**
252  * wlan_cm_is_vdev_roam_started() - check if vdev is in roaming state and
253  * roam started sub stated
254  * @vdev: vdev pointer
255  *
256  * Return: bool
257  */
258 bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev);
259 
260 /**
261  * wlan_cm_is_vdev_roam_sync_inprogress() - check if vdev is in roaming state
262  * and roam sync substate
263  * @vdev: vdev pointer
264  *
265  * Return: bool
266  */
267 bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev);
268 #else
269 static inline bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev)
270 {
271 	return false;
272 }
273 
274 static inline
275 bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev)
276 {
277 	return false;
278 }
279 #endif
280 
281 #ifdef WLAN_FEATURE_HOST_ROAM
282 /**
283  * wlan_cm_is_vdev_roam_preauth_state() - check if vdev is in roaming state and
284  * preauth is in progress
285  * @vdev: vdev pointer
286  *
287  * Return: bool
288  */
289 bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev);
290 
291 /**
292  * wlan_cm_is_vdev_roam_reassoc_state() - check if vdev is in roaming state
293  * and reassoc is in progress
294  * @vdev: vdev pointer
295  *
296  * Return: bool
297  */
298 bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev);
299 #else
300 static inline
301 bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev)
302 {
303 	return false;
304 }
305 
306 static inline
307 bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev)
308 {
309 	return false;
310 }
311 #endif
312 
313 /**
314  * wlan_cm_connect_resp_fill_mld_addr_from_cm_id() - API to get MLD of
315  * current candidate from connect request ID.
316  * @vdev: VDEV objmgr pointer.
317  * @cm_id: connect request ID.
318  * @rsp: connect resp pointer.
319  *
320  * This wrapper API fills MLD address in @rsp from connect request ID.
321  *
322  * Return: void
323  */
324 void
325 wlan_cm_connect_resp_fill_mld_addr_from_cm_id(struct wlan_objmgr_vdev *vdev,
326 					      wlan_cm_id cm_id,
327 					      struct wlan_cm_connect_resp *rsp);
328 
329 /**
330  * wlan_cm_connect_resp_fill_mld_addr_from_vdev_id() - API to get MLD
331  * from scan entry in join request.
332  * @psoc: PSOC objmgr pointer.
333  * @vdev_id: session ID.
334  * @entry: Scan entry of the candidate.
335  * @rsp: connect response pointer.
336  *
337  * This wrapper API gets VDEV from join request and fills MLD address
338  * in @rsp from the scan entry in join request.
339  *
340  * Return: void
341  */
342 #ifdef WLAN_FEATURE_11BE_MLO
343 void
344 wlan_cm_connect_resp_fill_mld_addr_from_vdev_id(struct wlan_objmgr_psoc *psoc,
345 						uint8_t vdev_id,
346 						struct scan_cache_entry *entry,
347 						struct wlan_cm_connect_resp *rsp);
348 #else
349 static inline void
350 wlan_cm_connect_resp_fill_mld_addr_from_vdev_id(struct wlan_objmgr_psoc *psoc,
351 						uint8_t vdev_id,
352 						struct scan_cache_entry *entry,
353 						struct wlan_cm_connect_resp *rsp)
354 {
355 }
356 #endif
357 
358 /**
359  * wlan_cm_get_active_connect_req() - Get copy of active connect request
360  * @vdev: vdev pointer
361  * @req: pointer to the copy of the active connect request
362  * *
363  * Context: Should be called only in the context of the
364  * cm request activation
365  *
366  * Return: true and connect req if any request is active
367  */
368 bool wlan_cm_get_active_connect_req(struct wlan_objmgr_vdev *vdev,
369 				    struct wlan_cm_vdev_connect_req *req);
370 
371 /**
372  * wlan_cm_is_first_candidate_connect_attempt() - Check whether it is
373  * the first attempt for the current AP after receiving connect request
374  * @vdev: vdev pointer
375  *
376  * Return: True if it is the first connecting attempt on a candidate.
377  * Otherwise return false
378  */
379 bool wlan_cm_is_first_candidate_connect_attempt(struct wlan_objmgr_vdev *vdev);
380 
381 /**
382  * wlan_cm_get_active_connect_req_param() - API to fetch connect request
383  * parameter.
384  * @vdev: vdev pointer
385  * @req: Connection request parameter buffer to be filled
386  *
387  * Return: QDF_STATUS
388  */
389 QDF_STATUS
390 wlan_cm_get_active_connect_req_param(struct wlan_objmgr_vdev *vdev,
391 				     struct wlan_cm_connect_req *req);
392 
393 #ifdef WLAN_FEATURE_HOST_ROAM
394 /**
395  * wlan_cm_get_active_reassoc_req() - Get copy of active reassoc request
396  * @vdev: vdev pointer
397  * @req: pointer to the copy of the active reassoc request
398  * *
399  * Context: Should be called only in the context of the
400  * cm request activation
401  *
402  * Return: true and reassoc req if any request is active
403  */
404 bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
405 				    struct wlan_cm_vdev_reassoc_req *req);
406 #else
407 static inline
408 bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
409 				    struct wlan_cm_vdev_reassoc_req *req)
410 {
411 	return false;
412 }
413 #endif
414 
415 /**
416  * wlan_cm_get_active_disconnect_req() - Get copy of active disconnect request
417  * @vdev: vdev pointer
418  * @req: pointer to the copy of the active disconnect request
419  * *
420  * Context: Should be called only in the context of the
421  * cm request activation
422  *
423  * Return: true and disconnect req if any request is active
424  */
425 bool wlan_cm_get_active_disconnect_req(struct wlan_objmgr_vdev *vdev,
426 				       struct wlan_cm_vdev_discon_req *req);
427 
428 /**
429  * wlan_cm_reason_code_to_str() - return string conversion of reason code
430  * @reason: reason code.
431  *
432  * This utility function helps log string conversion of reason code.
433  *
434  * Return: string conversion of reason code, if match found;
435  *         "Unknown" otherwise.
436  */
437 const char *wlan_cm_reason_code_to_str(enum wlan_reason_code reason);
438 
439 /**
440  * wlan_cm_get_active_req_type() - return cm  active request type
441  * @vdev: vdev pointer
442  *
443  * This function returns the cm active request type
444  *
445  * Return: active request type if any, otherwise return 0
446  */
447 enum wlan_cm_active_request_type
448 wlan_cm_get_active_req_type(struct wlan_objmgr_vdev *vdev);
449 
450 /**
451  * wlan_cm_get_ext_hdl() - Get connection manager ext context from vdev
452  * @vdev: vdev pointer
453  *
454  * Return: pointer to connection manager ext context
455  */
456 cm_ext_t *wlan_cm_get_ext_hdl(struct wlan_objmgr_vdev *vdev);
457 
458 #ifdef WLAN_FEATURE_HOST_ROAM
459 /**
460  * wlan_cm_reassoc_rsp() - Connection manager reassoc response
461  * @vdev: vdev pointer
462  * @resp: Connect response
463  *
464  * Return: QDF_STATUS
465  */
466 QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
467 			       struct wlan_cm_connect_resp *resp);
468 #else
469 static inline
470 QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
471 			       struct wlan_cm_connect_resp *resp)
472 {
473 	return QDF_STATUS_SUCCESS;
474 }
475 #endif
476 
477 /**
478  * wlan_cm_hw_mode_change_resp() - HW mode change response
479  * @pdev: pdev pointer
480  * @vdev_id: vdev id
481  * @cm_id: connection ID which gave the hw mode change request
482  * @status: status of the HW mode change.
483  *
484  * Return: void
485  */
486 #ifdef WLAN_POLICY_MGR_ENABLE
487 void wlan_cm_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
488 				 wlan_cm_id cm_id, QDF_STATUS status);
489 #endif /* ifdef POLICY_MGR_ENABLE */
490 
491 #ifdef SM_ENG_HIST_ENABLE
492 /**
493  * wlan_cm_sm_history_print() - Prints SM history
494  * @vdev: Objmgr vdev
495  *
496  * API to print CM SM history
497  *
498  * Return: void
499  */
500 void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev);
501 
502 /**
503  * wlan_cm_req_history_print() - Prints CM request history
504  * @vdev: Objmgr vdev
505  *
506  * API to print CM request history
507  *
508  * Return: void
509  */
510 void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev);
511 #else
512 static inline void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev)
513 {
514 }
515 
516 static inline void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev)
517 {}
518 #endif
519 
520 #ifdef CONN_MGR_ADV_FEATURE
521 /**
522  * wlan_cm_set_candidate_advance_filter_cb() - Set CM candidate advance
523  * filter cb
524  * @vdev: Objmgr vdev
525  * @filter_fun: CM candidate advance filter cb
526  *
527  * Return: void
528  */
529 static inline
530 void wlan_cm_set_candidate_advance_filter_cb(
531 		struct wlan_objmgr_vdev *vdev,
532 		void (*filter_fun)(struct wlan_objmgr_vdev *vdev,
533 				   struct scan_filter *filter))
534 {
535 }
536 
537 /**
538  * wlan_cm_set_candidate_custom_sort_cb() - Set CM candidate custom sort cb
539  * @vdev: Objmgr vdev
540  * @sort_fun: CM candidate custom sort cb
541  *
542  * Return: void
543  */
544 static inline
545 void wlan_cm_set_candidate_custom_sort_cb(
546 		struct wlan_objmgr_vdev *vdev,
547 		void (*sort_fun)(struct wlan_objmgr_vdev *vdev,
548 				 qdf_list_t *list))
549 {
550 }
551 #else
552 void wlan_cm_set_candidate_advance_filter_cb(
553 		struct wlan_objmgr_vdev *vdev,
554 		void (*filter_fun)(struct wlan_objmgr_vdev *vdev,
555 				   struct scan_filter *filter));
556 
557 void wlan_cm_set_candidate_custom_sort_cb(
558 		struct wlan_objmgr_vdev *vdev,
559 		void (*sort_fun)(struct wlan_objmgr_vdev *vdev,
560 				 qdf_list_t *list));
561 #endif
562 
563 /**
564  * wlan_cm_get_rnr() - get rnr
565  * @vdev:vdev
566  * @cm_id: connect mgr id
567  * @rnr: pointer to copy rnr info
568  *
569  * Return: QDF_STATUS
570  */
571 QDF_STATUS wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev, wlan_cm_id cm_id,
572 			   struct reduced_neighbor_report *rnr);
573 
574 /**
575  * wlan_cm_disc_cont_after_rso_stop() - Continue disconnect after RSO stop
576  * @vdev: Objmgr vdev
577  * @req: pointer to cm vdev disconnect req
578  *
579  * Continue disconnect after RSO stop response is receive from south bound.
580  * This is a wrapper to call core API cm_disconnect_continue_after_rso_stop
581  * by acquiring cm_lock through cm_sm_deliver_event.
582  *
583  * Return: QDF_STATUS
584  */
585 QDF_STATUS
586 wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev,
587 				 struct wlan_cm_vdev_discon_req *req);
588 
589 #ifdef WLAN_FEATURE_11BE
590 /**
591  * wlan_cm_sta_set_chan_param() - set channel parameters for 802.11be sta
592  *
593  * @vdev: vdev
594  * @ch_freq: operating channel frequency
595  * @ori_bw: bandwidth information according to EHT operation IE
596  * @ori_punc: original puncture bitmap from EHT operation IE
597  * @ccfs0: EHT channel center frequency segment0 information
598  * @ccfs1: EHT channel center frequency segment1 information
599  * @chan_param: chan_param to be set
600  *
601  * ori_bw, ori_punc, ccfs0, ccfs1 are information from AP EHT operation IE
602  * chan_param->ch_width is the intersected channel width based on STA's
603  * capability. Complete chan_param including puncture will be set if
604  * it returns success.
605  *
606  * Return: QDF_STATUS
607  */
608 QDF_STATUS wlan_cm_sta_set_chan_param(struct wlan_objmgr_vdev *vdev,
609 				      qdf_freq_t ch_freq,
610 				      enum phy_ch_width ori_bw,
611 				      uint16_t ori_punc,
612 				      uint8_t ccfs0, uint8_t ccfs1,
613 				      struct ch_params *chan_param);
614 
615 /**
616  * wlan_cm_sta_update_bw_puncture() - update puncture and channel width for sta
617  * @vdev: vdev
618  * @peer_mac: peer mac address
619  * @ori_punc: original puncture bitmap from EHT operation IE
620  * @ori_bw: bandwidth information according to EHT operation IE
621  * @ccfs0: EHT Channel Centre Frequency Segment0 information
622  * @ccfs1: EHT Channel Centre Frequency Segment1 information
623  * @new_bw: bandwidth to be set
624  */
625 QDF_STATUS wlan_cm_sta_update_bw_puncture(struct wlan_objmgr_vdev *vdev,
626 					  uint8_t *peer_mac,
627 					  uint16_t ori_punc,
628 					  enum phy_ch_width ori_bw,
629 					  uint8_t ccfs0, uint8_t ccfs1,
630 					  enum phy_ch_width new_bw);
631 #endif /* WLAN_FEATURE_11BE */
632 
633 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_11BE_MLO_ADV_FEATURE)
634 
635 /**
636  * wlan_cm_check_mlo_roam_auth_status - api to check roam auth status on link
637  * @vdev: vdev corresponds to given link
638  *
639  * This api will be called to check if roam auth status is connected
640  *
641  * Return: boolean true or false
642  */
643 bool
644 wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev *vdev);
645 #else
646 static inline bool
647 wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev *vdev)
648 {
649 	return false;
650 }
651 #endif
652 
653 /**
654  * wlan_cm_bss_mlo_type() - Check if the scan entry is of MLO type
655  * @psoc: Pointer to psoc
656  * @entry: scan cache entry
657  * @scan_list: list of scan entries to look for if @entry is of ML type
658  *
659  * Return: MLO AP type: SLO, MLMR or EMLSR.
660  */
661 enum MLO_TYPE
662 wlan_cm_bss_mlo_type(struct wlan_objmgr_psoc *psoc,
663 		     struct scan_cache_entry *entry,
664 		     qdf_list_t *scan_list);
665 
666 #ifdef WLAN_FEATURE_LL_LT_SAP
667 /**
668  * wlan_cm_bearer_switch_resp() - Bearer switch response
669  * @psoc: psoc pointer
670  * @vdev_id: vdev id
671  * @cm_id: connection ID which gave the hw mode change request
672  * @status: status of the Bearer switch
673  *
674  * Return: void
675  */
676 void wlan_cm_bearer_switch_resp(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
677 				wlan_cm_id cm_id, QDF_STATUS status);
678 #endif /* WLAN_FEATURE_LL_LT_SAP */
679 #endif /* __WLAN_CM_UCFG_API_H */
680