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