dispatcher_init_deinit.c 37 KB

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