1 /* 2 * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022 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: Declares VDEV MLME SM APIs and structures 22 */ 23 24 #ifndef _VDEV_MLME_SM_H_ 25 #define _VDEV_MLME_SM_H_ 26 27 #ifdef WLAN_FEATURE_11BE_MLO 28 #include <wlan_mlo_mgr_ap.h> 29 #include <wlan_mlo_mgr_sta.h> 30 #endif 31 #include <wlan_dfs_utils_api.h> 32 33 /** 34 * mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM 35 * @vdev_mlme: MLME VDEV comp object 36 * @event: MLME event 37 * @event_data_len: data size 38 * @event_data: event data 39 * 40 * API to dispatch event to VDEV MLME SM 41 * 42 * Return: SUCCESS: on handling event 43 * FAILURE: on ignoring the event 44 */ 45 QDF_STATUS mlme_vdev_sm_deliver_event(struct vdev_mlme_obj *vdev_mlme, 46 enum wlan_vdev_sm_evt event, 47 uint16_t event_data_len, 48 void *event_data); 49 50 /** 51 * mlme_vdev_sm_print_state_event() - Prints the state/substate, event 52 * @vdev_mlme: MLME VDEV comp object 53 * @event: MLME event 54 * 55 * API to print current state/substate, events in readable format 56 * 57 * Return: void 58 */ 59 void mlme_vdev_sm_print_state_event(struct vdev_mlme_obj *vdev_mlme, 60 enum wlan_vdev_sm_evt event); 61 62 /** 63 * mlme_vdev_sm_print_state() - Prints the state/substate 64 * @vdev_mlme: MLME VDEV comp object 65 * 66 * API to print current state/substate 67 * 68 * Return: void 69 */ 70 void mlme_vdev_sm_print_state(struct vdev_mlme_obj *vdev_mlme); 71 #ifdef SM_ENG_HIST_ENABLE 72 /** 73 * mlme_vdev_sm_history_print() - Prints SM history 74 * @vdev_mlme: MLME VDEV comp object 75 * 76 * API to print SM history 77 * 78 * Return: void 79 */ 80 void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme); 81 #endif 82 83 #endif 84 85 /** 86 * mlme_vdev_sm_create - Invoke SME creation for VDEV 87 * @vdev_mlme_obj: VDEV MLME comp object 88 * 89 * API allocates VDEV MLME SM and initializes SM lock 90 * 91 * Return: SUCCESS on successful allocation 92 * FAILURE, if registration fails 93 */ 94 QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme); 95 96 /** 97 * mlme_vdev_sm_destroy - Invoke SME destroy for VDEV 98 * @vdev_mlme_obj: VDEV MLME comp object 99 * 100 * API frees VDEV MLME SM and destroys the SM lock 101 * 102 * Return: SUCCESS on successful destroy 103 * FAILURE, if registration fails 104 */ 105 QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme); 106 107 /** 108 * mlme_vdev_validate_basic_params - Validate basic params 109 * @vdev_mlme_obj: VDEV MLME comp object 110 * @event_data_len: data size 111 * @event_data: event data 112 * 113 * API validate MLME VDEV basic parameters 114 * 115 * Return: SUCCESS on successful validation 116 * FAILURE, if any parameter is not initialized 117 */ 118 static inline QDF_STATUS mlme_vdev_validate_basic_params( 119 struct vdev_mlme_obj *vdev_mlme, 120 uint16_t event_data_len, void *event_data) 121 { 122 QDF_STATUS ret = QDF_STATUS_SUCCESS; 123 124 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params) 125 ret = vdev_mlme->ops->mlme_vdev_validate_basic_params( 126 vdev_mlme, event_data_len, event_data); 127 128 return ret; 129 } 130 131 /** 132 * mlme_vdev_reset_proto_params - Reset VDEV protocol params 133 * @vdev_mlme_obj: VDEV MLME comp object 134 * @event_data_len: data size 135 * @event_data: event data 136 * 137 * API resets the protocol params of vdev 138 * 139 * Return: SUCCESS on successful reset 140 * FAILURE, if it fails due to any 141 */ 142 static inline QDF_STATUS mlme_vdev_reset_proto_params( 143 struct vdev_mlme_obj *vdev_mlme, 144 uint16_t event_data_len, void *event_data) 145 { 146 QDF_STATUS ret = QDF_STATUS_SUCCESS; 147 148 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params) 149 ret = vdev_mlme->ops->mlme_vdev_reset_proto_params( 150 vdev_mlme, event_data_len, event_data); 151 152 return ret; 153 } 154 155 /** 156 * mlme_vdev_start_send - Invokes VDEV start operation 157 * @vdev_mlme_obj: VDEV MLME comp object 158 * @event_data_len: data size 159 * @event_data: event data 160 * 161 * API invokes VDEV start operation 162 * 163 * Return: SUCCESS on successful completion of start operation 164 * FAILURE, if it fails due to any 165 */ 166 static inline QDF_STATUS mlme_vdev_start_send( 167 struct vdev_mlme_obj *vdev_mlme, 168 uint16_t event_data_len, void *event_data) 169 { 170 QDF_STATUS ret = QDF_STATUS_SUCCESS; 171 172 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send) 173 ret = vdev_mlme->ops->mlme_vdev_start_send( 174 vdev_mlme, event_data_len, event_data); 175 176 return ret; 177 } 178 179 /** 180 * mlme_vdev_restart_send - Invokes VDEV restart operation 181 * @vdev_mlme_obj: VDEV MLME comp object 182 * @event_data_len: data size 183 * @event_data: event data 184 * 185 * API invokes VDEV restart operation 186 * 187 * Return: SUCCESS on successful completion of restart operation 188 * FAILURE, if it fails due to any 189 */ 190 static inline QDF_STATUS mlme_vdev_restart_send( 191 struct vdev_mlme_obj *vdev_mlme, 192 uint16_t event_data_len, void *event_data) 193 { 194 QDF_STATUS ret = QDF_STATUS_SUCCESS; 195 196 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send) 197 ret = vdev_mlme->ops->mlme_vdev_restart_send( 198 vdev_mlme, event_data_len, event_data); 199 200 return ret; 201 } 202 203 /** 204 * mlme_vdev_stop_start_send - Invoke block VDEV restart operation 205 * @vdev_mlme_obj: VDEV MLME comp object 206 * @restart: restart req/start req 207 * @event_data_len: data size 208 * @event_data: event data 209 * 210 * API invokes stops pending VDEV restart operation 211 * 212 * Return: SUCCESS alsways 213 */ 214 static inline QDF_STATUS mlme_vdev_stop_start_send( 215 struct vdev_mlme_obj *vdev_mlme, 216 uint8_t restart, 217 uint16_t event_data_len, void *event_data) 218 { 219 QDF_STATUS ret = QDF_STATUS_SUCCESS; 220 221 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send) 222 ret = vdev_mlme->ops->mlme_vdev_stop_start_send( 223 vdev_mlme, restart, event_data_len, event_data); 224 225 return ret; 226 } 227 228 /** 229 * mlme_vdev_start_continue - VDEV start response handling 230 * @vdev_mlme_obj: VDEV MLME comp object 231 * @event_data_len: data size 232 * @event_data: event data 233 * 234 * API invokes VDEV start response actions 235 * 236 * Return: SUCCESS on successful completion of start response operation 237 * FAILURE, if it fails due to any 238 */ 239 static inline QDF_STATUS mlme_vdev_start_continue( 240 struct vdev_mlme_obj *vdev_mlme, 241 uint16_t event_data_len, void *event_data) 242 { 243 QDF_STATUS ret = QDF_STATUS_SUCCESS; 244 245 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue) 246 ret = vdev_mlme->ops->mlme_vdev_start_continue( 247 vdev_mlme, event_data_len, event_data); 248 249 return ret; 250 } 251 252 /** 253 * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause 254 * @vdev_mlme_obj: VDEV MLME comp object 255 * @event_data_len: data size 256 * @event_data: event data 257 * 258 * API invokes on START fail response 259 * 260 * Return: SUCCESS on successful invocation of callback 261 * FAILURE, if it fails due to any 262 */ 263 static inline QDF_STATUS mlme_vdev_start_req_failed( 264 struct vdev_mlme_obj *vdev_mlme, 265 uint16_t event_data_len, void *event_data) 266 { 267 QDF_STATUS ret = QDF_STATUS_SUCCESS; 268 269 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed) 270 ret = vdev_mlme->ops->mlme_vdev_start_req_failed( 271 vdev_mlme, event_data_len, event_data); 272 273 return ret; 274 } 275 276 /** 277 * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause 278 * @vdev_mlme_obj: VDEV MLME comp object 279 * @event_data_len: data size 280 * @event_data: event data 281 * 282 * API invokes connection SM to start station connection 283 * 284 * Return: SUCCESS on successful invocation of connection sm 285 * FAILURE, if it fails due to any 286 */ 287 static inline QDF_STATUS mlme_vdev_sta_conn_start( 288 struct vdev_mlme_obj *vdev_mlme, 289 uint16_t event_data_len, void *event_data) 290 { 291 QDF_STATUS ret = QDF_STATUS_SUCCESS; 292 293 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start) 294 ret = vdev_mlme->ops->mlme_vdev_sta_conn_start( 295 vdev_mlme, event_data_len, event_data); 296 297 return ret; 298 } 299 300 /** 301 * mlme_vdev_sta_disconn_start - Invoke Station VDEV disconnection 302 * @vdev_mlme_obj: VDEV MLME comp object 303 * @event_data_len: data size 304 * @event_data: event data 305 * 306 * API invokes connection SM to start station disconnection 307 * 308 * Return: SUCCESS on successful invocation of disconnection sm 309 * FAILURE, if it fails due to any 310 */ 311 static inline QDF_STATUS mlme_vdev_sta_disconn_start( 312 struct vdev_mlme_obj *vdev_mlme, 313 uint16_t event_data_len, void *event_data) 314 { 315 QDF_STATUS ret = QDF_STATUS_SUCCESS; 316 317 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_disconn_start) 318 ret = vdev_mlme->ops->mlme_vdev_sta_disconn_start( 319 vdev_mlme, event_data_len, event_data); 320 321 return ret; 322 } 323 324 /** 325 * mlme_vdev_up_send - VDEV up operation 326 * @vdev_mlme_obj: VDEV MLME comp object 327 * @event_data_len: data size 328 * @event_data: event data 329 * 330 * API invokes VDEV up operations 331 * 332 * Return: SUCCESS on successful completion of up operation 333 * FAILURE, if it fails due to any 334 */ 335 static inline QDF_STATUS mlme_vdev_up_send( 336 struct vdev_mlme_obj *vdev_mlme, 337 uint16_t event_data_len, void *event_data) 338 { 339 QDF_STATUS ret = QDF_STATUS_SUCCESS; 340 341 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send) 342 ret = vdev_mlme->ops->mlme_vdev_up_send( 343 vdev_mlme, event_data_len, event_data); 344 345 return ret; 346 } 347 348 /** 349 * mlme_vdev_notify_up_complete - VDEV up state transition notification 350 * @vdev_mlme_obj: VDEV MLME comp object 351 * @event_data_len: data size 352 * @event_data: event data 353 * 354 * API notifies MLME on moving to UP state 355 * 356 * Return: SUCCESS on successful completion of up notification 357 * FAILURE, if it fails due to any 358 */ 359 static inline 360 QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme, 361 uint16_t event_data_len, 362 void *event_data) 363 { 364 QDF_STATUS ret = QDF_STATUS_SUCCESS; 365 366 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete) 367 ret = vdev_mlme->ops->mlme_vdev_notify_up_complete( 368 vdev_mlme, event_data_len, event_data); 369 370 return ret; 371 } 372 373 /** 374 * mlme_vdev_notify_roam_start - VDEV Roaming notification 375 * @vdev_mlme_obj: VDEV MLME comp object 376 * @event_len: data size 377 * @event_data: event data 378 * 379 * API notifies MLME on roaming 380 * 381 * Return: SUCCESS on successful completion of up notification 382 * FAILURE, if it fails due to any 383 */ 384 static inline 385 QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme, 386 uint16_t event_len, void *event_data) 387 { 388 QDF_STATUS ret = QDF_STATUS_SUCCESS; 389 390 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start) 391 ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme, 392 event_len, 393 event_data); 394 395 return ret; 396 } 397 398 /** 399 * mlme_vdev_update_beacon - Updates beacon 400 * @vdev_mlme_obj: VDEV MLME comp object 401 * @op: beacon update type 402 * @event_data_len: data size 403 * @event_data: event data 404 * 405 * API updates/allocates/frees the beacon 406 * 407 * Return: SUCCESS on successful update of beacon 408 * FAILURE, if it fails due to any 409 */ 410 static inline 411 QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme, 412 enum beacon_update_op op, 413 uint16_t event_data_len, void *event_data) 414 { 415 QDF_STATUS ret = QDF_STATUS_SUCCESS; 416 417 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon) 418 ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op, 419 event_data_len, event_data); 420 421 return ret; 422 } 423 424 /** 425 * mlme_vdev_disconnect_peers - Disconnect peers 426 * @vdev_mlme_obj: VDEV MLME comp object 427 * @event_data_len: data size 428 * @event_data: event data 429 * 430 * API trigger stations disconnection with AP VDEV or AP disconnection with STA 431 * VDEV 432 * 433 * Return: SUCCESS on successful invocation of station disconnection 434 * FAILURE, if it fails due to any 435 */ 436 static inline QDF_STATUS mlme_vdev_disconnect_peers( 437 struct vdev_mlme_obj *vdev_mlme, 438 uint16_t event_data_len, void *event_data) 439 { 440 QDF_STATUS ret = QDF_STATUS_SUCCESS; 441 442 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers) 443 ret = vdev_mlme->ops->mlme_vdev_disconnect_peers( 444 vdev_mlme, event_data_len, event_data); 445 446 return ret; 447 } 448 449 /** 450 * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer 451 * @vdev_mlme_obj: VDEV MLME comp object 452 * @event_data_len: data size 453 * @event_data: event data 454 * 455 * API stops the CAC timer through DFS API 456 * 457 * Return: SUCCESS on successful CAC timer stop 458 * FAILURE, if it fails due to any 459 */ 460 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop( 461 struct vdev_mlme_obj *vdev_mlme, 462 uint16_t event_data_len, void *event_data) 463 { 464 QDF_STATUS ret = QDF_STATUS_SUCCESS; 465 466 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop) 467 ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop( 468 vdev_mlme, event_data_len, event_data); 469 470 return ret; 471 } 472 473 /** 474 * mlme_vdev_stop_send - Invokes VDEV stop operation 475 * @vdev_mlme_obj: VDEV MLME comp object 476 * @event_data_len: data size 477 * @event_data: event data 478 * 479 * API invokes VDEV stop operation 480 * 481 * Return: SUCCESS on successful completion of stop operation 482 * FAILURE, if it fails due to any 483 */ 484 static inline QDF_STATUS mlme_vdev_stop_send( 485 struct vdev_mlme_obj *vdev_mlme, 486 uint16_t event_data_len, void *event_data) 487 { 488 QDF_STATUS ret = QDF_STATUS_SUCCESS; 489 490 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send) 491 ret = vdev_mlme->ops->mlme_vdev_stop_send( 492 vdev_mlme, event_data_len, event_data); 493 494 return ret; 495 } 496 497 /** 498 * mlme_vdev_stop_continue - VDEV stop response handling 499 * @vdev_mlme_obj: VDEV MLME comp object 500 * @event_data_len: data size 501 * @event_data: event data 502 * 503 * API invokes VDEV stop response actions 504 * 505 * Return: SUCCESS on successful completion of stop response operation 506 * FAILURE, if it fails due to any 507 */ 508 static inline QDF_STATUS mlme_vdev_stop_continue( 509 struct vdev_mlme_obj *vdev_mlme, 510 uint16_t event_data_len, void *event_data) 511 { 512 QDF_STATUS ret = QDF_STATUS_SUCCESS; 513 514 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue) 515 ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme, 516 event_data_len, 517 event_data); 518 519 return ret; 520 } 521 522 /** 523 * mlme_vdev_down_send - VDEV down operation 524 * @vdev_mlme_obj: VDEV MLME comp object 525 * @event_data_len: data size 526 * @event_data: event data 527 * 528 * API invokes VDEV down operation 529 * 530 * Return: SUCCESS on successful completion of VDEV down operation 531 * FAILURE, if it fails due to any 532 */ 533 static inline QDF_STATUS mlme_vdev_down_send( 534 struct vdev_mlme_obj *vdev_mlme, 535 uint16_t event_data_len, void *event_data) 536 { 537 QDF_STATUS ret = QDF_STATUS_SUCCESS; 538 539 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send) 540 ret = vdev_mlme->ops->mlme_vdev_down_send( 541 vdev_mlme, event_data_len, event_data); 542 543 return ret; 544 } 545 546 /** 547 * mlme_vdev_notify_down_complete - VDEV init state transition notification 548 * @vdev_mlme_obj: VDEV MLME comp object 549 * @event_data_len: data size 550 * @event_data: event data 551 * 552 * API notifies MLME on moving to INIT state 553 * 554 * Return: SUCCESS on successful completion of down notification 555 * FAILURE, if it fails due to any 556 */ 557 static inline QDF_STATUS mlme_vdev_notify_down_complete( 558 struct vdev_mlme_obj *vdev_mlme, 559 uint16_t event_data_len, void *event_data) 560 { 561 QDF_STATUS ret = QDF_STATUS_SUCCESS; 562 563 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete) 564 ret = vdev_mlme->ops->mlme_vdev_notify_down_complete( 565 vdev_mlme, event_data_len, event_data); 566 567 return ret; 568 } 569 570 /** 571 * mlme_vdev_notify_start_state_exit - VDEV SM start state exit notification 572 * @vdev_mlme_obj: VDEV MLME comp object 573 * 574 * API notifies on start state exit 575 * 576 * Return: SUCCESS on successful completion of notification 577 * FAILURE, if it fails due to any 578 */ 579 static inline QDF_STATUS mlme_vdev_notify_start_state_exit( 580 struct vdev_mlme_obj *vdev_mlme) 581 { 582 QDF_STATUS ret = QDF_STATUS_SUCCESS; 583 584 if ((vdev_mlme->ops) && 585 vdev_mlme->ops->mlme_vdev_notify_start_state_exit) 586 ret = vdev_mlme->ops->mlme_vdev_notify_start_state_exit( 587 vdev_mlme); 588 589 return ret; 590 } 591 592 /** 593 * mlme_vdev_is_newchan_no_cac - Checks new channel requires CAC 594 * @vdev_mlme_obj: VDEV MLME comp object 595 * 596 * API checks whether Channel needs CAC period, 597 * if yes, it moves to SUSPEND_RESTART to disconnect stations before 598 * sending RESTART to FW, otherwise, it moves to RESTART_PROGRESS substate 599 * 600 * Return: SUCCESS to move to RESTART_PROGRESS substate 601 * FAILURE, move to SUSPEND_RESTART state 602 */ 603 static inline QDF_STATUS mlme_vdev_is_newchan_no_cac( 604 struct vdev_mlme_obj *vdev_mlme) 605 { 606 QDF_STATUS ret = QDF_STATUS_SUCCESS; 607 608 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_is_newchan_no_cac) 609 ret = vdev_mlme->ops->mlme_vdev_is_newchan_no_cac(vdev_mlme); 610 611 return ret; 612 } 613 614 /** 615 * mlme_vdev_dfs_cac_wait_notify - Notifies DFS CAC wait state 616 * @vdev_mlme_obj: VDEV MLME comp object 617 * 618 * Return: NO_SUPPORT if the callback is not supported. 619 * SUCCESS if DFS CAC Wait notification handled by caller 620 */ 621 static inline QDF_STATUS mlme_vdev_dfs_cac_wait_notify( 622 struct vdev_mlme_obj *vdev_mlme) 623 { 624 QDF_STATUS ret = QDF_STATUS_E_NOSUPPORT; 625 626 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_wait_notify) 627 ret = vdev_mlme->ops->mlme_vdev_dfs_cac_wait_notify(vdev_mlme); 628 629 return ret; 630 } 631 632 /** 633 * mlme_vdev_chan_switch_disable_notify_dfs - Notifies DFS when channel 634 * switch is disabled 635 * @vdev_mlme: VDEV MLME comp object 636 * 637 * Return: QDF_STATUS. 638 */ 639 static inline QDF_STATUS mlme_vdev_chan_switch_disable_notify_dfs( 640 struct vdev_mlme_obj *vdev_mlme) 641 { 642 return utils_dfs_radar_enable(wlan_vdev_get_pdev(vdev_mlme->vdev)); 643 } 644 #ifdef WLAN_FEATURE_11BE_MLO 645 /** 646 * mlme_vdev_up_notify_mlo_mgr - notify mlo link is ready to up 647 * @vdev_mlme_obj: VDEV MLME comp object 648 * 649 * Return: VOID. 650 */ 651 static inline void mlme_vdev_up_notify_mlo_mgr(struct vdev_mlme_obj *vdev_mlme) 652 { 653 if (wlan_vdev_mlme_is_mlo_ap(vdev_mlme->vdev)) 654 mlo_ap_link_sync_wait_notify(vdev_mlme->vdev); 655 } 656 657 /** 658 * mlme_vdev_start_rsp_notify_mlo_mgr - notify mlo link is started 659 * @vdev_mlme_obj: VDEV MLME comp object 660 * 661 * Return: VOID. 662 */ 663 static inline void mlme_vdev_start_rsp_notify_mlo_mgr( 664 struct vdev_mlme_obj *vdev_mlme) 665 { 666 if (wlan_vdev_mlme_is_mlo_ap(vdev_mlme->vdev)) 667 mlo_ap_link_start_rsp_notify(vdev_mlme->vdev); 668 } 669 670 /** 671 * mlme_vdev_down_cmpl_notify_mlo_mgr - notify mlo link is down complete 672 * @vdev_mlme_obj: VDEV MLME comp object 673 * 674 * Return: VOID. 675 */ 676 static inline void mlme_vdev_down_cmpl_notify_mlo_mgr( 677 struct vdev_mlme_obj *vdev_mlme) 678 { 679 if (wlan_vdev_mlme_is_mlo_ap(vdev_mlme->vdev)) 680 mlo_ap_link_down_cmpl_notify(vdev_mlme->vdev); 681 } 682 683 /** 684 * mlme_vdev_up_active_notify_mlo_mgr - notify mlo link is up active 685 * @vdev_mlme_obj: VDEV MLME comp object 686 * 687 * Return: VOID. 688 */ 689 static inline void mlme_vdev_up_active_notify_mlo_mgr( 690 struct vdev_mlme_obj *vdev_mlme) 691 { 692 if ((wlan_vdev_mlme_get_opmode(vdev_mlme->vdev) == QDF_STA_MODE) && 693 wlan_vdev_mlme_is_mlo_vdev(vdev_mlme->vdev)) 694 mlo_sta_up_active_notify(vdev_mlme->vdev); 695 } 696 #else 697 static inline void mlme_vdev_up_notify_mlo_mgr(struct vdev_mlme_obj *vdev_mlme) 698 { 699 } 700 701 static inline void mlme_vdev_start_rsp_notify_mlo_mgr( 702 struct vdev_mlme_obj *vdev_mlme) 703 { 704 } 705 706 static inline void mlme_vdev_down_cmpl_notify_mlo_mgr( 707 struct vdev_mlme_obj *vdev_mlme) 708 { 709 } 710 711 static inline void mlme_vdev_up_active_notify_mlo_mgr( 712 struct vdev_mlme_obj *vdev_mlme) 713 { 714 } 715 #endif 716 717 #ifdef VDEV_SM_LOCK_SUPPORT 718 /** 719 * mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock 720 * @vdev_mlme_obj: VDEV MLME comp object 721 * 722 * Creates VDEV MLME spinlock 723 * 724 * Return: void 725 */ 726 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme) 727 { 728 qdf_spinlock_create(&vdev_mlme->sm_lock); 729 } 730 731 /** 732 * mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock 733 * @vdev_mlme_obj: VDEV MLME comp object 734 * 735 * Destroy VDEV MLME spinlock 736 * 737 * Return: void 738 */ 739 static inline void mlme_vdev_sm_spinlock_destroy( 740 struct vdev_mlme_obj *vdev_mlme) 741 { 742 qdf_spinlock_destroy(&vdev_mlme->sm_lock); 743 } 744 745 /** 746 * mlme_vdev_sm_spin_lock - acquire spinlock 747 * @vdev_mlme_obj: vdev mlme comp object 748 * 749 * acquire vdev mlme spinlock 750 * 751 * return: void 752 */ 753 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme) 754 { 755 qdf_spin_lock_bh(&vdev_mlme->sm_lock); 756 } 757 758 /** 759 * mlme_vdev_sm_spin_unlock - release spinlock 760 * @vdev_mlme_obj: vdev mlme comp object 761 * 762 * release vdev mlme spinlock 763 * 764 * return: void 765 */ 766 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme) 767 { 768 qdf_spin_unlock_bh(&vdev_mlme->sm_lock); 769 } 770 771 /** 772 * mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex 773 * @vdev_mlme_obj: VDEV MLME comp object 774 * 775 * Creates VDEV MLME cmd mutex 776 * 777 * Return: void 778 */ 779 static inline void 780 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme) 781 { 782 qdf_mutex_create(&vdev_mlme->vdev_cmd_lock); 783 } 784 785 /** 786 * mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex 787 * @vdev_mlme_obj: VDEV MLME comp object 788 * 789 * Destroy VDEV MLME cmd mutex 790 * 791 * Return: void 792 */ 793 static inline void 794 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme) 795 { 796 qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock); 797 } 798 799 /** 800 * mlme_vdev_cmd_mutex_acquire - acquire mutex 801 * @vdev_mlme_obj: vdev mlme comp object 802 * 803 * acquire vdev mlme cmd mutex 804 * 805 * return: void 806 */ 807 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme) 808 { 809 qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock); 810 } 811 812 /** 813 * mlme_vdev_cmd_mutex_release - release mutex 814 * @vdev_mlme_obj: vdev mlme comp object 815 * 816 * release vdev mlme cmd mutex 817 * 818 * return: void 819 */ 820 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme) 821 { 822 qdf_mutex_release(&vdev_mlme->vdev_cmd_lock); 823 } 824 825 #else 826 static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme) 827 { 828 mlme_debug("VDEV SM lock is disabled!!!"); 829 } 830 831 static inline void mlme_vdev_sm_spinlock_destroy( 832 struct vdev_mlme_obj *vdev_mlme) 833 { 834 mlme_debug("VDEV SM lock is disabled!!!"); 835 } 836 837 static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme) 838 { 839 } 840 841 static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme) 842 { 843 } 844 845 static inline void 846 mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme) 847 { 848 mlme_debug("VDEV CMD lock is disabled!!!"); 849 } 850 851 static inline void 852 mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme) 853 { 854 mlme_debug("VDEV CMD lock is disabled!!!"); 855 } 856 857 static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme) 858 { 859 } 860 861 static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme) 862 { 863 } 864 #endif 865