halmac_api_88xx_usb.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. #include "halmac_88xx_cfg.h"
  2. /**
  3. * halmac_init_usb_cfg_88xx() - init USB
  4. * @pHalmac_adapter : the adapter of halmac
  5. * Author : KaiYuan Chang/Ivan Lin
  6. * Return : HALMAC_RET_STATUS
  7. * More details of status code can be found in prototype document
  8. */
  9. HALMAC_RET_STATUS
  10. halmac_init_usb_cfg_88xx(
  11. IN PHALMAC_ADAPTER pHalmac_adapter
  12. )
  13. {
  14. VOID *pDriver_adapter = NULL;
  15. u8 value8 = 0;
  16. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  17. return HALMAC_RET_ADAPTER_INVALID;
  18. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  19. return HALMAC_RET_API_INVALID;
  20. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_INIT_USB_CFG);
  21. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  22. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_init_usb_cfg_88xx ==========>\n");
  23. value8 |= (BIT_DMA_MODE | (0x3 << BIT_SHIFT_BURST_CNT)); /* burst number = 4 */
  24. if (PLATFORM_REG_READ_8(pDriver_adapter, REG_SYS_CFG2 + 3) == 0x20) { /* usb3.0 */
  25. value8 |= (HALMAC_USB_BURST_SIZE_3_0 << BIT_SHIFT_BURST_SIZE);
  26. } else {
  27. if ((PLATFORM_REG_READ_8(pDriver_adapter, REG_USB_USBSTAT) & 0x3) == 0x1) /* usb2.0 */
  28. value8 |= HALMAC_USB_BURST_SIZE_2_0_HSPEED << BIT_SHIFT_BURST_SIZE;
  29. else /* usb1.1 */
  30. value8 |= HALMAC_USB_BURST_SIZE_2_0_FSPEED << BIT_SHIFT_BURST_SIZE;
  31. }
  32. PLATFORM_REG_WRITE_8(pDriver_adapter, REG_RXDMA_MODE, value8);
  33. PLATFORM_REG_WRITE_16(pDriver_adapter, REG_TXDMA_OFFSET_CHK, PLATFORM_REG_READ_16(pDriver_adapter, REG_TXDMA_OFFSET_CHK) | BIT_DROP_DATA_EN);
  34. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_init_usb_cfg_88xx <==========\n");
  35. return HALMAC_RET_SUCCESS;
  36. }
  37. /**
  38. * halmac_deinit_usb_cfg_88xx() - deinit USB
  39. * @pHalmac_adapter : the adapter of halmac
  40. * Author : KaiYuan Chang/Ivan Lin
  41. * Return : HALMAC_RET_STATUS
  42. * More details of status code can be found in prototype document
  43. */
  44. HALMAC_RET_STATUS
  45. halmac_deinit_usb_cfg_88xx(
  46. IN PHALMAC_ADAPTER pHalmac_adapter
  47. )
  48. {
  49. VOID *pDriver_adapter = NULL;
  50. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  51. return HALMAC_RET_ADAPTER_INVALID;
  52. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  53. return HALMAC_RET_API_INVALID;
  54. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_DEINIT_USB_CFG);
  55. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  56. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_deinit_usb_cfg_88xx ==========>\n");
  57. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_deinit_usb_cfg_88xx <==========\n");
  58. return HALMAC_RET_SUCCESS;
  59. }
  60. /**
  61. * halmac_cfg_rx_aggregation_88xx_usb() - config rx aggregation
  62. * @pHalmac_adapter : the adapter of halmac
  63. * @halmac_rx_agg_mode
  64. * Author : KaiYuan Chang/Ivan Lin
  65. * Return : HALMAC_RET_STATUS
  66. * More details of status code can be found in prototype document
  67. */
  68. HALMAC_RET_STATUS
  69. halmac_cfg_rx_aggregation_88xx_usb(
  70. IN PHALMAC_ADAPTER pHalmac_adapter,
  71. IN PHALMAC_RXAGG_CFG phalmac_rxagg_cfg
  72. )
  73. {
  74. u8 dma_usb_agg;
  75. u8 size = 0, timeout = 0, agg_enable = 0;
  76. VOID *pDriver_adapter = NULL;
  77. PHALMAC_API pHalmac_api;
  78. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  79. return HALMAC_RET_ADAPTER_INVALID;
  80. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  81. return HALMAC_RET_API_INVALID;
  82. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_CFG_RX_AGGREGATION);
  83. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  84. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  85. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_cfg_rx_aggregation_88xx_usb ==========>\n");
  86. dma_usb_agg = HALMAC_REG_READ_8(pHalmac_adapter, REG_RXDMA_AGG_PG_TH + 3);
  87. agg_enable = HALMAC_REG_READ_8(pHalmac_adapter, REG_TXDMA_PQ_MAP);
  88. switch (phalmac_rxagg_cfg->mode) {
  89. case HALMAC_RX_AGG_MODE_NONE:
  90. agg_enable &= ~BIT_RXDMA_AGG_EN;
  91. break;
  92. case HALMAC_RX_AGG_MODE_DMA:
  93. agg_enable |= BIT_RXDMA_AGG_EN;
  94. dma_usb_agg |= BIT(7);
  95. break;
  96. case HALMAC_RX_AGG_MODE_USB:
  97. agg_enable |= BIT_RXDMA_AGG_EN;
  98. dma_usb_agg &= ~BIT(7);
  99. break;
  100. default:
  101. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "halmac_cfg_rx_aggregation_88xx_usb switch case not support\n");
  102. agg_enable &= ~BIT_RXDMA_AGG_EN;
  103. break;
  104. }
  105. if (_FALSE == phalmac_rxagg_cfg->threshold.drv_define) {
  106. if (PLATFORM_REG_READ_8(pDriver_adapter, REG_SYS_CFG2 + 3) == 0x20) {
  107. /* usb3.0 */
  108. size = 0x5;
  109. timeout = 0xA;
  110. } else {
  111. /* usb2.0 */
  112. size = 0x5;
  113. timeout = 0x20;
  114. }
  115. } else {
  116. size = phalmac_rxagg_cfg->threshold.size;
  117. timeout = phalmac_rxagg_cfg->threshold.timeout;
  118. }
  119. HALMAC_REG_WRITE_8(pHalmac_adapter, REG_TXDMA_PQ_MAP, agg_enable);
  120. HALMAC_REG_WRITE_8(pHalmac_adapter, REG_RXDMA_AGG_PG_TH + 3, dma_usb_agg);
  121. HALMAC_REG_WRITE_16(pHalmac_adapter, REG_RXDMA_AGG_PG_TH, (u16)(size | (timeout << BIT_SHIFT_DMA_AGG_TO_V1)));
  122. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_cfg_rx_aggregation_88xx_usb <==========\n");
  123. return HALMAC_RET_SUCCESS;
  124. }
  125. /**
  126. * halmac_reg_read_8_usb_88xx() - read 1byte register
  127. * @pHalmac_adapter : the adapter of halmac
  128. * @halmac_offset : register offset
  129. * Author : KaiYuan Chang/Ivan Lin
  130. * Return : HALMAC_RET_STATUS
  131. * More details of status code can be found in prototype document
  132. */
  133. u8
  134. halmac_reg_read_8_usb_88xx(
  135. IN PHALMAC_ADAPTER pHalmac_adapter,
  136. IN u32 halmac_offset
  137. )
  138. {
  139. u8 value8;
  140. VOID *pDriver_adapter = NULL;
  141. PHALMAC_API pHalmac_api;
  142. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  143. return HALMAC_RET_ADAPTER_INVALID;
  144. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  145. return HALMAC_RET_API_INVALID;
  146. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  147. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  148. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_read_8_usb_88xx ==========>\n"); */
  149. value8 = PLATFORM_REG_READ_8(pDriver_adapter, halmac_offset);
  150. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_read_8_usb_88xx <==========\n"); */
  151. return value8;
  152. }
  153. /**
  154. * halmac_reg_write_8_usb_88xx() - write 1byte register
  155. * @pHalmac_adapter : the adapter of halmac
  156. * @halmac_offset : register offset
  157. * @halmac_data : register value
  158. * Author : KaiYuan Chang/Ivan Lin
  159. * Return : HALMAC_RET_STATUS
  160. * More details of status code can be found in prototype document
  161. */
  162. HALMAC_RET_STATUS
  163. halmac_reg_write_8_usb_88xx(
  164. IN PHALMAC_ADAPTER pHalmac_adapter,
  165. IN u32 halmac_offset,
  166. IN u8 halmac_data
  167. )
  168. {
  169. VOID *pDriver_adapter = NULL;
  170. PHALMAC_API pHalmac_api;
  171. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  172. return HALMAC_RET_ADAPTER_INVALID;
  173. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  174. return HALMAC_RET_API_INVALID;
  175. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  176. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  177. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_write_8_usb_88xx ==========>\n"); */
  178. PLATFORM_REG_WRITE_8(pDriver_adapter, halmac_offset, halmac_data);
  179. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_write_8_usb_88xx <==========\n"); */
  180. return HALMAC_RET_SUCCESS;
  181. }
  182. /**
  183. * halmac_reg_read_16_usb_88xx() - read 2byte register
  184. * @pHalmac_adapter : the adapter of halmac
  185. * @halmac_offset : register offset
  186. * Author : KaiYuan Chang/Ivan Lin
  187. * Return : HALMAC_RET_STATUS
  188. * More details of status code can be found in prototype document
  189. */
  190. u16
  191. halmac_reg_read_16_usb_88xx(
  192. IN PHALMAC_ADAPTER pHalmac_adapter,
  193. IN u32 halmac_offset
  194. )
  195. {
  196. VOID *pDriver_adapter = NULL;
  197. PHALMAC_API pHalmac_api;
  198. union {
  199. u16 word;
  200. u8 byte[2];
  201. } value16 = { 0x0000 };
  202. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  203. return HALMAC_RET_ADAPTER_INVALID;
  204. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  205. return HALMAC_RET_API_INVALID;
  206. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  207. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  208. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_read_16_usb_88xx ==========>\n"); */
  209. value16.word = PLATFORM_REG_READ_16(pDriver_adapter, halmac_offset);
  210. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_read_16_usb_88xx <==========\n"); */
  211. return value16.word;
  212. }
  213. /**
  214. * halmac_reg_write_16_usb_88xx() - write 2byte register
  215. * @pHalmac_adapter : the adapter of halmac
  216. * @halmac_offset : register offset
  217. * @halmac_data : register value
  218. * Author : KaiYuan Chang/Ivan Lin
  219. * Return : HALMAC_RET_STATUS
  220. * More details of status code can be found in prototype document
  221. */
  222. HALMAC_RET_STATUS
  223. halmac_reg_write_16_usb_88xx(
  224. IN PHALMAC_ADAPTER pHalmac_adapter,
  225. IN u32 halmac_offset,
  226. IN u16 halmac_data
  227. )
  228. {
  229. VOID *pDriver_adapter = NULL;
  230. PHALMAC_API pHalmac_api;
  231. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  232. return HALMAC_RET_ADAPTER_INVALID;
  233. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  234. return HALMAC_RET_API_INVALID;
  235. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  236. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  237. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_write_16_usb_88xx ==========>\n"); */
  238. PLATFORM_REG_WRITE_16(pDriver_adapter, halmac_offset, halmac_data);
  239. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_write_16_usb_88xx <==========\n"); */
  240. return HALMAC_RET_SUCCESS;
  241. }
  242. /**
  243. * halmac_reg_read_32_usb_88xx() - read 4byte register
  244. * @pHalmac_adapter : the adapter of halmac
  245. * @halmac_offset : register offset
  246. * Author : KaiYuan Chang/Ivan Lin
  247. * Return : HALMAC_RET_STATUS
  248. * More details of status code can be found in prototype document
  249. */
  250. u32
  251. halmac_reg_read_32_usb_88xx(
  252. IN PHALMAC_ADAPTER pHalmac_adapter,
  253. IN u32 halmac_offset
  254. )
  255. {
  256. VOID *pDriver_adapter = NULL;
  257. PHALMAC_API pHalmac_api;
  258. union {
  259. u32 dword;
  260. u8 byte[4];
  261. } value32 = { 0x00000000 };
  262. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  263. return HALMAC_RET_ADAPTER_INVALID;
  264. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  265. return HALMAC_RET_API_INVALID;
  266. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  267. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  268. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_read_32_usb_88xx ==========>\n"); */
  269. value32.dword = PLATFORM_REG_READ_32(pDriver_adapter, halmac_offset);
  270. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_read_32_usb_88xx <==========\n"); */
  271. return value32.dword;
  272. }
  273. /**
  274. * halmac_reg_write_32_usb_88xx() - write 4byte register
  275. * @pHalmac_adapter : the adapter of halmac
  276. * @halmac_offset : register offset
  277. * @halmac_data : register value
  278. * Author : KaiYuan Chang/Ivan Lin
  279. * Return : HALMAC_RET_STATUS
  280. * More details of status code can be found in prototype document
  281. */
  282. HALMAC_RET_STATUS
  283. halmac_reg_write_32_usb_88xx(
  284. IN PHALMAC_ADAPTER pHalmac_adapter,
  285. IN u32 halmac_offset,
  286. IN u32 halmac_data
  287. )
  288. {
  289. VOID *pDriver_adapter = NULL;
  290. PHALMAC_API pHalmac_api;
  291. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  292. return HALMAC_RET_ADAPTER_INVALID;
  293. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  294. return HALMAC_RET_API_INVALID;
  295. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  296. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  297. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_write_32_usb_88xx ==========>\n"); */
  298. PLATFORM_REG_WRITE_32(pDriver_adapter, halmac_offset, halmac_data);
  299. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_reg_write_32_usb_88xx <==========\n"); */
  300. return HALMAC_RET_SUCCESS;
  301. }
  302. /**
  303. * halmac_set_bulkout_num_usb_88xx() - inform bulk-out num
  304. * @pHalmac_adapter : the adapter of halmac
  305. * @bulkout_num : usb bulk-out number
  306. * Author : KaiYuan Chang
  307. * Return : HALMAC_RET_STATUS
  308. * More details of status code can be found in prototype document
  309. */
  310. HALMAC_RET_STATUS
  311. halmac_set_bulkout_num_88xx(
  312. IN PHALMAC_ADAPTER pHalmac_adapter,
  313. IN u8 bulkout_num
  314. )
  315. {
  316. VOID *pDriver_adapter = NULL;
  317. PHALMAC_API pHalmac_api;
  318. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  319. return HALMAC_RET_ADAPTER_INVALID;
  320. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  321. return HALMAC_RET_API_INVALID;
  322. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_SET_BULKOUT_NUM);
  323. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  324. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  325. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE,"halmac_set_bulkout_num_88xx ==========>\n"); */
  326. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE,"bulkout_num = %d\n", bulkout_num); */
  327. pHalmac_adapter->halmac_bulkout_num = bulkout_num;
  328. /* PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE,"halmac_set_bulkout_num_88xx <==========\n"); */
  329. return HALMAC_RET_SUCCESS;
  330. }
  331. /**
  332. * halmac_get_usb_bulkout_id_usb_88xx() - get bulk out id for the TX packet
  333. * @pHalmac_adapter : the adapter of halmac
  334. * @halmac_buf : tx packet, include txdesc
  335. * @halmac_size : tx packet size
  336. * @bulkout_id : usb bulk-out id
  337. * Author : KaiYuan Chang
  338. * Return : HALMAC_RET_STATUS
  339. * More details of status code can be found in prototype document
  340. */
  341. HALMAC_RET_STATUS
  342. halmac_get_usb_bulkout_id_88xx(
  343. IN PHALMAC_ADAPTER pHalmac_adapter,
  344. IN u8 *halmac_buf,
  345. IN u32 halmac_size,
  346. OUT u8 *bulkout_id
  347. )
  348. {
  349. VOID *pDriver_adapter = NULL;
  350. PHALMAC_API pHalmac_api;
  351. HALMAC_QUEUE_SELECT queue_sel;
  352. HALMAC_DMA_MAPPING dma_mapping;
  353. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  354. return HALMAC_RET_ADAPTER_INVALID;
  355. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  356. return HALMAC_RET_API_INVALID;
  357. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_GET_USB_BULKOUT_ID);
  358. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  359. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  360. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_get_usb_bulkout_id_88xx ==========>\n");
  361. if (NULL == halmac_buf) {
  362. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "halmac_buf is NULL!!\n");
  363. return HALMAC_RET_DATA_BUF_NULL;
  364. }
  365. if (0 == halmac_size) {
  366. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "halmac_size is 0!!\n");
  367. return HALMAC_RET_DATA_SIZE_INCORRECT;
  368. }
  369. queue_sel = (HALMAC_QUEUE_SELECT)GET_TX_DESC_QSEL(halmac_buf);
  370. switch (queue_sel) {
  371. case HALMAC_QUEUE_SELECT_VO:
  372. case HALMAC_QUEUE_SELECT_VO_V2:
  373. dma_mapping = pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_VO];
  374. break;
  375. case HALMAC_QUEUE_SELECT_VI:
  376. case HALMAC_QUEUE_SELECT_VI_V2:
  377. dma_mapping = pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_VI];
  378. break;
  379. case HALMAC_QUEUE_SELECT_BE:
  380. case HALMAC_QUEUE_SELECT_BE_V2:
  381. dma_mapping = pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_BE];
  382. break;
  383. case HALMAC_QUEUE_SELECT_BK:
  384. case HALMAC_QUEUE_SELECT_BK_V2:
  385. dma_mapping = pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_BK];
  386. break;
  387. case HALMAC_QUEUE_SELECT_MGNT:
  388. dma_mapping = pHalmac_adapter->halmac_ptcl_queue[HALMAC_PTCL_QUEUE_MG];
  389. break;
  390. case HALMAC_QUEUE_SELECT_HIGH:
  391. case HALMAC_QUEUE_SELECT_BCN:
  392. case HALMAC_QUEUE_SELECT_CMD:
  393. dma_mapping = HALMAC_DMA_MAPPING_HIGH;
  394. break;
  395. default:
  396. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "Qsel is out of range\n");
  397. return HALMAC_RET_QSEL_INCORRECT;
  398. }
  399. switch (dma_mapping) {
  400. case HALMAC_DMA_MAPPING_HIGH:
  401. *bulkout_id = 0;
  402. break;
  403. case HALMAC_DMA_MAPPING_NORMAL:
  404. *bulkout_id = 1;
  405. break;
  406. case HALMAC_DMA_MAPPING_LOW:
  407. *bulkout_id = 2;
  408. break;
  409. case HALMAC_DMA_MAPPING_EXTRA:
  410. *bulkout_id = 3;
  411. break;
  412. default:
  413. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_ERR, "DmaMapping is out of range\n");
  414. return HALMAC_RET_DMA_MAP_INCORRECT;
  415. }
  416. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_get_usb_bulkout_id_88xx <==========\n");
  417. return HALMAC_RET_SUCCESS;
  418. }
  419. /**
  420. * halmac_cfg_tx_agg_align_usb_88xx() -config sdio bus tx agg alignment
  421. * @pHalmac_adapter : the adapter of halmac
  422. * @enable : function enable(1)/disable(0)
  423. * @align_size : sdio bus tx agg alignment size (2^n, n = 3~11)
  424. * Author : Soar Tu
  425. * Return : HALMAC_RET_STATUS
  426. * More details of status code can be found in prototype document
  427. */
  428. HALMAC_RET_STATUS
  429. halmac_cfg_tx_agg_align_usb_not_support_88xx(
  430. IN PHALMAC_ADAPTER pHalmac_adapter,
  431. IN u8 enable,
  432. IN u16 align_size
  433. )
  434. {
  435. PHALMAC_API pHalmac_api;
  436. VOID *pDriver_adapter = NULL;
  437. if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
  438. return HALMAC_RET_ADAPTER_INVALID;
  439. if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
  440. return HALMAC_RET_API_INVALID;
  441. halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_CFG_TX_AGG_ALIGN);
  442. pDriver_adapter = pHalmac_adapter->pDriver_adapter;
  443. pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
  444. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_cfg_tx_agg_align_usb_not_support_88xx ==========>\n");
  445. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_cfg_tx_agg_align_usb_not_support_88xx not support\n");
  446. PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_INIT, HALMAC_DBG_TRACE, "halmac_cfg_tx_agg_align_usb_not_support_88xx <==========\n");
  447. return HALMAC_RET_SUCCESS;
  448. }