1 /* 2 * Copyright (c) 2018 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 #endif 179 struct wlan_sm *sm_hdl; 180 struct wlan_objmgr_vdev *vdev; 181 struct vdev_mlme_ops *ops; 182 void *ext_vdev_ptr; 183 }; 184 185 /** 186 * mlme_vdev_validate_basic_params - Validate basic params 187 * @vdev_mlme_obj: VDEV MLME comp object 188 * @event_data_len: data size 189 * @event_data: event data 190 * 191 * API validate MLME VDEV basic parameters 192 * 193 * Return: SUCCESS on successful validation 194 * FAILURE, if any parameter is not initialized 195 */ 196 static inline QDF_STATUS mlme_vdev_validate_basic_params( 197 struct vdev_mlme_obj *vdev_mlme, 198 uint16_t event_data_len, void *event_data) 199 { 200 QDF_STATUS ret = QDF_STATUS_SUCCESS; 201 202 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params) 203 ret = vdev_mlme->ops->mlme_vdev_validate_basic_params( 204 vdev_mlme, event_data_len, event_data); 205 206 return ret; 207 } 208 209 /** 210 * mlme_vdev_reset_proto_params - Reset VDEV protocol params 211 * @vdev_mlme_obj: VDEV MLME comp object 212 * @event_data_len: data size 213 * @event_data: event data 214 * 215 * API resets the protocol params fo vdev 216 * 217 * Return: SUCCESS on successful reset 218 * FAILURE, if it fails due to any 219 */ 220 static inline QDF_STATUS mlme_vdev_reset_proto_params( 221 struct vdev_mlme_obj *vdev_mlme, 222 uint16_t event_data_len, void *event_data) 223 { 224 QDF_STATUS ret = QDF_STATUS_SUCCESS; 225 226 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_reset_proto_params) 227 ret = vdev_mlme->ops->mlme_vdev_reset_proto_params( 228 vdev_mlme, event_data_len, event_data); 229 230 return ret; 231 } 232 233 /** 234 * mlme_vdev_start_send - Invokes VDEV start operation 235 * @vdev_mlme_obj: VDEV MLME comp object 236 * @event_data_len: data size 237 * @event_data: event data 238 * 239 * API invokes VDEV start operation 240 * 241 * Return: SUCCESS on successful completion of start operation 242 * FAILURE, if it fails due to any 243 */ 244 static inline QDF_STATUS mlme_vdev_start_send( 245 struct vdev_mlme_obj *vdev_mlme, 246 uint16_t event_data_len, void *event_data) 247 { 248 QDF_STATUS ret = QDF_STATUS_SUCCESS; 249 250 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_send) 251 ret = vdev_mlme->ops->mlme_vdev_start_send( 252 vdev_mlme, event_data_len, event_data); 253 254 return ret; 255 } 256 257 /** 258 * mlme_vdev_restart_send - Invokes VDEV restart operation 259 * @vdev_mlme_obj: VDEV MLME comp object 260 * @event_data_len: data size 261 * @event_data: event data 262 * 263 * API invokes VDEV restart operation 264 * 265 * Return: SUCCESS on successful completion of restart operation 266 * FAILURE, if it fails due to any 267 */ 268 static inline QDF_STATUS mlme_vdev_restart_send( 269 struct vdev_mlme_obj *vdev_mlme, 270 uint16_t event_data_len, void *event_data) 271 { 272 QDF_STATUS ret = QDF_STATUS_SUCCESS; 273 274 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_restart_send) 275 ret = vdev_mlme->ops->mlme_vdev_restart_send( 276 vdev_mlme, event_data_len, event_data); 277 278 return ret; 279 } 280 281 /** 282 * mlme_vdev_stop_start_send - Invoke block VDEV restart operation 283 * @vdev_mlme_obj: VDEV MLME comp object 284 * @restart: restart req/start req 285 * @event_data_len: data size 286 * @event_data: event data 287 * 288 * API invokes stops pending VDEV restart operation 289 * 290 * Return: SUCCESS alsways 291 */ 292 static inline QDF_STATUS mlme_vdev_stop_start_send( 293 struct vdev_mlme_obj *vdev_mlme, 294 uint8_t restart, 295 uint16_t event_data_len, void *event_data) 296 { 297 QDF_STATUS ret = QDF_STATUS_SUCCESS; 298 299 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send) 300 ret = vdev_mlme->ops->mlme_vdev_stop_start_send( 301 vdev_mlme, restart, event_data_len, event_data); 302 303 return ret; 304 } 305 306 /** 307 * mlme_vdev_start_continue - VDEV start response handling 308 * @vdev_mlme_obj: VDEV MLME comp object 309 * @event_data_len: data size 310 * @event_data: event data 311 * 312 * API invokes VDEV start response actions 313 * 314 * Return: SUCCESS on successful completion of start response operation 315 * FAILURE, if it fails due to any 316 */ 317 static inline QDF_STATUS mlme_vdev_start_continue( 318 struct vdev_mlme_obj *vdev_mlme, 319 uint16_t event_data_len, void *event_data) 320 { 321 QDF_STATUS ret = QDF_STATUS_SUCCESS; 322 323 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue) 324 ret = vdev_mlme->ops->mlme_vdev_start_continue( 325 vdev_mlme, event_data_len, event_data); 326 327 return ret; 328 } 329 330 /** 331 * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause 332 * @vdev_mlme_obj: VDEV MLME comp object 333 * @event_data_len: data size 334 * @event_data: event data 335 * 336 * API invokes on START fail response 337 * 338 * Return: SUCCESS on successful invocation of callback 339 * FAILURE, if it fails due to any 340 */ 341 static inline QDF_STATUS mlme_vdev_start_req_failed( 342 struct vdev_mlme_obj *vdev_mlme, 343 uint16_t event_data_len, void *event_data) 344 { 345 QDF_STATUS ret = QDF_STATUS_SUCCESS; 346 347 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed) 348 ret = vdev_mlme->ops->mlme_vdev_start_req_failed( 349 vdev_mlme, event_data_len, event_data); 350 351 return ret; 352 } 353 354 /** 355 * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause 356 * @vdev_mlme_obj: VDEV MLME comp object 357 * @event_data_len: data size 358 * @event_data: event data 359 * 360 * API invokes connection SM to start station connection 361 * 362 * Return: SUCCESS on successful invocation of connection sm 363 * FAILURE, if it fails due to any 364 */ 365 static inline QDF_STATUS mlme_vdev_sta_conn_start( 366 struct vdev_mlme_obj *vdev_mlme, 367 uint16_t event_data_len, void *event_data) 368 { 369 QDF_STATUS ret = QDF_STATUS_SUCCESS; 370 371 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start) 372 ret = vdev_mlme->ops->mlme_vdev_sta_conn_start( 373 vdev_mlme, event_data_len, event_data); 374 375 return ret; 376 } 377 378 /** 379 * mlme_vdev_up_send - VDEV up operation 380 * @vdev_mlme_obj: VDEV MLME comp object 381 * @event_data_len: data size 382 * @event_data: event data 383 * 384 * API invokes VDEV up operations 385 * 386 * Return: SUCCESS on successful completion of up operation 387 * FAILURE, if it fails due to any 388 */ 389 static inline QDF_STATUS mlme_vdev_up_send( 390 struct vdev_mlme_obj *vdev_mlme, 391 uint16_t event_data_len, void *event_data) 392 { 393 QDF_STATUS ret = QDF_STATUS_SUCCESS; 394 395 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_up_send) 396 ret = vdev_mlme->ops->mlme_vdev_up_send( 397 vdev_mlme, event_data_len, event_data); 398 399 return ret; 400 } 401 402 /** 403 * mlme_vdev_notify_up_complete - VDEV up state transition notification 404 * @vdev_mlme_obj: VDEV MLME comp object 405 * @event_data_len: data size 406 * @event_data: event data 407 * 408 * API notifies MLME on moving to UP state 409 * 410 * Return: SUCCESS on successful completion of up notification 411 * FAILURE, if it fails due to any 412 */ 413 static inline 414 QDF_STATUS mlme_vdev_notify_up_complete(struct vdev_mlme_obj *vdev_mlme, 415 uint16_t event_data_len, void *event_data) 416 { 417 QDF_STATUS ret = QDF_STATUS_SUCCESS; 418 419 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_up_complete) 420 ret = vdev_mlme->ops->mlme_vdev_notify_up_complete( 421 vdev_mlme, event_data_len, event_data); 422 423 return ret; 424 } 425 426 /** 427 * mlme_vdev_notify_roam_start - VDEV Roaming notification 428 * @vdev_mlme_obj: VDEV MLME comp object 429 * @event_len: data size 430 * @event_data: event data 431 * 432 * API notifies MLME on roaming 433 * 434 * Return: SUCCESS on successful completion of up notification 435 * FAILURE, if it fails due to any 436 */ 437 static inline 438 QDF_STATUS mlme_vdev_notify_roam_start(struct vdev_mlme_obj *vdev_mlme, 439 uint16_t event_len, void *event_data) 440 { 441 QDF_STATUS ret = QDF_STATUS_SUCCESS; 442 443 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_notify_roam_start) 444 ret = vdev_mlme->ops->mlme_vdev_notify_roam_start(vdev_mlme, 445 event_len, 446 event_data); 447 448 return ret; 449 } 450 451 /** 452 * mlme_vdev_update_beacon - Updates beacon 453 * @vdev_mlme_obj: VDEV MLME comp object 454 * @op: beacon update type 455 * @event_data_len: data size 456 * @event_data: event data 457 * 458 * API updates/allocates/frees the beacon 459 * 460 * Return: SUCCESS on successful update of beacon 461 * FAILURE, if it fails due to any 462 */ 463 static inline 464 QDF_STATUS mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme, 465 enum beacon_update_op op, 466 uint16_t event_data_len, void *event_data) 467 { 468 QDF_STATUS ret = QDF_STATUS_SUCCESS; 469 470 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_update_beacon) 471 ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op, 472 event_data_len, event_data); 473 474 return ret; 475 } 476 477 /** 478 * mlme_vdev_disconnect_peers - Disconnect peers 479 * @vdev_mlme_obj: VDEV MLME comp object 480 * @event_data_len: data size 481 * @event_data: event data 482 * 483 * API trigger stations disconnection with AP VDEV or AP disconnection with STA 484 * VDEV 485 * 486 * Return: SUCCESS on successful invocation of station disconnection 487 * FAILURE, if it fails due to any 488 */ 489 static inline QDF_STATUS mlme_vdev_disconnect_peers( 490 struct vdev_mlme_obj *vdev_mlme, 491 uint16_t event_data_len, void *event_data) 492 { 493 QDF_STATUS ret = QDF_STATUS_SUCCESS; 494 495 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers) 496 ret = vdev_mlme->ops->mlme_vdev_disconnect_peers( 497 vdev_mlme, event_data_len, event_data); 498 499 return ret; 500 } 501 502 /** 503 * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer 504 * @vdev_mlme_obj: VDEV MLME comp object 505 * @event_data_len: data size 506 * @event_data: event data 507 * 508 * API stops the CAC timer through DFS API 509 * 510 * Return: SUCCESS on successful CAC timer stop 511 * FAILURE, if it fails due to any 512 */ 513 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop( 514 struct vdev_mlme_obj *vdev_mlme, 515 uint16_t event_data_len, void *event_data) 516 { 517 QDF_STATUS ret = QDF_STATUS_SUCCESS; 518 519 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop) 520 ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop( 521 vdev_mlme, event_data_len, event_data); 522 523 return ret; 524 } 525 526 /** 527 * mlme_vdev_stop_send - Invokes VDEV stop operation 528 * @vdev_mlme_obj: VDEV MLME comp object 529 * @event_data_len: data size 530 * @event_data: event data 531 * 532 * API invokes VDEV stop operation 533 * 534 * Return: SUCCESS on successful completion of stop operation 535 * FAILURE, if it fails due to any 536 */ 537 static inline QDF_STATUS mlme_vdev_stop_send( 538 struct vdev_mlme_obj *vdev_mlme, 539 uint16_t event_data_len, void *event_data) 540 { 541 QDF_STATUS ret = QDF_STATUS_SUCCESS; 542 543 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send) 544 ret = vdev_mlme->ops->mlme_vdev_stop_send( 545 vdev_mlme, event_data_len, event_data); 546 547 return ret; 548 } 549 550 /** 551 * mlme_vdev_stop_continue - VDEV stop response handling 552 * @vdev_mlme_obj: VDEV MLME comp object 553 * @event_data_len: data size 554 * @event_data: event data 555 * 556 * API invokes VDEV stop response actions 557 * 558 * Return: SUCCESS on successful completion of stop response operation 559 * FAILURE, if it fails due to any 560 */ 561 static inline QDF_STATUS mlme_vdev_stop_continue( 562 struct vdev_mlme_obj *vdev_mlme, 563 uint16_t event_data_len, void *event_data) 564 { 565 QDF_STATUS ret = QDF_STATUS_SUCCESS; 566 567 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue) 568 ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme, 569 event_data_len, 570 event_data); 571 572 return ret; 573 } 574 575 /** 576 * mlme_vdev_down_send - VDEV down operation 577 * @vdev_mlme_obj: VDEV MLME comp object 578 * @event_data_len: data size 579 * @event_data: event data 580 * 581 * API invokes VDEV down operation 582 * 583 * Return: SUCCESS on successful completion of VDEV down operation 584 * FAILURE, if it fails due to any 585 */ 586 static inline QDF_STATUS mlme_vdev_down_send( 587 struct vdev_mlme_obj *vdev_mlme, 588 uint16_t event_data_len, void *event_data) 589 { 590 QDF_STATUS ret = QDF_STATUS_SUCCESS; 591 592 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send) 593 ret = vdev_mlme->ops->mlme_vdev_down_send( 594 vdev_mlme, event_data_len, event_data); 595 596 return ret; 597 } 598 599 /** 600 * mlme_vdev_notify_down_complete - VDEV init state transition notification 601 * @vdev_mlme_obj: VDEV MLME comp object 602 * @event_data_len: data size 603 * @event_data: event data 604 * 605 * API notifies MLME on moving to INIT state 606 * 607 * Return: SUCCESS on successful completion of down notification 608 * FAILURE, if it fails due to any 609 */ 610 static inline QDF_STATUS mlme_vdev_notify_down_complete( 611 struct vdev_mlme_obj *vdev_mlme, 612 uint16_t event_data_len, void *event_data) 613 { 614 QDF_STATUS ret = QDF_STATUS_SUCCESS; 615 616 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete) 617 ret = vdev_mlme->ops->mlme_vdev_notify_down_complete( 618 vdev_mlme, event_data_len, event_data); 619 620 return ret; 621 } 622 623 /** 624 * mlme_vdev_ext_hdl_create - VDEV legacy pointer allocation 625 * @vdev_mlme_obj: VDEV MLME comp object 626 * 627 * API invokes legacy pointer allocation and initialization 628 * 629 * Return: SUCCESS on successful creation of legacy handle 630 * FAILURE, if it fails due to any 631 */ 632 static inline QDF_STATUS mlme_vdev_ext_hdl_create( 633 struct vdev_mlme_obj *vdev_mlme) 634 { 635 QDF_STATUS ret = QDF_STATUS_SUCCESS; 636 637 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_ext_hdl_create) 638 ret = vdev_mlme->ops->mlme_vdev_ext_hdl_create(vdev_mlme); 639 640 return ret; 641 } 642 643 /** 644 * mlme_vdev_ext_hdl_post_create - VDEV post legacy pointer allocation 645 * @vdev_mlme_obj: VDEV MLME comp object 646 * 647 * API invokes post legacy pointer allocation operation 648 * 649 * Return: SUCCESS on successful creation of legacy handle 650 * FAILURE, if it fails due to any 651 */ 652 static inline QDF_STATUS mlme_vdev_ext_hdl_post_create( 653 struct vdev_mlme_obj *vdev_mlme) 654 { 655 QDF_STATUS ret = QDF_STATUS_SUCCESS; 656 657 if ((vdev_mlme->ops) && 658 vdev_mlme->ops->mlme_vdev_ext_hdl_post_create) 659 ret = vdev_mlme->ops->mlme_vdev_ext_hdl_post_create( 660 vdev_mlme); 661 662 return ret; 663 } 664 665 /** 666 * mlme_vdev_ext_hdl_destroy - VDEV legacy pointer free 667 * @vdev_mlme_obj: VDEV MLME comp object 668 * 669 * API invokes legacy pointer free 670 * 671 * Return: SUCCESS on successful free of legacy handle 672 * FAILURE, if it fails due to any 673 */ 674 static inline QDF_STATUS mlme_vdev_ext_hdl_destroy( 675 struct vdev_mlme_obj *vdev_mlme) 676 { 677 QDF_STATUS ret = QDF_STATUS_SUCCESS; 678 679 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_ext_hdl_destroy) 680 ret = vdev_mlme->ops->mlme_vdev_ext_hdl_destroy(vdev_mlme); 681 682 return ret; 683 } 684 685 /** 686 * mlme_vdev_enqueue_exp_ser_cmd - Enqueue exception serialization cmd 687 * @vdev_mlme_obj: VDEV MLME comp object 688 * @cmd_type: Serialization command type 689 * 690 * API to enqueue the exception serialization command, used by 691 * mlme-serialization wrapper layer 692 * 693 * Return: SUCCESS on successful enqueuing the command 694 * Else FAILURE 695 */ 696 static inline QDF_STATUS 697 mlme_vdev_enqueue_exp_ser_cmd(struct vdev_mlme_obj *vdev_mlme, 698 uint8_t cmd_type) 699 { 700 QDF_STATUS ret = QDF_STATUS_SUCCESS; 701 702 if (vdev_mlme->ops && vdev_mlme->ops->mlme_vdev_enqueue_exp_cmd) 703 ret = vdev_mlme->ops->mlme_vdev_enqueue_exp_cmd(vdev_mlme, 704 cmd_type); 705 return ret; 706 } 707 708 #endif 709