wmt_stp_exp.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. /*
  2. * Copyright (C) 2011-2014 MediaTek Inc.
  3. *
  4. * This program is free software: you can redistribute it and/or modify it under the terms of the
  5. * GNU General Public License version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  8. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. * See the GNU General Public License for more details.
  10. *
  11. * You should have received a copy of the GNU General Public License along with this program.
  12. * If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include "osal_typedef.h"
  15. #include "wmt_stp_exp.h"
  16. /*******************************************************************************
  17. * M A C R O S
  18. ********************************************************************************
  19. */
  20. #ifdef DFT_TAG
  21. #undef DFT_TAG
  22. #endif
  23. #define DFT_TAG "[WMT-STP-EXP]"
  24. #define WMT_STP_EXP_INFO_FUNC(fmt, arg...) pr_debug(DFT_TAG "[I]%s: " fmt, __func__ , ##arg)
  25. #define WMT_STP_EXP_WARN_FUNC(fmt, arg...) pr_warn(DFT_TAG "[W]%s: " fmt, __func__ , ##arg)
  26. #define WMT_STP_EXP_ERR_FUNC(fmt, arg...) pr_err(DFT_TAG "[E]%s(%d):ERROR! " fmt, __func__ , __LINE__, ##arg)
  27. /*******************************************************************************
  28. * D A T A T Y P E S
  29. ********************************************************************************
  30. */
  31. #ifdef MTK_WCN_WMT_STP_EXP_SYMBOL_ABSTRACT
  32. /*STP exp*/
  33. MTK_WCN_STP_SEND_DATA mtk_wcn_stp_send_data_f = NULL;
  34. MTK_WCN_STP_SEND_DATA mtk_wcn_stp_send_data_raw_f = NULL;
  35. MTK_WCN_STP_PARSER_DATA mtk_wcn_stp_parser_data_f = NULL;
  36. MTK_WCN_STP_RECV_DATA mtk_wcn_stp_receive_data_f = NULL;
  37. MTK_WCN_STP_IS_RXQ_EMPTY mtk_wcn_stp_is_rxqueue_empty_f = NULL;
  38. MTK_WCN_STP_IS_RDY mtk_wcn_stp_is_ready_f = NULL;
  39. MTK_WCN_STP_SET_BLUEZ mtk_wcn_stp_set_bluez_f = NULL;
  40. MTK_WCN_STP_REG_IF_TX mtk_wcn_stp_if_tx_f = NULL;
  41. MTK_WCN_STP_REG_IF_RX mtk_wcn_stp_if_rx_f = NULL;
  42. MTK_WCN_STP_REG_EVENT_CB mtk_wcn_stp_reg_event_cb_f = NULL;
  43. MTK_WCN_STP_RGE_TX_EVENT_CB mtk_wcn_stp_reg_tx_event_cb_f = NULL;
  44. MTK_WCN_STP_COREDUMP_START_GET mtk_wcn_stp_coredump_start_get_f = NULL;
  45. /*WMT exp*/
  46. MTK_WCN_WMT_FUNC_CTRL mtk_wcn_wmt_func_on_f = NULL;
  47. MTK_WCN_WMT_FUNC_CTRL mtk_wcn_wmt_func_off_f = NULL;
  48. MTK_WCN_WMT_THERM_CTRL mtk_wcn_wmt_therm_ctrl_f = NULL;
  49. MTK_WCN_WMT_HWVER_GET mtk_wcn_wmt_hwver_get_f = NULL;
  50. MTK_WCN_WMT_DSNS_CTRL mtk_wcn_wmt_dsns_ctrl_f = NULL;
  51. MTK_WCN_WMT_MSGCB_REG mtk_wcn_wmt_msgcb_reg_f = NULL;
  52. MTK_WCN_WMT_MSGCB_UNREG mtk_wcn_wmt_msgcb_unreg_f = NULL;
  53. MTK_WCN_WMT_SDIO_OP_REG mtk_wcn_wmt_sdio_op_reg_f = NULL;
  54. MTK_WCN_WMT_SDIO_HOST_AWAKE mtk_wcn_wmt_sdio_host_awake_f = NULL;
  55. MTK_WCN_WMT_ASSERT mtk_wcn_wmt_assert_f = NULL;
  56. MTK_WCN_WMT_ASSERT_TIMEOUT mtk_wcn_wmt_assert_timeout_f = NULL;
  57. MTK_WCN_WMT_IC_INFO_GET mtk_wcn_wmt_ic_info_get_f = NULL;
  58. /*******************************************************************************
  59. * F U N C T I O N S
  60. ********************************************************************************
  61. */
  62. UINT32 mtk_wcn_stp_exp_cb_reg(P_MTK_WCN_STP_EXP_CB_INFO pStpExpCb)
  63. {
  64. WMT_STP_EXP_INFO_FUNC("call stp exp cb reg\n");
  65. mtk_wcn_stp_send_data_f = pStpExpCb->stp_send_data_cb;
  66. mtk_wcn_stp_send_data_raw_f = pStpExpCb->stp_send_data_raw_cb;
  67. mtk_wcn_stp_parser_data_f = pStpExpCb->stp_parser_data_cb;
  68. mtk_wcn_stp_receive_data_f = pStpExpCb->stp_receive_data_cb;
  69. mtk_wcn_stp_is_rxqueue_empty_f = pStpExpCb->stp_is_rxqueue_empty_cb;
  70. mtk_wcn_stp_is_ready_f = pStpExpCb->stp_is_ready_cb;
  71. mtk_wcn_stp_set_bluez_f = pStpExpCb->stp_set_bluez_cb;
  72. mtk_wcn_stp_if_tx_f = pStpExpCb->stp_if_tx_cb;
  73. mtk_wcn_stp_if_rx_f = pStpExpCb->stp_if_rx_cb;
  74. mtk_wcn_stp_reg_event_cb_f = pStpExpCb->stp_reg_event_cb;
  75. mtk_wcn_stp_reg_tx_event_cb_f = pStpExpCb->stp_reg_tx_event_cb;
  76. mtk_wcn_stp_coredump_start_get_f = pStpExpCb->stp_coredump_start_get_cb;
  77. return 0;
  78. }
  79. EXPORT_SYMBOL(mtk_wcn_stp_exp_cb_reg);
  80. UINT32 mtk_wcn_stp_exp_cb_unreg(VOID)
  81. {
  82. WMT_STP_EXP_INFO_FUNC("call stp exp cb unreg\n");
  83. mtk_wcn_stp_send_data_f = NULL;
  84. mtk_wcn_stp_send_data_raw_f = NULL;
  85. mtk_wcn_stp_parser_data_f = NULL;
  86. mtk_wcn_stp_receive_data_f = NULL;
  87. mtk_wcn_stp_is_rxqueue_empty_f = NULL;
  88. mtk_wcn_stp_is_ready_f = NULL;
  89. mtk_wcn_stp_set_bluez_f = NULL;
  90. mtk_wcn_stp_if_tx_f = NULL;
  91. mtk_wcn_stp_if_rx_f = NULL;
  92. mtk_wcn_stp_reg_event_cb_f = NULL;
  93. mtk_wcn_stp_reg_tx_event_cb_f = NULL;
  94. mtk_wcn_stp_coredump_start_get_f = NULL;
  95. return 0;
  96. }
  97. EXPORT_SYMBOL(mtk_wcn_stp_exp_cb_unreg);
  98. INT32 mtk_wcn_stp_send_data(const PUINT8 buffer, const UINT32 length, const UINT8 type)
  99. {
  100. INT32 ret = -1;
  101. if (mtk_wcn_stp_send_data_f) {
  102. ret = (*mtk_wcn_stp_send_data_f) (buffer, length, type);
  103. /* WMT_STP_EXP_INFO_FUNC("mtk_wcn_stp_send_data_f send data(%d)\n",ret); */
  104. } else {
  105. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_send_data_f cb is null\n");
  106. }
  107. return ret;
  108. }
  109. EXPORT_SYMBOL(mtk_wcn_stp_send_data);
  110. INT32 mtk_wcn_stp_send_data_raw(const PUINT8 buffer, const UINT32 length, const UINT8 type)
  111. {
  112. INT32 ret = -1;
  113. if (mtk_wcn_stp_send_data_raw_f)
  114. ret = (*mtk_wcn_stp_send_data_raw_f) (buffer, length, type);
  115. else
  116. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_send_data_raw_f cb is null\n");
  117. return ret;
  118. }
  119. EXPORT_SYMBOL(mtk_wcn_stp_send_data_raw);
  120. INT32 mtk_wcn_stp_parser_data(PUINT8 buffer, UINT32 length)
  121. {
  122. INT32 ret = -1;
  123. if (mtk_wcn_stp_parser_data_f)
  124. ret = (*mtk_wcn_stp_parser_data_f) (buffer, length);
  125. else
  126. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_parser_data_f cb is null\n");
  127. return ret;
  128. }
  129. EXPORT_SYMBOL(mtk_wcn_stp_parser_data);
  130. INT32 mtk_wcn_stp_receive_data(PUINT8 buffer, UINT32 length, UINT8 type)
  131. {
  132. INT32 ret = -1;
  133. if (mtk_wcn_stp_receive_data_f)
  134. ret = (*mtk_wcn_stp_receive_data_f) (buffer, length, type);
  135. else
  136. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_receive_data_f cb is null\n");
  137. return ret;
  138. }
  139. EXPORT_SYMBOL(mtk_wcn_stp_receive_data);
  140. MTK_WCN_BOOL mtk_wcn_stp_is_rxqueue_empty(UINT8 type)
  141. {
  142. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  143. if (mtk_wcn_stp_is_rxqueue_empty_f)
  144. ret = (*mtk_wcn_stp_is_rxqueue_empty_f) (type);
  145. else
  146. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_is_rxqueue_empty_f cb is null\n");
  147. return ret;
  148. }
  149. EXPORT_SYMBOL(mtk_wcn_stp_is_rxqueue_empty);
  150. MTK_WCN_BOOL mtk_wcn_stp_is_ready(void)
  151. {
  152. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  153. if (mtk_wcn_stp_is_ready_f)
  154. ret = (*mtk_wcn_stp_is_ready_f) ();
  155. else
  156. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_is_ready_f cb is null\n");
  157. return ret;
  158. }
  159. EXPORT_SYMBOL(mtk_wcn_stp_is_ready);
  160. void mtk_wcn_stp_set_bluez(MTK_WCN_BOOL flags)
  161. {
  162. if (mtk_wcn_stp_set_bluez_f)
  163. (*mtk_wcn_stp_set_bluez_f) (flags);
  164. else
  165. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_set_bluez_f cb is null\n");
  166. }
  167. EXPORT_SYMBOL(mtk_wcn_stp_set_bluez);
  168. INT32 mtk_wcn_stp_register_if_tx(ENUM_STP_TX_IF_TYPE stp_if, MTK_WCN_STP_IF_TX func)
  169. {
  170. INT32 ret = -1;
  171. if (mtk_wcn_stp_if_tx_f)
  172. ret = (*mtk_wcn_stp_if_tx_f) (stp_if, func);
  173. else
  174. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_if_tx_f cb is null\n");
  175. return ret;
  176. }
  177. EXPORT_SYMBOL(mtk_wcn_stp_register_if_tx);
  178. INT32 mtk_wcn_stp_register_if_rx(MTK_WCN_STP_IF_RX func)
  179. {
  180. INT32 ret = -1;
  181. if (mtk_wcn_stp_if_rx_f)
  182. ret = (*mtk_wcn_stp_if_rx_f) (func);
  183. else
  184. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_if_rx_f cb is null\n");
  185. return ret;
  186. }
  187. EXPORT_SYMBOL(mtk_wcn_stp_register_if_rx);
  188. INT32 mtk_wcn_stp_register_event_cb(INT32 type, MTK_WCN_STP_EVENT_CB func)
  189. {
  190. INT32 ret = -1;
  191. if (mtk_wcn_stp_reg_event_cb_f)
  192. ret = (*mtk_wcn_stp_reg_event_cb_f) (type, func);
  193. else
  194. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_reg_event_cb_f cb is null\n");
  195. return ret;
  196. }
  197. EXPORT_SYMBOL(mtk_wcn_stp_register_event_cb);
  198. INT32 mtk_wcn_stp_register_tx_event_cb(INT32 type, MTK_WCN_STP_EVENT_CB func)
  199. {
  200. INT32 ret = -1;
  201. if (mtk_wcn_stp_reg_tx_event_cb_f)
  202. ret = (*mtk_wcn_stp_reg_tx_event_cb_f) (type, func);
  203. else
  204. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_reg_tx_event_cb_f cb is null\n");
  205. return ret;
  206. }
  207. EXPORT_SYMBOL(mtk_wcn_stp_register_tx_event_cb);
  208. INT32 mtk_wcn_stp_coredump_start_get(VOID)
  209. {
  210. INT32 ret = -1;
  211. if (mtk_wcn_stp_coredump_start_get_f)
  212. ret = (*mtk_wcn_stp_coredump_start_get_f) ();
  213. else
  214. WMT_STP_EXP_ERR_FUNC("mtk_wcn_stp_coredump_start_get_f cb is null\n");
  215. return ret;
  216. }
  217. EXPORT_SYMBOL(mtk_wcn_stp_coredump_start_get);
  218. UINT32 mtk_wcn_wmt_exp_cb_reg(P_MTK_WCN_WMT_EXP_CB_INFO pWmtExpCb)
  219. {
  220. WMT_STP_EXP_INFO_FUNC("call wmt exp cb reg\n");
  221. mtk_wcn_wmt_func_on_f = pWmtExpCb->wmt_func_on_cb;
  222. mtk_wcn_wmt_func_off_f = pWmtExpCb->wmt_func_off_cb;
  223. mtk_wcn_wmt_therm_ctrl_f = pWmtExpCb->wmt_therm_ctrl_cb;
  224. mtk_wcn_wmt_hwver_get_f = pWmtExpCb->wmt_hwver_get_cb;
  225. mtk_wcn_wmt_dsns_ctrl_f = pWmtExpCb->wmt_dsns_ctrl_cb;
  226. mtk_wcn_wmt_msgcb_reg_f = pWmtExpCb->wmt_msgcb_reg_cb;
  227. mtk_wcn_wmt_msgcb_unreg_f = pWmtExpCb->wmt_msgcb_unreg_cb;
  228. mtk_wcn_wmt_sdio_op_reg_f = pWmtExpCb->wmt_sdio_op_reg_cb;
  229. mtk_wcn_wmt_sdio_host_awake_f = pWmtExpCb->wmt_sdio_host_awake_cb;
  230. mtk_wcn_wmt_assert_f = pWmtExpCb->wmt_assert_cb;
  231. mtk_wcn_wmt_assert_timeout_f = pWmtExpCb->wmt_assert_timeout_cb;
  232. mtk_wcn_wmt_ic_info_get_f = pWmtExpCb->wmt_ic_info_get_cb;
  233. return 0;
  234. }
  235. EXPORT_SYMBOL(mtk_wcn_wmt_exp_cb_reg);
  236. UINT32 mtk_wcn_wmt_exp_cb_unreg(VOID)
  237. {
  238. WMT_STP_EXP_INFO_FUNC("call wmt exp cb unreg\n");
  239. mtk_wcn_wmt_func_on_f = NULL;
  240. mtk_wcn_wmt_func_off_f = NULL;
  241. mtk_wcn_wmt_therm_ctrl_f = NULL;
  242. mtk_wcn_wmt_hwver_get_f = NULL;
  243. mtk_wcn_wmt_dsns_ctrl_f = NULL;
  244. mtk_wcn_wmt_msgcb_reg_f = NULL;
  245. mtk_wcn_wmt_msgcb_unreg_f = NULL;
  246. mtk_wcn_wmt_sdio_op_reg_f = NULL;
  247. mtk_wcn_wmt_sdio_host_awake_f = NULL;
  248. mtk_wcn_wmt_assert_f = NULL;
  249. mtk_wcn_wmt_assert_timeout_f = NULL;
  250. mtk_wcn_wmt_ic_info_get_f = NULL;
  251. return 0;
  252. }
  253. EXPORT_SYMBOL(mtk_wcn_wmt_exp_cb_unreg);
  254. MTK_WCN_BOOL mtk_wcn_wmt_func_off(ENUM_WMTDRV_TYPE_T type)
  255. {
  256. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  257. if (mtk_wcn_wmt_func_off_f)
  258. ret = (*mtk_wcn_wmt_func_off_f) (type);
  259. else
  260. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_func_off_f cb is null\n");
  261. return ret;
  262. }
  263. EXPORT_SYMBOL(mtk_wcn_wmt_func_off);
  264. MTK_WCN_BOOL mtk_wcn_wmt_func_on(ENUM_WMTDRV_TYPE_T type)
  265. {
  266. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  267. if (mtk_wcn_wmt_func_on_f) {
  268. ret = (*mtk_wcn_wmt_func_on_f) (type);
  269. WMT_STP_EXP_INFO_FUNC("mtk_wcn_wmt_func_on_f type(%d)\n", type);
  270. } else
  271. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_func_on_f cb is null\n");
  272. return ret;
  273. }
  274. EXPORT_SYMBOL(mtk_wcn_wmt_func_on);
  275. INT8 mtk_wcn_wmt_therm_ctrl(ENUM_WMTTHERM_TYPE_T eType)
  276. {
  277. INT32 ret = -1;
  278. if (mtk_wcn_wmt_therm_ctrl_f)
  279. ret = (*mtk_wcn_wmt_therm_ctrl_f) (eType);
  280. else
  281. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_therm_ctrl_f cb is null\n");
  282. return ret;
  283. }
  284. EXPORT_SYMBOL(mtk_wcn_wmt_therm_ctrl);
  285. ENUM_WMTHWVER_TYPE_T mtk_wcn_wmt_hwver_get(VOID)
  286. {
  287. ENUM_WMTHWVER_TYPE_T ret = WMTHWVER_INVALID;
  288. if (mtk_wcn_wmt_hwver_get_f)
  289. ret = (*mtk_wcn_wmt_hwver_get_f) ();
  290. else
  291. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_hwver_get_f cb is null\n");
  292. return ret;
  293. }
  294. EXPORT_SYMBOL(mtk_wcn_wmt_hwver_get);
  295. MTK_WCN_BOOL mtk_wcn_wmt_dsns_ctrl(ENUM_WMTDSNS_TYPE_T eType)
  296. {
  297. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  298. if (mtk_wcn_wmt_dsns_ctrl_f)
  299. ret = (*mtk_wcn_wmt_dsns_ctrl_f) (eType);
  300. else
  301. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_dsns_ctrl_f cb is null\n");
  302. return ret;
  303. }
  304. EXPORT_SYMBOL(mtk_wcn_wmt_dsns_ctrl);
  305. INT32 mtk_wcn_wmt_msgcb_reg(ENUM_WMTDRV_TYPE_T eType, PF_WMT_CB pCb)
  306. {
  307. INT32 ret = 0;
  308. if (mtk_wcn_wmt_msgcb_reg_f)
  309. ret = (*mtk_wcn_wmt_msgcb_reg_f) (eType, pCb);
  310. else
  311. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_msgcb_reg_f cb is null\n");
  312. return ret;
  313. }
  314. EXPORT_SYMBOL(mtk_wcn_wmt_msgcb_reg);
  315. INT32 mtk_wcn_wmt_msgcb_unreg(ENUM_WMTDRV_TYPE_T eType)
  316. {
  317. INT32 ret = 0;
  318. if (mtk_wcn_wmt_msgcb_unreg_f)
  319. ret = (*mtk_wcn_wmt_msgcb_unreg_f) (eType);
  320. else
  321. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_msgcb_unreg_f cb is null\n");
  322. return ret;
  323. }
  324. EXPORT_SYMBOL(mtk_wcn_wmt_msgcb_unreg);
  325. INT32 mtk_wcn_stp_wmt_sdio_op_reg(PF_WMT_SDIO_PSOP own_cb)
  326. {
  327. INT32 ret = -1;
  328. if (mtk_wcn_wmt_sdio_op_reg_f)
  329. ret = (*mtk_wcn_wmt_sdio_op_reg_f) (own_cb);
  330. else
  331. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_sdio_op_reg_f cb is null\n");
  332. return ret;
  333. }
  334. EXPORT_SYMBOL(mtk_wcn_stp_wmt_sdio_op_reg);
  335. INT32 mtk_wcn_stp_wmt_sdio_host_awake(VOID)
  336. {
  337. INT32 ret = -1;
  338. if (mtk_wcn_wmt_sdio_host_awake_f)
  339. ret = (*mtk_wcn_wmt_sdio_host_awake_f) ();
  340. else
  341. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_sdio_host_awake_f cb is null\n");
  342. return ret;
  343. }
  344. EXPORT_SYMBOL(mtk_wcn_stp_wmt_sdio_host_awake);
  345. MTK_WCN_BOOL mtk_wcn_wmt_assert(ENUM_WMTDRV_TYPE_T type, UINT32 reason)
  346. {
  347. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  348. if (mtk_wcn_wmt_assert_f)
  349. ret = (*mtk_wcn_wmt_assert_f) (type, reason);
  350. else
  351. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_assert_f cb is null\n");
  352. return ret;
  353. }
  354. EXPORT_SYMBOL(mtk_wcn_wmt_assert);
  355. MTK_WCN_BOOL mtk_wcn_wmt_assert_timeout(ENUM_WMTDRV_TYPE_T type, UINT32 reason, INT32 timeout)
  356. {
  357. MTK_WCN_BOOL ret = MTK_WCN_BOOL_FALSE;
  358. if (mtk_wcn_wmt_assert_timeout_f)
  359. ret = (*mtk_wcn_wmt_assert_timeout_f)(type, reason, timeout);
  360. else
  361. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_assert_timeout_f cb is null\n");
  362. return ret;
  363. }
  364. EXPORT_SYMBOL(mtk_wcn_wmt_assert_timeout);
  365. UINT32 mtk_wcn_wmt_ic_info_get(ENUM_WMT_CHIPINFO_TYPE_T type)
  366. {
  367. UINT32 ret = 0;
  368. if (mtk_wcn_wmt_ic_info_get_f)
  369. ret = (*mtk_wcn_wmt_ic_info_get_f) (type);
  370. else
  371. WMT_STP_EXP_ERR_FUNC("mtk_wcn_wmt_ic_info_get_f cb is null\n");
  372. return ret;
  373. }
  374. EXPORT_SYMBOL(mtk_wcn_wmt_ic_info_get);
  375. #endif