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