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