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