1 /* 2 * Copyright (c) 2012-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 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /* 21 * DOC: wlan_cm_roam_offload.h 22 * 23 * Implementation for the common roaming offload api interfaces. 24 */ 25 26 #ifndef _WLAN_CM_ROAM_OFFLOAD_H_ 27 #define _WLAN_CM_ROAM_OFFLOAD_H_ 28 29 #include "qdf_str.h" 30 #include "wlan_cm_roam_public_struct.h" 31 32 #if defined(CONNECTIVITY_DIAG_EVENT) && \ 33 defined(WLAN_FEATURE_ROAM_OFFLOAD) 34 /** 35 * cm_roam_scan_info_event() - send scan info to userspace 36 * @psoc: psoc common object 37 * @scan: roam scan data 38 * @vdev_id: vdev id 39 * 40 * Return: None 41 */ 42 void cm_roam_scan_info_event(struct wlan_objmgr_psoc *psoc, 43 struct wmi_roam_scan_data *scan, uint8_t vdev_id); 44 45 /** 46 * cm_roam_trigger_info_event() - send trigger info to userspace 47 * @data: roam trigger data 48 * @scan_data: Roam scan data 49 * @vdev_id: vdev id 50 * @is_full_scan: is full scan or partial scan 51 * 52 * Return: None 53 */ 54 void cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data, 55 struct wmi_roam_scan_data *scan_data, 56 uint8_t vdev_id, bool is_full_scan); 57 58 /** 59 * cm_roam_candidate_info_event() - send trigger info to userspace 60 * @ap: roam candidate info 61 * @cand_ap_idx: Candidate AP index 62 * 63 * Return: void 64 */ 65 void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap, 66 uint8_t cand_ap_idx); 67 68 /** 69 * cm_roam_result_info_event() - send scan results info to userspace 70 * @psoc: Pointer to PSOC object 71 * @trigger: Roam trigger data 72 * @res: roam result data 73 * @scan_data: Roam scan info 74 * @vdev_id: vdev id 75 * 76 * Return: void 77 */ 78 void cm_roam_result_info_event(struct wlan_objmgr_psoc *psoc, 79 struct wmi_roam_trigger_info *trigger, 80 struct wmi_roam_result *res, 81 struct wmi_roam_scan_data *scan_data, 82 uint8_t vdev_id); 83 84 #elif defined(WLAN_FEATURE_CONNECTIVITY_LOGGING) && \ 85 defined(WLAN_FEATURE_ROAM_OFFLOAD) 86 /** 87 * cm_roam_scan_info_event() - send scan info to userspace 88 * @psoc: psoc common object 89 * @scan: roam scan data 90 * @vdev_id: vdev id 91 * 92 * Return: None 93 */ 94 void cm_roam_scan_info_event(struct wlan_objmgr_psoc *psoc, 95 struct wmi_roam_scan_data *scan, uint8_t vdev_id); 96 97 /** 98 * cm_roam_trigger_info_event() - send trigger info to userspace 99 * @data: roam trigger data 100 * @scan_data: Roam scan data 101 * @vdev_id: vdev id 102 * @is_full_scan: is full scan or partial scan 103 * 104 * Return: None 105 */ 106 void cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data, 107 struct wmi_roam_scan_data *scan_data, 108 uint8_t vdev_id, bool is_full_scan); 109 110 /** 111 * cm_roam_candidate_info_event() - send trigger info to userspace 112 * @ap: roam candidate info 113 * @cand_ap_idx: Candidate AP index 114 * 115 * Return: void 116 */ 117 void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap, 118 uint8_t cand_ap_idx); 119 120 /** 121 * cm_roam_result_info_event() - send scan results info to userspace 122 * @psoc: Pointer to PSOC object 123 * @trigger: Roam trigger data 124 * @res: roam result data 125 * @scan_data: Roam scan info 126 * @vdev_id: vdev id 127 * 128 * Return: void 129 */ 130 void cm_roam_result_info_event(struct wlan_objmgr_psoc *psoc, 131 struct wmi_roam_trigger_info *trigger, 132 struct wmi_roam_result *res, 133 struct wmi_roam_scan_data *scan_data, 134 uint8_t vdev_id); 135 #else 136 static inline void 137 cm_roam_scan_info_event(struct wlan_objmgr_psoc *psoc, 138 struct wmi_roam_scan_data *scan, uint8_t vdev_id) 139 { 140 } 141 142 static inline void 143 cm_roam_trigger_info_event(struct wmi_roam_trigger_info *data, 144 struct wmi_roam_scan_data *scan_data, 145 uint8_t vdev_id, bool is_full_scan) 146 { 147 } 148 149 static inline void 150 cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap, 151 uint8_t cand_idx) 152 { 153 } 154 155 static inline 156 void cm_roam_result_info_event(struct wlan_objmgr_psoc *psoc, 157 struct wmi_roam_trigger_info *trigger, 158 struct wmi_roam_result *res, 159 struct wmi_roam_scan_data *scan_data, 160 uint8_t vdev_id) 161 { 162 } 163 #endif /* WLAN_FEATURE_CONNECTIVITY_LOGGING */ 164 165 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) 166 167 /** 168 * cm_roam_state_change() - Post roam state change to roam state machine 169 * @pdev: pdev pointer 170 * @vdev_id: vdev id 171 * @requested_state: roam state to be set 172 * @reason: reason for changing roam state for the requested vdev id 173 * @send_resp: send rso stop response 174 * @start_timer: start timer for rso stop 175 * 176 * This function posts roam state change to roam state machine handling 177 * 178 * Return: QDF_STATUS 179 */ 180 QDF_STATUS 181 cm_roam_state_change(struct wlan_objmgr_pdev *pdev, 182 uint8_t vdev_id, 183 enum roam_offload_state requested_state, 184 uint8_t reason, bool *send_resp, bool start_timer); 185 186 /** 187 * cm_handle_sta_sta_roaming_enablement() - To handle roaming in case 188 * of STA + STA 189 * @psoc: psoc common object 190 * @curr_vdev_id: Vdev id 191 * 192 * This function is to process STA + STA concurrency scenarios after roaming 193 * and take care of following: 194 * 1. Set PCL to vdev/pdev as per DBS, SCC or MCC 195 * 2. Enable/disable roaming based on the concurrency (DBS vs SCC/MCC) after 196 * roaming 197 * 198 * Return: none 199 */ 200 void cm_handle_sta_sta_roaming_enablement(struct wlan_objmgr_psoc *psoc, 201 uint8_t curr_vdev_id); 202 203 /** 204 * cm_roam_send_rso_cmd() - send rso command 205 * @psoc: psoc pointer 206 * @vdev_id: vdev id 207 * @rso_command: roam command to send 208 * @reason: reason for changing roam state for the requested vdev id 209 * 210 * similar to csr_roam_offload_scan, will be used from many legacy 211 * process directly, generate a new function wlan_cm_roam_send_rso_cmd 212 * for external usage. 213 * 214 * Return: QDF_STATUS 215 */ 216 QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc, 217 uint8_t vdev_id, uint8_t rso_command, 218 uint8_t reason); 219 220 /** 221 * cm_rso_set_roam_trigger() - Send roam trigger bitmap firmware 222 * @pdev: Pointer to pdev 223 * @vdev_id: vdev id 224 * @trigger: Carries pointer of the object containing vdev id and 225 * roam_trigger_bitmap. 226 * 227 * Return: QDF_STATUS 228 */ 229 QDF_STATUS cm_rso_set_roam_trigger(struct wlan_objmgr_pdev *pdev, 230 uint8_t vdev_id, 231 struct wlan_roam_triggers *trigger); 232 233 /** 234 * cm_roam_stop_req() - roam stop request handling 235 * @psoc: psoc pointer 236 * @vdev_id: vdev id 237 * @reason: reason for changing roam state for the requested vdev id 238 * @send_resp: send rso stop response 239 * @start_timer: start timer for rso stop 240 * 241 * Return: QDF_STATUS 242 */ 243 QDF_STATUS 244 cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, 245 uint8_t reason, bool *send_resp, bool start_timer); 246 247 /** 248 * cm_roam_fill_rssi_change_params() - Fill roam scan rssi change parameters 249 * @psoc: PSOC pointer 250 * @vdev_id: vdev_id 251 * @params: RSSI change parameters 252 * 253 * Return: QDF_STATUS 254 */ 255 QDF_STATUS 256 cm_roam_fill_rssi_change_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, 257 struct wlan_roam_rssi_change_params *params); 258 259 /** 260 * cm_roam_is_change_in_band_allowed - Check whether change in roam band is 261 * allowed in FW or not 262 * @psoc: psoc pointer 263 * @vdev_id: VDEV id 264 * @roam_band_mask: band mask to check 265 * 266 * Return: return true if change in band allowed 267 */ 268 bool 269 cm_roam_is_change_in_band_allowed(struct wlan_objmgr_psoc *psoc, 270 uint8_t vdev_id, uint32_t roam_band_mask); 271 272 /** 273 * cm_dump_freq_list() - dump chan list 274 * @chan_info: chan info to dump 275 * 276 * Return: void 277 */ 278 void cm_dump_freq_list(struct rso_chan_info *chan_info); 279 280 /** 281 * cm_start_roam_invoke() - Validate and send Roam invoke req to CM 282 * @psoc: Psoc pointer 283 * @vdev: vdev 284 * @bssid: Target bssid 285 * @chan_freq: channel frequency on which reassoc should be send 286 * @source: source of the roam invoke 287 * 288 * Return: QDF_STATUS 289 */ 290 QDF_STATUS 291 cm_start_roam_invoke(struct wlan_objmgr_psoc *psoc, 292 struct wlan_objmgr_vdev *vdev, 293 struct qdf_mac_addr *bssid, 294 uint32_t chan_freq, 295 enum wlan_cm_source source); 296 #endif 297 298 /** 299 * cm_update_tried_candidate_freq_list() - on connection failure update 300 * tried_candidate_freq_list structure present in struct rso_config 301 * @psoc: psoc pointer 302 * @vdev: vdev pointer 303 * @connect_rsp: connect resp from VDEV mgr 304 * 305 * Return: void 306 */ 307 void 308 cm_update_tried_candidate_freq_list(struct wlan_objmgr_psoc *psoc, 309 struct wlan_objmgr_vdev *vdev, 310 struct wlan_cm_connect_resp *connect_rsp); 311 312 #ifdef FEATURE_WLAN_ESE 313 /** 314 * cm_create_roam_scan_channel_list() - create roam scan channel list 315 * @pdev: pdev 316 * @rso_cfg: roam config 317 * @vdev_id: vdev id 318 * @chan_freq_list: pointer to channel list 319 * @num_chan: number of channels 320 * @band: band enumeration 321 * 322 * This function modifies the roam scan channel list as per AP neighbor 323 * report; AP neighbor report may be empty or may include only other AP 324 * channels; in any case, we merge the channel list with the learned occupied 325 * channels list. 326 * if the band is 2.4G, then make sure channel list contains only 2.4G 327 * valid channels if the band is 5G, then make sure channel list contains 328 * only 5G valid channels 329 * 330 * Return: QDF_STATUS enumeration 331 */ 332 QDF_STATUS cm_create_roam_scan_channel_list(struct wlan_objmgr_pdev *pdev, 333 struct rso_config *rso_cfg, 334 uint8_t vdev_id, 335 qdf_freq_t *chan_freq_list, 336 uint8_t num_chan, 337 const enum band_info band); 338 #endif 339 340 QDF_STATUS cm_neighbor_roam_update_config(struct wlan_objmgr_pdev *pdev, 341 uint8_t vdev_id, uint8_t value, 342 uint8_t reason); 343 void cm_flush_roam_channel_list(struct rso_chan_info *channel_info); 344 345 QDF_STATUS cm_roam_control_restore_default_config(struct wlan_objmgr_pdev *pdev, 346 uint8_t vdev_id); 347 348 /** 349 * cm_update_pmk_cache_ft - API to update MDID in PMKSA cache entry 350 * @psoc: psoc pointer 351 * @vdev_id: dvev ID 352 * @pmk_cache: pmksa from the userspace 353 * 354 * Return: None 355 */ 356 void cm_update_pmk_cache_ft(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, 357 struct wlan_crypto_pmksa *pmk_cache); 358 359 /** 360 * cm_lookup_pmkid_using_bssid() - lookup pmkid using bssid 361 * @psoc: pointer to psoc 362 * @vdev_id: vdev_id 363 * @pmk_cache: pointer to pmk cache 364 * 365 * Return: true if pmkid is found else false 366 */ 367 bool cm_lookup_pmkid_using_bssid(struct wlan_objmgr_psoc *psoc, 368 uint8_t vdev_id, 369 struct wlan_crypto_pmksa *pmk_cache); 370 371 void cm_roam_restore_default_config(struct wlan_objmgr_pdev *pdev, 372 uint8_t vdev_id); 373 374 /** 375 * cm_roam_send_disable_config() - Send roam module enable/disable cfg to fw 376 * @psoc: PSOC pointer 377 * @vdev_id: vdev id 378 * @cfg: roaming enable/disable cfg 379 * 380 * Return: QDF_STATUS 381 */ 382 QDF_STATUS 383 cm_roam_send_disable_config(struct wlan_objmgr_psoc *psoc, 384 uint8_t vdev_id, uint8_t cfg); 385 386 #ifdef WLAN_VENDOR_HANDOFF_CONTROL 387 /** 388 * cm_roam_send_vendor_handoff_param_req() - send vendor handoff param cmd 389 * @psoc: psoc pointer 390 * @vdev_id: vdev id 391 * @param_value: roam stats param value 392 * @vendor_handoff_context: vendor handoff context request 393 * 394 * This function is used to send vendor handoff param cmd 395 * 396 * Return: QDF_STATUS 397 */ 398 QDF_STATUS 399 cm_roam_send_vendor_handoff_param_req(struct wlan_objmgr_psoc *psoc, 400 uint8_t vdev_id, 401 uint32_t param_value, 402 void *vendor_handoff_context); 403 404 /** 405 * cm_roam_is_vendor_handoff_control_enable() - check whether vendor handoff 406 * control feature is enable or not in driver 407 * @psoc: psoc pointer 408 * 409 * Return: true if feature supports 410 */ 411 bool 412 cm_roam_is_vendor_handoff_control_enable(struct wlan_objmgr_psoc *psoc); 413 414 /** 415 * cm_roam_update_vendor_handoff_config() - update vendor handoff param to 416 * rso config structure 417 * @psoc: psoc pointer 418 * @list: vendor handoff parameters to be updated 419 * 420 * Return: QDF_STATUS 421 */ 422 QDF_STATUS cm_roam_update_vendor_handoff_config(struct wlan_objmgr_psoc *psoc, 423 struct roam_vendor_handoff_params *list); 424 #endif 425 426 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 427 /** 428 * cm_roam_send_rt_stats_config() - Send roam event stats cfg value to FW 429 * @psoc: PSOC pointer 430 * @vdev_id: vdev id 431 * @param_value: roam stats enable/disable cfg 432 * 433 * Return: QDF_STATUS 434 */ 435 QDF_STATUS 436 cm_roam_send_rt_stats_config(struct wlan_objmgr_psoc *psoc, 437 uint8_t vdev_id, uint8_t param_value); 438 439 /** 440 * cm_roam_send_ho_delay_config() - Send HO delay value to FW to delay 441 * hand-off (in msec) by the specified duration to receive pending rx frames 442 * from current BSS. 443 * @psoc: PSOC pointer 444 * @vdev_id: vdev id 445 * @param_value: HO delay value 446 * 447 * Return: QDF_STATUS 448 */ 449 QDF_STATUS 450 cm_roam_send_ho_delay_config(struct wlan_objmgr_psoc *psoc, 451 uint8_t vdev_id, uint16_t param_value); 452 453 /** 454 * cm_exclude_rm_partial_scan_freq() - Exclude the channels in roam full scan 455 * that are already scanned as part of partial scan. 456 * @psoc: PSOC pointer 457 * @vdev_id: vdev id 458 * @param_value: include/exclude the partial scan channels in roam full scan 459 * 460 * Return: QDF_STATUS 461 */ 462 QDF_STATUS 463 cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc, 464 uint8_t vdev_id, uint8_t param_value); 465 466 /** 467 * cm_roam_full_scan_6ghz_on_disc() - Include the 6 GHz channels in roam full 468 * scan only on prior discovery of any 6 GHz support in the environment 469 * @psoc: Pointer to psoc 470 * @vdev_id: vdev id 471 * @param_value: Include the 6 GHz channels in roam full scan: 472 * 1 - Include only on prior discovery of any 6 GHz support in the environment 473 * 0 - Include all the supported 6 GHz channels by default 474 * 475 * Return: QDF_STATUS 476 */ 477 QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc, 478 uint8_t vdev_id, uint8_t param_value); 479 480 /** 481 * cm_set_roam_scan_high_rssi_offset() - Set the delta change in high RSSI at 482 * which roam scan is triggered in 2.4/5 GHz. 483 * @psoc: PSOC pointer 484 * @vdev_id: vdev id 485 * @param_value: Set the High RSSI delta for roam scan trigger 486 * * 1-16 - Set an offset value in this range 487 * * 0 - Disable 488 * 489 * Return: QDF_STATUS 490 */ 491 QDF_STATUS 492 cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc, 493 uint8_t vdev_id, uint8_t param_value); 494 #else 495 static inline QDF_STATUS 496 cm_roam_send_rt_stats_config(struct wlan_objmgr_psoc *psoc, 497 uint8_t vdev_id, uint8_t param_value) 498 { 499 return QDF_STATUS_E_NOSUPPORT; 500 } 501 502 static inline QDF_STATUS 503 cm_roam_send_ho_delay_config(struct wlan_objmgr_psoc *psoc, 504 uint8_t vdev_id, uint16_t param_value) 505 { 506 return QDF_STATUS_E_NOSUPPORT; 507 } 508 509 static inline QDF_STATUS 510 cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc, 511 uint8_t vdev_id, uint8_t param_value) 512 { 513 return QDF_STATUS_E_NOSUPPORT; 514 } 515 516 static inline 517 QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc, 518 uint8_t vdev_id, uint8_t param_value) 519 { 520 return QDF_STATUS_E_NOSUPPORT; 521 } 522 #endif 523 524 #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD) 525 void 526 cm_store_sae_single_pmk_to_global_cache(struct wlan_objmgr_psoc *psoc, 527 struct wlan_objmgr_pdev *pdev, 528 struct wlan_objmgr_vdev *vdev); 529 /** 530 * cm_check_and_set_sae_single_pmk_cap() - check if the Roamed AP support 531 * roaming using single pmk 532 * with same pmk or not 533 * @psoc: psoc 534 * @vdev_id: vdev id 535 * @psk_pmk: pmk of roamed AP 536 * @pmk_len: pml length 537 * 538 * Return: void 539 */ 540 void cm_check_and_set_sae_single_pmk_cap(struct wlan_objmgr_psoc *psoc, 541 uint8_t vdev_id, uint8_t *psk_pmk, 542 uint8_t pmk_len); 543 #else 544 static inline void 545 cm_store_sae_single_pmk_to_global_cache(struct wlan_objmgr_psoc *psoc, 546 struct wlan_objmgr_pdev *pdev, 547 struct wlan_objmgr_vdev *vdev) 548 {} 549 static inline void 550 cm_check_and_set_sae_single_pmk_cap(struct wlan_objmgr_psoc *psoc, 551 uint8_t vdev_id, uint8_t *psk_pmk, 552 uint8_t pmk_len) 553 {} 554 #endif 555 556 bool cm_is_auth_type_11r(struct wlan_mlme_psoc_ext_obj *mlme_obj, 557 struct wlan_objmgr_vdev *vdev, 558 bool mdie_present); 559 560 /** 561 * cm_update_owe_info() - Update owe transition mode element info 562 * @vdev: Object manager VDEV 563 * @rsp: connect resp from VDEV mgr 564 * @vdev_id: vdev id 565 * 566 * Return: none 567 */ 568 void cm_update_owe_info(struct wlan_objmgr_vdev *vdev, 569 struct wlan_cm_connect_resp *rsp, uint8_t vdev_id); 570 571 #ifdef WLAN_FEATURE_11BE_MLO 572 QDF_STATUS 573 cm_handle_mlo_rso_state_change(struct wlan_objmgr_pdev *pdev, uint8_t *vdev_id, 574 enum roam_offload_state requested_state, 575 uint8_t reason, bool *is_rso_skip); 576 #else 577 static inline QDF_STATUS 578 cm_handle_mlo_rso_state_change(struct wlan_objmgr_pdev *pdev, uint8_t *vdev_id, 579 enum roam_offload_state requested_state, 580 uint8_t reason, bool *is_rso_skip) 581 { 582 return QDF_STATUS_E_NOSUPPORT; 583 } 584 585 #endif 586 587 #if (defined(CONNECTIVITY_DIAG_EVENT) && \ 588 defined(WLAN_FEATURE_ROAM_OFFLOAD)) 589 /** 590 * cm_roam_mgmt_frame_event() - Roam management frame event 591 * @vdev: vdev pointer 592 * @frame_data: frame_data 593 * @scan_data: Roam scan data 594 * @result: Roam result 595 * 596 * Return: QDF_STATUS 597 */ 598 QDF_STATUS 599 cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev, 600 struct roam_frame_info *frame_data, 601 struct wmi_roam_scan_data *scan_data, 602 struct wmi_roam_result *result); 603 604 /** 605 * cm_roam_btm_req_event - Send BTM request related logging event 606 * @vdev_id: Vdev id 607 * @btm_data: BTM trigger related data 608 * @trigger_info: Roam trigger related info 609 * @is_wtc: Is WTC or BTM response 610 * 611 * Return: QDF_STATUS 612 */ 613 QDF_STATUS 614 cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data, 615 struct wmi_roam_trigger_info *trigger_info, 616 uint8_t vdev_id, bool is_wtc); 617 618 /** 619 * cm_roam_btm_resp_event() - Send BTM response logging event 620 * @trigger_info: Roam trigger related data 621 * @btm_data: BTM response data 622 * @vdev_id: Vdev id 623 * @is_wtc: Is WTC or BTM response 624 * 625 * Return: QDF_STATUS 626 */ 627 QDF_STATUS 628 cm_roam_btm_resp_event(struct wmi_roam_trigger_info *trigger_info, 629 struct roam_btm_response_data *btm_data, 630 uint8_t vdev_id, bool is_wtc); 631 632 /** 633 * cm_roam_btm_query_event() - Send BTM query logging event 634 * @btm_data: BTM data 635 * @vdev_id: Vdev id 636 * 637 * Return: QDF_STATUS 638 */ 639 QDF_STATUS 640 cm_roam_btm_query_event(struct wmi_neighbor_report_data *btm_data, 641 uint8_t vdev_id); 642 643 /** 644 * cm_roam_beacon_loss_disconnect_event() - Send BMISS disconnection logging 645 * event 646 * @psoc: Pointer to PSOC object 647 * @bssid: BSSID 648 * @vdev_id: Vdev id 649 * 650 * Return: QDF_STATUS 651 */ 652 QDF_STATUS 653 cm_roam_beacon_loss_disconnect_event(struct wlan_objmgr_psoc *psoc, 654 struct qdf_mac_addr bssid, 655 uint8_t vdev_id); 656 657 /** 658 * cm_roam_neigh_rpt_req_event() - Send Neighbor Report request logging 659 * event 660 * @neigh_rpt: Neighbor Report parameter 661 * @vdev: vdev pointer 662 */ 663 void 664 cm_roam_neigh_rpt_req_event(struct wmi_neighbor_report_data *neigh_rpt, 665 struct wlan_objmgr_vdev *vdev); 666 667 /** 668 * cm_roam_neigh_rpt_resp_event() - Send Neighbor Report response logging 669 * event 670 * @neigh_rpt: Neighbor Report parameter 671 * @vdev_id: vdev id 672 */ 673 void 674 cm_roam_neigh_rpt_resp_event(struct wmi_neighbor_report_data *neigh_rpt, 675 uint8_t vdev_id); 676 #else 677 static inline QDF_STATUS 678 cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev, 679 struct roam_frame_info *frame_data, 680 struct wmi_roam_scan_data *scan_data, 681 struct wmi_roam_result *result) 682 { 683 return QDF_STATUS_E_NOSUPPORT; 684 } 685 686 static inline QDF_STATUS 687 cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data, 688 struct wmi_roam_trigger_info *trigger_info, 689 uint8_t vdev_id, bool is_wtc) 690 { 691 return QDF_STATUS_E_NOSUPPORT; 692 } 693 694 static inline QDF_STATUS 695 cm_roam_btm_resp_event(struct wmi_roam_trigger_info *trigger_info, 696 struct roam_btm_response_data *btm_data, 697 uint8_t vdev_id, bool is_wtc) 698 { 699 return QDF_STATUS_E_NOSUPPORT; 700 } 701 702 static inline QDF_STATUS 703 cm_roam_btm_query_event(struct wmi_neighbor_report_data *btm_data, 704 uint8_t vdev_id) 705 { 706 return QDF_STATUS_E_NOSUPPORT; 707 } 708 709 static inline QDF_STATUS 710 cm_roam_beacon_loss_disconnect_event(struct wlan_objmgr_psoc *psoc, 711 struct qdf_mac_addr bssid, 712 uint8_t vdev_id) 713 { 714 return QDF_STATUS_E_NOSUPPORT; 715 } 716 717 static inline void 718 cm_roam_neigh_rpt_req_event(struct wmi_neighbor_report_data *neigh_rpt, 719 struct wlan_objmgr_vdev *vdev) 720 { 721 } 722 723 static inline void 724 cm_roam_neigh_rpt_resp_event(struct wmi_neighbor_report_data *neigh_rpt, 725 uint8_t vdev_id) 726 { 727 } 728 #endif /* FEATURE_CONNECTIVITY_LOGGING */ 729 730 /** 731 * cm_is_mbo_ap_without_pmf() - Check if the connected AP is MBO without PMF 732 * @psoc: PSOC pointer 733 * @vdev_id: vdev id 734 * 735 * Return: True if connected AP is MBO capable without PMF 736 */ 737 bool cm_is_mbo_ap_without_pmf(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id); 738 #endif /* _WLAN_CM_ROAM_OFFLOAD_H_ */ 739