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