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