1 /* 2 * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #include "cfg_dispatcher.h" 18 #include <qdf_types.h> 19 #include <qdf_trace.h> 20 #include <qdf_threads.h> 21 #include <qdf_module.h> 22 #include <dispatcher_init_deinit.h> 23 #include <scheduler_api.h> 24 #include <wlan_scan_ucfg_api.h> 25 #include <wlan_ftm_init_deinit_api.h> 26 #include <wlan_mgmt_txrx_utils_api.h> 27 #include <wlan_serialization_api.h> 28 #include "wlan_psoc_mlme_api.h" 29 #include <include/wlan_mlme_cmn.h> 30 #ifdef WLAN_ATF_ENABLE 31 #include <wlan_atf_utils_api.h> 32 #endif 33 #ifdef QCA_SUPPORT_SON 34 #include <wlan_son_pub.h> 35 #endif 36 #ifdef WLAN_SA_API_ENABLE 37 #include <wlan_sa_api_utils_api.h> 38 #endif 39 #ifdef WIFI_POS_CONVERGED 40 #include "wifi_pos_api.h" 41 #endif /* WIFI_POS_CONVERGED */ 42 #include <wlan_reg_services_api.h> 43 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 44 #include "wlan_crypto_main.h" 45 #endif 46 #ifdef DFS_COMPONENT_ENABLE 47 #include <wlan_dfs_init_deinit_api.h> 48 #endif 49 50 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 51 #include <wlan_offchan_txrx_api.h> 52 #endif 53 54 #ifdef WLAN_SUPPORT_SPLITMAC 55 #include <wlan_splitmac.h> 56 #endif 57 #ifdef WLAN_CONV_SPECTRAL_ENABLE 58 #include <wlan_spectral_utils_api.h> 59 #endif 60 #ifdef WLAN_SUPPORT_FILS 61 #include <wlan_fd_utils_api.h> 62 #endif 63 64 #ifdef WLAN_SUPPORT_GREEN_AP 65 #include <wlan_green_ap_api.h> 66 #endif 67 68 #ifdef QCA_SUPPORT_CP_STATS 69 #include <wlan_cp_stats_utils_api.h> 70 #endif 71 72 #ifdef WLAN_CFR_ENABLE 73 #include <wlan_cfr_utils_api.h> 74 #endif 75 76 #ifdef FEATURE_COEX 77 #include <wlan_coex_utils_api.h> 78 #endif 79 80 #ifdef DCS_INTERFERENCE_DETECTION 81 #include <wlan_dcs_init_deinit_api.h> 82 #endif 83 84 /** 85 * DOC: This file provides various init/deinit trigger point for new 86 * components. 87 */ 88 89 /* All new components needs to replace their dummy init/deinit 90 * psoc_open, psco_close, psoc_enable and psoc_disable APIs once 91 * their actual handlers are ready 92 */ 93 94 struct dispatcher_spectral_ops ops_spectral; 95 96 #ifdef WLAN_CFR_ENABLE 97 static QDF_STATUS dispatcher_init_cfr(void) 98 { 99 return wlan_cfr_init(); 100 } 101 102 static QDF_STATUS dispatcher_deinit_cfr(void) 103 { 104 return wlan_cfr_deinit(); 105 } 106 107 static QDF_STATUS dispatcher_cfr_pdev_open(struct wlan_objmgr_pdev *pdev) 108 { 109 return wlan_cfr_pdev_open(pdev); 110 } 111 112 static QDF_STATUS dispatcher_cfr_pdev_close(struct wlan_objmgr_pdev *pdev) 113 { 114 return wlan_cfr_pdev_close(pdev); 115 } 116 #else 117 static QDF_STATUS dispatcher_init_cfr(void) 118 { 119 return QDF_STATUS_SUCCESS; 120 } 121 122 static QDF_STATUS dispatcher_deinit_cfr(void) 123 { 124 return QDF_STATUS_SUCCESS; 125 } 126 127 static QDF_STATUS dispatcher_cfr_pdev_open(struct wlan_objmgr_pdev *pdev) 128 { 129 return QDF_STATUS_SUCCESS; 130 } 131 132 static QDF_STATUS dispatcher_cfr_pdev_close(struct wlan_objmgr_pdev *pdev) 133 { 134 return QDF_STATUS_SUCCESS; 135 } 136 137 #endif 138 139 #ifdef QCA_SUPPORT_CP_STATS 140 static QDF_STATUS dispatcher_init_cp_stats(void) 141 { 142 return wlan_cp_stats_init(); 143 } 144 145 static QDF_STATUS dispatcher_deinit_cp_stats(void) 146 { 147 return wlan_cp_stats_deinit(); 148 } 149 150 static QDF_STATUS cp_stats_psoc_open(struct wlan_objmgr_psoc *psoc) 151 { 152 return wlan_cp_stats_open(psoc); 153 } 154 155 static QDF_STATUS cp_stats_psoc_close(struct wlan_objmgr_psoc *psoc) 156 { 157 return wlan_cp_stats_close(psoc); 158 } 159 160 static QDF_STATUS cp_stats_psoc_enable(struct wlan_objmgr_psoc *psoc) 161 { 162 return wlan_cp_stats_enable(psoc); 163 } 164 165 static QDF_STATUS cp_stats_psoc_disable(struct wlan_objmgr_psoc *psoc) 166 { 167 return wlan_cp_stats_disable(psoc); 168 } 169 #else 170 static QDF_STATUS dispatcher_init_cp_stats(void) 171 { 172 return QDF_STATUS_SUCCESS; 173 } 174 175 static QDF_STATUS dispatcher_deinit_cp_stats(void) 176 { 177 return QDF_STATUS_SUCCESS; 178 } 179 180 static QDF_STATUS cp_stats_psoc_open(struct wlan_objmgr_psoc *psoc) 181 { 182 return QDF_STATUS_SUCCESS; 183 } 184 185 static QDF_STATUS cp_stats_psoc_close(struct wlan_objmgr_psoc *psoc) 186 { 187 return QDF_STATUS_SUCCESS; 188 } 189 190 static QDF_STATUS cp_stats_psoc_enable(struct wlan_objmgr_psoc *psoc) 191 { 192 return QDF_STATUS_SUCCESS; 193 } 194 195 static QDF_STATUS cp_stats_psoc_disable(struct wlan_objmgr_psoc *psoc) 196 { 197 return QDF_STATUS_SUCCESS; 198 } 199 #endif 200 201 #ifdef DCS_INTERFERENCE_DETECTION 202 static QDF_STATUS dispatcher_init_dcs(void) 203 { 204 return wlan_dcs_init(); 205 } 206 207 static QDF_STATUS dispatcher_deinit_dcs(void) 208 { 209 return wlan_dcs_deinit(); 210 } 211 212 static QDF_STATUS dcs_psoc_enable(struct wlan_objmgr_psoc *psoc) 213 { 214 return wlan_dcs_enable(psoc); 215 } 216 217 static QDF_STATUS dcs_psoc_disable(struct wlan_objmgr_psoc *psoc) 218 { 219 return wlan_dcs_disable(psoc); 220 } 221 222 static QDF_STATUS dcs_psoc_open(struct wlan_objmgr_psoc *psoc) 223 { 224 return wlan_dcs_psoc_open(psoc); 225 } 226 227 static QDF_STATUS dcs_psoc_close(struct wlan_objmgr_psoc *psoc) 228 { 229 return QDF_STATUS_SUCCESS; 230 } 231 #else 232 static QDF_STATUS dispatcher_init_dcs(void) 233 { 234 return QDF_STATUS_SUCCESS; 235 } 236 237 static QDF_STATUS dispatcher_deinit_dcs(void) 238 { 239 return QDF_STATUS_SUCCESS; 240 } 241 242 static QDF_STATUS dcs_psoc_enable(struct wlan_objmgr_psoc *psoc) 243 { 244 return QDF_STATUS_SUCCESS; 245 } 246 247 static QDF_STATUS dcs_psoc_disable(struct wlan_objmgr_psoc *psoc) 248 { 249 return QDF_STATUS_SUCCESS; 250 } 251 252 static QDF_STATUS dcs_psoc_open(struct wlan_objmgr_psoc *psoc) 253 { 254 return QDF_STATUS_SUCCESS; 255 } 256 257 static QDF_STATUS dcs_psoc_close(struct wlan_objmgr_psoc *psoc) 258 { 259 return QDF_STATUS_SUCCESS; 260 } 261 #endif 262 263 #if defined QCA_SUPPORT_SON && QCA_SUPPORT_SON >= 1 264 static QDF_STATUS dispatcher_init_son(void) 265 { 266 return wlan_son_init(); 267 } 268 static QDF_STATUS son_psoc_open(struct wlan_objmgr_psoc *psoc) 269 { 270 return wlan_son_psoc_open(psoc); 271 } 272 static QDF_STATUS dispatcher_deinit_son(void) 273 { 274 return wlan_son_deinit(); 275 } 276 277 static QDF_STATUS son_psoc_close(struct wlan_objmgr_psoc *psoc) 278 { 279 return wlan_son_psoc_close(psoc); 280 } 281 #else 282 static QDF_STATUS dispatcher_init_son(void) 283 { 284 return QDF_STATUS_SUCCESS; 285 } 286 287 static QDF_STATUS dispatcher_deinit_son(void) 288 { 289 return QDF_STATUS_SUCCESS; 290 } 291 292 static QDF_STATUS son_psoc_open(struct wlan_objmgr_psoc *psoc) 293 { 294 return QDF_STATUS_SUCCESS; 295 } 296 297 static QDF_STATUS son_psoc_close(struct wlan_objmgr_psoc *psoc) 298 { 299 return QDF_STATUS_SUCCESS; 300 } 301 302 #endif /* END of QCA_SUPPORT_SON */ 303 304 static QDF_STATUS dispatcher_regulatory_init(void) 305 { 306 return wlan_regulatory_init(); 307 } 308 309 static QDF_STATUS dispatcher_regulatory_deinit(void) 310 { 311 return wlan_regulatory_deinit(); 312 } 313 314 static QDF_STATUS dispatcher_regulatory_psoc_open(struct wlan_objmgr_psoc 315 *psoc) 316 { 317 return regulatory_psoc_open(psoc); 318 } 319 320 static QDF_STATUS dispatcher_regulatory_psoc_close(struct wlan_objmgr_psoc 321 *psoc) 322 { 323 return regulatory_psoc_close(psoc); 324 } 325 326 #ifdef WLAN_CONV_SPECTRAL_ENABLE 327 #ifdef SPECTRAL_MODULIZED_ENABLE 328 QDF_STATUS 329 dispatcher_register_spectral_ops_handler(struct dispatcher_spectral_ops *sops) 330 { 331 qdf_mem_copy(&ops_spectral, sops, 332 qdf_min(sizeof(*sops), sizeof(ops_spectral))); 333 334 return QDF_STATUS_SUCCESS; 335 } 336 337 qdf_export_symbol(dispatcher_register_spectral_ops_handler); 338 339 static QDF_STATUS dispatcher_spectral_pdev_open(struct wlan_objmgr_pdev *pdev) 340 { 341 return ops_spectral.spectral_pdev_open_handler(pdev); 342 } 343 344 static QDF_STATUS dispatcher_spectral_pdev_close(struct wlan_objmgr_pdev *pdev) 345 { 346 return QDF_STATUS_SUCCESS; 347 } 348 349 static QDF_STATUS spectral_psoc_open(struct wlan_objmgr_psoc *psoc) 350 { 351 return ops_spectral.spectral_psoc_open_handler(psoc); 352 } 353 354 static QDF_STATUS spectral_psoc_close(struct wlan_objmgr_psoc *psoc) 355 { 356 return ops_spectral.spectral_psoc_close_handler(psoc); 357 } 358 359 static QDF_STATUS spectral_psoc_enable(struct wlan_objmgr_psoc *psoc) 360 { 361 return ops_spectral.spectral_psoc_enable_handler(psoc); 362 } 363 364 static QDF_STATUS spectral_psoc_disable(struct wlan_objmgr_psoc *psoc) 365 { 366 return ops_spectral.spectral_psoc_disable_handler(psoc); 367 } 368 #else 369 static QDF_STATUS dispatcher_spectral_pdev_open(struct wlan_objmgr_pdev 370 *pdev) 371 { 372 return QDF_STATUS_SUCCESS; 373 } 374 375 static QDF_STATUS dispatcher_spectral_pdev_close(struct wlan_objmgr_pdev *pdev) 376 { 377 return QDF_STATUS_SUCCESS; 378 } 379 380 static QDF_STATUS spectral_psoc_open(struct wlan_objmgr_psoc *psoc) 381 { 382 return wlan_spectral_psoc_open(psoc); 383 } 384 385 static QDF_STATUS spectral_psoc_close(struct wlan_objmgr_psoc *psoc) 386 { 387 return wlan_spectral_psoc_close(psoc); 388 } 389 390 static QDF_STATUS spectral_psoc_enable(struct wlan_objmgr_psoc *psoc) 391 { 392 return wlan_spectral_psoc_enable(psoc); 393 } 394 395 static QDF_STATUS spectral_psoc_disable(struct wlan_objmgr_psoc *psoc) 396 { 397 return wlan_spectral_psoc_disable(psoc); 398 } 399 #endif 400 #else 401 static QDF_STATUS dispatcher_spectral_pdev_open(struct wlan_objmgr_pdev 402 *pdev) 403 { 404 return QDF_STATUS_SUCCESS; 405 } 406 407 static QDF_STATUS dispatcher_spectral_pdev_close(struct wlan_objmgr_pdev *pdev) 408 { 409 return QDF_STATUS_SUCCESS; 410 } 411 412 static QDF_STATUS spectral_psoc_open(struct wlan_objmgr_psoc *psoc) 413 { 414 return QDF_STATUS_SUCCESS; 415 } 416 417 static QDF_STATUS spectral_psoc_close(struct wlan_objmgr_psoc *psoc) 418 { 419 return QDF_STATUS_SUCCESS; 420 } 421 422 static QDF_STATUS spectral_psoc_enable(struct wlan_objmgr_psoc *psoc) 423 { 424 return QDF_STATUS_SUCCESS; 425 } 426 427 static QDF_STATUS spectral_psoc_disable(struct wlan_objmgr_psoc *psoc) 428 { 429 return QDF_STATUS_SUCCESS; 430 } 431 #endif 432 433 static QDF_STATUS dispatcher_regulatory_pdev_open(struct wlan_objmgr_pdev 434 *pdev) 435 { 436 return regulatory_pdev_open(pdev); 437 } 438 439 static QDF_STATUS dispatcher_regulatory_pdev_close(struct wlan_objmgr_pdev 440 *pdev) 441 { 442 return regulatory_pdev_close(pdev); 443 } 444 445 #ifdef WLAN_SA_API_ENABLE 446 static QDF_STATUS dispatcher_init_sa_api(void) 447 { 448 return wlan_sa_api_init(); 449 } 450 451 static QDF_STATUS dispatcher_deinit_sa_api(void) 452 { 453 return wlan_sa_api_deinit(); 454 } 455 456 static QDF_STATUS sa_api_psoc_enable(struct wlan_objmgr_psoc *psoc) 457 { 458 return wlan_sa_api_enable(psoc); 459 } 460 461 static QDF_STATUS sa_api_psoc_disable(struct wlan_objmgr_psoc *psoc) 462 { 463 return wlan_sa_api_disable(psoc); 464 } 465 #else 466 static QDF_STATUS dispatcher_init_sa_api(void) 467 { 468 return QDF_STATUS_SUCCESS; 469 } 470 471 static QDF_STATUS dispatcher_deinit_sa_api(void) 472 { 473 return QDF_STATUS_SUCCESS; 474 } 475 476 static QDF_STATUS sa_api_psoc_enable(struct wlan_objmgr_psoc *psoc) 477 { 478 return QDF_STATUS_SUCCESS; 479 } 480 481 static QDF_STATUS sa_api_psoc_disable(struct wlan_objmgr_psoc *psoc) 482 { 483 return QDF_STATUS_SUCCESS; 484 } 485 #endif /* END of WLAN_SA_API_ENABLE */ 486 487 488 #ifdef WLAN_ATF_ENABLE 489 static QDF_STATUS dispatcher_init_atf(void) 490 { 491 return wlan_atf_init(); 492 } 493 494 static QDF_STATUS dispatcher_deinit_atf(void) 495 { 496 return wlan_atf_deinit(); 497 } 498 499 static QDF_STATUS atf_psoc_open(struct wlan_objmgr_psoc *psoc) 500 { 501 return wlan_atf_open(psoc); 502 } 503 504 static QDF_STATUS atf_psoc_close(struct wlan_objmgr_psoc *psoc) 505 { 506 return wlan_atf_close(psoc); 507 } 508 509 static QDF_STATUS atf_psoc_enable(struct wlan_objmgr_psoc *psoc) 510 { 511 return wlan_atf_enable(psoc); 512 } 513 514 static QDF_STATUS atf_psoc_disable(struct wlan_objmgr_psoc *psoc) 515 { 516 return wlan_atf_disable(psoc); 517 } 518 #else 519 static QDF_STATUS dispatcher_init_atf(void) 520 { 521 return QDF_STATUS_SUCCESS; 522 } 523 524 static QDF_STATUS dispatcher_deinit_atf(void) 525 { 526 return QDF_STATUS_SUCCESS; 527 } 528 529 static QDF_STATUS atf_psoc_open(struct wlan_objmgr_psoc *psoc) 530 { 531 return QDF_STATUS_SUCCESS; 532 } 533 534 static QDF_STATUS atf_psoc_close(struct wlan_objmgr_psoc *psoc) 535 { 536 return QDF_STATUS_SUCCESS; 537 } 538 539 static QDF_STATUS atf_psoc_enable(struct wlan_objmgr_psoc *psoc) 540 { 541 return QDF_STATUS_SUCCESS; 542 } 543 544 static QDF_STATUS atf_psoc_disable(struct wlan_objmgr_psoc *psoc) 545 { 546 return QDF_STATUS_SUCCESS; 547 } 548 #endif /* END of WLAN_ATF_ENABLE */ 549 550 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 551 static QDF_STATUS dispatcher_init_crypto(void) 552 { 553 return wlan_crypto_init(); 554 } 555 556 static QDF_STATUS dispatcher_deinit_crypto(void) 557 { 558 return wlan_crypto_deinit(); 559 } 560 #else 561 static QDF_STATUS dispatcher_init_crypto(void) 562 { 563 return QDF_STATUS_SUCCESS; 564 } 565 566 static QDF_STATUS dispatcher_deinit_crypto(void) 567 { 568 return QDF_STATUS_SUCCESS; 569 } 570 #endif /* END of WLAN_CONV_CRYPTO_SUPPORTED */ 571 572 #ifdef WIFI_POS_CONVERGED 573 static QDF_STATUS dispatcher_init_wifi_pos(void) 574 { 575 return wifi_pos_init(); 576 } 577 578 static QDF_STATUS dispatcher_deinit_wifi_pos(void) 579 { 580 return wifi_pos_deinit(); 581 } 582 583 static QDF_STATUS dispatcher_wifi_pos_enable(struct wlan_objmgr_psoc *psoc) 584 { 585 return wifi_pos_psoc_enable(psoc); 586 } 587 588 static QDF_STATUS dispatcher_wifi_pos_disable(struct wlan_objmgr_psoc *psoc) 589 { 590 return wifi_pos_psoc_disable(psoc); 591 } 592 #else 593 static QDF_STATUS dispatcher_init_wifi_pos(void) 594 { 595 return QDF_STATUS_SUCCESS; 596 } 597 598 static QDF_STATUS dispatcher_deinit_wifi_pos(void) 599 { 600 return QDF_STATUS_SUCCESS; 601 } 602 603 static QDF_STATUS dispatcher_wifi_pos_enable(struct wlan_objmgr_psoc *psoc) 604 { 605 return QDF_STATUS_SUCCESS; 606 } 607 608 static QDF_STATUS dispatcher_wifi_pos_disable(struct wlan_objmgr_psoc *psoc) 609 { 610 return QDF_STATUS_SUCCESS; 611 } 612 #endif 613 614 #ifdef DFS_COMPONENT_ENABLE 615 static QDF_STATUS dispatcher_init_dfs(void) 616 { 617 return dfs_init(); 618 } 619 620 static QDF_STATUS dispatcher_deinit_dfs(void) 621 { 622 return dfs_deinit(); 623 } 624 625 static QDF_STATUS dispatcher_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc) 626 { 627 return wifi_dfs_psoc_enable(psoc); 628 } 629 630 static QDF_STATUS dispatcher_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc) 631 { 632 return wifi_dfs_psoc_disable(psoc); 633 } 634 #else 635 static QDF_STATUS dispatcher_init_dfs(void) 636 { 637 return QDF_STATUS_SUCCESS; 638 } 639 640 static QDF_STATUS dispatcher_deinit_dfs(void) 641 { 642 return QDF_STATUS_SUCCESS; 643 } 644 645 static QDF_STATUS dispatcher_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc) 646 { 647 return QDF_STATUS_SUCCESS; 648 } 649 650 static QDF_STATUS dispatcher_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc) 651 { 652 return QDF_STATUS_SUCCESS; 653 } 654 #endif 655 656 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 657 static QDF_STATUS dispatcher_offchan_txrx_init(void) 658 { 659 return wlan_offchan_txrx_init(); 660 } 661 662 static QDF_STATUS dispatcher_offchan_txrx_deinit(void) 663 { 664 return wlan_offchan_txrx_deinit(); 665 } 666 #else 667 static QDF_STATUS dispatcher_offchan_txrx_init(void) 668 { 669 return QDF_STATUS_SUCCESS; 670 } 671 672 static QDF_STATUS dispatcher_offchan_txrx_deinit(void) 673 { 674 return QDF_STATUS_SUCCESS; 675 } 676 #endif /*WLAN_OFFCHAN_TXRX_ENABLE*/ 677 678 #ifdef WLAN_SUPPORT_SPLITMAC 679 static QDF_STATUS dispatcher_splitmac_init(void) 680 { 681 return wlan_splitmac_init(); 682 } 683 684 static QDF_STATUS dispatcher_splitmac_deinit(void) 685 { 686 return wlan_splitmac_deinit(); 687 } 688 #else 689 static QDF_STATUS dispatcher_splitmac_init(void) 690 { 691 return QDF_STATUS_SUCCESS; 692 } 693 694 static QDF_STATUS dispatcher_splitmac_deinit(void) 695 { 696 return QDF_STATUS_SUCCESS; 697 } 698 #endif /* WLAN_SUPPORT_SPLITMAC */ 699 700 #ifdef WLAN_CONV_SPECTRAL_ENABLE 701 #ifndef SPECTRAL_MODULIZED_ENABLE 702 static QDF_STATUS dispatcher_spectral_init(void) 703 { 704 return wlan_spectral_init(); 705 } 706 707 static QDF_STATUS dispatcher_spectral_deinit(void) 708 { 709 return wlan_spectral_deinit(); 710 } 711 #else 712 static QDF_STATUS dispatcher_spectral_init(void) 713 { 714 return QDF_STATUS_SUCCESS; 715 } 716 717 static QDF_STATUS dispatcher_spectral_deinit(void) 718 { 719 return QDF_STATUS_SUCCESS; 720 } 721 #endif 722 #else 723 static QDF_STATUS dispatcher_spectral_init(void) 724 { 725 return QDF_STATUS_SUCCESS; 726 } 727 728 static QDF_STATUS dispatcher_spectral_deinit(void) 729 { 730 return QDF_STATUS_SUCCESS; 731 } 732 #endif 733 734 #ifdef DIRECT_BUF_RX_ENABLE 735 static QDF_STATUS dispatcher_dbr_psoc_enable(struct wlan_objmgr_psoc *psoc) 736 { 737 struct wlan_lmac_if_tx_ops *tx_ops; 738 739 tx_ops = wlan_psoc_get_lmac_if_txops(psoc); 740 if (!tx_ops) { 741 qdf_err("tx_ops is NULL"); 742 return QDF_STATUS_E_FAILURE; 743 } 744 745 if (tx_ops->dbr_tx_ops.direct_buf_rx_register_events) 746 return tx_ops->dbr_tx_ops.direct_buf_rx_register_events(psoc); 747 748 return QDF_STATUS_SUCCESS; 749 } 750 751 static QDF_STATUS dispatcher_dbr_psoc_disable(struct wlan_objmgr_psoc *psoc) 752 { 753 struct wlan_lmac_if_tx_ops *tx_ops; 754 755 tx_ops = wlan_psoc_get_lmac_if_txops(psoc); 756 if (!tx_ops) { 757 qdf_err("tx_ops is NULL"); 758 return QDF_STATUS_E_FAILURE; 759 } 760 761 if (tx_ops->dbr_tx_ops.direct_buf_rx_unregister_events) 762 return tx_ops->dbr_tx_ops.direct_buf_rx_unregister_events(psoc); 763 764 return QDF_STATUS_SUCCESS; 765 } 766 #else 767 static QDF_STATUS dispatcher_dbr_psoc_enable(struct wlan_objmgr_psoc *psoc) 768 { 769 return QDF_STATUS_SUCCESS; 770 } 771 772 static QDF_STATUS dispatcher_dbr_psoc_disable(struct wlan_objmgr_psoc *psoc) 773 { 774 return QDF_STATUS_SUCCESS; 775 } 776 #endif /* DIRECT_BUF_RX_ENABLE */ 777 778 #ifdef WLAN_SUPPORT_GREEN_AP 779 static QDF_STATUS dispatcher_green_ap_init(void) 780 { 781 return wlan_green_ap_init(); 782 } 783 784 static QDF_STATUS dispatcher_green_ap_pdev_open( 785 struct wlan_objmgr_pdev *pdev) 786 { 787 return wlan_green_ap_pdev_open(pdev); 788 } 789 790 /* Only added this for symmetry */ 791 static QDF_STATUS dispatcher_green_ap_pdev_close(struct wlan_objmgr_pdev *pdev) 792 { 793 return QDF_STATUS_SUCCESS; 794 } 795 796 static QDF_STATUS dispatcher_green_ap_deinit(void) 797 { 798 return wlan_green_ap_deinit(); 799 } 800 #else 801 static QDF_STATUS dispatcher_green_ap_init(void) 802 { 803 return QDF_STATUS_SUCCESS; 804 } 805 static QDF_STATUS dispatcher_green_ap_pdev_open( 806 struct wlan_objmgr_pdev *pdev) 807 { 808 return QDF_STATUS_SUCCESS; 809 } 810 811 /* Only added this for symmetry */ 812 static QDF_STATUS dispatcher_green_ap_pdev_close(struct wlan_objmgr_pdev *pdev) 813 { 814 return QDF_STATUS_SUCCESS; 815 } 816 817 static QDF_STATUS dispatcher_green_ap_deinit(void) 818 { 819 return QDF_STATUS_SUCCESS; 820 } 821 #endif 822 823 #ifdef WLAN_SUPPORT_FILS 824 static QDF_STATUS dispatcher_fd_init(void) 825 { 826 return wlan_fd_init(); 827 } 828 829 static QDF_STATUS dispatcher_fd_deinit(void) 830 { 831 return wlan_fd_deinit(); 832 } 833 834 static QDF_STATUS fd_psoc_enable(struct wlan_objmgr_psoc *psoc) 835 { 836 return wlan_fd_enable(psoc); 837 } 838 839 static QDF_STATUS fd_psoc_disable(struct wlan_objmgr_psoc *psoc) 840 { 841 return wlan_fd_disable(psoc); 842 } 843 #else 844 static QDF_STATUS dispatcher_fd_init(void) 845 { 846 return QDF_STATUS_SUCCESS; 847 } 848 849 static QDF_STATUS dispatcher_fd_deinit(void) 850 { 851 return QDF_STATUS_SUCCESS; 852 } 853 854 static QDF_STATUS fd_psoc_enable(struct wlan_objmgr_psoc *psoc) 855 { 856 return QDF_STATUS_SUCCESS; 857 } 858 859 static QDF_STATUS fd_psoc_disable(struct wlan_objmgr_psoc *psoc) 860 { 861 return QDF_STATUS_SUCCESS; 862 } 863 #endif /* WLAN_SUPPORT_FILS */ 864 865 #ifdef FEATURE_COEX 866 static QDF_STATUS dispatcher_coex_init(void) 867 { 868 return wlan_coex_init(); 869 } 870 871 static QDF_STATUS dispatcher_coex_deinit(void) 872 { 873 return wlan_coex_deinit(); 874 } 875 876 static QDF_STATUS dispatcher_coex_psoc_open(struct wlan_objmgr_psoc *psoc) 877 { 878 return wlan_coex_psoc_open(psoc); 879 } 880 881 static QDF_STATUS dispatcher_coex_psoc_close(struct wlan_objmgr_psoc *psoc) 882 { 883 return wlan_coex_psoc_close(psoc); 884 } 885 #else 886 static inline QDF_STATUS dispatcher_coex_init(void) 887 { 888 return QDF_STATUS_SUCCESS; 889 } 890 891 static inline QDF_STATUS dispatcher_coex_deinit(void) 892 { 893 return QDF_STATUS_SUCCESS; 894 } 895 896 static inline QDF_STATUS 897 dispatcher_coex_psoc_open(struct wlan_objmgr_psoc *psoc) 898 { 899 return QDF_STATUS_SUCCESS; 900 } 901 902 static inline QDF_STATUS 903 dispatcher_coex_psoc_close(struct wlan_objmgr_psoc *psoc) 904 { 905 return QDF_STATUS_SUCCESS; 906 } 907 #endif /* FEATURE_COEX */ 908 909 QDF_STATUS dispatcher_init(void) 910 { 911 if (QDF_STATUS_SUCCESS != wlan_objmgr_global_obj_init()) 912 goto out; 913 914 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_init()) 915 goto mgmt_txrx_init_fail; 916 917 if (QDF_STATUS_SUCCESS != ucfg_scan_init()) 918 goto ucfg_scan_init_fail; 919 920 if (QDF_STATUS_SUCCESS != wlan_serialization_init()) 921 goto serialization_init_fail; 922 923 if (QDF_STATUS_SUCCESS != dispatcher_init_crypto()) 924 goto crypto_init_fail; 925 926 if (QDF_STATUS_SUCCESS != dispatcher_init_cp_stats()) 927 goto cp_stats_init_fail; 928 929 if (QDF_STATUS_SUCCESS != dispatcher_init_dcs()) 930 goto dcs_init_fail; 931 932 if (QDF_STATUS_SUCCESS != dispatcher_init_atf()) 933 goto atf_init_fail; 934 935 if (QDF_STATUS_SUCCESS != dispatcher_init_sa_api()) 936 goto sa_api_init_fail; 937 938 if (QDF_STATUS_SUCCESS != dispatcher_init_wifi_pos()) 939 goto wifi_pos_init_fail; 940 941 if (QDF_STATUS_SUCCESS != dispatcher_init_dfs()) 942 goto dfs_init_fail; 943 944 if (QDF_STATUS_SUCCESS != dispatcher_regulatory_init()) 945 goto regulatory_init_fail; 946 947 if (QDF_STATUS_SUCCESS != dispatcher_offchan_txrx_init()) 948 goto offchan_init_fail; 949 950 if (QDF_STATUS_SUCCESS != dispatcher_init_son()) 951 goto son_init_fail; 952 953 if (QDF_STATUS_SUCCESS != dispatcher_splitmac_init()) 954 goto splitmac_init_fail; 955 956 if (QDF_STATUS_SUCCESS != dispatcher_fd_init()) 957 goto fd_init_fail; 958 959 if (QDF_STATUS_SUCCESS != dispatcher_green_ap_init()) 960 goto green_ap_init_fail; 961 962 if (QDF_STATUS_SUCCESS != dispatcher_ftm_init()) 963 goto ftm_init_fail; 964 965 if (QDF_IS_STATUS_ERROR(cfg_dispatcher_init())) 966 goto cfg_init_fail; 967 968 if (QDF_STATUS_SUCCESS != dispatcher_spectral_init()) 969 goto spectral_init_fail; 970 971 if (QDF_STATUS_SUCCESS != wlan_cmn_mlme_init()) 972 goto cmn_mlme_init_fail; 973 974 if (QDF_STATUS_SUCCESS != dispatcher_init_cfr()) 975 goto cfr_init_fail; 976 977 if (QDF_STATUS_SUCCESS != dispatcher_coex_init()) 978 goto coex_init_fail; 979 980 /* 981 * scheduler INIT has to be the last as each component's 982 * initialization has to happen first and then at the end 983 * scheduler needs to start accepting the service. 984 */ 985 if (QDF_STATUS_SUCCESS != scheduler_init()) 986 goto scheduler_init_fail; 987 988 return QDF_STATUS_SUCCESS; 989 990 scheduler_init_fail: 991 dispatcher_coex_deinit(); 992 coex_init_fail: 993 dispatcher_deinit_cfr(); 994 cfr_init_fail: 995 wlan_cmn_mlme_deinit(); 996 cmn_mlme_init_fail: 997 dispatcher_spectral_deinit(); 998 spectral_init_fail: 999 cfg_dispatcher_deinit(); 1000 cfg_init_fail: 1001 dispatcher_ftm_deinit(); 1002 ftm_init_fail: 1003 dispatcher_green_ap_deinit(); 1004 green_ap_init_fail: 1005 dispatcher_fd_deinit(); 1006 fd_init_fail: 1007 dispatcher_splitmac_deinit(); 1008 splitmac_init_fail: 1009 dispatcher_deinit_son(); 1010 son_init_fail: 1011 dispatcher_offchan_txrx_deinit(); 1012 offchan_init_fail: 1013 dispatcher_regulatory_deinit(); 1014 regulatory_init_fail: 1015 dispatcher_deinit_dfs(); 1016 dfs_init_fail: 1017 dispatcher_deinit_wifi_pos(); 1018 wifi_pos_init_fail: 1019 dispatcher_deinit_sa_api(); 1020 sa_api_init_fail: 1021 dispatcher_deinit_atf(); 1022 atf_init_fail: 1023 dispatcher_deinit_dcs(); 1024 dcs_init_fail: 1025 dispatcher_deinit_cp_stats(); 1026 cp_stats_init_fail: 1027 dispatcher_deinit_crypto(); 1028 crypto_init_fail: 1029 wlan_serialization_deinit(); 1030 serialization_init_fail: 1031 ucfg_scan_deinit(); 1032 ucfg_scan_init_fail: 1033 wlan_mgmt_txrx_deinit(); 1034 mgmt_txrx_init_fail: 1035 wlan_objmgr_global_obj_deinit(); 1036 1037 out: 1038 return QDF_STATUS_E_FAILURE; 1039 } 1040 qdf_export_symbol(dispatcher_init); 1041 1042 QDF_STATUS dispatcher_deinit(void) 1043 { 1044 QDF_STATUS status; 1045 1046 QDF_BUG(QDF_STATUS_SUCCESS == scheduler_deinit()); 1047 1048 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_coex_deinit()); 1049 1050 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_cfr()); 1051 1052 QDF_BUG(QDF_STATUS_SUCCESS == wlan_cmn_mlme_deinit()); 1053 1054 status = cfg_dispatcher_deinit(); 1055 QDF_BUG(QDF_IS_STATUS_SUCCESS(status)); 1056 1057 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_ftm_deinit()); 1058 1059 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_green_ap_deinit()); 1060 1061 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_fd_deinit()); 1062 1063 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_spectral_deinit()); 1064 1065 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_splitmac_deinit()); 1066 1067 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_son()); 1068 1069 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_offchan_txrx_deinit()); 1070 1071 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_regulatory_deinit()); 1072 1073 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_dfs()); 1074 1075 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_wifi_pos()); 1076 1077 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_sa_api()); 1078 1079 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_atf()); 1080 1081 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_cp_stats()); 1082 1083 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_dcs()); 1084 1085 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_crypto()); 1086 1087 QDF_BUG(QDF_STATUS_SUCCESS == wlan_serialization_deinit()); 1088 1089 QDF_BUG(QDF_STATUS_SUCCESS == ucfg_scan_deinit()); 1090 1091 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_deinit()); 1092 1093 QDF_BUG(QDF_STATUS_SUCCESS == wlan_objmgr_global_obj_deinit()); 1094 1095 return QDF_STATUS_SUCCESS; 1096 } 1097 qdf_export_symbol(dispatcher_deinit); 1098 1099 QDF_STATUS dispatcher_enable(void) 1100 { 1101 QDF_STATUS status; 1102 1103 status = scheduler_enable(); 1104 1105 return status; 1106 } 1107 qdf_export_symbol(dispatcher_enable); 1108 1109 QDF_STATUS dispatcher_disable(void) 1110 { 1111 QDF_BUG(QDF_IS_STATUS_SUCCESS(scheduler_disable())); 1112 1113 return QDF_STATUS_SUCCESS; 1114 } 1115 qdf_export_symbol(dispatcher_disable); 1116 1117 QDF_STATUS dispatcher_psoc_open(struct wlan_objmgr_psoc *psoc) 1118 { 1119 QDF_STATUS status; 1120 1121 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_psoc_open(psoc)) 1122 goto out; 1123 1124 if (QDF_STATUS_SUCCESS != ucfg_scan_psoc_open(psoc)) 1125 goto scan_psoc_open_fail; 1126 1127 if (QDF_STATUS_SUCCESS != cp_stats_psoc_open(psoc)) 1128 goto cp_stats_psoc_open_fail; 1129 1130 if (QDF_STATUS_SUCCESS != atf_psoc_open(psoc)) 1131 goto atf_psoc_open_fail; 1132 1133 if (QDF_STATUS_SUCCESS != dispatcher_regulatory_psoc_open(psoc)) 1134 goto regulatory_psoc_open_fail; 1135 1136 if (QDF_STATUS_SUCCESS != son_psoc_open(psoc)) 1137 goto psoc_son_fail; 1138 1139 if (QDF_STATUS_SUCCESS != dispatcher_ftm_psoc_open(psoc)) 1140 goto ftm_psoc_open_fail; 1141 1142 if (QDF_STATUS_SUCCESS != dispatcher_coex_psoc_open(psoc)) 1143 goto coex_psoc_open_fail; 1144 1145 if (QDF_STATUS_SUCCESS != dcs_psoc_open(psoc)) 1146 goto dcs_psoc_open_fail; 1147 1148 status = spectral_psoc_open(psoc); 1149 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1150 goto spectral_psoc_open_fail; 1151 1152 if (QDF_IS_STATUS_ERROR(mlme_psoc_open(psoc))) 1153 goto mlme_psoc_open_fail; 1154 1155 return QDF_STATUS_SUCCESS; 1156 1157 mlme_psoc_open_fail: 1158 spectral_psoc_close(psoc); 1159 spectral_psoc_open_fail: 1160 dcs_psoc_close(psoc); 1161 dcs_psoc_open_fail: 1162 dispatcher_coex_psoc_close(psoc); 1163 coex_psoc_open_fail: 1164 dispatcher_ftm_psoc_close(psoc); 1165 ftm_psoc_open_fail: 1166 son_psoc_close(psoc); 1167 psoc_son_fail: 1168 regulatory_psoc_close(psoc); 1169 regulatory_psoc_open_fail: 1170 atf_psoc_close(psoc); 1171 atf_psoc_open_fail: 1172 cp_stats_psoc_close(psoc); 1173 cp_stats_psoc_open_fail: 1174 ucfg_scan_psoc_close(psoc); 1175 scan_psoc_open_fail: 1176 wlan_mgmt_txrx_psoc_close(psoc); 1177 1178 out: 1179 return QDF_STATUS_E_FAILURE; 1180 } 1181 qdf_export_symbol(dispatcher_psoc_open); 1182 1183 QDF_STATUS dispatcher_psoc_close(struct wlan_objmgr_psoc *psoc) 1184 { 1185 QDF_STATUS status; 1186 1187 QDF_BUG(QDF_STATUS_SUCCESS == mlme_psoc_close(psoc)); 1188 1189 QDF_BUG(QDF_STATUS_SUCCESS == dcs_psoc_close(psoc)); 1190 1191 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_coex_psoc_close(psoc)); 1192 1193 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_ftm_psoc_close(psoc)); 1194 1195 QDF_BUG(QDF_STATUS_SUCCESS == son_psoc_close(psoc)); 1196 1197 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_regulatory_psoc_close(psoc)); 1198 1199 QDF_BUG(QDF_STATUS_SUCCESS == atf_psoc_close(psoc)); 1200 1201 QDF_BUG(QDF_STATUS_SUCCESS == cp_stats_psoc_close(psoc)); 1202 1203 QDF_BUG(QDF_STATUS_SUCCESS == ucfg_scan_psoc_close(psoc)); 1204 1205 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_psoc_close(psoc)); 1206 1207 status = spectral_psoc_close(psoc); 1208 QDF_BUG((status == QDF_STATUS_SUCCESS) || 1209 (status == QDF_STATUS_COMP_DISABLED)); 1210 1211 return QDF_STATUS_SUCCESS; 1212 } 1213 qdf_export_symbol(dispatcher_psoc_close); 1214 1215 QDF_STATUS dispatcher_psoc_enable(struct wlan_objmgr_psoc *psoc) 1216 { 1217 QDF_STATUS status; 1218 1219 if (QDF_STATUS_SUCCESS != wlan_serialization_psoc_enable(psoc)) 1220 goto out; 1221 1222 if (QDF_STATUS_SUCCESS != ucfg_scan_psoc_enable(psoc)) 1223 goto serialization_psoc_enable_fail; 1224 1225 if (QDF_STATUS_SUCCESS != sa_api_psoc_enable(psoc)) 1226 goto sa_api_psoc_enable_fail; 1227 1228 if (QDF_STATUS_SUCCESS != cp_stats_psoc_enable(psoc)) 1229 goto cp_stats_psoc_enable_fail; 1230 1231 if (QDF_STATUS_SUCCESS != dcs_psoc_enable(psoc)) 1232 goto dcs_psoc_enable_fail; 1233 1234 if (QDF_STATUS_SUCCESS != atf_psoc_enable(psoc)) 1235 goto atf_psoc_enable_fail; 1236 1237 if (QDF_STATUS_SUCCESS != dispatcher_wifi_pos_enable(psoc)) 1238 goto wifi_pos_psoc_enable_fail; 1239 1240 if (QDF_STATUS_SUCCESS != dispatcher_dfs_psoc_enable(psoc)) 1241 goto wifi_dfs_psoc_enable_fail; 1242 1243 if (QDF_STATUS_SUCCESS != fd_psoc_enable(psoc)) 1244 goto fd_psoc_enable_fail; 1245 1246 if (QDF_STATUS_SUCCESS != dispatcher_dbr_psoc_enable(psoc)) 1247 goto dbr_psoc_enable_fail; 1248 1249 if (QDF_STATUS_SUCCESS != wlan_mlme_psoc_enable(psoc)) 1250 goto mlme_psoc_enable_fail; 1251 1252 status = spectral_psoc_enable(psoc); 1253 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1254 goto spectral_psoc_enable_fail; 1255 1256 return QDF_STATUS_SUCCESS; 1257 1258 spectral_psoc_enable_fail: 1259 wlan_mlme_psoc_disable(psoc); 1260 mlme_psoc_enable_fail: 1261 dispatcher_dbr_psoc_disable(psoc); 1262 dbr_psoc_enable_fail: 1263 fd_psoc_disable(psoc); 1264 fd_psoc_enable_fail: 1265 dispatcher_dfs_psoc_disable(psoc); 1266 wifi_dfs_psoc_enable_fail: 1267 dispatcher_wifi_pos_disable(psoc); 1268 wifi_pos_psoc_enable_fail: 1269 atf_psoc_disable(psoc); 1270 atf_psoc_enable_fail: 1271 dcs_psoc_disable(psoc); 1272 dcs_psoc_enable_fail: 1273 cp_stats_psoc_disable(psoc); 1274 cp_stats_psoc_enable_fail: 1275 sa_api_psoc_disable(psoc); 1276 sa_api_psoc_enable_fail: 1277 ucfg_scan_psoc_disable(psoc); 1278 serialization_psoc_enable_fail: 1279 wlan_serialization_psoc_disable(psoc); 1280 out: 1281 return QDF_STATUS_E_FAILURE; 1282 } 1283 qdf_export_symbol(dispatcher_psoc_enable); 1284 1285 QDF_STATUS dispatcher_psoc_disable(struct wlan_objmgr_psoc *psoc) 1286 { 1287 QDF_STATUS status; 1288 1289 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mlme_psoc_disable(psoc)); 1290 1291 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_dbr_psoc_disable(psoc)); 1292 1293 QDF_BUG(QDF_STATUS_SUCCESS == fd_psoc_disable(psoc)); 1294 1295 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_dfs_psoc_disable(psoc)); 1296 1297 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_wifi_pos_disable(psoc)); 1298 1299 QDF_BUG(QDF_STATUS_SUCCESS == atf_psoc_disable(psoc)); 1300 1301 QDF_BUG(QDF_STATUS_SUCCESS == cp_stats_psoc_disable(psoc)); 1302 1303 QDF_BUG(QDF_STATUS_SUCCESS == sa_api_psoc_disable(psoc)); 1304 1305 QDF_BUG(QDF_STATUS_SUCCESS == ucfg_scan_psoc_disable(psoc)); 1306 1307 QDF_BUG(QDF_STATUS_SUCCESS == wlan_serialization_psoc_disable(psoc)); 1308 1309 status = spectral_psoc_disable(psoc); 1310 QDF_BUG((status == QDF_STATUS_SUCCESS) || 1311 (status == QDF_STATUS_COMP_DISABLED)); 1312 1313 return QDF_STATUS_SUCCESS; 1314 } 1315 qdf_export_symbol(dispatcher_psoc_disable); 1316 1317 QDF_STATUS dispatcher_pdev_open(struct wlan_objmgr_pdev *pdev) 1318 { 1319 QDF_STATUS status; 1320 1321 if (QDF_STATUS_SUCCESS != dispatcher_regulatory_pdev_open(pdev)) 1322 goto regulatory_pdev_open_fail; 1323 1324 status = dispatcher_spectral_pdev_open(pdev); 1325 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1326 goto spectral_pdev_open_fail; 1327 1328 status = dispatcher_cfr_pdev_open(pdev); 1329 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1330 goto cfr_pdev_open_fail; 1331 1332 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_pdev_open(pdev)) 1333 goto mgmt_txrx_pdev_open_fail; 1334 1335 if (QDF_IS_STATUS_ERROR(dispatcher_green_ap_pdev_open(pdev))) 1336 goto green_ap_pdev_open_fail; 1337 1338 return QDF_STATUS_SUCCESS; 1339 1340 green_ap_pdev_open_fail: 1341 wlan_mgmt_txrx_pdev_close(pdev); 1342 mgmt_txrx_pdev_open_fail: 1343 dispatcher_cfr_pdev_close(pdev); 1344 cfr_pdev_open_fail: 1345 dispatcher_spectral_pdev_close(pdev); 1346 spectral_pdev_open_fail: 1347 dispatcher_regulatory_pdev_close(pdev); 1348 regulatory_pdev_open_fail: 1349 1350 return QDF_STATUS_E_FAILURE; 1351 } 1352 qdf_export_symbol(dispatcher_pdev_open); 1353 1354 QDF_STATUS dispatcher_pdev_close(struct wlan_objmgr_pdev *pdev) 1355 { 1356 QDF_STATUS status; 1357 1358 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_green_ap_pdev_close(pdev)); 1359 1360 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_pdev_close(pdev)); 1361 1362 status = dispatcher_cfr_pdev_close(pdev); 1363 QDF_BUG((QDF_STATUS_SUCCESS == status) || 1364 (QDF_STATUS_COMP_DISABLED == status)); 1365 1366 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_spectral_pdev_close(pdev)); 1367 1368 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_regulatory_pdev_close(pdev)); 1369 1370 return QDF_STATUS_SUCCESS; 1371 } 1372 qdf_export_symbol(dispatcher_pdev_close); 1373