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