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