1 /*
2 * Copyright (c) 2012-2015, 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_vdev_api.h
20 *
21 * This header file maintain legacy connect, disconnect APIs of connection
22 * manager to initiate vdev manager operations
23 */
24
25 #ifndef __WLAN_CM_VDEV_API_H__
26 #define __WLAN_CM_VDEV_API_H__
27
28 #include <wlan_cm_public_struct.h>
29 #include "scheduler_api.h"
30 #include "connection_mgr/core/src/wlan_cm_main.h"
31 #include "connection_mgr/core/src/wlan_cm_main_api.h"
32 #include <wlan_cm_roam_api.h>
33 #ifdef WLAN_FEATURE_11BE_MLO
34 #include "wlan_mlo_mgr_public_structs.h"
35 #endif
36
37 #define HS20_OUI_TYPE "\x50\x6f\x9a\x10"
38 #define HS20_OUI_TYPE_SIZE 4
39
40 /**
41 * struct cm_vdev_join_req - connect req from legacy CM to vdev manager
42 * @vdev_id: vdev id
43 * @cm_id: Connect manager id
44 * @force_rsne_override: force the arbitrary rsne received in connect req to be
45 * used with out validation, used for the scenarios where the device is used
46 * as a testbed device with special functionality and not recommended
47 * for production.
48 * @is_wps_connection: is wps connection
49 * @is_osen_connection: is osen connection
50 * @is_ssid_hidden: AP SSID is hidden
51 * @assoc_ie: assoc ie to be used in assoc req
52 * @scan_ie: Default scan ie to be used in the uncast probe req
53 * @entry: scan entry for the candidate
54 * @partner_info: Partner link information for an ML connection
55 * @assoc_link_id: Assoc link ID of an ML connection
56 * @owe_trans_ssid: owe trans ssid to be used when scan entry ssid is wildcard
57 */
58 struct cm_vdev_join_req {
59 uint8_t vdev_id;
60 wlan_cm_id cm_id;
61 uint8_t force_rsne_override:1,
62 is_wps_connection:1,
63 is_osen_connection:1,
64 is_ssid_hidden:1;
65 struct element_info assoc_ie;
66 struct element_info scan_ie;
67 struct scan_cache_entry *entry;
68 #ifdef WLAN_FEATURE_11BE_MLO
69 struct mlo_partner_info partner_info;
70 uint8_t assoc_link_id;
71 #endif
72 struct wlan_ssid owe_trans_ssid;
73 };
74
75 /**
76 * struct wlan_cm_discon_ind - disconnect ind from VDEV mgr and will be sent to
77 * SME
78 * @vdev_id: vdev id
79 * @source: source of disconnection
80 * @reason_code: reason of disconnection
81 * @bssid: BSSID of AP
82 */
83 struct wlan_cm_discon_ind {
84 uint8_t vdev_id;
85 enum wlan_cm_source source;
86 enum wlan_reason_code reason_code;
87 struct qdf_mac_addr bssid;
88 };
89
90 /**
91 * struct cm_vdev_discon_ind - disconnect ind from vdev mgr to connection mgr
92 * @psoc: psoc object
93 * @disconnect_param: DisConnect indication to be sent to CM
94 */
95 struct cm_vdev_discon_ind {
96 struct wlan_objmgr_psoc *psoc;
97 struct wlan_cm_discon_ind disconnect_param;
98 };
99
100 /**
101 * struct cm_vdev_disconnect_rsp - disconnect rsp from vdev mgr to CM
102 * @vdev_id: vdev id
103 * @psoc: psoc object
104 */
105 struct cm_vdev_disconnect_rsp {
106 uint8_t vdev_id;
107 struct wlan_objmgr_psoc *psoc;
108 };
109
110 /*
111 * struct cm_vdev_hw_mode_rsp - hw mode change from vdev mgr to CM
112 * @pdev: pdev pointer
113 * @vdev_id: vdev id
114 * @cm_id: connection ID which gave the hw mode change request
115 * @status: status of the HW mode change.
116 */
117 struct cm_vdev_hw_mode_rsp {
118 struct wlan_objmgr_pdev *pdev;
119 uint8_t vdev_id;
120 wlan_cm_id cm_id;
121 QDF_STATUS status;
122 };
123
124 /**
125 * struct cm_vdev_join_rsp - connect rsp from vdev mgr to connection mgr
126 * @psoc: psoc object
127 * @connect_rsp: Connect response to be sent to CM
128 * @ric_resp_ie: ric ie data
129 * @tspec_ie: tspec ie
130 * @nss: used nss
131 * @uapsd_mask: uapsd mask
132 */
133 struct cm_vdev_join_rsp {
134 struct wlan_objmgr_psoc *psoc;
135 struct wlan_cm_connect_resp connect_rsp;
136 struct element_info ric_resp_ie;
137 #ifdef FEATURE_WLAN_ESE
138 struct element_info tspec_ie;
139 #endif
140 uint8_t nss;
141 uint8_t uapsd_mask;
142 };
143
144 /**
145 * struct cm_peer_create_req - bss peer create req
146 * @vdev_id: vdev_id
147 * @peer_mac: peer mac to create
148 * @mld_mac: peer mld mac
149 * @is_assoc_peer: is assoc peer or not
150 */
151 struct cm_peer_create_req {
152 uint8_t vdev_id;
153 struct qdf_mac_addr peer_mac;
154 #ifdef WLAN_FEATURE_11BE_MLO
155 struct qdf_mac_addr mld_mac;
156 bool is_assoc_peer;
157 #endif
158 };
159
160 /**
161 * struct cm_host_roam_start_ind - roam start ind for host roam from FW
162 * @vdev_id: vdev id
163 * @pdev: pdev object
164 */
165 struct cm_host_roam_start_ind {
166 uint8_t vdev_id;
167 struct wlan_objmgr_pdev *pdev;
168 };
169
170 /**
171 * struct cm_ext_obj - Connection manager legacy object
172 * @rso_cfg: connect info to be used in RSO.
173 * @rso_usr_cfg: roam related userspace RSO configs.
174 */
175 struct cm_ext_obj {
176 struct rso_config rso_cfg;
177 struct rso_user_config rso_usr_cfg;
178 };
179
180 #ifdef WLAN_FEATURE_FILS_SK
181 /**
182 * cm_update_hlp_info - API to save HLP IE
183 * @vdev: vdev ptr
184 * @gen_ie: IE buffer to store
185 * @len: length of the IE buffer @gen_ie
186 * @flush: Flush the older saved HLP if any
187 *
188 * Return: None
189 */
190 void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
191 const uint8_t *gen_ie, uint16_t len,
192 bool flush);
193 #else
cm_update_hlp_info(struct wlan_objmgr_vdev * vdev,const uint8_t * gen_ie,uint16_t len,bool flush)194 static inline void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
195 const uint8_t *gen_ie, uint16_t len,
196 bool flush)
197 {}
198 #endif
199
200 #ifdef FEATURE_WLAN_DIAG_SUPPORT_CSR
201 /**
202 * cm_connect_info - send connect info to diag
203 * @vdev: vdev ptr
204 * @connect_success: if connect was success
205 * @bssid: bssid
206 * @ssid: ssid
207 * @freq: freq
208 *
209 * Return: none
210 */
211 void cm_connect_info(struct wlan_objmgr_vdev *vdev, bool connect_success,
212 struct qdf_mac_addr *bssid, struct wlan_ssid *ssid,
213 qdf_freq_t freq);
214
215 void cm_diag_get_auth_enc_type_vdev_id(struct wlan_objmgr_psoc *psoc,
216 uint8_t *auth_type,
217 uint8_t *ucast_cipher,
218 uint8_t *mcast_cipher,
219 uint8_t vdev_id);
220
221 #ifdef WLAN_UNIT_TEST
222 /**
223 * cm_get_sta_cxn_info - fill sta context info in buffer
224 * @vdev: Pointer to vdev
225 * @buf: buffer to fill
226 * @buf_sz: buf size
227 *
228 * Return: none
229 */
230 void cm_get_sta_cxn_info(struct wlan_objmgr_vdev *vdev,
231 char *buf, uint32_t buf_sz);
232 #endif
233 #else
234 static inline void
cm_connect_info(struct wlan_objmgr_vdev * vdev,bool connect_success,struct qdf_mac_addr * bssid,struct wlan_ssid * ssid,qdf_freq_t freq)235 cm_connect_info(struct wlan_objmgr_vdev *vdev, bool connect_success,
236 struct qdf_mac_addr *bssid, struct wlan_ssid *ssid,
237 qdf_freq_t freq)
238 {}
239 #endif
240
241 /**
242 * cm_wait_for_key_time_out_handler() - Wait key time out handler API
243 * @data: Pointer to wait key timer data
244 *
245 * Return: none
246 */
247 void cm_wait_for_key_time_out_handler(void *data);
248
249 /**
250 * cm_start_wait_for_key_timer() - Wait for key start API
251 * @vdev: Pointer to vdev
252 * @interval: timer trigger interval
253 *
254 * Return: QDF_STATUS
255 */
256
257 QDF_STATUS cm_start_wait_for_key_timer(struct wlan_objmgr_vdev *vdev,
258 uint32_t interval);
259
260 /**
261 * cm_stop_wait_for_key_timer() - Wait key stop API
262 * @psoc: Pointer to psoc
263 * @vdev_id: vdev id
264 *
265 * Return: none
266 */
267 void cm_stop_wait_for_key_timer(struct wlan_objmgr_psoc *psoc,
268 uint8_t vdev_id);
269
270 void cm_update_wait_for_key_timer(struct wlan_objmgr_vdev *vdev,
271 uint8_t vdev_id, uint32_t interval);
272
273 void cm_update_prev_ap_ie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
274 uint32_t len, uint8_t *bcn_ptr);
275 bool cm_csr_is_ss_wait_for_key(uint8_t vdev_id);
276 void cm_csr_set_ss_wait_for_key(uint8_t vdev_id);
277 void cm_csr_set_ss_none(uint8_t vdev_id);
278 void cm_csr_set_joining(uint8_t vdev_id);
279 void cm_csr_set_joined(uint8_t vdev_id);
280 void cm_csr_set_idle(uint8_t vdev_id);
281
282 /**
283 * cm_get_rssi_snr_by_bssid() - get rssi and snr by bssid
284 * @pdev: Pointer to pdev
285 * @bssid: bssid to get rssi and snr
286 * @rssi: pointer to fill rssi
287 * @snr: pointer to fill snr
288 *
289 * Return: none
290 */
291 QDF_STATUS cm_get_rssi_snr_by_bssid(struct wlan_objmgr_pdev *pdev,
292 struct qdf_mac_addr *bssid,
293 int8_t *rssi, int8_t *snr);
294
295 /**
296 * cm_csr_send_set_ie() - CM wrapper to send the set IE request
297 * @vdev: Object manager VDEV
298 *
299 * Return: None
300 */
301 void cm_csr_send_set_ie(struct wlan_objmgr_vdev *vdev);
302
303 /**
304 * cm_csr_get_vdev_dot11_mode() - Wrapper for CM to get the dot11mode for
305 * the vdev id
306 * @vdev_id: vdev id
307 *
308 * Return: dot11 mode
309 */
310 uint16_t cm_csr_get_vdev_dot11_mode(uint8_t vdev_id);
311
312 static inline QDF_STATUS
cm_ext_hdl_create(struct wlan_objmgr_vdev * vdev,cm_ext_t ** ext_cm_ptr)313 cm_ext_hdl_create(struct wlan_objmgr_vdev *vdev, cm_ext_t **ext_cm_ptr)
314 {
315 struct cm_ext_obj *cm_obj;
316
317 *ext_cm_ptr = qdf_mem_malloc(sizeof(struct cm_ext_obj));
318 if (!*ext_cm_ptr)
319 return QDF_STATUS_E_NOMEM;
320
321 cm_obj = *ext_cm_ptr;
322 wlan_cm_rso_config_init(vdev, &cm_obj->rso_cfg);
323
324 return QDF_STATUS_SUCCESS;
325 }
326
327 static inline QDF_STATUS
cm_ext_hdl_destroy(struct wlan_objmgr_vdev * vdev,cm_ext_t * ext_cm_ptr)328 cm_ext_hdl_destroy(struct wlan_objmgr_vdev *vdev, cm_ext_t *ext_cm_ptr)
329 {
330 wlan_cm_rso_config_deinit(vdev, &ext_cm_ptr->rso_cfg);
331 qdf_mem_free(ext_cm_ptr);
332
333 return QDF_STATUS_SUCCESS;
334 }
335
336 /**
337 * cm_connect_start_ind() - Connection manager ext connect start indication
338 * vdev and peer assoc state machine
339 * @vdev: VDEV object
340 * @req: connect request
341 *
342 * Return: QDF_STATUS
343 */
344 QDF_STATUS cm_connect_start_ind(struct wlan_objmgr_vdev *vdev,
345 struct wlan_cm_connect_req *req);
346
347 /**
348 * cm_csr_handle_join_req() - Connection manager cb to csr to fill csr
349 * session and update join req from legacy structures
350 * @vdev: VDEV object
351 * @req: Vdev connect request
352 * @join_req: join req to be sent to LIM
353 * @reassoc: if reassoc
354 *
355 * This API is to update legacy struct and should be removed once
356 * CSR is cleaned up fully. No new params should be added to CSR, use
357 * vdev/pdev/psoc instead.
358 *
359 * Return: QDF_STATUS
360 */
361 QDF_STATUS cm_csr_handle_join_req(struct wlan_objmgr_vdev *vdev,
362 struct wlan_cm_vdev_connect_req *req,
363 struct cm_vdev_join_req *join_req,
364 bool reassoc);
365
366 /**
367 * cm_handle_connect_req() - Connection manager ext connect request to
368 * start vdev and peer assoc state machine
369 * @vdev: VDEV object
370 * @req: Vdev connect request
371 *
372 * Return: QDF_STATUS
373 */
374 QDF_STATUS
375 cm_handle_connect_req(struct wlan_objmgr_vdev *vdev,
376 struct wlan_cm_vdev_connect_req *req);
377
378 /**
379 * cm_send_bss_peer_create_req() - Connection manager ext bss peer create
380 * request
381 * @vdev: VDEV object
382 * @peer_mac: Peer mac address
383 * @mld_mac: peer mld mac address
384 * @is_assoc_peer: is assoc peer or not
385 *
386 * Return: QDF_STATUS
387 */
388 QDF_STATUS
389 cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
390 struct qdf_mac_addr *peer_mac,
391 struct qdf_mac_addr *mld_mac,
392 bool is_assoc_peer);
393
394 /**
395 * cm_csr_connect_rsp() - Connection manager ext connect resp indication
396 * @vdev: VDEV object
397 * @rsp: Connection vdev response
398 *
399 * This API is to update legacy struct and should be removed once
400 * CSR is cleaned up fully. No new params should be added to CSR, use
401 * vdev/pdev/psoc instead.
402 *
403 * Return: QDF_STATUS
404 */
405 QDF_STATUS cm_csr_connect_rsp(struct wlan_objmgr_vdev *vdev,
406 struct cm_vdev_join_rsp *rsp);
407
408 /**
409 * cm_connect_complete_ind() - Connection manager ext connect complete
410 * indication
411 * @vdev: VDEV object
412 * @rsp: Connection manager connect response
413 *
414 * Return: QDF_STATUS
415 */
416 QDF_STATUS
417 cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
418 struct wlan_cm_connect_resp *rsp);
419
420 /**
421 * cm_csr_connect_done_ind() - Connection manager call to csr to update
422 * legacy structures on connect complete
423 * @vdev: VDEV object
424 * @rsp: Connection manager connect response
425 *
426 * This API is to update legacy struct and should be removed once
427 * CSR is cleaned up fully. No new params should be added to CSR, use
428 * vdev/pdev/psoc instead.
429 *
430 * Return: QDF_STATUS
431 */
432 QDF_STATUS
433 cm_csr_connect_done_ind(struct wlan_objmgr_vdev *vdev,
434 struct wlan_cm_connect_resp *rsp);
435
436 /**
437 * cm_is_vdevid_connected() - check if vdev_id is in conneted state
438 * @pdev: pdev pointer
439 * @vdev_id: vdev ID
440 *
441 * Return: bool
442 */
443 bool cm_is_vdevid_connected(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
444
445 /**
446 * cm_is_vdevid_active() - check if vdev_id is in conneted/roaming state
447 * @pdev: pdev pointer
448 * @vdev_id: vdev ID
449 *
450 * Return: bool
451 */
452 bool cm_is_vdevid_active(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
453
454 /**
455 * cm_disconnect_start_ind() - Connection manager ext disconnect start
456 * indication
457 * vdev and peer assoc state machine
458 * @vdev: VDEV object
459 * @req: disconnect request
460 *
461 * Return: QDF_STATUS
462 */
463 QDF_STATUS cm_disconnect_start_ind(struct wlan_objmgr_vdev *vdev,
464 struct wlan_cm_disconnect_req *req);
465
466 /**
467 * cm_handle_disconnect_req() - Connection manager ext disconnect
468 * req to vdev and peer sm
469 * @vdev: VDEV object
470 * @req: vdev disconnect request
471 *
472 * Return: QDF_STATUS
473 */
474 QDF_STATUS
475 cm_handle_disconnect_req(struct wlan_objmgr_vdev *vdev,
476 struct wlan_cm_vdev_discon_req *req);
477
478 /**
479 * cm_csr_handle_diconnect_req() - Connection manager cb to csr to update legacy
480 * structures on disconnect
481 * @vdev: VDEV object
482 * @req: vdev disconnect request
483 *
484 * This API is to update legacy struct and should be removed once
485 * CSR is cleaned up fully. No new params should be added to CSR, use
486 * vdev/pdev/psoc instead.
487 *
488 * Return: QDF_STATUS
489 */
490 QDF_STATUS
491 cm_csr_handle_diconnect_req(struct wlan_objmgr_vdev *vdev,
492 struct wlan_cm_vdev_discon_req *req);
493
494 /**
495 * cm_send_bss_peer_delete_req() - Connection manager ext bss peer delete
496 * request
497 * @vdev: VDEV object
498 *
499 * Return: QDF_STATUS
500 */
501 QDF_STATUS
502 cm_send_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev);
503
504 /**
505 * cm_disconnect_complete_ind() - Connection manager ext disconnect
506 * complete indication
507 * @vdev: VDEV object
508 * @rsp: Connection manager disconnect response
509 *
510 * Return: QDF_STATUS
511 */
512 QDF_STATUS
513 cm_disconnect_complete_ind(struct wlan_objmgr_vdev *vdev,
514 struct wlan_cm_discon_rsp *rsp);
515
516 /**
517 * cm_csr_disconnect_done_ind() - Connection manager call to csr to update
518 * legacy structures on disconnect complete
519 * @vdev: VDEV object
520 * @rsp: Connection manager disconnect response
521 *
522 * This API is to update legacy struct and should be removed once
523 * CSR is cleaned up fully. No new params should be added to CSR, use
524 * vdev/pdev/psoc instead.
525 *
526 * Return: QDF_STATUS
527 */
528 QDF_STATUS
529 cm_csr_disconnect_done_ind(struct wlan_objmgr_vdev *vdev,
530 struct wlan_cm_discon_rsp *rsp);
531
532 /**
533 * cm_send_vdev_down_req() - Connection manager ext req to send vdev down
534 * to FW
535 * @vdev: VDEV object
536 *
537 * Return: QDF_STATUS
538 */
539 QDF_STATUS cm_send_vdev_down_req(struct wlan_objmgr_vdev *vdev);
540
541 /**
542 * cm_free_join_req() - Free cm vdev connect req params
543 * @join_req: join request
544 *
545 * Return: void
546 */
547 void cm_free_join_req(struct cm_vdev_join_req *join_req);
548
549 /**
550 * cm_flush_join_req() - Process join req flush
551 * @msg: scheduler message
552 *
553 * Return: QDF_STATUS
554 */
555 QDF_STATUS cm_flush_join_req(struct scheduler_msg *msg);
556
557 /**
558 * cm_process_join_req() - Process vdev join req
559 * @msg: scheduler message
560 *
561 * Process connect request in LIM and copy all join req params.
562 *
563 * Return: QDF_STATUS
564 */
565 QDF_STATUS cm_process_join_req(struct scheduler_msg *msg);
566
567 #ifdef WLAN_FEATURE_HOST_ROAM
568 /**
569 * cm_process_preauth_req() - Process preauth request
570 * @msg: scheduler message
571 *
572 * Process preauth request in LIM.
573 *
574 * Return: QDF_STATUS
575 */
576 QDF_STATUS cm_process_preauth_req(struct scheduler_msg *msg);
577
578 /**
579 * cm_process_reassoc_req() - Process vdev reassoc req
580 * @msg: scheduler message
581 *
582 * Process reassoc request in LIM and copy all reassoc req params.
583 *
584 * Return: QDF_STATUS
585 */
586 QDF_STATUS cm_process_reassoc_req(struct scheduler_msg *msg);
587
588 /**
589 * cm_handle_reassoc_req() - Connection manager ext reassoc request to start
590 * vdev and peer assoc state machine
591 * @vdev: VDEV object
592 * @req: Vdev reassoc request
593 *
594 * Return: QDF_STATUS
595 */
596 QDF_STATUS
597 cm_handle_reassoc_req(struct wlan_objmgr_vdev *vdev,
598 struct wlan_cm_vdev_reassoc_req *req);
599
600 /**
601 * cm_handle_roam_start() - roam start indication
602 * @vdev: VDEV object
603 * @req: Connection manager roam request
604 *
605 * Return: QDF_STATUS
606 */
607 QDF_STATUS
608 cm_handle_roam_start(struct wlan_objmgr_vdev *vdev,
609 struct wlan_cm_roam_req *req);
610
611 /**
612 * cm_csr_preauth_done() - Process preauth done from csr part
613 * @vdev: vdev object pointer
614 *
615 * Return: void
616 */
617 void cm_csr_preauth_done(struct wlan_objmgr_vdev *vdev);
618 #else
cm_process_preauth_req(struct scheduler_msg * msg)619 static inline QDF_STATUS cm_process_preauth_req(struct scheduler_msg *msg)
620 {
621 return QDF_STATUS_SUCCESS;
622 }
623
cm_process_reassoc_req(struct scheduler_msg * msg)624 static inline QDF_STATUS cm_process_reassoc_req(struct scheduler_msg *msg)
625 {
626 return QDF_STATUS_SUCCESS;
627 }
628
629 static inline QDF_STATUS
cm_handle_reassoc_req(struct wlan_objmgr_vdev * vdev,struct wlan_cm_vdev_reassoc_req * req)630 cm_handle_reassoc_req(struct wlan_objmgr_vdev *vdev,
631 struct wlan_cm_vdev_reassoc_req *req)
632 {
633 return QDF_STATUS_SUCCESS;
634 }
635 static inline QDF_STATUS
cm_handle_roam_start(struct wlan_objmgr_vdev * vdev,struct wlan_cm_roam_req * req)636 cm_handle_roam_start(struct wlan_objmgr_vdev *vdev,
637 struct wlan_cm_roam_req *req)
638 {
639 return QDF_STATUS_SUCCESS;
640 }
641 #endif
642
643 /**
644 * cm_process_peer_create() - Process bss peer create req
645 * @msg: scheduler message
646 *
647 * Return: QDF_STATUS
648 */
649 QDF_STATUS cm_process_peer_create(struct scheduler_msg *msg);
650
651 /**
652 * cm_process_disconnect_req() - Process vdev disconnect request
653 * @msg: scheduler message
654 *
655 * Process disconnect request in LIM.
656 *
657 * Return: QDF_STATUS
658 */
659 QDF_STATUS cm_process_disconnect_req(struct scheduler_msg *msg);
660
661 /**
662 * cm_disconnect() - disconnect start request
663 * @psoc: psoc pointer
664 * @vdev_id: vdev id
665 * @source: disconnect source
666 * @reason_code: disconnect reason
667 * @bssid: bssid of AP to disconnect, can be null if not known
668 *
669 * Context: can be called from any context, should not hold sme global lock
670 * while calling as can lead to deadlock (disconnect access sme lock holding CM
671 * lock and thus calling cm api (which will hold CM lock) while holding sme lock
672 * can lead to deadlock)
673 *
674 * Return: QDF_STATUS
675 */
676 QDF_STATUS cm_disconnect(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
677 enum wlan_cm_source source,
678 enum wlan_reason_code reason_code,
679 struct qdf_mac_addr *bssid);
680
681 /**
682 * cm_send_sb_disconnect_req() - Process vdev discon ind from sb and send to CM
683 * @msg: scheduler message
684 *
685 * Process disconnect indication and send it to CM SM.
686 *
687 * Return: QDF_STATUS
688 */
689 QDF_STATUS cm_send_sb_disconnect_req(struct scheduler_msg *msg);
690
691 /**
692 * cm_handle_disconnect_resp() - Process vdev discon rsp and send to CM
693 * @msg: scheduler message
694 *
695 * Process disconnect rsp and send it to CM SM.
696 *
697 * Return: QDF_STATUS
698 */
699 QDF_STATUS cm_handle_disconnect_resp(struct scheduler_msg *msg);
700
701 /**
702 * wlan_cm_send_connect_rsp() - Process vdev join rsp and send to CM
703 * @msg: scheduler message
704 *
705 * Process connect response and send it to CM SM.
706 *
707 * Return: QDF_STATUS
708 */
709 QDF_STATUS wlan_cm_send_connect_rsp(struct scheduler_msg *msg);
710
711 /**
712 * wlan_cm_free_connect_rsp() - Function to free all params in join rsp
713 * @rsp: CM join response
714 *
715 * Function to free up all the memory in join rsp.
716 *
717 * Return: void
718 */
719 void wlan_cm_free_connect_rsp(struct cm_vdev_join_rsp *rsp);
720
721 /**
722 * wlan_cm_handle_hw_mode_change_resp() - Process hw_mode_change_resp
723 * @pdev: pdev pointer
724 * @vdev_id: vdev_id
725 * @cm_id: connection manager id
726 * @status: status
727 *
728 * This API is to break the context and avoid calling CM API to take CM lock
729 * while holding SME lock.
730 *
731 * Return: QDF_STATUS
732 */
733 QDF_STATUS
734 wlan_cm_handle_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev,
735 uint8_t vdev_id,
736 wlan_cm_id cm_id, QDF_STATUS status);
737 /**
738 * wlan_cm_rso_stop_continue_disconnect() - Continue disconnect after RSO stop
739 * @psoc: psoc object
740 * @vdev_id: vdev id
741 * @is_ho_fail: Carries true if HO_FAIL happened
742 *
743 * Return: QDF_STATUS
744 */
745 QDF_STATUS
746 wlan_cm_rso_stop_continue_disconnect(struct wlan_objmgr_psoc *psoc,
747 uint8_t vdev_id, bool is_ho_fail);
748 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
749 /**
750 * cm_send_rso_stop() - Send RSP stop req to firmware
751 * @vdev: VDEV object
752 *
753 * Return: QDF_STATUS
754 */
755 QDF_STATUS
756 cm_send_rso_stop(struct wlan_objmgr_vdev *vdev);
757 #else
758 static inline QDF_STATUS
cm_send_rso_stop(struct wlan_objmgr_vdev * vdev)759 cm_send_rso_stop(struct wlan_objmgr_vdev *vdev)
760 {
761 return QDF_STATUS_E_NOSUPPORT;
762 }
763 #endif
764
765 #ifdef WLAN_FEATURE_11BE_MLO
766 /**
767 * cm_get_ml_partner_info() - Fill ML partner info from scan entry
768 * @pdev: PDEV object
769 * @conn_req: Connect request pointer
770 *
771 * Return: QDF_STATUS
772 */
773 QDF_STATUS
774 cm_get_ml_partner_info(struct wlan_objmgr_pdev *pdev,
775 struct cm_connect_req *conn_req);
776 #endif
777 #endif /* __WLAN_CM_VDEV_API_H__ */
778