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_update_beacon: callback to initiate beacon update 76 * @mlme_vdev_disconnect_peers: callback to initiate disconnection of 77 * peers 78 * @mlme_vdev_dfs_cac_timer_stop: callback to stop the DFS CAC timer 79 * @mlme_vdev_stop_send: callback to initiate actions of VDEV 80 * MLME stop operation 81 * @mlme_vdev_stop_continue: callback to initiate operations on 82 * LMAC/FW stop response 83 * @mlme_vdev_bss_peer_delete_continue: callback to initiate operations on BSS 84 * peer delete completion 85 * @mlme_vdev_down_send: callback to initiate actions of VDEV 86 * MLME down operation 87 * @mlme_vdev_legacy_hdl_create: callback to invoke creation of legacy 88 * vdev object 89 * @mlme_vdev_legacy_hdl_post_create: callback to invoke post creation actions 90 * of legacy vdev object 91 * @mlme_vdev_legacy_hdl_destroy: callback to invoke destroy of legacy 92 * vdev object 93 */ 94 struct vdev_mlme_ops { 95 QDF_STATUS (*mlme_vdev_validate_basic_params)( 96 struct vdev_mlme_obj *vdev_mlme, 97 uint16_t event_data_len, void *event_data); 98 QDF_STATUS (*mlme_vdev_reset_proto_params)( 99 struct vdev_mlme_obj *vdev_mlme, 100 uint16_t event_data_len, void *event_data); 101 QDF_STATUS (*mlme_vdev_start_send)( 102 struct vdev_mlme_obj *vdev_mlme, 103 uint16_t event_data_len, void *event_data); 104 QDF_STATUS (*mlme_vdev_restart_send)( 105 struct vdev_mlme_obj *vdev_mlme, 106 uint16_t event_data_len, void *event_data); 107 QDF_STATUS (*mlme_vdev_stop_start_send)( 108 struct vdev_mlme_obj *vdev_mlme, 109 enum vdev_cmd_type type, 110 uint16_t event_data_len, void *event_data); 111 QDF_STATUS (*mlme_vdev_start_continue)( 112 struct vdev_mlme_obj *vdev_mlme, 113 uint16_t event_data_len, void *event_data); 114 QDF_STATUS (*mlme_vdev_sta_conn_start)( 115 struct vdev_mlme_obj *vdev_mlme, 116 uint16_t event_data_len, void *event_data); 117 QDF_STATUS (*mlme_vdev_start_req_failed)( 118 struct vdev_mlme_obj *vdev_mlme, 119 uint16_t event_data_len, void *event_data); 120 QDF_STATUS (*mlme_vdev_up_send)( 121 struct vdev_mlme_obj *vdev_mlme, 122 uint16_t event_data_len, void *event_data); 123 QDF_STATUS (*mlme_vdev_notify_up_complete)( 124 struct vdev_mlme_obj *vdev_mlme, 125 uint16_t event_data_len, void *event_data); 126 QDF_STATUS (*mlme_vdev_update_beacon)( 127 struct vdev_mlme_obj *vdev_mlme, 128 enum beacon_update_op op, 129 uint16_t event_data_len, void *event_data); 130 QDF_STATUS (*mlme_vdev_disconnect_peers)( 131 struct vdev_mlme_obj *vdev_mlme, 132 uint16_t event_data_len, void *event_data); 133 QDF_STATUS (*mlme_vdev_dfs_cac_timer_stop)( 134 struct vdev_mlme_obj *vdev_mlme, 135 uint16_t event_data_len, void *event_data); 136 QDF_STATUS (*mlme_vdev_stop_send)( 137 struct vdev_mlme_obj *vdev_mlme, 138 uint16_t event_data_len, void *event_data); 139 QDF_STATUS (*mlme_vdev_stop_continue)( 140 struct vdev_mlme_obj *vdev_mlme, 141 uint16_t event_data_len, void *event_data); 142 QDF_STATUS (*mlme_vdev_down_send)( 143 struct vdev_mlme_obj *vdev_mlme, 144 uint16_t event_data_len, void *event_data); 145 QDF_STATUS (*mlme_vdev_notify_down_complete)( 146 struct vdev_mlme_obj *vdev_mlme, 147 uint16_t event_data_len, void *event_data); 148 QDF_STATUS (*mlme_vdev_legacy_hdl_create)( 149 struct vdev_mlme_obj *vdev_mlme); 150 QDF_STATUS (*mlme_vdev_legacy_hdl_post_create)( 151 struct vdev_mlme_obj *vdev_mlme); 152 QDF_STATUS (*mlme_vdev_legacy_hdl_destroy)( 153 struct vdev_mlme_obj *vdev_mlme); 154 155 }; 156 157 /** 158 * struct vdev_mlme_obj - VDEV MLME component object 159 * @vdev_proto: VDEV MLME proto substructure 160 * @sm_lock: VDEV SM lock 161 * @sm_hdl: VDEV SM handle 162 * @ops: VDEV MLME callback table 163 * @legacy_vdev_ptr: VDEV MLME legacy pointer 164 */ 165 struct vdev_mlme_obj { 166 struct vdev_mlme_proto vdev_proto; 167 #ifdef VDEV_SM_LOCK_SUPPORT 168 qdf_spinlock_t sm_lock; 169 #endif 170 struct wlan_sm *sm_hdl; 171 struct wlan_objmgr_vdev *vdev; 172 struct vdev_mlme_ops *ops; 173 void *legacy_vdev_ptr; 174 }; 175 176 /** 177 * mlme_vdev_validate_basic_params - Validate basic params 178 * @vdev_mlme_obj: VDEV MLME comp object 179 * @event_data_len: data size 180 * @event_data: event data 181 * 182 * API validate MLME VDEV basic parameters 183 * 184 * Return: SUCCESS on successful validation 185 * FAILURE, if any parameter is not initialized 186 */ 187 static inline QDF_STATUS mlme_vdev_validate_basic_params( 188 struct vdev_mlme_obj *vdev_mlme, 189 uint16_t event_data_len, void *event_data) 190 { 191 QDF_STATUS ret = QDF_STATUS_SUCCESS; 192 193 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_validate_basic_params) 194 ret = vdev_mlme->ops->mlme_vdev_validate_basic_params( 195 vdev_mlme, event_data_len, event_data); 196 197 return ret; 198 } 199 200 /** 201 * mlme_vdev_reset_proto_params - Reset VDEV protocol params 202 * @vdev_mlme_obj: VDEV MLME comp object 203 * @event_data_len: data size 204 * @event_data: event data 205 * 206 * API resets the protocol params fo vdev 207 * 208 * Return: SUCCESS on successful reset 209 * FAILURE, if it fails due to any 210 */ 211 static inline QDF_STATUS mlme_vdev_reset_proto_params( 212 struct vdev_mlme_obj *vdev_mlme, 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_reset_proto_params) 218 ret = vdev_mlme->ops->mlme_vdev_reset_proto_params( 219 vdev_mlme, event_data_len, event_data); 220 221 return ret; 222 } 223 224 /** 225 * mlme_vdev_start_send - Invokes VDEV start operation 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 operation 231 * 232 * Return: SUCCESS on successful completion of start operation 233 * FAILURE, if it fails due to any 234 */ 235 static inline QDF_STATUS mlme_vdev_start_send( 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_send) 242 ret = vdev_mlme->ops->mlme_vdev_start_send( 243 vdev_mlme, event_data_len, event_data); 244 245 return ret; 246 } 247 248 /** 249 * mlme_vdev_restart_send - Invokes VDEV restart operation 250 * @vdev_mlme_obj: VDEV MLME comp object 251 * @event_data_len: data size 252 * @event_data: event data 253 * 254 * API invokes VDEV restart operation 255 * 256 * Return: SUCCESS on successful completion of restart operation 257 * FAILURE, if it fails due to any 258 */ 259 static inline QDF_STATUS mlme_vdev_restart_send( 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_restart_send) 266 ret = vdev_mlme->ops->mlme_vdev_restart_send( 267 vdev_mlme, event_data_len, event_data); 268 269 return ret; 270 } 271 272 /** 273 * mlme_vdev_stop_start_send - Invoke block VDEV restart operation 274 * @vdev_mlme_obj: VDEV MLME comp object 275 * @restart: restart req/start req 276 * @event_data_len: data size 277 * @event_data: event data 278 * 279 * API invokes stops pending VDEV restart operation 280 * 281 * Return: SUCCESS alsways 282 */ 283 static inline QDF_STATUS mlme_vdev_stop_start_send( 284 struct vdev_mlme_obj *vdev_mlme, 285 uint8_t restart, 286 uint16_t event_data_len, void *event_data) 287 { 288 QDF_STATUS ret = QDF_STATUS_SUCCESS; 289 290 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_start_send) 291 ret = vdev_mlme->ops->mlme_vdev_stop_start_send( 292 vdev_mlme, restart, event_data_len, event_data); 293 294 return ret; 295 } 296 297 /** 298 * mlme_vdev_start_continue - VDEV start response handling 299 * @vdev_mlme_obj: VDEV MLME comp object 300 * @event_data_len: data size 301 * @event_data: event data 302 * 303 * API invokes VDEV start response actions 304 * 305 * Return: SUCCESS on successful completion of start response operation 306 * FAILURE, if it fails due to any 307 */ 308 static inline QDF_STATUS mlme_vdev_start_continue( 309 struct vdev_mlme_obj *vdev_mlme, 310 uint16_t event_data_len, void *event_data) 311 { 312 QDF_STATUS ret = QDF_STATUS_SUCCESS; 313 314 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_continue) 315 ret = vdev_mlme->ops->mlme_vdev_start_continue( 316 vdev_mlme, event_data_len, event_data); 317 318 return ret; 319 } 320 321 /** 322 * mlme_vdev_start_req_failed - Invoke Station VDEV connection, if it pause 323 * @vdev_mlme_obj: VDEV MLME comp object 324 * @event_data_len: data size 325 * @event_data: event data 326 * 327 * API invokes on START fail response 328 * 329 * Return: SUCCESS on successful invocation of callback 330 * FAILURE, if it fails due to any 331 */ 332 static inline QDF_STATUS mlme_vdev_start_req_failed( 333 struct vdev_mlme_obj *vdev_mlme, 334 uint16_t event_data_len, void *event_data) 335 { 336 QDF_STATUS ret = QDF_STATUS_SUCCESS; 337 338 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_start_req_failed) 339 ret = vdev_mlme->ops->mlme_vdev_start_req_failed( 340 vdev_mlme, event_data_len, event_data); 341 342 return ret; 343 } 344 345 /** 346 * mlme_vdev_sta_conn_start - Invoke Station VDEV connection, if it pause 347 * @vdev_mlme_obj: VDEV MLME comp object 348 * @event_data_len: data size 349 * @event_data: event data 350 * 351 * API invokes connection SM to start station connection 352 * 353 * Return: SUCCESS on successful invocation of connection sm 354 * FAILURE, if it fails due to any 355 */ 356 static inline QDF_STATUS mlme_vdev_sta_conn_start( 357 struct vdev_mlme_obj *vdev_mlme, 358 uint16_t event_data_len, void *event_data) 359 { 360 QDF_STATUS ret = QDF_STATUS_SUCCESS; 361 362 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_sta_conn_start) 363 ret = vdev_mlme->ops->mlme_vdev_sta_conn_start( 364 vdev_mlme, event_data_len, event_data); 365 366 return ret; 367 } 368 369 /** 370 * mlme_vdev_up_send - VDEV up operation 371 * @vdev_mlme_obj: VDEV MLME comp object 372 * @event_data_len: data size 373 * @event_data: event data 374 * 375 * API invokes VDEV up operations 376 * 377 * Return: SUCCESS on successful completion of up operation 378 * FAILURE, if it fails due to any 379 */ 380 static inline QDF_STATUS mlme_vdev_up_send( 381 struct vdev_mlme_obj *vdev_mlme, 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_up_send) 387 ret = vdev_mlme->ops->mlme_vdev_up_send( 388 vdev_mlme, event_data_len, event_data); 389 390 return ret; 391 } 392 393 /** 394 * mlme_vdev_notify_up_complete - VDEV up state transition notification 395 * @vdev_mlme_obj: VDEV MLME comp object 396 * @event_data_len: data size 397 * @event_data: event data 398 * 399 * API notifies MLME on moving to UP state 400 * 401 * Return: SUCCESS on successful completion of up notification 402 * FAILURE, if it fails due to any 403 */ 404 static inline QDF_STATUS mlme_vdev_notify_up_complete( 405 struct vdev_mlme_obj *vdev_mlme, 406 uint16_t event_data_len, void *event_data) 407 { 408 QDF_STATUS ret = QDF_STATUS_SUCCESS; 409 410 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_up_complete) 411 ret = vdev_mlme->ops->mlme_vdev_notify_up_complete( 412 vdev_mlme, event_data_len, event_data); 413 414 return ret; 415 } 416 417 /** 418 * mlme_vdev_update_beacon - Updates beacon 419 * @vdev_mlme_obj: VDEV MLME comp object 420 * @op: beacon update type 421 * @event_data_len: data size 422 * @event_data: event data 423 * 424 * API updates/allocates/frees the beacon 425 * 426 * Return: SUCCESS on successful update of beacon 427 * FAILURE, if it fails due to any 428 */ 429 static inline QDF_STATUS mlme_vdev_update_beacon( 430 struct vdev_mlme_obj *vdev_mlme, 431 enum beacon_update_op op, 432 uint16_t event_data_len, void *event_data) 433 { 434 QDF_STATUS ret = QDF_STATUS_SUCCESS; 435 436 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_update_beacon) 437 ret = vdev_mlme->ops->mlme_vdev_update_beacon(vdev_mlme, op, 438 event_data_len, event_data); 439 440 return ret; 441 } 442 443 /** 444 * mlme_vdev_disconnect_peers - Disconnect peers 445 * @vdev_mlme_obj: VDEV MLME comp object 446 * @event_data_len: data size 447 * @event_data: event data 448 * 449 * API trigger stations disconnection with AP VDEV or AP disconnection with STA 450 * VDEV 451 * 452 * Return: SUCCESS on successful invocation of station disconnection 453 * FAILURE, if it fails due to any 454 */ 455 static inline QDF_STATUS mlme_vdev_disconnect_peers( 456 struct vdev_mlme_obj *vdev_mlme, 457 uint16_t event_data_len, void *event_data) 458 { 459 QDF_STATUS ret = QDF_STATUS_SUCCESS; 460 461 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_disconnect_peers) 462 ret = vdev_mlme->ops->mlme_vdev_disconnect_peers( 463 vdev_mlme, event_data_len, event_data); 464 465 return ret; 466 } 467 468 /** 469 * mlme_vdev_dfs_cac_timer_stop - Stop CAC timer 470 * @vdev_mlme_obj: VDEV MLME comp object 471 * @event_data_len: data size 472 * @event_data: event data 473 * 474 * API stops the CAC timer through DFS API 475 * 476 * Return: SUCCESS on successful CAC timer stop 477 * FAILURE, if it fails due to any 478 */ 479 static inline QDF_STATUS mlme_vdev_dfs_cac_timer_stop( 480 struct vdev_mlme_obj *vdev_mlme, 481 uint16_t event_data_len, void *event_data) 482 { 483 QDF_STATUS ret = QDF_STATUS_SUCCESS; 484 485 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop) 486 ret = vdev_mlme->ops->mlme_vdev_dfs_cac_timer_stop( 487 vdev_mlme, event_data_len, event_data); 488 489 return ret; 490 } 491 492 /** 493 * mlme_vdev_stop_send - Invokes VDEV stop operation 494 * @vdev_mlme_obj: VDEV MLME comp object 495 * @event_data_len: data size 496 * @event_data: event data 497 * 498 * API invokes VDEV stop operation 499 * 500 * Return: SUCCESS on successful completion of stop operation 501 * FAILURE, if it fails due to any 502 */ 503 static inline QDF_STATUS mlme_vdev_stop_send( 504 struct vdev_mlme_obj *vdev_mlme, 505 uint16_t event_data_len, void *event_data) 506 { 507 QDF_STATUS ret = QDF_STATUS_SUCCESS; 508 509 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_send) 510 ret = vdev_mlme->ops->mlme_vdev_stop_send( 511 vdev_mlme, event_data_len, event_data); 512 513 return ret; 514 } 515 516 /** 517 * mlme_vdev_stop_continue - VDEV stop response handling 518 * @vdev_mlme_obj: VDEV MLME comp object 519 * @event_data_len: data size 520 * @event_data: event data 521 * 522 * API invokes VDEV stop response actions 523 * 524 * Return: SUCCESS on successful completion of stop response operation 525 * FAILURE, if it fails due to any 526 */ 527 static inline QDF_STATUS mlme_vdev_stop_continue( 528 struct vdev_mlme_obj *vdev_mlme, 529 uint16_t event_data_len, void *event_data) 530 { 531 QDF_STATUS ret = QDF_STATUS_SUCCESS; 532 533 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_stop_continue) 534 ret = vdev_mlme->ops->mlme_vdev_stop_continue(vdev_mlme, 535 event_data_len, 536 event_data); 537 538 return ret; 539 } 540 541 /** 542 * mlme_vdev_down_send - VDEV down operation 543 * @vdev_mlme_obj: VDEV MLME comp object 544 * @event_data_len: data size 545 * @event_data: event data 546 * 547 * API invokes VDEV down operation 548 * 549 * Return: SUCCESS on successful completion of VDEV down operation 550 * FAILURE, if it fails due to any 551 */ 552 static inline QDF_STATUS mlme_vdev_down_send( 553 struct vdev_mlme_obj *vdev_mlme, 554 uint16_t event_data_len, void *event_data) 555 { 556 QDF_STATUS ret = QDF_STATUS_SUCCESS; 557 558 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_down_send) 559 ret = vdev_mlme->ops->mlme_vdev_down_send( 560 vdev_mlme, event_data_len, event_data); 561 562 return ret; 563 } 564 565 /** 566 * mlme_vdev_notify_down_complete - VDEV init state transition notification 567 * @vdev_mlme_obj: VDEV MLME comp object 568 * @event_data_len: data size 569 * @event_data: event data 570 * 571 * API notifies MLME on moving to INIT state 572 * 573 * Return: SUCCESS on successful completion of down notification 574 * FAILURE, if it fails due to any 575 */ 576 static inline QDF_STATUS mlme_vdev_notify_down_complete( 577 struct vdev_mlme_obj *vdev_mlme, 578 uint16_t event_data_len, void *event_data) 579 { 580 QDF_STATUS ret = QDF_STATUS_SUCCESS; 581 582 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_notify_down_complete) 583 ret = vdev_mlme->ops->mlme_vdev_notify_down_complete( 584 vdev_mlme, event_data_len, event_data); 585 586 return ret; 587 } 588 589 /** 590 * mlme_vdev_legacy_hdl_create - VDEV legacy pointer allocation 591 * @vdev_mlme_obj: VDEV MLME comp object 592 * 593 * API invokes legacy pointer allocation and initialization 594 * 595 * Return: SUCCESS on successful creation of legacy handle 596 * FAILURE, if it fails due to any 597 */ 598 static inline QDF_STATUS mlme_vdev_legacy_hdl_create( 599 struct vdev_mlme_obj *vdev_mlme) 600 { 601 QDF_STATUS ret = QDF_STATUS_SUCCESS; 602 603 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_legacy_hdl_create) 604 ret = vdev_mlme->ops->mlme_vdev_legacy_hdl_create(vdev_mlme); 605 606 return ret; 607 } 608 609 /** 610 * mlme_vdev_legacy_hdl_post_create - VDEV post legacy pointer allocation 611 * @vdev_mlme_obj: VDEV MLME comp object 612 * 613 * API invokes post legacy pointer allocation operation 614 * 615 * Return: SUCCESS on successful creation of legacy handle 616 * FAILURE, if it fails due to any 617 */ 618 static inline QDF_STATUS mlme_vdev_legacy_hdl_post_create( 619 struct vdev_mlme_obj *vdev_mlme) 620 { 621 QDF_STATUS ret = QDF_STATUS_SUCCESS; 622 623 if ((vdev_mlme->ops) && 624 vdev_mlme->ops->mlme_vdev_legacy_hdl_post_create) 625 ret = vdev_mlme->ops->mlme_vdev_legacy_hdl_post_create( 626 vdev_mlme); 627 628 return ret; 629 } 630 631 /** 632 * mlme_vdev_legacy_hdl_destroy - VDEV legacy pointer free 633 * @vdev_mlme_obj: VDEV MLME comp object 634 * 635 * API invokes legacy pointer free 636 * 637 * Return: SUCCESS on successful free of legacy handle 638 * FAILURE, if it fails due to any 639 */ 640 static inline QDF_STATUS mlme_vdev_legacy_hdl_destroy( 641 struct vdev_mlme_obj *vdev_mlme) 642 { 643 QDF_STATUS ret = QDF_STATUS_SUCCESS; 644 645 if ((vdev_mlme->ops) && vdev_mlme->ops->mlme_vdev_legacy_hdl_destroy) 646 ret = vdev_mlme->ops->mlme_vdev_legacy_hdl_destroy(vdev_mlme); 647 648 return ret; 649 } 650 651 #endif 652