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 #ifdef WLAN_SA_API_ENABLE 496 static QDF_STATUS dispatcher_init_sa_api(void) 497 { 498 return wlan_sa_api_init(); 499 } 500 501 static QDF_STATUS dispatcher_deinit_sa_api(void) 502 { 503 return wlan_sa_api_deinit(); 504 } 505 506 static QDF_STATUS sa_api_psoc_enable(struct wlan_objmgr_psoc *psoc) 507 { 508 return wlan_sa_api_enable(psoc); 509 } 510 511 static QDF_STATUS sa_api_psoc_disable(struct wlan_objmgr_psoc *psoc) 512 { 513 return wlan_sa_api_disable(psoc); 514 } 515 #else 516 static QDF_STATUS dispatcher_init_sa_api(void) 517 { 518 return QDF_STATUS_SUCCESS; 519 } 520 521 static QDF_STATUS dispatcher_deinit_sa_api(void) 522 { 523 return QDF_STATUS_SUCCESS; 524 } 525 526 static QDF_STATUS sa_api_psoc_enable(struct wlan_objmgr_psoc *psoc) 527 { 528 return QDF_STATUS_SUCCESS; 529 } 530 531 static QDF_STATUS sa_api_psoc_disable(struct wlan_objmgr_psoc *psoc) 532 { 533 return QDF_STATUS_SUCCESS; 534 } 535 #endif /* END of WLAN_SA_API_ENABLE */ 536 537 538 #ifdef WLAN_ATF_ENABLE 539 static QDF_STATUS dispatcher_init_atf(void) 540 { 541 return wlan_atf_init(); 542 } 543 544 static QDF_STATUS dispatcher_deinit_atf(void) 545 { 546 return wlan_atf_deinit(); 547 } 548 549 static QDF_STATUS atf_psoc_open(struct wlan_objmgr_psoc *psoc) 550 { 551 return wlan_atf_open(psoc); 552 } 553 554 static QDF_STATUS atf_psoc_close(struct wlan_objmgr_psoc *psoc) 555 { 556 return wlan_atf_close(psoc); 557 } 558 559 static QDF_STATUS atf_psoc_enable(struct wlan_objmgr_psoc *psoc) 560 { 561 return wlan_atf_enable(psoc); 562 } 563 564 static QDF_STATUS atf_psoc_disable(struct wlan_objmgr_psoc *psoc) 565 { 566 return wlan_atf_disable(psoc); 567 } 568 #else 569 static QDF_STATUS dispatcher_init_atf(void) 570 { 571 return QDF_STATUS_SUCCESS; 572 } 573 574 static QDF_STATUS dispatcher_deinit_atf(void) 575 { 576 return QDF_STATUS_SUCCESS; 577 } 578 579 static QDF_STATUS atf_psoc_open(struct wlan_objmgr_psoc *psoc) 580 { 581 return QDF_STATUS_SUCCESS; 582 } 583 584 static QDF_STATUS atf_psoc_close(struct wlan_objmgr_psoc *psoc) 585 { 586 return QDF_STATUS_SUCCESS; 587 } 588 589 static QDF_STATUS atf_psoc_enable(struct wlan_objmgr_psoc *psoc) 590 { 591 return QDF_STATUS_SUCCESS; 592 } 593 594 static QDF_STATUS atf_psoc_disable(struct wlan_objmgr_psoc *psoc) 595 { 596 return QDF_STATUS_SUCCESS; 597 } 598 #endif /* END of WLAN_ATF_ENABLE */ 599 600 static QDF_STATUS dispatcher_init_crypto(void) 601 { 602 return wlan_crypto_init(); 603 } 604 605 static QDF_STATUS dispatcher_deinit_crypto(void) 606 { 607 return wlan_crypto_deinit(); 608 } 609 610 static QDF_STATUS dispatcher_crypto_psoc_enable(struct wlan_objmgr_psoc *psoc) 611 { 612 return wlan_crypto_psoc_enable(psoc); 613 } 614 615 static QDF_STATUS dispatcher_crypto_psoc_disable(struct wlan_objmgr_psoc *psoc) 616 { 617 return wlan_crypto_psoc_disable(psoc); 618 } 619 620 #ifdef WIFI_POS_CONVERGED 621 static QDF_STATUS dispatcher_init_wifi_pos(void) 622 { 623 return wifi_pos_init(); 624 } 625 626 static QDF_STATUS dispatcher_deinit_wifi_pos(void) 627 { 628 return wifi_pos_deinit(); 629 } 630 631 static QDF_STATUS dispatcher_wifi_pos_enable(struct wlan_objmgr_psoc *psoc) 632 { 633 return wifi_pos_psoc_enable(psoc); 634 } 635 636 static QDF_STATUS dispatcher_wifi_pos_disable(struct wlan_objmgr_psoc *psoc) 637 { 638 return wifi_pos_psoc_disable(psoc); 639 } 640 #else 641 static QDF_STATUS dispatcher_init_wifi_pos(void) 642 { 643 return QDF_STATUS_SUCCESS; 644 } 645 646 static QDF_STATUS dispatcher_deinit_wifi_pos(void) 647 { 648 return QDF_STATUS_SUCCESS; 649 } 650 651 static QDF_STATUS dispatcher_wifi_pos_enable(struct wlan_objmgr_psoc *psoc) 652 { 653 return QDF_STATUS_SUCCESS; 654 } 655 656 static QDF_STATUS dispatcher_wifi_pos_disable(struct wlan_objmgr_psoc *psoc) 657 { 658 return QDF_STATUS_SUCCESS; 659 } 660 #endif 661 662 #ifdef DFS_COMPONENT_ENABLE 663 static QDF_STATUS dispatcher_init_dfs(void) 664 { 665 return dfs_init(); 666 } 667 668 static QDF_STATUS dispatcher_deinit_dfs(void) 669 { 670 return dfs_deinit(); 671 } 672 673 static QDF_STATUS dispatcher_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc) 674 { 675 return wifi_dfs_psoc_enable(psoc); 676 } 677 678 static QDF_STATUS dispatcher_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc) 679 { 680 return wifi_dfs_psoc_disable(psoc); 681 } 682 #else 683 static QDF_STATUS dispatcher_init_dfs(void) 684 { 685 return QDF_STATUS_SUCCESS; 686 } 687 688 static QDF_STATUS dispatcher_deinit_dfs(void) 689 { 690 return QDF_STATUS_SUCCESS; 691 } 692 693 static QDF_STATUS dispatcher_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc) 694 { 695 return QDF_STATUS_SUCCESS; 696 } 697 698 static QDF_STATUS dispatcher_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc) 699 { 700 return QDF_STATUS_SUCCESS; 701 } 702 #endif 703 704 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 705 static QDF_STATUS dispatcher_twt_psoc_enable(struct wlan_objmgr_psoc *psoc) 706 { 707 return twt_psoc_enable(psoc); 708 } 709 710 static QDF_STATUS dispatcher_twt_psoc_disable(struct wlan_objmgr_psoc *psoc) 711 { 712 return twt_psoc_disable(psoc); 713 } 714 715 static QDF_STATUS dispatcher_twt_init(void) 716 { 717 return wlan_twt_init(); 718 } 719 720 static QDF_STATUS dispatcher_twt_deinit(void) 721 { 722 return wlan_twt_deinit(); 723 } 724 725 #else 726 static QDF_STATUS dispatcher_twt_psoc_enable(struct wlan_objmgr_psoc *psoc) 727 { 728 return QDF_STATUS_SUCCESS; 729 } 730 731 static QDF_STATUS dispatcher_twt_psoc_disable(struct wlan_objmgr_psoc *psoc) 732 { 733 return QDF_STATUS_SUCCESS; 734 } 735 736 static QDF_STATUS dispatcher_twt_init(void) 737 { 738 return QDF_STATUS_SUCCESS; 739 } 740 741 static QDF_STATUS dispatcher_twt_deinit(void) 742 { 743 return QDF_STATUS_SUCCESS; 744 } 745 #endif 746 747 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 748 static QDF_STATUS dispatcher_offchan_txrx_init(void) 749 { 750 return wlan_offchan_txrx_init(); 751 } 752 753 static QDF_STATUS dispatcher_offchan_txrx_deinit(void) 754 { 755 return wlan_offchan_txrx_deinit(); 756 } 757 #else 758 static QDF_STATUS dispatcher_offchan_txrx_init(void) 759 { 760 return QDF_STATUS_SUCCESS; 761 } 762 763 static QDF_STATUS dispatcher_offchan_txrx_deinit(void) 764 { 765 return QDF_STATUS_SUCCESS; 766 } 767 #endif /*WLAN_OFFCHAN_TXRX_ENABLE*/ 768 769 #ifdef WLAN_SUPPORT_SPLITMAC 770 static QDF_STATUS dispatcher_splitmac_init(void) 771 { 772 return wlan_splitmac_init(); 773 } 774 775 static QDF_STATUS dispatcher_splitmac_deinit(void) 776 { 777 return wlan_splitmac_deinit(); 778 } 779 #else 780 static QDF_STATUS dispatcher_splitmac_init(void) 781 { 782 return QDF_STATUS_SUCCESS; 783 } 784 785 static QDF_STATUS dispatcher_splitmac_deinit(void) 786 { 787 return QDF_STATUS_SUCCESS; 788 } 789 #endif /* WLAN_SUPPORT_SPLITMAC */ 790 791 #ifdef WLAN_CONV_SPECTRAL_ENABLE 792 #ifndef SPECTRAL_MODULIZED_ENABLE 793 static QDF_STATUS dispatcher_spectral_init(void) 794 { 795 return wlan_spectral_init(); 796 } 797 798 static QDF_STATUS dispatcher_spectral_deinit(void) 799 { 800 return wlan_spectral_deinit(); 801 } 802 #else 803 static QDF_STATUS dispatcher_spectral_init(void) 804 { 805 return QDF_STATUS_SUCCESS; 806 } 807 808 static QDF_STATUS dispatcher_spectral_deinit(void) 809 { 810 return QDF_STATUS_SUCCESS; 811 } 812 #endif 813 #else 814 static QDF_STATUS dispatcher_spectral_init(void) 815 { 816 return QDF_STATUS_SUCCESS; 817 } 818 819 static QDF_STATUS dispatcher_spectral_deinit(void) 820 { 821 return QDF_STATUS_SUCCESS; 822 } 823 #endif 824 825 #ifdef DIRECT_BUF_RX_ENABLE 826 static QDF_STATUS dispatcher_dbr_psoc_enable(struct wlan_objmgr_psoc *psoc) 827 { 828 struct wlan_lmac_if_tx_ops *tx_ops; 829 830 tx_ops = wlan_psoc_get_lmac_if_txops(psoc); 831 if (!tx_ops) { 832 qdf_err("tx_ops is NULL"); 833 return QDF_STATUS_E_FAILURE; 834 } 835 836 if (tx_ops->dbr_tx_ops.direct_buf_rx_register_events) 837 return tx_ops->dbr_tx_ops.direct_buf_rx_register_events(psoc); 838 839 return QDF_STATUS_SUCCESS; 840 } 841 842 static QDF_STATUS dispatcher_dbr_psoc_disable(struct wlan_objmgr_psoc *psoc) 843 { 844 struct wlan_lmac_if_tx_ops *tx_ops; 845 846 tx_ops = wlan_psoc_get_lmac_if_txops(psoc); 847 if (!tx_ops) { 848 qdf_err("tx_ops is NULL"); 849 return QDF_STATUS_E_FAILURE; 850 } 851 852 if (tx_ops->dbr_tx_ops.direct_buf_rx_unregister_events) 853 return tx_ops->dbr_tx_ops.direct_buf_rx_unregister_events(psoc); 854 855 return QDF_STATUS_SUCCESS; 856 } 857 #else 858 static QDF_STATUS dispatcher_dbr_psoc_enable(struct wlan_objmgr_psoc *psoc) 859 { 860 return QDF_STATUS_SUCCESS; 861 } 862 863 static QDF_STATUS dispatcher_dbr_psoc_disable(struct wlan_objmgr_psoc *psoc) 864 { 865 return QDF_STATUS_SUCCESS; 866 } 867 #endif /* DIRECT_BUF_RX_ENABLE */ 868 869 #ifdef WLAN_SUPPORT_GREEN_AP 870 static QDF_STATUS dispatcher_green_ap_init(void) 871 { 872 return wlan_green_ap_init(); 873 } 874 875 static QDF_STATUS dispatcher_green_ap_pdev_open( 876 struct wlan_objmgr_pdev *pdev) 877 { 878 return wlan_green_ap_pdev_open(pdev); 879 } 880 881 /* Only added this for symmetry */ 882 static QDF_STATUS dispatcher_green_ap_pdev_close(struct wlan_objmgr_pdev *pdev) 883 { 884 return QDF_STATUS_SUCCESS; 885 } 886 887 static QDF_STATUS dispatcher_green_ap_deinit(void) 888 { 889 return wlan_green_ap_deinit(); 890 } 891 #else 892 static QDF_STATUS dispatcher_green_ap_init(void) 893 { 894 return QDF_STATUS_SUCCESS; 895 } 896 static QDF_STATUS dispatcher_green_ap_pdev_open( 897 struct wlan_objmgr_pdev *pdev) 898 { 899 return QDF_STATUS_SUCCESS; 900 } 901 902 /* Only added this for symmetry */ 903 static QDF_STATUS dispatcher_green_ap_pdev_close(struct wlan_objmgr_pdev *pdev) 904 { 905 return QDF_STATUS_SUCCESS; 906 } 907 908 static QDF_STATUS dispatcher_green_ap_deinit(void) 909 { 910 return QDF_STATUS_SUCCESS; 911 } 912 #endif 913 914 #ifdef WLAN_SUPPORT_FILS 915 static QDF_STATUS dispatcher_fd_init(void) 916 { 917 return wlan_fd_init(); 918 } 919 920 static QDF_STATUS dispatcher_fd_deinit(void) 921 { 922 return wlan_fd_deinit(); 923 } 924 925 static QDF_STATUS fd_psoc_enable(struct wlan_objmgr_psoc *psoc) 926 { 927 return wlan_fd_enable(psoc); 928 } 929 930 static QDF_STATUS fd_psoc_disable(struct wlan_objmgr_psoc *psoc) 931 { 932 return wlan_fd_disable(psoc); 933 } 934 #else 935 static QDF_STATUS dispatcher_fd_init(void) 936 { 937 return QDF_STATUS_SUCCESS; 938 } 939 940 static QDF_STATUS dispatcher_fd_deinit(void) 941 { 942 return QDF_STATUS_SUCCESS; 943 } 944 945 static QDF_STATUS fd_psoc_enable(struct wlan_objmgr_psoc *psoc) 946 { 947 return QDF_STATUS_SUCCESS; 948 } 949 950 static QDF_STATUS fd_psoc_disable(struct wlan_objmgr_psoc *psoc) 951 { 952 return QDF_STATUS_SUCCESS; 953 } 954 #endif /* WLAN_SUPPORT_FILS */ 955 956 static QDF_STATUS dispatcher_if_mgr_init(void) 957 { 958 return wlan_if_mgr_init(); 959 } 960 961 static QDF_STATUS dispatcher_if_mgr_deinit(void) 962 { 963 return wlan_if_mgr_deinit(); 964 } 965 966 #ifdef FEATURE_COEX 967 static QDF_STATUS dispatcher_coex_init(void) 968 { 969 return wlan_coex_init(); 970 } 971 972 static QDF_STATUS dispatcher_coex_deinit(void) 973 { 974 return wlan_coex_deinit(); 975 } 976 977 static QDF_STATUS dispatcher_coex_psoc_open(struct wlan_objmgr_psoc *psoc) 978 { 979 return wlan_coex_psoc_open(psoc); 980 } 981 982 static QDF_STATUS dispatcher_coex_psoc_close(struct wlan_objmgr_psoc *psoc) 983 { 984 return wlan_coex_psoc_close(psoc); 985 } 986 #else 987 static inline QDF_STATUS dispatcher_coex_init(void) 988 { 989 return QDF_STATUS_SUCCESS; 990 } 991 992 static inline QDF_STATUS dispatcher_coex_deinit(void) 993 { 994 return QDF_STATUS_SUCCESS; 995 } 996 997 static inline QDF_STATUS 998 dispatcher_coex_psoc_open(struct wlan_objmgr_psoc *psoc) 999 { 1000 return QDF_STATUS_SUCCESS; 1001 } 1002 1003 static inline QDF_STATUS 1004 dispatcher_coex_psoc_close(struct wlan_objmgr_psoc *psoc) 1005 { 1006 return QDF_STATUS_SUCCESS; 1007 } 1008 #endif /* FEATURE_COEX */ 1009 1010 #ifdef WLAN_FEATURE_DBAM_CONFIG 1011 static QDF_STATUS dbam_psoc_enable(struct wlan_objmgr_psoc *psoc) 1012 { 1013 return wlan_dbam_psoc_enable(psoc); 1014 } 1015 1016 static QDF_STATUS dbam_psoc_disable(struct wlan_objmgr_psoc *psoc) 1017 { 1018 return wlan_dbam_psoc_disable(psoc); 1019 } 1020 #else 1021 static QDF_STATUS dbam_psoc_enable(struct wlan_objmgr_psoc *psoc) 1022 { 1023 return QDF_STATUS_SUCCESS; 1024 } 1025 1026 static QDF_STATUS dbam_psoc_disable(struct wlan_objmgr_psoc *psoc) 1027 { 1028 return QDF_STATUS_SUCCESS; 1029 } 1030 #endif /* WLAN_FEATURE_DBAM_CONFIG */ 1031 1032 #ifdef WLAN_FEATURE_11BE_MLO 1033 static QDF_STATUS mlo_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc) 1034 { 1035 return wlan_mlo_mgr_psoc_enable(psoc); 1036 } 1037 1038 static QDF_STATUS mlo_mgr_psoc_disable(struct wlan_objmgr_psoc *psoc) 1039 { 1040 return wlan_mlo_mgr_psoc_disable(psoc); 1041 } 1042 #else 1043 static QDF_STATUS mlo_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc) 1044 { 1045 return QDF_STATUS_SUCCESS; 1046 } 1047 1048 static QDF_STATUS mlo_mgr_psoc_disable(struct wlan_objmgr_psoc *psoc) 1049 { 1050 return QDF_STATUS_SUCCESS; 1051 } 1052 #endif 1053 1054 QDF_STATUS dispatcher_init(void) 1055 { 1056 if (QDF_STATUS_SUCCESS != wlan_objmgr_global_obj_init()) 1057 goto out; 1058 1059 if (QDF_STATUS_SUCCESS != wlan_mlo_mgr_init()) 1060 goto mgmt_mlo_mgr_fail; 1061 1062 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_init()) 1063 goto mgmt_txrx_init_fail; 1064 1065 if (QDF_STATUS_SUCCESS != ucfg_scan_init()) 1066 goto ucfg_scan_init_fail; 1067 1068 if (QDF_STATUS_SUCCESS != wlan_serialization_init()) 1069 goto serialization_init_fail; 1070 1071 if (QDF_STATUS_SUCCESS != dispatcher_init_crypto()) 1072 goto crypto_init_fail; 1073 1074 if (QDF_STATUS_SUCCESS != dispatcher_init_cp_stats()) 1075 goto cp_stats_init_fail; 1076 1077 if (QDF_STATUS_SUCCESS != dispatcher_init_dcs()) 1078 goto dcs_init_fail; 1079 1080 if (QDF_STATUS_SUCCESS != dispatcher_init_atf()) 1081 goto atf_init_fail; 1082 1083 if (QDF_STATUS_SUCCESS != dispatcher_init_sa_api()) 1084 goto sa_api_init_fail; 1085 1086 if (QDF_STATUS_SUCCESS != dispatcher_init_wifi_pos()) 1087 goto wifi_pos_init_fail; 1088 1089 if (QDF_STATUS_SUCCESS != dispatcher_init_dfs()) 1090 goto dfs_init_fail; 1091 1092 if (QDF_STATUS_SUCCESS != dispatcher_regulatory_init()) 1093 goto regulatory_init_fail; 1094 1095 if (QDF_STATUS_SUCCESS != dispatcher_offchan_txrx_init()) 1096 goto offchan_init_fail; 1097 1098 if (QDF_STATUS_SUCCESS != dispatcher_init_son()) 1099 goto son_init_fail; 1100 1101 if (QDF_STATUS_SUCCESS != dispatcher_splitmac_init()) 1102 goto splitmac_init_fail; 1103 1104 if (QDF_STATUS_SUCCESS != dispatcher_fd_init()) 1105 goto fd_init_fail; 1106 1107 if (QDF_STATUS_SUCCESS != dispatcher_green_ap_init()) 1108 goto green_ap_init_fail; 1109 1110 if (QDF_STATUS_SUCCESS != dispatcher_ftm_init()) 1111 goto ftm_init_fail; 1112 1113 if (QDF_IS_STATUS_ERROR(cfg_dispatcher_init())) 1114 goto cfg_init_fail; 1115 1116 if (QDF_STATUS_SUCCESS != dispatcher_spectral_init()) 1117 goto spectral_init_fail; 1118 1119 if (QDF_STATUS_SUCCESS != wlan_cmn_mlme_init()) 1120 goto cmn_mlme_init_fail; 1121 1122 if (QDF_STATUS_SUCCESS != dispatcher_init_cfr()) 1123 goto cfr_init_fail; 1124 1125 if (QDF_STATUS_SUCCESS != dispatcher_init_wifi_radar()) 1126 goto wifi_radar_init_fail; 1127 1128 if (QDF_STATUS_SUCCESS != dispatcher_coex_init()) 1129 goto coex_init_fail; 1130 1131 if (QDF_STATUS_SUCCESS != dispatcher_if_mgr_init()) 1132 goto ifmgr_init_fail; 1133 1134 if (QDF_STATUS_SUCCESS != wlan_gpio_init()) 1135 goto gpio_init_fail; 1136 1137 if (QDF_STATUS_SUCCESS != dispatcher_twt_init()) 1138 goto twt_init_fail; 1139 1140 /* 1141 * scheduler INIT has to be the last as each component's 1142 * initialization has to happen first and then at the end 1143 * scheduler needs to start accepting the service. 1144 */ 1145 if (QDF_STATUS_SUCCESS != scheduler_init()) 1146 goto scheduler_init_fail; 1147 1148 return QDF_STATUS_SUCCESS; 1149 1150 scheduler_init_fail: 1151 dispatcher_twt_deinit(); 1152 twt_init_fail: 1153 wlan_gpio_deinit(); 1154 gpio_init_fail: 1155 dispatcher_if_mgr_deinit(); 1156 ifmgr_init_fail: 1157 dispatcher_coex_deinit(); 1158 coex_init_fail: 1159 dispatcher_deinit_wifi_radar(); 1160 wifi_radar_init_fail: 1161 dispatcher_deinit_cfr(); 1162 cfr_init_fail: 1163 wlan_cmn_mlme_deinit(); 1164 cmn_mlme_init_fail: 1165 dispatcher_spectral_deinit(); 1166 spectral_init_fail: 1167 cfg_dispatcher_deinit(); 1168 cfg_init_fail: 1169 dispatcher_ftm_deinit(); 1170 ftm_init_fail: 1171 dispatcher_green_ap_deinit(); 1172 green_ap_init_fail: 1173 dispatcher_fd_deinit(); 1174 fd_init_fail: 1175 dispatcher_splitmac_deinit(); 1176 splitmac_init_fail: 1177 dispatcher_deinit_son(); 1178 son_init_fail: 1179 dispatcher_offchan_txrx_deinit(); 1180 offchan_init_fail: 1181 dispatcher_regulatory_deinit(); 1182 regulatory_init_fail: 1183 dispatcher_deinit_dfs(); 1184 dfs_init_fail: 1185 dispatcher_deinit_wifi_pos(); 1186 wifi_pos_init_fail: 1187 dispatcher_deinit_sa_api(); 1188 sa_api_init_fail: 1189 dispatcher_deinit_atf(); 1190 atf_init_fail: 1191 dispatcher_deinit_dcs(); 1192 dcs_init_fail: 1193 dispatcher_deinit_cp_stats(); 1194 cp_stats_init_fail: 1195 dispatcher_deinit_crypto(); 1196 crypto_init_fail: 1197 wlan_serialization_deinit(); 1198 serialization_init_fail: 1199 ucfg_scan_deinit(); 1200 ucfg_scan_init_fail: 1201 wlan_mgmt_txrx_deinit(); 1202 mgmt_txrx_init_fail: 1203 wlan_objmgr_global_obj_deinit(); 1204 mgmt_mlo_mgr_fail: 1205 wlan_mlo_mgr_deinit(); 1206 1207 out: 1208 return QDF_STATUS_E_FAILURE; 1209 } 1210 qdf_export_symbol(dispatcher_init); 1211 1212 QDF_STATUS dispatcher_deinit(void) 1213 { 1214 QDF_STATUS status; 1215 1216 QDF_BUG(QDF_STATUS_SUCCESS == scheduler_deinit()); 1217 1218 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_twt_deinit()); 1219 1220 QDF_BUG(QDF_STATUS_SUCCESS == wlan_gpio_deinit()); 1221 1222 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_if_mgr_deinit()); 1223 1224 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_coex_deinit()); 1225 1226 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_wifi_radar()); 1227 1228 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_cfr()); 1229 1230 QDF_BUG(QDF_STATUS_SUCCESS == wlan_cmn_mlme_deinit()); 1231 1232 status = cfg_dispatcher_deinit(); 1233 QDF_BUG(QDF_IS_STATUS_SUCCESS(status)); 1234 1235 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_ftm_deinit()); 1236 1237 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_green_ap_deinit()); 1238 1239 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_fd_deinit()); 1240 1241 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_spectral_deinit()); 1242 1243 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_splitmac_deinit()); 1244 1245 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_son()); 1246 1247 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_offchan_txrx_deinit()); 1248 1249 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_regulatory_deinit()); 1250 1251 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_dfs()); 1252 1253 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_wifi_pos()); 1254 1255 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_sa_api()); 1256 1257 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_atf()); 1258 1259 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_cp_stats()); 1260 1261 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_dcs()); 1262 1263 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_deinit_crypto()); 1264 1265 QDF_BUG(QDF_STATUS_SUCCESS == wlan_serialization_deinit()); 1266 1267 QDF_BUG(QDF_STATUS_SUCCESS == ucfg_scan_deinit()); 1268 1269 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_deinit()); 1270 1271 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mlo_mgr_deinit()); 1272 1273 QDF_BUG(QDF_STATUS_SUCCESS == wlan_objmgr_global_obj_deinit()); 1274 1275 return QDF_STATUS_SUCCESS; 1276 } 1277 qdf_export_symbol(dispatcher_deinit); 1278 1279 QDF_STATUS dispatcher_enable(void) 1280 { 1281 QDF_STATUS status; 1282 1283 status = scheduler_enable(); 1284 1285 return status; 1286 } 1287 qdf_export_symbol(dispatcher_enable); 1288 1289 QDF_STATUS dispatcher_disable(void) 1290 { 1291 QDF_BUG(QDF_IS_STATUS_SUCCESS(scheduler_disable())); 1292 1293 return QDF_STATUS_SUCCESS; 1294 } 1295 qdf_export_symbol(dispatcher_disable); 1296 1297 QDF_STATUS dispatcher_psoc_open(struct wlan_objmgr_psoc *psoc) 1298 { 1299 QDF_STATUS status; 1300 1301 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_psoc_open(psoc)) 1302 goto out; 1303 1304 if (QDF_STATUS_SUCCESS != ucfg_scan_psoc_open(psoc)) 1305 goto scan_psoc_open_fail; 1306 1307 if (QDF_STATUS_SUCCESS != cp_stats_psoc_open(psoc)) 1308 goto cp_stats_psoc_open_fail; 1309 1310 if (QDF_STATUS_SUCCESS != atf_psoc_open(psoc)) 1311 goto atf_psoc_open_fail; 1312 1313 if (QDF_STATUS_SUCCESS != dispatcher_regulatory_psoc_open(psoc)) 1314 goto regulatory_psoc_open_fail; 1315 1316 if (QDF_STATUS_SUCCESS != son_psoc_open(psoc)) 1317 goto psoc_son_fail; 1318 1319 if (QDF_STATUS_SUCCESS != dispatcher_ftm_psoc_open(psoc)) 1320 goto ftm_psoc_open_fail; 1321 1322 if (QDF_STATUS_SUCCESS != dispatcher_coex_psoc_open(psoc)) 1323 goto coex_psoc_open_fail; 1324 1325 if (QDF_STATUS_SUCCESS != dcs_psoc_open(psoc)) 1326 goto dcs_psoc_open_fail; 1327 1328 status = spectral_psoc_open(psoc); 1329 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1330 goto spectral_psoc_open_fail; 1331 1332 if (QDF_IS_STATUS_ERROR(mlme_psoc_open(psoc))) 1333 goto mlme_psoc_open_fail; 1334 1335 return QDF_STATUS_SUCCESS; 1336 1337 mlme_psoc_open_fail: 1338 spectral_psoc_close(psoc); 1339 spectral_psoc_open_fail: 1340 dcs_psoc_close(psoc); 1341 dcs_psoc_open_fail: 1342 dispatcher_coex_psoc_close(psoc); 1343 coex_psoc_open_fail: 1344 dispatcher_ftm_psoc_close(psoc); 1345 ftm_psoc_open_fail: 1346 son_psoc_close(psoc); 1347 psoc_son_fail: 1348 regulatory_psoc_close(psoc); 1349 regulatory_psoc_open_fail: 1350 atf_psoc_close(psoc); 1351 atf_psoc_open_fail: 1352 cp_stats_psoc_close(psoc); 1353 cp_stats_psoc_open_fail: 1354 ucfg_scan_psoc_close(psoc); 1355 scan_psoc_open_fail: 1356 wlan_mgmt_txrx_psoc_close(psoc); 1357 1358 out: 1359 return QDF_STATUS_E_FAILURE; 1360 } 1361 qdf_export_symbol(dispatcher_psoc_open); 1362 1363 QDF_STATUS dispatcher_psoc_close(struct wlan_objmgr_psoc *psoc) 1364 { 1365 QDF_STATUS status; 1366 1367 QDF_BUG(QDF_STATUS_SUCCESS == mlme_psoc_close(psoc)); 1368 1369 QDF_BUG(QDF_STATUS_SUCCESS == dcs_psoc_close(psoc)); 1370 1371 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_coex_psoc_close(psoc)); 1372 1373 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_ftm_psoc_close(psoc)); 1374 1375 QDF_BUG(QDF_STATUS_SUCCESS == son_psoc_close(psoc)); 1376 1377 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_regulatory_psoc_close(psoc)); 1378 1379 QDF_BUG(QDF_STATUS_SUCCESS == atf_psoc_close(psoc)); 1380 1381 QDF_BUG(QDF_STATUS_SUCCESS == cp_stats_psoc_close(psoc)); 1382 1383 QDF_BUG(QDF_STATUS_SUCCESS == ucfg_scan_psoc_close(psoc)); 1384 1385 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_psoc_close(psoc)); 1386 1387 status = spectral_psoc_close(psoc); 1388 QDF_BUG((status == QDF_STATUS_SUCCESS) || 1389 (status == QDF_STATUS_COMP_DISABLED)); 1390 1391 return QDF_STATUS_SUCCESS; 1392 } 1393 qdf_export_symbol(dispatcher_psoc_close); 1394 1395 QDF_STATUS dispatcher_psoc_enable(struct wlan_objmgr_psoc *psoc) 1396 { 1397 QDF_STATUS status; 1398 1399 if (QDF_STATUS_SUCCESS != wlan_serialization_psoc_enable(psoc)) 1400 goto out; 1401 1402 if (QDF_STATUS_SUCCESS != ucfg_scan_psoc_enable(psoc)) 1403 goto serialization_psoc_enable_fail; 1404 1405 if (QDF_STATUS_SUCCESS != sa_api_psoc_enable(psoc)) 1406 goto sa_api_psoc_enable_fail; 1407 1408 if (QDF_STATUS_SUCCESS != cp_stats_psoc_enable(psoc)) 1409 goto cp_stats_psoc_enable_fail; 1410 1411 if (QDF_STATUS_SUCCESS != dcs_psoc_enable(psoc)) 1412 goto dcs_psoc_enable_fail; 1413 1414 if (QDF_STATUS_SUCCESS != atf_psoc_enable(psoc)) 1415 goto atf_psoc_enable_fail; 1416 1417 if (QDF_STATUS_SUCCESS != dispatcher_wifi_pos_enable(psoc)) 1418 goto wifi_pos_psoc_enable_fail; 1419 1420 if (QDF_STATUS_SUCCESS != dispatcher_dfs_psoc_enable(psoc)) 1421 goto wifi_dfs_psoc_enable_fail; 1422 1423 if (QDF_STATUS_SUCCESS != fd_psoc_enable(psoc)) 1424 goto fd_psoc_enable_fail; 1425 1426 if (QDF_STATUS_SUCCESS != dispatcher_dbr_psoc_enable(psoc)) 1427 goto dbr_psoc_enable_fail; 1428 1429 if (QDF_STATUS_SUCCESS != dispatcher_crypto_psoc_enable(psoc)) 1430 goto crypto_psoc_enable_fail; 1431 1432 if (QDF_STATUS_SUCCESS != wlan_mlme_psoc_enable(psoc)) 1433 goto mlme_psoc_enable_fail; 1434 1435 status = spectral_psoc_enable(psoc); 1436 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1437 goto spectral_psoc_enable_fail; 1438 1439 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_psoc_enable(psoc)) 1440 goto mgmt_txrx_psoc_enable_fail; 1441 1442 if (QDF_STATUS_SUCCESS != mlo_mgr_psoc_enable(psoc)) 1443 goto mlo_mgr_psoc_enable_fail; 1444 1445 if (QDF_STATUS_SUCCESS != dispatcher_twt_psoc_enable(psoc)) 1446 goto twt_psoc_enable_fail; 1447 1448 if (QDF_STATUS_SUCCESS != dbam_psoc_enable(psoc)) 1449 goto dbam_psoc_enable_fail; 1450 1451 return QDF_STATUS_SUCCESS; 1452 1453 dbam_psoc_enable_fail: 1454 dispatcher_twt_psoc_disable(psoc); 1455 twt_psoc_enable_fail: 1456 mlo_mgr_psoc_disable(psoc); 1457 mlo_mgr_psoc_enable_fail: 1458 wlan_mgmt_txrx_psoc_disable(psoc); 1459 mgmt_txrx_psoc_enable_fail: 1460 spectral_psoc_disable(psoc); 1461 spectral_psoc_enable_fail: 1462 wlan_mlme_psoc_disable(psoc); 1463 mlme_psoc_enable_fail: 1464 dispatcher_crypto_psoc_disable(psoc); 1465 crypto_psoc_enable_fail: 1466 dispatcher_dbr_psoc_disable(psoc); 1467 dbr_psoc_enable_fail: 1468 fd_psoc_disable(psoc); 1469 fd_psoc_enable_fail: 1470 dispatcher_dfs_psoc_disable(psoc); 1471 wifi_dfs_psoc_enable_fail: 1472 dispatcher_wifi_pos_disable(psoc); 1473 wifi_pos_psoc_enable_fail: 1474 atf_psoc_disable(psoc); 1475 atf_psoc_enable_fail: 1476 dcs_psoc_disable(psoc); 1477 dcs_psoc_enable_fail: 1478 cp_stats_psoc_disable(psoc); 1479 cp_stats_psoc_enable_fail: 1480 sa_api_psoc_disable(psoc); 1481 sa_api_psoc_enable_fail: 1482 ucfg_scan_psoc_disable(psoc); 1483 serialization_psoc_enable_fail: 1484 wlan_serialization_psoc_disable(psoc); 1485 out: 1486 return QDF_STATUS_E_FAILURE; 1487 } 1488 qdf_export_symbol(dispatcher_psoc_enable); 1489 1490 QDF_STATUS dispatcher_psoc_disable(struct wlan_objmgr_psoc *psoc) 1491 { 1492 QDF_STATUS status; 1493 1494 QDF_BUG(QDF_STATUS_SUCCESS == dbam_psoc_disable(psoc)); 1495 1496 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_twt_psoc_disable(psoc)); 1497 1498 QDF_BUG(QDF_STATUS_SUCCESS == mlo_mgr_psoc_disable(psoc)); 1499 1500 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_psoc_disable(psoc)); 1501 1502 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mlme_psoc_disable(psoc)); 1503 1504 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_crypto_psoc_disable(psoc)); 1505 1506 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_dbr_psoc_disable(psoc)); 1507 1508 QDF_BUG(QDF_STATUS_SUCCESS == fd_psoc_disable(psoc)); 1509 1510 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_dfs_psoc_disable(psoc)); 1511 1512 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_wifi_pos_disable(psoc)); 1513 1514 QDF_BUG(QDF_STATUS_SUCCESS == atf_psoc_disable(psoc)); 1515 1516 QDF_BUG(QDF_STATUS_SUCCESS == cp_stats_psoc_disable(psoc)); 1517 1518 QDF_BUG(QDF_STATUS_SUCCESS == sa_api_psoc_disable(psoc)); 1519 1520 QDF_BUG(QDF_STATUS_SUCCESS == ucfg_scan_psoc_disable(psoc)); 1521 1522 QDF_BUG(QDF_STATUS_SUCCESS == wlan_serialization_psoc_disable(psoc)); 1523 1524 status = spectral_psoc_disable(psoc); 1525 QDF_BUG((status == QDF_STATUS_SUCCESS) || 1526 (status == QDF_STATUS_COMP_DISABLED)); 1527 1528 return QDF_STATUS_SUCCESS; 1529 } 1530 qdf_export_symbol(dispatcher_psoc_disable); 1531 1532 QDF_STATUS dispatcher_pdev_open(struct wlan_objmgr_pdev *pdev) 1533 { 1534 QDF_STATUS status; 1535 1536 if (QDF_STATUS_SUCCESS != dispatcher_regulatory_pdev_open(pdev)) 1537 goto regulatory_pdev_open_fail; 1538 1539 status = dispatcher_spectral_pdev_open(pdev); 1540 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1541 goto spectral_pdev_open_fail; 1542 1543 status = dispatcher_cfr_pdev_open(pdev); 1544 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1545 goto cfr_pdev_open_fail; 1546 1547 status = dispatcher_wifi_radar_pdev_open(pdev); 1548 if (status != QDF_STATUS_SUCCESS && status != QDF_STATUS_COMP_DISABLED) 1549 goto wifi_radar_pdev_open_fail; 1550 1551 if (QDF_STATUS_SUCCESS != wlan_mgmt_txrx_pdev_open(pdev)) 1552 goto mgmt_txrx_pdev_open_fail; 1553 1554 if (QDF_IS_STATUS_ERROR(dispatcher_green_ap_pdev_open(pdev))) 1555 goto green_ap_pdev_open_fail; 1556 1557 return QDF_STATUS_SUCCESS; 1558 1559 green_ap_pdev_open_fail: 1560 wlan_mgmt_txrx_pdev_close(pdev); 1561 mgmt_txrx_pdev_open_fail: 1562 dispatcher_wifi_radar_pdev_close(pdev); 1563 wifi_radar_pdev_open_fail: 1564 dispatcher_cfr_pdev_close(pdev); 1565 cfr_pdev_open_fail: 1566 dispatcher_spectral_pdev_close(pdev); 1567 spectral_pdev_open_fail: 1568 dispatcher_regulatory_pdev_close(pdev); 1569 regulatory_pdev_open_fail: 1570 1571 return QDF_STATUS_E_FAILURE; 1572 } 1573 qdf_export_symbol(dispatcher_pdev_open); 1574 1575 QDF_STATUS dispatcher_pdev_close(struct wlan_objmgr_pdev *pdev) 1576 { 1577 QDF_STATUS status; 1578 1579 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_green_ap_pdev_close(pdev)); 1580 1581 QDF_BUG(QDF_STATUS_SUCCESS == wlan_mgmt_txrx_pdev_close(pdev)); 1582 1583 status = dispatcher_wifi_radar_pdev_close(pdev); 1584 QDF_BUG((QDF_STATUS_SUCCESS == status) || 1585 (QDF_STATUS_COMP_DISABLED == status)); 1586 1587 status = dispatcher_cfr_pdev_close(pdev); 1588 QDF_BUG((QDF_STATUS_SUCCESS == status) || 1589 (QDF_STATUS_COMP_DISABLED == status)); 1590 1591 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_spectral_pdev_close(pdev)); 1592 1593 QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_regulatory_pdev_close(pdev)); 1594 1595 return QDF_STATUS_SUCCESS; 1596 } 1597 qdf_export_symbol(dispatcher_pdev_close); 1598