xref: /wlan-dirver/qca-wifi-host-cmn/init_deinit/dispatcher/src/dispatcher_init_deinit.c (revision d0c05845839e5f2ba5a8dcebe0cd3e4cd4e8dfcf)
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