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