1 /* 2 * Copyright (c) 2013-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 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 #include <osdep.h> 19 #include <wmi.h> 20 #include <wmi_unified_priv.h> 21 #include <wmi_unified_roam_param.h> 22 #include <wmi_unified_roam_api.h> 23 24 #ifdef FEATURE_LFR_SUBNET_DETECTION 25 QDF_STATUS 26 wmi_unified_set_gateway_params_cmd(wmi_unified_t wmi_handle, 27 struct gateway_update_req_param *req) 28 { 29 if (wmi_handle->ops->send_set_gateway_params_cmd) 30 return wmi_handle->ops->send_set_gateway_params_cmd(wmi_handle, 31 req); 32 33 return QDF_STATUS_E_FAILURE; 34 } 35 #endif /* FEATURE_LFR_SUBNET_DETECTION */ 36 37 #ifdef FEATURE_RSSI_MONITOR 38 QDF_STATUS 39 wmi_unified_set_rssi_monitoring_cmd(wmi_unified_t wmi_handle, 40 struct rssi_monitor_param *req) 41 { 42 if (wmi_handle->ops->send_set_rssi_monitoring_cmd) 43 return wmi_handle->ops->send_set_rssi_monitoring_cmd(wmi_handle, 44 req); 45 46 return QDF_STATUS_E_FAILURE; 47 } 48 #endif /* FEATURE_RSSI_MONITOR */ 49 50 QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd( 51 wmi_unified_t wmi_handle, 52 struct wlan_roam_offload_scan_rssi_params *roam_req) 53 { 54 if (wmi_handle->ops->send_roam_scan_offload_rssi_thresh_cmd) 55 return wmi_handle->ops->send_roam_scan_offload_rssi_thresh_cmd( 56 wmi_handle, roam_req); 57 58 return QDF_STATUS_E_FAILURE; 59 } 60 61 QDF_STATUS 62 wmi_unified_roam_scan_offload_scan_period( 63 wmi_unified_t wmi_handle, 64 struct wlan_roam_scan_period_params *param) 65 { 66 if (wmi_handle->ops->send_roam_scan_offload_scan_period_cmd) 67 return wmi_handle->ops->send_roam_scan_offload_scan_period_cmd( 68 wmi_handle, param); 69 70 return QDF_STATUS_E_FAILURE; 71 } 72 73 QDF_STATUS wmi_unified_roam_mawc_params_cmd( 74 wmi_unified_t wmi_handle, 75 struct wlan_roam_mawc_params *params) 76 { 77 if (wmi_handle->ops->send_roam_mawc_params_cmd) 78 return wmi_handle->ops->send_roam_mawc_params_cmd(wmi_handle, 79 params); 80 81 return QDF_STATUS_E_FAILURE; 82 } 83 84 QDF_STATUS 85 wmi_unified_roam_scan_filter_cmd(wmi_unified_t wmi_handle, 86 struct roam_scan_filter_params *roam_req) 87 { 88 if (wmi_handle->ops->send_roam_scan_filter_cmd) 89 return wmi_handle->ops->send_roam_scan_filter_cmd(wmi_handle, 90 roam_req); 91 92 return QDF_STATUS_E_FAILURE; 93 } 94 95 #ifdef FEATURE_WLAN_ESE 96 QDF_STATUS wmi_unified_plm_stop_cmd(wmi_unified_t wmi_handle, 97 const struct plm_req_params *plm) 98 { 99 if (wmi_handle->ops->send_plm_stop_cmd) 100 return wmi_handle->ops->send_plm_stop_cmd(wmi_handle, plm); 101 102 return QDF_STATUS_E_FAILURE; 103 } 104 105 QDF_STATUS wmi_unified_plm_start_cmd(wmi_unified_t wmi_handle, 106 const struct plm_req_params *plm) 107 { 108 if (wmi_handle->ops->send_plm_start_cmd) 109 return wmi_handle->ops->send_plm_start_cmd(wmi_handle, plm); 110 111 return QDF_STATUS_E_FAILURE; 112 } 113 #endif /* FEATURE_WLAN_ESE */ 114 115 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 116 QDF_STATUS wmi_unified_set_ric_req_cmd(wmi_unified_t wmi_handle, void *msg, 117 uint8_t is_add_ts) 118 { 119 if (wmi_handle->ops->send_set_ric_req_cmd) 120 return wmi_handle->ops->send_set_ric_req_cmd(wmi_handle, msg, 121 is_add_ts); 122 123 return QDF_STATUS_E_FAILURE; 124 } 125 126 QDF_STATUS wmi_unified_roam_synch_complete_cmd(wmi_unified_t wmi_handle, 127 uint8_t vdev_id) 128 { 129 if (wmi_handle->ops->send_process_roam_synch_complete_cmd) 130 return wmi_handle->ops->send_process_roam_synch_complete_cmd( 131 wmi_handle, vdev_id); 132 133 return QDF_STATUS_E_FAILURE; 134 } 135 136 #ifdef WLAN_VENDOR_HANDOFF_CONTROL 137 QDF_STATUS 138 wmi_unified_roam_vendor_handoff_req_cmd(wmi_unified_t wmi_handle, 139 uint8_t vdev_id, uint32_t param_id) 140 { 141 if (wmi_handle->ops->send_process_roam_vendor_handoff_req_cmd) 142 return wmi_handle->ops->send_process_roam_vendor_handoff_req_cmd( 143 wmi_handle, vdev_id, param_id); 144 145 return QDF_STATUS_E_FAILURE; 146 } 147 148 QDF_STATUS 149 wmi_extract_roam_vendor_control_param_event(wmi_unified_t wmi_handle, 150 uint8_t *event, uint32_t len, 151 struct roam_vendor_handoff_params **data) 152 { 153 if (wmi_handle->ops->extract_roam_vendor_control_param_event) 154 return wmi_handle->ops->extract_roam_vendor_control_param_event( 155 wmi_handle, event, len, data); 156 return QDF_STATUS_E_FAILURE; 157 } 158 #endif 159 160 #if defined(WLAN_FEATURE_ROAM_OFFLOAD) && defined(WLAN_FEATURE_11BE_MLO) 161 QDF_STATUS 162 wmi_extract_roam_synch_key_event(wmi_unified_t wmi_handle, uint8_t *event, 163 uint32_t len, 164 struct wlan_crypto_key_entry **keys, 165 uint8_t *num_keys, 166 struct qdf_mac_addr *mld_addr) 167 { 168 if (wmi_handle->ops->extract_roam_synch_key_event) 169 return wmi_handle->ops->extract_roam_synch_key_event( 170 wmi_handle, event, 171 len, keys, num_keys, 172 mld_addr); 173 174 return QDF_STATUS_E_FAILURE; 175 } 176 #endif 177 178 QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle, 179 struct roam_invoke_req *roaminvoke) 180 { 181 if (wmi_handle->ops->send_roam_invoke_cmd) 182 return wmi_handle->ops->send_roam_invoke_cmd(wmi_handle, 183 roaminvoke); 184 185 return QDF_STATUS_E_FAILURE; 186 } 187 188 QDF_STATUS 189 wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle, 190 struct wlan_roam_disconnect_params *req) 191 { 192 if (wmi_handle->ops->send_disconnect_roam_params) 193 return wmi_handle->ops->send_disconnect_roam_params(wmi_handle, 194 req); 195 return QDF_STATUS_E_FAILURE; 196 } 197 198 QDF_STATUS 199 wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle, 200 struct wlan_roam_idle_params *req) 201 { 202 if (wmi_handle->ops->send_idle_roam_params) 203 return wmi_handle->ops->send_idle_roam_params(wmi_handle, 204 req); 205 return QDF_STATUS_E_FAILURE; 206 } 207 208 QDF_STATUS 209 wmi_unified_send_roam_preauth_status(wmi_unified_t wmi_handle, 210 struct wmi_roam_auth_status_params *params) 211 { 212 if (wmi_handle->ops->send_roam_preauth_status) 213 return wmi_handle->ops->send_roam_preauth_status(wmi_handle, 214 params); 215 return QDF_STATUS_E_FAILURE; 216 } 217 218 QDF_STATUS wmi_unified_vdev_set_pcl_cmd(wmi_unified_t wmi_handle, 219 struct set_pcl_cmd_params *params) 220 { 221 if (wmi_handle->ops->send_vdev_set_pcl_cmd) 222 return wmi_handle->ops->send_vdev_set_pcl_cmd(wmi_handle, 223 params); 224 225 return QDF_STATUS_E_FAILURE; 226 } 227 #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ 228 229 #ifdef WLAN_FEATURE_11BE_MLO 230 QDF_STATUS 231 wmi_unified_roam_mlo_config_cmd(wmi_unified_t wmi_handle, 232 struct wlan_roam_mlo_config *req) 233 { 234 if (wmi_handle->ops->send_roam_mlo_config) 235 return wmi_handle->ops->send_roam_mlo_config(wmi_handle, 236 req); 237 return QDF_STATUS_E_FAILURE; 238 } 239 #endif 240 241 QDF_STATUS wmi_unified_roam_scan_offload_mode_cmd( 242 wmi_unified_t wmi_handle, 243 struct wlan_roam_scan_offload_params *rso_cfg) 244 { 245 if (wmi_handle->ops->send_roam_scan_offload_mode_cmd) 246 return wmi_handle->ops->send_roam_scan_offload_mode_cmd( 247 wmi_handle, rso_cfg); 248 249 return QDF_STATUS_E_FAILURE; 250 } 251 252 QDF_STATUS wmi_unified_send_roam_scan_offload_ap_cmd( 253 wmi_unified_t wmi_handle, 254 struct ap_profile_params *ap_profile) 255 { 256 if (wmi_handle->ops->send_roam_scan_offload_ap_profile_cmd) 257 return wmi_handle->ops->send_roam_scan_offload_ap_profile_cmd( 258 wmi_handle, ap_profile); 259 260 return QDF_STATUS_E_FAILURE; 261 } 262 263 QDF_STATUS wmi_unified_roam_scan_offload_cmd(wmi_unified_t wmi_handle, 264 uint32_t command, 265 uint32_t vdev_id) 266 { 267 if (wmi_handle->ops->send_roam_scan_offload_cmd) 268 return wmi_handle->ops->send_roam_scan_offload_cmd(wmi_handle, 269 command, 270 vdev_id); 271 272 return QDF_STATUS_E_FAILURE; 273 } 274 275 QDF_STATUS 276 wmi_unified_roam_scan_offload_chan_list_cmd( 277 wmi_unified_t wmi_handle, 278 struct wlan_roam_scan_channel_list *rso_ch_info) 279 { 280 if (wmi_handle->ops->send_roam_scan_offload_chan_list_cmd) 281 return wmi_handle->ops->send_roam_scan_offload_chan_list_cmd( 282 wmi_handle, rso_ch_info); 283 284 return QDF_STATUS_E_FAILURE; 285 } 286 287 QDF_STATUS wmi_unified_roam_scan_offload_rssi_change_cmd( 288 wmi_unified_t wmi_handle, 289 struct wlan_roam_rssi_change_params *params) 290 { 291 if (wmi_handle->ops->send_roam_scan_offload_rssi_change_cmd) 292 return wmi_handle->ops->send_roam_scan_offload_rssi_change_cmd( 293 wmi_handle, params); 294 295 return QDF_STATUS_E_FAILURE; 296 } 297 298 QDF_STATUS 299 wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle, 300 struct wlan_per_roam_config_req *req_buf) 301 { 302 if (wmi_handle->ops->send_per_roam_config_cmd) 303 return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle, 304 req_buf); 305 306 return QDF_STATUS_E_FAILURE; 307 } 308 309 QDF_STATUS wmi_unified_send_limit_off_chan_cmd( 310 wmi_unified_t wmi_handle, 311 struct wmi_limit_off_chan_param *limit_off_chan_param) 312 { 313 if (wmi_handle->ops->send_limit_off_chan_cmd) 314 return wmi_handle->ops->send_limit_off_chan_cmd(wmi_handle, 315 limit_off_chan_param); 316 317 return QDF_STATUS_E_FAILURE; 318 } 319 320 #ifdef WLAN_FEATURE_FILS_SK 321 QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle, 322 struct hlp_params *req_buf) 323 { 324 if (wmi_handle->ops->send_roam_scan_hlp_cmd) 325 return wmi_handle->ops->send_roam_scan_hlp_cmd(wmi_handle, 326 req_buf); 327 328 return QDF_STATUS_E_FAILURE; 329 } 330 #endif /* WLAN_FEATURE_FILS_SK */ 331 332 QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle, 333 struct wlan_roam_btm_config *params) 334 { 335 if (wmi_handle->ops->send_btm_config) 336 return wmi_handle->ops->send_btm_config(wmi_handle, 337 params); 338 339 return QDF_STATUS_E_FAILURE; 340 } 341 342 QDF_STATUS wmi_unified_send_bss_load_config( 343 wmi_unified_t wmi_handle, 344 struct wlan_roam_bss_load_config *params) 345 { 346 if (wmi_handle->ops->send_roam_bss_load_config) 347 return wmi_handle->ops->send_roam_bss_load_config(wmi_handle, 348 params); 349 350 return QDF_STATUS_E_FAILURE; 351 } 352 353 QDF_STATUS 354 wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle, 355 struct wlan_roam_11k_offload_params *params) 356 { 357 if (wmi_handle->ops->send_offload_11k_cmd) 358 return wmi_handle->ops->send_offload_11k_cmd(wmi_handle, 359 params); 360 361 return QDF_STATUS_E_FAILURE; 362 } 363 364 QDF_STATUS wmi_unified_invoke_neighbor_report_cmd( 365 wmi_unified_t wmi_handle, 366 struct wmi_invoke_neighbor_report_params *params) 367 { 368 if (wmi_handle->ops->send_invoke_neighbor_report_cmd) 369 return wmi_handle->ops->send_invoke_neighbor_report_cmd( 370 wmi_handle, params); 371 372 return QDF_STATUS_E_FAILURE; 373 } 374 375 QDF_STATUS wmi_unified_get_roam_scan_ch_list(wmi_unified_t wmi_handle, 376 uint8_t vdev_id) 377 { 378 if (wmi_handle->ops->send_roam_scan_ch_list_req_cmd) 379 return wmi_handle->ops->send_roam_scan_ch_list_req_cmd( 380 wmi_handle, vdev_id); 381 382 return QDF_STATUS_E_FAILURE; 383 } 384 385 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) 386 QDF_STATUS 387 wmi_extract_roam_event(wmi_unified_t wmi_handle, uint8_t *event, 388 uint32_t data_len, 389 struct roam_offload_roam_event *roam_event) 390 { 391 if (wmi_handle->ops->extract_roam_event) 392 return wmi_handle->ops->extract_roam_event(wmi_handle, event, 393 data_len, 394 roam_event); 395 396 return QDF_STATUS_E_FAILURE; 397 } 398 #endif /* WLAN_FEATURE_HOST_ROAM || WLAN_FEATURE_ROAM_OFFLOAD */ 399 400 #ifdef WLAN_FEATURE_ROAM_OFFLOAD 401 QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle, 402 struct wlan_roam_triggers *triggers) 403 { 404 if (wmi_handle->ops->send_set_roam_trigger_cmd) 405 return wmi_handle->ops->send_set_roam_trigger_cmd(wmi_handle, 406 triggers); 407 408 return QDF_STATUS_E_FAILURE; 409 } 410 411 QDF_STATUS wmi_extract_roam_sync_event(wmi_unified_t wmi_handle, void *evt_buf, 412 uint32_t len, 413 struct roam_offload_synch_ind **sync_ind) 414 { 415 if (wmi_handle->ops->extract_roam_sync_event) 416 return wmi_handle->ops->extract_roam_sync_event(wmi_handle, 417 evt_buf, 418 len, 419 sync_ind); 420 421 return QDF_STATUS_E_FAILURE; 422 } 423 424 QDF_STATUS 425 wmi_extract_roam_sync_frame_event(wmi_unified_t wmi_handle, void *event, 426 uint32_t len, 427 struct roam_synch_frame_ind *frame_ptr) 428 { 429 if (wmi_handle->ops->extract_roam_sync_frame_event) 430 return wmi_handle->ops->extract_roam_sync_frame_event(wmi_handle, 431 event, 432 len, 433 frame_ptr); 434 435 return QDF_STATUS_E_FAILURE; 436 } 437 438 QDF_STATUS 439 wmi_extract_btm_denylist_event(wmi_unified_t wmi_handle, 440 uint8_t *event, 441 uint32_t data_len, 442 struct roam_denylist_event **dst_list) 443 { 444 if (wmi_handle->ops->extract_btm_dl_event) 445 return wmi_handle->ops->extract_btm_dl_event(wmi_handle, 446 event, 447 data_len, 448 dst_list); 449 return QDF_STATUS_E_FAILURE; 450 } 451 452 QDF_STATUS 453 wmi_extract_vdev_disconnect_event(wmi_unified_t wmi_handle, 454 uint8_t *event, uint32_t data_len, 455 struct vdev_disconnect_event_data *data) 456 { 457 if (wmi_handle->ops->extract_vdev_disconnect_event) 458 return wmi_handle->ops->extract_vdev_disconnect_event( 459 wmi_handle, event, data_len, data); 460 return QDF_STATUS_E_FAILURE; 461 } 462 463 QDF_STATUS 464 wmi_extract_roam_scan_chan_list(wmi_unified_t wmi_handle, 465 uint8_t *event, uint32_t data_len, 466 struct cm_roam_scan_ch_resp **data) 467 { 468 if (wmi_handle->ops->extract_roam_scan_chan_list) 469 return wmi_handle->ops->extract_roam_scan_chan_list( 470 wmi_handle, event, data_len, data); 471 return QDF_STATUS_E_FAILURE; 472 } 473 474 QDF_STATUS 475 wmi_unified_extract_roam_btm_response(wmi_unified_t wmi, void *evt_buf, 476 struct roam_btm_response_data *dst, 477 uint8_t idx) 478 { 479 if (wmi->ops->extract_roam_btm_response_stats) 480 return wmi->ops->extract_roam_btm_response_stats(wmi, evt_buf, 481 dst, idx); 482 483 return QDF_STATUS_E_FAILURE; 484 } 485 486 QDF_STATUS 487 wmi_unified_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf, 488 struct roam_initial_data *dst, 489 uint8_t idx) 490 { 491 if (wmi->ops->extract_roam_initial_info) 492 return wmi->ops->extract_roam_initial_info(wmi, evt_buf, 493 dst, idx); 494 495 return QDF_STATUS_E_FAILURE; 496 } 497 498 QDF_STATUS 499 wmi_unified_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf, 500 struct roam_msg_info *dst, uint8_t idx) 501 { 502 if (wmi->ops->extract_roam_msg_info) 503 return wmi->ops->extract_roam_msg_info(wmi, evt_buf, dst, idx); 504 505 return QDF_STATUS_E_FAILURE; 506 } 507 508 QDF_STATUS 509 wmi_unified_extract_roam_extract_frame_info(wmi_unified_t wmi, void *evt_buf, 510 struct roam_frame_stats *dst, 511 uint8_t idx, uint8_t num_frames) 512 { 513 if (wmi->ops->extract_roam_frame_info) 514 return wmi->ops->extract_roam_frame_info(wmi, evt_buf, 515 dst, idx, num_frames); 516 517 return QDF_STATUS_E_FAILURE; 518 } 519 520 QDF_STATUS 521 wmi_extract_roam_stats_event(wmi_unified_t wmi_handle, 522 uint8_t *event, uint32_t data_len, 523 struct roam_stats_event **stats_info) 524 { 525 if (wmi_handle->ops->extract_roam_stats_event) 526 return wmi_handle->ops->extract_roam_stats_event(wmi_handle, 527 event, 528 data_len, 529 stats_info); 530 531 return QDF_STATUS_E_FAILURE; 532 } 533 534 QDF_STATUS 535 wmi_extract_auth_offload_event(wmi_unified_t wmi_handle, 536 uint8_t *event, uint32_t data_len, 537 struct auth_offload_event *auth_event) 538 { 539 if (wmi_handle->ops->extract_auth_offload_event) 540 return wmi_handle->ops->extract_auth_offload_event(wmi_handle, 541 event, 542 data_len, 543 auth_event); 544 return QDF_STATUS_E_FAILURE; 545 } 546 547 QDF_STATUS 548 wmi_extract_roam_pmkid_request(wmi_unified_t wmi_handle, 549 uint8_t *event, uint32_t data_len, 550 struct roam_pmkid_req_event **list) 551 { 552 if (wmi_handle->ops->extract_roam_pmkid_request) 553 return wmi_handle->ops->extract_roam_pmkid_request(wmi_handle, 554 event, 555 data_len, 556 list); 557 558 return QDF_STATUS_E_FAILURE; 559 } 560 561 QDF_STATUS 562 wmi_extract_roam_candidate_frame_event(wmi_unified_t wmi_handle, uint8_t *event, 563 uint32_t len, 564 struct roam_scan_candidate_frame *data) 565 { 566 if (wmi_handle->ops->extract_roam_candidate_frame) 567 return wmi_handle->ops->extract_roam_candidate_frame( 568 wmi_handle, 569 event, 570 len, data); 571 return QDF_STATUS_E_FAILURE; 572 } 573 #endif 574