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