halmac_module.c 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. #include "halmac_api.h"
  2. #include "halmac_module.h"
  3. HALMAC_API_ARG api_arg_table[HALMAC_API_MAX] = {
  4. #if (HALMAC_VERSION(1, 2, 0) <= HALMAC_CURRENT_VERSION)
  5. {HALMAC_API_INIT_OBJ, 3, {TLP_TYPE_PVOID, TLP_TYPE_POS_API_ENTRY, TLP_TYPE_PHALMAC_INTERFACE} },
  6. {HALMAC_API_DEINIT_OBJ, 0, {TLP_TYPE_NONE} },
  7. {HALMAC_API_MAC_POWER_SWITCH, 1, {TLP_TYPE_PHALMAC_MAC_POWER} },
  8. {HALMAC_API_DOWNLOAD_FIRMWARE, 1, {TLP_TYPE_PU8_BUFFER} },
  9. {HALMAC_API_CFG_MAC_ADDR, 2, {TLP_TYPE_PU8, TLP_TYPE_PHALMAC_WLAN_ADDR} },
  10. {HALMAC_API_CFG_BSSID, 2, {TLP_TYPE_PU8, TLP_TYPE_PHALMAC_WLAN_ADDR} },
  11. {HALMAC_API_CFG_MULTICAST_ADDR, 1, {TLP_TYPE_PHALMAC_WLAN_ADDR} },
  12. {HALMAC_API_PRE_INIT_SYSTEM_CFG, 0, {TLP_TYPE_NONE} },
  13. {HALMAC_API_INIT_SYSTEM_CFG, 0, {TLP_TYPE_NONE} },
  14. {HALMAC_API_INIT_TRX_CFG, 1, {TLP_TYPE_PHALMAC_TRX_MODE} },
  15. {HALMAC_API_CFG_RX_AGGREGATION, 1, {TLP_TYPE_PHALMAC_RXAGG_CFG} },
  16. {HALMAC_API_CFG_OPERATION_MODE, 1, {TLP_TYPE_PHALMAC_WIRELESS_MODE} },
  17. {HALMAC_API_CFG_BW, 1, {TLP_TYPE_PHALMAC_BW} },
  18. {HALMAC_API_INIT_MAC_CFG, 1, {TLP_TYPE_PHALMAC_TRX_MODE} },
  19. {HALMAC_API_INIT_SDIO_CFG, 0, {TLP_TYPE_NONE} },
  20. {HALMAC_API_INIT_USB_CFG, 0, {TLP_TYPE_NONE} },
  21. {HALMAC_API_INIT_PCIE_CFG, 0, {TLP_TYPE_NONE} },
  22. {HALMAC_API_DEINIT_SDIO_CFG, 0, {TLP_TYPE_NONE} },
  23. {HALMAC_API_DEINIT_USB_CFG, 0, {TLP_TYPE_NONE} },
  24. {HALMAC_API_DEINIT_PCIE_CFG, 0, {TLP_TYPE_NONE} },
  25. {HALMAC_API_GET_EFUSE_SIZE, 1, {TLP_TYPE_PU32} },
  26. {HALMAC_API_DUMP_EFUSE_MAP, 1, {TLP_TYPE_PHALMAC_EFUSE_READ_CFG} },
  27. {HALMAC_API_WRITE_EFUSE, 2, {TLP_TYPE_PU32, TLP_TYPE_PU8} },
  28. {HALMAC_API_READ_EFUSE, 2, {TLP_TYPE_PU32, TLP_TYPE_PU8} },
  29. {HALMAC_API_GET_LOGICAL_EFUSE_SIZE, 1, {TLP_TYPE_PU32} },
  30. {HALMAC_API_DUMP_LOGICAL_EFUSE_MAP, 1, {TLP_TYPE_PHALMAC_EFUSE_READ_CFG} },
  31. {HALMAC_API_WRITE_LOGICAL_EFUSE, 2, {TLP_TYPE_PU32, TLP_TYPE_PU8} },
  32. {HALMAC_API_READ_LOGICAL_EFUSE, 2, {TLP_TYPE_PU32, TLP_TYPE_PU8} },
  33. {HALMAC_API_GET_C2H_INFO, 1, {TLP_TYPE_PU8_BUFFER} },
  34. {HALMAC_API_H2C_LB, 0, {TLP_TYPE_NONE} },
  35. {HALMAC_API_CFG_PARAMETER, 2, {TLP_TYPE_PHALMAC_PHY_PARAMETER_INFO, TLP_TYPE_PU8} },
  36. {HALMAC_API_UPDATE_PACKET, 2, {TLP_TYPE_PHALMAC_PACKET_ID, TLP_TYPE_PU8_BUFFER} },
  37. {HALMAC_API_TX_ALLOWED_SDIO, 1, {TLP_TYPE_PU8_BUFFER} },
  38. {HALMAC_API_SET_BULKOUT_NUM, 1, {TLP_TYPE_PU8} },
  39. {HALMAC_API_GET_SDIO_TX_ADDR, 2, {TLP_TYPE_PU8_BUFFER, TLP_TYPE_PU32} },
  40. {HALMAC_API_GET_USB_BULKOUT_ID, 2, {TLP_TYPE_PU8_BUFFER, TLP_TYPE_PU8} },
  41. {HALMAC_API_TIMER_2S, 0, {TLP_TYPE_NONE} },
  42. {HALMAC_API_CFG_DRV_INFO, 1, {TLP_TYPE_PHALMAC_DRV_INFO} },
  43. {HALMAC_API_SEND_BT_COEX, 1, {TLP_TYPE_PU8_BUFFER, TLP_TYPE_PU8} },
  44. {HALMAC_API_VERIFY_PLATFORM_API, 0, {TLP_TYPE_NONE} },
  45. {HALMAC_API_CFG_TXBF, 3, {TLP_TYPE_PU8, TLP_TYPE_PHALMAC_BW, TLP_TYPE_PU8_1} },
  46. {HALMAC_API_CFG_MUMIMO, 1, {TLP_TYPE_PHALMAC_CFG_MUMIMO_PARA} },
  47. {HALMAC_API_CFG_SOUNDING, 2, {TLP_TYPE_PHALMAC_SND_ROLE, TLP_TYPE_PHALMAC_DATA_RATE} },
  48. {HALMAC_API_DEL_SOUNDING, 1, {TLP_TYPE_PHALMAC_SND_ROLE} },
  49. {HALMAC_API_SU_BFER_ENTRY_INIT, 1, {TLP_TYPE_PHALMAC_SU_BFER_INIT_PARA} },
  50. {HALMAC_API_SU_BFEE_ENTRY_INIT, 2, {TLP_TYPE_PU8, TLP_TYPE_PU16} },
  51. {HALMAC_API_MU_BFER_ENTRY_INIT, 1, {TLP_TYPE_PHALMAC_MU_BFER_INIT_PARA} },
  52. {HALMAC_API_MU_BFEE_ENTRY_INIT, 1, {TLP_TYPE_PHALMAC_MU_BFEE_INIT_PARA} },
  53. {HALMAC_API_SU_BFER_ENTRY_DEL, 1, {TLP_TYPE_PU8} },
  54. {HALMAC_API_SU_BFEE_ENTRY_DEL, 1, {TLP_TYPE_PU8} },
  55. {HALMAC_API_MU_BFER_ENTRY_DEL, 0, {TLP_TYPE_NONE} },
  56. {HALMAC_API_MU_BFEE_ENTRY_DEL, 1, {TLP_TYPE_PU8} },
  57. {HALMAC_API_ADD_CH_INFO, 1, {TLP_TYPE_PHALMAC_CH_INFO} },
  58. {HALMAC_API_CTRL_CH_SWITCH, 1, {TLP_TYPE_PHALMAC_CH_SWITCH_OPTION} },
  59. {HALMAC_API_CLEAR_CH_INFO, 0, {TLP_TYPE_NONE} },
  60. {HALMAC_API_SEND_GENERAL_INFO, 1, {TLP_TYPE_PHALMAC_GENERAL_INFO} },
  61. {HALMAC_API_QUERY_STATE, 4, {TLP_TYPE_PHALMAC_FEATURE_ID, TLP_TYPE_PHALMAC_CMD_PROCESS_STATUS, TLP_TYPE_PU8_BUFFER, TLP_TYPE_PU32} },
  62. {HALMAC_API_CHECK_FW_STATUS, 1, {TLP_TYPE_PU8} },
  63. {HALMAC_API_DUMP_FW_DMEM, 2, {TLP_TYPE_PU8_BUFFER, TLP_TYPE_PU32} },
  64. {HALMAC_API_RESET_FEATURE, 1, {TLP_TYPE_PHALMAC_FEATURE_ID} },
  65. {HALMAC_API_START_IQK, 1, {TLP_TYPE_PHALMAC_IQK} },
  66. {HALMAC_API_CTRL_PWR_TRACKING, 1, {TLP_TYPE_PHALMAC_PWR_TRACKING} },
  67. {HALMAC_API_CFG_LA_MODE, 1, {TLP_TYPE_PHALMAC_LA_MODE} },
  68. {HALMAC_API_GET_HW_VALUE, 2, {TLP_TYPE_PHALMAC_HW_ID, TLP_TYPE_PVOID} },
  69. {HALMAC_API_SET_HW_VALUE, 2, {TLP_TYPE_PHALMAC_HW_ID, TLP_TYPE_PVOID} },
  70. {HALMAC_API_CFG_DRV_RSVD_PG_NUM, 1, {TLP_TYPE_PHALMAC_DRV_RSVD_PG_NUM} },
  71. {HALMAC_API_DUMP_EFUSE_MAP_BT, 2, {TLP_TYPE_PHALMAC_EFUSE_BANK, TLP_TYPE_PU8_BUFFER} },
  72. {HALMAC_API_SWITCH_EFUSE_BANK, 1, {TLP_TYPE_PHALMAC_EFUSE_BANK} },
  73. {HALMAC_API_WRITE_EFUSE_BT, 3, {TLP_TYPE_PU32, TLP_TYPE_PU8, TLP_TYPE_PHALMAC_EFUSE_BANK} },
  74. {HALMAC_API_PG_EFUSE_BY_MAP, 2, {TLP_TYPE_PHALMAC_PG_EFUSE_INFO, TLP_TYPE_PHALMAC_EFUSE_READ_CFG} },
  75. {HALMAC_API_CFG_CSI_RATE, 4, {TLP_TYPE_PU8, TLP_TYPE_PU8_1, TLP_TYPE_PU8_2, TLP_TYPE_PU8_BUFFER} },
  76. {HALMAC_API_DL_DRV_RSVD_PG, 2, {TLP_TYPE_PU8, TLP_TYPE_PU8_BUFFER} },
  77. #endif
  78. #if (HALMAC_VERSION(1, 3, 0) <= HALMAC_CURRENT_VERSION)
  79. {HALMAC_API_PHY_CFG, 1, {TLP_TYPE_PHALMAC_INTF_PHY_PLATFORM} },
  80. {HALMAC_API_REGISTER_API, 1, {TLP_TYPE_PHALMAC_API_REGISTRY} },
  81. {HALMAC_API_FREE_DOWNLOAD_FIRMWARE, 2, {TLP_TYPE_PHALMAC_DLFW_MEM, TLP_TYPE_PU8_BUFFER} },
  82. {HALMAC_API_GET_FW_VERSION, 1, {TLP_TYPE_PHALMAC_FW_VERSION} },
  83. {HALMAC_API_DEBUG, 0, {TLP_TYPE_NONE} },
  84. {HALMAC_API_GET_EFUSE_AVAL_SIZE, 1, {TLP_TYPE_PU32} },
  85. {HALMAC_API_FILL_TXDESC_CHECKSUM, 1, {TLP_TYPE_PU8} },
  86. {HALMAC_API_GET_FIFO_SIZE, 1, {TLP_TYPE_PHALMAC_FIFO_SEL} },
  87. {HALMAC_API_DUMP_FIFO, 3, {TLP_TYPE_PHALMAC_FIFO_SEL, TLP_TYPE_PU32, TLP_TYPE_PU8_BUFFER} },
  88. {HALMAC_API_P2PPS, 1, {TLP_TYPE_PHALMAC_P2PPS} },
  89. {HALMAC_API_CFG_TX_AGG_ALIGN, 2, {TLP_TYPE_PU8, TLP_TYPE_PU16} },
  90. {HALMAC_API_CFG_MAX_DL_SIZE, 1, {TLP_TYPE_PU32} },
  91. {HALMAC_API_CFG_RX_FIFO_EXPANDING_MODE, 1, {TLP_TYPE_PHALMAC_RX_EXPAND_MODE} },
  92. {HALMAC_API_CHK_TXDESC, 1, {TLP_TYPE_PU8_BUFFER} },
  93. {HALMAC_API_PCIE_SWITCH, 1, {TLP_TYPE_PHALMAC_PCIE_CFG} },
  94. {HALMAC_API_SDIO_CMD53_4BYTE, 1, {TLP_TYPE_PHALMAC_SDIO_CMD53_4BYTE_MODE} },
  95. {HALMAC_API_CFG_TRANS_ADDR, 2, {TLP_TYPE_PU8, TLP_TYPE_PHALMAC_WLAN_ADDR} },
  96. {HALMAC_API_CFG_NET_TYPE, 2, {TLP_TYPE_PU8, TLP_TYPE_PHALMAC_NETWORK_TYPE_SELECT} },
  97. {HALMAC_API_CFG_TSF_RESET, 1, {TLP_TYPE_PU8} },
  98. {HALMAC_API_CFG_BCN_SPACE, 1, {TLP_TYPE_PU8, TLP_TYPE_PU32} },
  99. {HALMAC_API_CFG_BCN_CTRL, 3, {TLP_TYPE_PU8, TLP_TYPE_PU8_1, TLP_TYPE_PHALMAC_BCN_CTRL} },
  100. {HALMAC_API_INTF_INTEGRA_TUNING, 0, {TLP_TYPE_NONE} },
  101. {HALMAC_API_TXFIFO_IS_EMPTY, 1, {TLP_TYPE_PU32} },
  102. {HALMAC_API_SDIO_HW_INFO, 1, {TLP_TYPE_PHALMAC_SDIO_HW_INFO} },
  103. #endif
  104. #if (HALMAC_VERSION(1, 4, 0) <= HALMAC_CURRENT_VERSION)
  105. {HALMAC_API_CFG_SIDEBAND_INT, 1, {TLP_TYPE_PHALMAC_SIDEBAND_INT_CFG} },
  106. #endif
  107. {HALMAC_API_MAX, 0, {TLP_TYPE_NONE} }
  108. };
  109. static VOID
  110. halmac_obj_init(
  111. IN struct _HALMAC_OBJ *halmac_obj,
  112. IN u8 init
  113. )
  114. {
  115. halmac_obj->init = init;
  116. }
  117. static u8
  118. is_halmac_initialized(
  119. IN struct _HALMAC_OBJ *halmac_obj
  120. )
  121. {
  122. return halmac_obj->init;
  123. }
  124. static u8
  125. parse_halmac_api_arg_list(
  126. IN HALMAC_API_ID api_id,
  127. OUT PHALMAC_TLP_STRUCT parg,
  128. IN PHALMAC_TLP_STRUCT ptlp,
  129. IN u32 *arg_count
  130. )
  131. {
  132. u32 i, j;
  133. u32 idx = 0;
  134. u32 match_count;
  135. for (i = 0; i < HALMAC_API_MAX; i++) {
  136. if (api_arg_table[i].api_id == api_id) {
  137. idx = i;
  138. break;
  139. }
  140. }
  141. if (*arg_count < api_arg_table[idx].arg_count)
  142. return _FALSE;
  143. for (i = 0; i < api_arg_table[idx].arg_count; i++) {
  144. match_count = 0;
  145. for (j = 0; j < *arg_count; j++) {
  146. if (api_arg_table[idx].arg_type_seq[i] == ptlp[j].type) {
  147. if (match_count >= 1)
  148. return _FALSE; /* argument types should be different to each other for the same API */
  149. parg[i].type = ptlp[j].type;
  150. parg[i].length = ptlp[j].length;
  151. parg[i].ptr = ptlp[j].ptr;
  152. match_count++;
  153. }
  154. }
  155. }
  156. for (i = 0; i < api_arg_table[idx].arg_count; i++) {
  157. if (parg[i].type != api_arg_table[idx].arg_type_seq[i])
  158. return _FALSE;
  159. }
  160. return _TRUE;
  161. }
  162. HALMAC_RET_STATUS
  163. halmac_initialize_obj(
  164. IN struct _HALMAC_OBJ *halmac_obj,
  165. INOUT PHALMAC_TLP_STRUCT ptlp,
  166. IN u32 tlpCount
  167. )
  168. {
  169. VOID *pDriver_adapter = NULL;
  170. u32 arg_count = tlpCount;
  171. HALMAC_RET_STATUS result = HALMAC_RET_SUCCESS;
  172. HALMAC_TLP_STRUCT arg_list[MAX_ARG_NUM] = {0};
  173. HALMAC_VER chip_version;
  174. PHALMAC_ADAPTER pHalmac_adapter;
  175. if (is_halmac_initialized(halmac_obj))
  176. return HALMAC_RET_SUCCESS;
  177. if (!parse_halmac_api_arg_list(HALMAC_API_INIT_OBJ, &arg_list[0], ptlp, &arg_count))
  178. return HALMAC_RET_WRONG_ARGUMENT;
  179. halmac_obj->halmac_api_entry = (PHALMAC_API)0;
  180. halmac_obj->halmac_adapter = (PHALMAC_ADAPTER)0;
  181. result = halmac_init_adapter(arg_list[0].ptr, (PHALMAC_PLATFORM_API)arg_list[1].ptr,
  182. *((HALMAC_INTERFACE *)arg_list[2].ptr), &(halmac_obj->halmac_adapter), &(halmac_obj->halmac_api_entry));
  183. if (result != HALMAC_RET_SUCCESS)
  184. return result;
  185. halmac_obj_init(halmac_obj, _TRUE);
  186. result = halmac_obj->halmac_api_entry->halmac_get_chip_version(halmac_obj->halmac_adapter, &chip_version);
  187. halmac_obj->version = HALMAC_VERSION(chip_version.major_ver, chip_version.prototype_ver, chip_version.minor_ver);
  188. pDriver_adapter = halmac_obj->halmac_adapter->pDriver_adapter;
  189. pHalmac_adapter = halmac_obj->halmac_adapter;
  190. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_init, current ver = 0x%x!!\n", HALMAC_CURRENT_VERSION);
  191. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_init, 88xx ver = 0x%x!!\n", halmac_obj->version);
  192. return result;
  193. }
  194. HALMAC_RET_STATUS
  195. halmac_deinitialize_obj(
  196. IN struct _HALMAC_OBJ *halmac_obj,
  197. INOUT PHALMAC_TLP_STRUCT ptlp,
  198. IN u32 tlpCount
  199. )
  200. {
  201. u32 arg_count = tlpCount;
  202. HALMAC_RET_STATUS result = HALMAC_RET_SUCCESS;
  203. HALMAC_TLP_STRUCT arg_list[MAX_ARG_NUM] = {0};
  204. if (!is_halmac_initialized(halmac_obj))
  205. return HALMAC_RET_NOT_SUPPORT;
  206. if (!parse_halmac_api_arg_list(HALMAC_API_DEINIT_OBJ, &arg_list[0], ptlp, &arg_count))
  207. return HALMAC_RET_WRONG_ARGUMENT;
  208. halmac_obj_init(halmac_obj, _FALSE);
  209. result = halmac_deinit_adapter(halmac_obj->halmac_adapter);
  210. halmac_obj->halmac_api_entry = (PHALMAC_API)0;
  211. halmac_obj->halmac_adapter = (PHALMAC_ADAPTER)0;
  212. return result;
  213. }
  214. HALMAC_RET_STATUS
  215. halmac_set_information(
  216. IN struct _HALMAC_OBJ *halmac_obj,
  217. IN HALMAC_API_ID api_id,
  218. INOUT PHALMAC_TLP_STRUCT ptlp,
  219. IN u32 tlpCount
  220. )
  221. {
  222. u32 arg_count = tlpCount;
  223. HALMAC_RET_STATUS state = HALMAC_RET_SUCCESS;
  224. HALMAC_TLP_STRUCT arg_list[MAX_ARG_NUM] = {0};
  225. PHALMAC_ADAPTER pHalmac_adapter = halmac_obj->halmac_adapter;
  226. VOID *pDriver_adapter = halmac_obj->halmac_adapter->pDriver_adapter;
  227. if (!is_halmac_initialized(halmac_obj))
  228. return HALMAC_RET_NOT_SUPPORT;
  229. if (!parse_halmac_api_arg_list(api_id, &arg_list[0], ptlp, &arg_count))
  230. return HALMAC_RET_WRONG_ARGUMENT;
  231. state = HALMAC_RET_NOT_SUPPORT;
  232. switch (api_id) {
  233. #if (HALMAC_VERSION(1, 2, 0) <= HALMAC_CURRENT_VERSION)
  234. case HALMAC_API_MAC_POWER_SWITCH:
  235. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  236. state = halmac_obj->halmac_api_entry->halmac_mac_power_switch(halmac_obj->halmac_adapter, *((HALMAC_MAC_POWER *)arg_list[0].ptr));
  237. break;
  238. case HALMAC_API_DOWNLOAD_FIRMWARE:
  239. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  240. state = halmac_obj->halmac_api_entry->halmac_download_firmware(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length);
  241. break;
  242. case HALMAC_API_CFG_MAC_ADDR:
  243. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  244. state = halmac_obj->halmac_api_entry->halmac_cfg_mac_addr(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), (PHALMAC_WLAN_ADDR)arg_list[1].ptr);
  245. break;
  246. case HALMAC_API_CFG_BSSID:
  247. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  248. state = halmac_obj->halmac_api_entry->halmac_cfg_bssid(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), (PHALMAC_WLAN_ADDR)arg_list[1].ptr);
  249. break;
  250. case HALMAC_API_CFG_MULTICAST_ADDR:
  251. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  252. state = halmac_obj->halmac_api_entry->halmac_cfg_multicast_addr(halmac_obj->halmac_adapter, (PHALMAC_WLAN_ADDR)arg_list[0].ptr);
  253. break;
  254. case HALMAC_API_PRE_INIT_SYSTEM_CFG:
  255. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  256. state = halmac_obj->halmac_api_entry->halmac_pre_init_system_cfg(halmac_obj->halmac_adapter);
  257. break;
  258. case HALMAC_API_INIT_SYSTEM_CFG:
  259. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  260. state = halmac_obj->halmac_api_entry->halmac_init_system_cfg(halmac_obj->halmac_adapter);
  261. break;
  262. case HALMAC_API_INIT_TRX_CFG:
  263. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  264. state = halmac_obj->halmac_api_entry->halmac_init_trx_cfg(halmac_obj->halmac_adapter, *((HALMAC_TRX_MODE *)arg_list[0].ptr));
  265. break;
  266. case HALMAC_API_CFG_RX_AGGREGATION:
  267. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  268. state = halmac_obj->halmac_api_entry->halmac_cfg_rx_aggregation(halmac_obj->halmac_adapter, (HALMAC_RXAGG_CFG *)arg_list[0].ptr);
  269. break;
  270. case HALMAC_API_CFG_OPERATION_MODE:
  271. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  272. state = halmac_obj->halmac_api_entry->halmac_cfg_operation_mode(halmac_obj->halmac_adapter, *((HALMAC_WIRELESS_MODE *)arg_list[0].ptr));
  273. break;
  274. case HALMAC_API_CFG_BW:
  275. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  276. state = halmac_obj->halmac_api_entry->halmac_cfg_bw(halmac_obj->halmac_adapter, *((HALMAC_BW *)arg_list[0].ptr));
  277. break;
  278. case HALMAC_API_INIT_MAC_CFG:
  279. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  280. state = halmac_obj->halmac_api_entry->halmac_init_mac_cfg(halmac_obj->halmac_adapter, *((HALMAC_TRX_MODE *)arg_list[0].ptr));
  281. break;
  282. case HALMAC_API_INIT_SDIO_CFG:
  283. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  284. state = halmac_obj->halmac_api_entry->halmac_init_interface_cfg(halmac_obj->halmac_adapter);
  285. else if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  286. state = halmac_obj->halmac_api_entry->halmac_init_sdio_cfg(halmac_obj->halmac_adapter);
  287. break;
  288. case HALMAC_API_INIT_USB_CFG:
  289. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  290. state = halmac_obj->halmac_api_entry->halmac_init_interface_cfg(halmac_obj->halmac_adapter);
  291. else if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  292. state = halmac_obj->halmac_api_entry->halmac_init_usb_cfg(halmac_obj->halmac_adapter);
  293. break;
  294. case HALMAC_API_INIT_PCIE_CFG:
  295. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  296. state = halmac_obj->halmac_api_entry->halmac_init_interface_cfg(halmac_obj->halmac_adapter);
  297. else if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  298. state = halmac_obj->halmac_api_entry->halmac_init_pcie_cfg(halmac_obj->halmac_adapter);
  299. break;
  300. case HALMAC_API_DEINIT_SDIO_CFG:
  301. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  302. state = halmac_obj->halmac_api_entry->halmac_deinit_interface_cfg(halmac_obj->halmac_adapter);
  303. else if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  304. state = halmac_obj->halmac_api_entry->halmac_deinit_sdio_cfg(halmac_obj->halmac_adapter);
  305. break;
  306. case HALMAC_API_DEINIT_USB_CFG:
  307. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  308. state = halmac_obj->halmac_api_entry->halmac_deinit_interface_cfg(halmac_obj->halmac_adapter);
  309. else if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  310. state = halmac_obj->halmac_api_entry->halmac_deinit_usb_cfg(halmac_obj->halmac_adapter);
  311. break;
  312. case HALMAC_API_DEINIT_PCIE_CFG:
  313. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  314. state = halmac_obj->halmac_api_entry->halmac_deinit_interface_cfg(halmac_obj->halmac_adapter);
  315. else if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  316. state = halmac_obj->halmac_api_entry->halmac_deinit_pcie_cfg(halmac_obj->halmac_adapter);
  317. break;
  318. case HALMAC_API_WRITE_EFUSE:
  319. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  320. state = halmac_obj->halmac_api_entry->halmac_write_efuse(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr), *((u8 *)arg_list[1].ptr));
  321. break;
  322. case HALMAC_API_PG_EFUSE_BY_MAP:
  323. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  324. state = halmac_obj->halmac_api_entry->halmac_pg_efuse_by_map(halmac_obj->halmac_adapter, (PHALMAC_PG_EFUSE_INFO)arg_list[0].ptr, *((HALMAC_EFUSE_READ_CFG *)arg_list[1].ptr));
  325. break;
  326. case HALMAC_API_GET_C2H_INFO:
  327. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  328. state = halmac_obj->halmac_api_entry->halmac_get_c2h_info(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length);
  329. break;
  330. case HALMAC_API_H2C_LB:
  331. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  332. state = halmac_obj->halmac_api_entry->halmac_h2c_lb(halmac_obj->halmac_adapter);
  333. break;
  334. case HALMAC_API_CFG_PARAMETER:
  335. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  336. state = halmac_obj->halmac_api_entry->halmac_cfg_parameter(halmac_obj->halmac_adapter, (PHALMAC_PHY_PARAMETER_INFO)(arg_list[0].ptr), *((u8 *)arg_list[1].ptr));
  337. break;
  338. case HALMAC_API_UPDATE_PACKET:
  339. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  340. state = halmac_obj->halmac_api_entry->halmac_update_packet(halmac_obj->halmac_adapter, *((HALMAC_PACKET_ID *)arg_list[0].ptr), (u8 *)arg_list[1].ptr, arg_list[1].length);
  341. break;
  342. case HALMAC_API_SET_BULKOUT_NUM:
  343. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  344. state = halmac_obj->halmac_api_entry->halmac_set_bulkout_num(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr));
  345. break;
  346. case HALMAC_API_CFG_DRV_INFO:
  347. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  348. state = halmac_obj->halmac_api_entry->halmac_cfg_drv_info(halmac_obj->halmac_adapter, *((HALMAC_DRV_INFO *)arg_list[0].ptr));
  349. break;
  350. case HALMAC_API_SEND_BT_COEX:
  351. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  352. state = halmac_obj->halmac_api_entry->halmac_send_bt_coex(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length, *((u8 *)arg_list[1].ptr));
  353. break;
  354. case HALMAC_API_VERIFY_PLATFORM_API:
  355. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  356. state = halmac_obj->halmac_api_entry->halmac_verify_platform_api(halmac_obj->halmac_adapter);
  357. break;
  358. case HALMAC_API_CFG_TXBF:
  359. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  360. state = halmac_obj->halmac_api_entry->halmac_cfg_txbf(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((HALMAC_BW *)arg_list[1].ptr), *((u8 *)arg_list[2].ptr));
  361. break;
  362. case HALMAC_API_CFG_MUMIMO:
  363. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  364. state = halmac_obj->halmac_api_entry->halmac_cfg_mumimo(halmac_obj->halmac_adapter, (PHALMAC_CFG_MUMIMO_PARA)arg_list[0].ptr);
  365. break;
  366. case HALMAC_API_CFG_SOUNDING:
  367. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  368. state = halmac_obj->halmac_api_entry->halmac_cfg_sounding(halmac_obj->halmac_adapter, *((HALMAC_SND_ROLE *)arg_list[0].ptr), *((HALMAC_DATA_RATE *)arg_list[1].ptr));
  369. break;
  370. case HALMAC_API_DEL_SOUNDING:
  371. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  372. state = halmac_obj->halmac_api_entry->halmac_del_sounding(halmac_obj->halmac_adapter, *((HALMAC_SND_ROLE *)arg_list[0].ptr));
  373. break;
  374. case HALMAC_API_SU_BFER_ENTRY_INIT:
  375. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  376. state = halmac_obj->halmac_api_entry->halmac_su_bfer_entry_init(halmac_obj->halmac_adapter, (PHALMAC_SU_BFER_INIT_PARA)arg_list[0].ptr);
  377. break;
  378. case HALMAC_API_SU_BFEE_ENTRY_INIT:
  379. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  380. state = halmac_obj->halmac_api_entry->halmac_su_bfee_entry_init(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((u16 *)arg_list[1].ptr));
  381. break;
  382. case HALMAC_API_MU_BFER_ENTRY_INIT:
  383. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  384. state = halmac_obj->halmac_api_entry->halmac_mu_bfer_entry_init(halmac_obj->halmac_adapter, (PHALMAC_MU_BFER_INIT_PARA)arg_list[0].ptr);
  385. break;
  386. case HALMAC_API_MU_BFEE_ENTRY_INIT:
  387. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  388. state = halmac_obj->halmac_api_entry->halmac_mu_bfee_entry_init(halmac_obj->halmac_adapter, (PHALMAC_MU_BFEE_INIT_PARA)arg_list[0].ptr);
  389. break;
  390. case HALMAC_API_SU_BFER_ENTRY_DEL:
  391. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  392. state = halmac_obj->halmac_api_entry->halmac_su_bfer_entry_del(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr));
  393. break;
  394. case HALMAC_API_SU_BFEE_ENTRY_DEL:
  395. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  396. state = halmac_obj->halmac_api_entry->halmac_su_bfee_entry_del(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr));
  397. break;
  398. case HALMAC_API_MU_BFER_ENTRY_DEL:
  399. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  400. state = halmac_obj->halmac_api_entry->halmac_mu_bfer_entry_del(halmac_obj->halmac_adapter);
  401. break;
  402. case HALMAC_API_MU_BFEE_ENTRY_DEL:
  403. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  404. state = halmac_obj->halmac_api_entry->halmac_mu_bfee_entry_del(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr));
  405. break;
  406. case HALMAC_API_ADD_CH_INFO:
  407. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  408. state = halmac_obj->halmac_api_entry->halmac_add_ch_info(halmac_obj->halmac_adapter, (PHALMAC_CH_INFO)arg_list[0].ptr);
  409. break;
  410. case HALMAC_API_CTRL_CH_SWITCH:
  411. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  412. state = halmac_obj->halmac_api_entry->halmac_ctrl_ch_switch(halmac_obj->halmac_adapter, (PHALMAC_CH_SWITCH_OPTION)arg_list[0].ptr);
  413. break;
  414. case HALMAC_API_CLEAR_CH_INFO:
  415. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  416. state = halmac_obj->halmac_api_entry->halmac_clear_ch_info(halmac_obj->halmac_adapter);
  417. break;
  418. case HALMAC_API_SEND_GENERAL_INFO:
  419. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  420. state = halmac_obj->halmac_api_entry->halmac_send_general_info(halmac_obj->halmac_adapter, (PHALMAC_GENERAL_INFO)arg_list[0].ptr);
  421. break;
  422. case HALMAC_API_RESET_FEATURE:
  423. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  424. state = halmac_obj->halmac_api_entry->halmac_reset_feature(halmac_obj->halmac_adapter, *((HALMAC_FEATURE_ID *)arg_list[0].ptr));
  425. break;
  426. case HALMAC_API_WRITE_LOGICAL_EFUSE:
  427. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  428. state = halmac_obj->halmac_api_entry->halmac_write_logical_efuse(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr), *((u8 *)arg_list[1].ptr));
  429. break;
  430. case HALMAC_API_CTRL_PWR_TRACKING:
  431. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  432. state = halmac_obj->halmac_api_entry->halmac_ctrl_pwr_tracking(halmac_obj->halmac_adapter, (PHALMAC_PWR_TRACKING_OPTION)arg_list[0].ptr);
  433. break;
  434. case HALMAC_API_START_IQK:
  435. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  436. state = halmac_obj->halmac_api_entry->halmac_start_iqk(halmac_obj->halmac_adapter, (PHALMAC_IQK_PARA)arg_list[0].ptr);
  437. break;
  438. case HALMAC_API_CFG_LA_MODE:
  439. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  440. state = halmac_obj->halmac_api_entry->halmac_cfg_la_mode(halmac_obj->halmac_adapter, *((HALMAC_LA_MODE *)arg_list[0].ptr));
  441. break;
  442. case HALMAC_API_SET_HW_VALUE:
  443. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  444. state = halmac_obj->halmac_api_entry->halmac_set_hw_value(halmac_obj->halmac_adapter, *((HALMAC_HW_ID *)arg_list[0].ptr), (VOID *)arg_list[1].ptr);
  445. break;
  446. case HALMAC_API_CFG_DRV_RSVD_PG_NUM:
  447. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  448. state = halmac_obj->halmac_api_entry->halmac_cfg_drv_rsvd_pg_num(halmac_obj->halmac_adapter, *((HALMAC_DRV_RSVD_PG_NUM *)arg_list[0].ptr));
  449. break;
  450. case HALMAC_API_SWITCH_EFUSE_BANK:
  451. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  452. state = halmac_obj->halmac_api_entry->halmac_switch_efuse_bank(halmac_obj->halmac_adapter, (HALMAC_EFUSE_BANK)*((u16 *)arg_list[0].ptr));
  453. break;
  454. case HALMAC_API_WRITE_EFUSE_BT:
  455. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  456. state = halmac_obj->halmac_api_entry->halmac_write_efuse_bt(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr), *((u8 *)arg_list[1].ptr), (HALMAC_EFUSE_BANK)*((u16 *)arg_list[2].ptr));
  457. break;
  458. case HALMAC_API_CFG_CSI_RATE:
  459. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  460. state = halmac_obj->halmac_api_entry->halmac_cfg_csi_rate(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((u8 *)arg_list[1].ptr), *((u8 *)arg_list[2].ptr), (u8 *)arg_list[3].ptr);
  461. break;
  462. case HALMAC_API_DL_DRV_RSVD_PG:
  463. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  464. state = halmac_obj->halmac_api_entry->halmac_dl_drv_rsvd_page(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), (u8 *)arg_list[1].ptr, arg_list[1].length);
  465. break;
  466. #endif
  467. #if (HALMAC_VERSION(1, 3, 0) <= HALMAC_CURRENT_VERSION)
  468. case HALMAC_API_PHY_CFG:
  469. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  470. state = halmac_obj->halmac_api_entry->halmac_phy_cfg(halmac_obj->halmac_adapter, *((HALMAC_INTF_PHY_PLATFORM *)arg_list[0].ptr));
  471. break;
  472. case HALMAC_API_DEBUG:
  473. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  474. state = halmac_obj->halmac_api_entry->halmac_debug(halmac_obj->halmac_adapter);
  475. break;
  476. case HALMAC_API_CFG_TX_AGG_ALIGN:
  477. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  478. state = halmac_obj->halmac_api_entry->halmac_cfg_tx_agg_align(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((u16 *)arg_list[1].ptr));
  479. break;
  480. case HALMAC_API_CFG_MAX_DL_SIZE:
  481. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  482. state = halmac_obj->halmac_api_entry->halmac_cfg_max_dl_size(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr));
  483. break;
  484. case HALMAC_API_CFG_RX_FIFO_EXPANDING_MODE:
  485. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  486. state = halmac_obj->halmac_api_entry->halmac_cfg_rx_fifo_expanding_mode(halmac_obj->halmac_adapter, *((HALMAC_RX_FIFO_EXPANDING_MODE *)arg_list[0].ptr));
  487. break;
  488. case HALMAC_API_CHK_TXDESC:
  489. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  490. state = halmac_obj->halmac_api_entry->halmac_chk_txdesc(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length);
  491. break;
  492. case HALMAC_API_PCIE_SWITCH:
  493. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  494. state = halmac_obj->halmac_api_entry->halmac_pcie_switch(halmac_obj->halmac_adapter, *((HALMAC_PCIE_CFG *)arg_list[0].ptr));
  495. break;
  496. case HALMAC_API_SDIO_CMD53_4BYTE:
  497. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  498. state = halmac_obj->halmac_api_entry->halmac_sdio_cmd53_4byte(halmac_obj->halmac_adapter, *((HALMAC_SDIO_CMD53_4BYTE_MODE *)arg_list[0].ptr));
  499. break;
  500. case HALMAC_API_INTF_INTEGRA_TUNING:
  501. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  502. state = halmac_obj->halmac_api_entry->halmac_interface_integration_tuning(halmac_obj->halmac_adapter);
  503. break;
  504. case HALMAC_API_TXFIFO_IS_EMPTY:
  505. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 3))
  506. state = halmac_obj->halmac_api_entry->halmac_txfifo_is_empty(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr));
  507. break;
  508. case HALMAC_API_P2PPS:
  509. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 3))
  510. state = halmac_obj->halmac_api_entry->halmac_p2pps(halmac_obj->halmac_adapter, (PHALMAC_P2PPS)arg_list[0].ptr);
  511. break;
  512. case HALMAC_API_FREE_DOWNLOAD_FIRMWARE:
  513. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 5))
  514. state = halmac_obj->halmac_api_entry->halmac_free_download_firmware(halmac_obj->halmac_adapter, *((HALMAC_DLFW_MEM *)arg_list[0].ptr), (u8 *)arg_list[1].ptr, arg_list[1].length);
  515. break;
  516. case HALMAC_API_SDIO_HW_INFO:
  517. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 6))
  518. state = halmac_obj->halmac_api_entry->halmac_sdio_hw_info(halmac_obj->halmac_adapter, (PHALMAC_SDIO_HW_INFO)arg_list[0].ptr);
  519. break;
  520. #endif
  521. #if (HALMAC_VERSION(1, 4, 0) <= HALMAC_CURRENT_VERSION)
  522. case HALMAC_API_REGISTER_API:
  523. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  524. state = halmac_obj->halmac_api_entry->halmac_register_api(halmac_obj->halmac_adapter, (PHALMAC_API_REGISTRY)arg_list[0].ptr);
  525. break;
  526. case HALMAC_API_CFG_TRANS_ADDR:
  527. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  528. state = halmac_obj->halmac_api_entry->halmac_cfg_transmitter_addr(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), (PHALMAC_WLAN_ADDR)arg_list[1].ptr);
  529. break;
  530. case HALMAC_API_CFG_NET_TYPE:
  531. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  532. state = halmac_obj->halmac_api_entry->halmac_cfg_net_type(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((HALMAC_NETWORK_TYPE_SELECT *)arg_list[1].ptr));
  533. break;
  534. case HALMAC_API_CFG_TSF_RESET:
  535. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  536. state = halmac_obj->halmac_api_entry->halmac_cfg_tsf_rst(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr));
  537. break;
  538. case HALMAC_API_CFG_BCN_SPACE:
  539. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  540. state = halmac_obj->halmac_api_entry->halmac_cfg_bcn_space(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((u32 *)arg_list[1].ptr));
  541. break;
  542. case HALMAC_API_CFG_BCN_CTRL:
  543. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  544. state = halmac_obj->halmac_api_entry->halmac_rw_bcn_ctrl(halmac_obj->halmac_adapter, *((u8 *)arg_list[0].ptr), *((u8 *)arg_list[1].ptr), (PHALMAC_BCN_CTRL)arg_list[2].ptr);
  545. break;
  546. case HALMAC_API_CFG_SIDEBAND_INT:
  547. if (halmac_obj->version >= HALMAC_VERSION(1, 4, 0))
  548. state = halmac_obj->halmac_api_entry->halmac_cfg_sideband_int(halmac_obj->halmac_adapter, *((HALMAC_SIDEBAND_INT_CFG *)arg_list[0].ptr));
  549. break;
  550. #endif
  551. default:
  552. state = HALMAC_RET_NOT_SUPPORT;
  553. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_WARN, "halmac_set_information, HALMAC ver = %x, api_id = %x,HALMAC_RET_NOT_SUPPORT !!\n", halmac_obj->version, api_id, state);
  554. break;
  555. }
  556. if (state != HALMAC_RET_SUCCESS)
  557. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_WARN, "halmac_setinformation, HALMAC ver = %x, api_id = %x, state = %x!!\n", halmac_obj->version, api_id, state);
  558. else
  559. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE] halmac_setinformation, api_id = %x, state = %x!!\n", api_id, state);
  560. return state;
  561. }
  562. HALMAC_RET_STATUS
  563. halmac_get_information(
  564. IN struct _HALMAC_OBJ *halmac_obj,
  565. IN HALMAC_API_ID api_id,
  566. INOUT PHALMAC_TLP_STRUCT ptlp,
  567. IN u32 tlpCount
  568. )
  569. {
  570. u32 arg_count = tlpCount;
  571. HALMAC_RET_STATUS state = HALMAC_RET_SUCCESS;
  572. HALMAC_TLP_STRUCT arg_list[MAX_ARG_NUM] = {0};
  573. PHALMAC_ADAPTER pHalmac_adapter = halmac_obj->halmac_adapter;
  574. VOID *pDriver_adapter = halmac_obj->halmac_adapter->pDriver_adapter;
  575. if (!is_halmac_initialized(halmac_obj))
  576. return HALMAC_RET_NOT_SUPPORT;
  577. if (!parse_halmac_api_arg_list(api_id, &arg_list[0], ptlp, &arg_count))
  578. return HALMAC_RET_WRONG_ARGUMENT;
  579. state = HALMAC_RET_NOT_SUPPORT;
  580. switch (api_id) {
  581. #if (HALMAC_VERSION(1, 2, 0) <= HALMAC_CURRENT_VERSION)
  582. case HALMAC_API_GET_EFUSE_SIZE:
  583. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  584. state = halmac_obj->halmac_api_entry->halmac_get_efuse_size(halmac_obj->halmac_adapter, (u32 *)arg_list[0].ptr);
  585. break;
  586. case HALMAC_API_DUMP_EFUSE_MAP:
  587. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  588. state = halmac_obj->halmac_api_entry->halmac_dump_efuse_map(halmac_obj->halmac_adapter, *((HALMAC_EFUSE_READ_CFG *)arg_list[0].ptr));
  589. break;
  590. case HALMAC_API_READ_EFUSE:
  591. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  592. state = halmac_obj->halmac_api_entry->halmac_read_efuse(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr), (u8 *)arg_list[1].ptr);
  593. break;
  594. case HALMAC_API_GET_LOGICAL_EFUSE_SIZE:
  595. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  596. state = halmac_obj->halmac_api_entry->halmac_get_logical_efuse_size(halmac_obj->halmac_adapter, (u32 *)arg_list[0].ptr);
  597. break;
  598. case HALMAC_API_DUMP_LOGICAL_EFUSE_MAP:
  599. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  600. state = halmac_obj->halmac_api_entry->halmac_dump_logical_efuse_map(halmac_obj->halmac_adapter, *((HALMAC_EFUSE_READ_CFG *)arg_list[0].ptr));
  601. break;
  602. case HALMAC_API_READ_LOGICAL_EFUSE:
  603. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  604. state = halmac_obj->halmac_api_entry->halmac_read_logical_efuse(halmac_obj->halmac_adapter, *((u32 *)arg_list[0].ptr), (u8 *)arg_list[1].ptr);
  605. break;
  606. case HALMAC_API_TX_ALLOWED_SDIO:
  607. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  608. state = halmac_obj->halmac_api_entry->halmac_tx_allowed_sdio(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length);
  609. break;
  610. case HALMAC_API_GET_SDIO_TX_ADDR:
  611. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  612. state = halmac_obj->halmac_api_entry->halmac_get_sdio_tx_addr(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length, (u32 *)arg_list[1].ptr);
  613. break;
  614. case HALMAC_API_GET_USB_BULKOUT_ID:
  615. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  616. state = halmac_obj->halmac_api_entry->halmac_get_usb_bulkout_id(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, arg_list[0].length, (u8 *)arg_list[1].ptr);
  617. break;
  618. case HALMAC_API_QUERY_STATE:
  619. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  620. state = halmac_obj->halmac_api_entry->halmac_query_status(halmac_obj->halmac_adapter, *((HALMAC_FEATURE_ID *)arg_list[0].ptr), (HALMAC_CMD_PROCESS_STATUS *)arg_list[1].ptr, (u8 *)arg_list[2].ptr, (u32 *)arg_list[3].ptr);
  621. break;
  622. case HALMAC_API_CHECK_FW_STATUS:
  623. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  624. state = halmac_obj->halmac_api_entry->halmac_check_fw_status(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr);
  625. break;
  626. case HALMAC_API_DUMP_FW_DMEM:
  627. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  628. state = halmac_obj->halmac_api_entry->halmac_dump_fw_dmem(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr, (u32 *)arg_list[1].ptr);
  629. break;
  630. case HALMAC_API_GET_HW_VALUE:
  631. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  632. state = halmac_obj->halmac_api_entry->halmac_get_hw_value(halmac_obj->halmac_adapter, *((HALMAC_HW_ID *)arg_list[0].ptr), (VOID *)arg_list[1].ptr);
  633. break;
  634. case HALMAC_API_DUMP_EFUSE_MAP_BT:
  635. if (halmac_obj->version >= HALMAC_VERSION(1, 2, 0))
  636. state = halmac_obj->halmac_api_entry->halmac_dump_efuse_map_bt(halmac_obj->halmac_adapter, (HALMAC_EFUSE_BANK)*((u16 *)arg_list[0].ptr), arg_list[1].length, (u8 *)arg_list[1].ptr);
  637. break;
  638. #endif
  639. #if (HALMAC_VERSION(1, 3, 0) <= HALMAC_CURRENT_VERSION)
  640. case HALMAC_API_GET_FW_VERSION:
  641. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  642. state = halmac_obj->halmac_api_entry->halmac_get_fw_version(halmac_obj->halmac_adapter, (PHALMAC_FW_VERSION)arg_list[0].ptr);
  643. break;
  644. case HALMAC_API_GET_EFUSE_AVAL_SIZE:
  645. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  646. state = halmac_obj->halmac_api_entry->halmac_get_efuse_available_size(halmac_obj->halmac_adapter, (u32 *)arg_list[0].ptr);
  647. break;
  648. case HALMAC_API_FILL_TXDESC_CHECKSUM:
  649. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  650. state = halmac_obj->halmac_api_entry->halmac_fill_txdesc_checksum(halmac_obj->halmac_adapter, (u8 *)arg_list[0].ptr);
  651. break;
  652. case HALMAC_API_GET_FIFO_SIZE:
  653. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0)) {
  654. *((u32 *)arg_list[0].ptr) = halmac_obj->halmac_api_entry->halmac_get_fifo_size(halmac_obj->halmac_adapter, *((HAL_FIFO_SEL *)arg_list[0].ptr));
  655. state = HALMAC_RET_SUCCESS;
  656. }
  657. break;
  658. case HALMAC_API_DUMP_FIFO:
  659. if (halmac_obj->version >= HALMAC_VERSION(1, 3, 0))
  660. state = halmac_obj->halmac_api_entry->halmac_dump_fifo(halmac_obj->halmac_adapter, *((HAL_FIFO_SEL *)arg_list[0].ptr), *((u32 *)arg_list[1].ptr), arg_list[2].length, (u8 *)arg_list[2].ptr);
  661. break;
  662. #endif
  663. default:
  664. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_WARN, "halmac_get_information, HALMAC ver = %x, api_id = %x,HALMAC_RET_NOT_SUPPORT !!\n", halmac_obj->version, api_id, state);
  665. state = HALMAC_RET_NOT_SUPPORT;
  666. break;
  667. }
  668. if (state != HALMAC_RET_SUCCESS)
  669. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_WARN, "halmac_get_information, HALMAC ver = %x, api_id = %x, state = %x!!\n", halmac_obj->version, api_id, state);
  670. else
  671. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "[TRACE] halmac_getinformation, api_id = %x, state = %x!!\n", api_id, state);
  672. return state;
  673. }