halmac_type.h 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. ******************************************************************************/
  15. #ifndef _HALMAC_TYPE_H_
  16. #define _HALMAC_TYPE_H_
  17. #include "halmac_2_platform.h"
  18. #include "halmac_hw_cfg.h"
  19. #include "halmac_fw_info.h"
  20. #include "halmac_intf_phy_cmd.h"
  21. #include "halmac_state_machine.h"
  22. #define IN
  23. #define OUT
  24. #define INOUT
  25. #define HALMAC_BCN_IE_BMP_SIZE 24 /* ID0~ID191, 192/8=24 */
  26. #ifndef HALMAC_RX_FIFO_EXPANDING_MODE_PKT_SIZE
  27. #define HALMAC_RX_FIFO_EXPANDING_MODE_PKT_SIZE 80
  28. #endif
  29. #ifndef HALMAC_MSG_LEVEL_TRACE
  30. #define HALMAC_MSG_LEVEL_TRACE 3
  31. #endif
  32. #ifndef HALMAC_MSG_LEVEL_WARNING
  33. #define HALMAC_MSG_LEVEL_WARNING 2
  34. #endif
  35. #ifndef HALMAC_MSG_LEVEL_ERR
  36. #define HALMAC_MSG_LEVEL_ERR 1
  37. #endif
  38. #ifndef HALMAC_MSG_LEVEL_NO_LOG
  39. #define HALMAC_MSG_LEVEL_NO_LOG 0
  40. #endif
  41. #ifndef HALMAC_SDIO_SUPPORT
  42. #define HALMAC_SDIO_SUPPORT 1
  43. #endif
  44. #ifndef HALMAC_USB_SUPPORT
  45. #define HALMAC_USB_SUPPORT 1
  46. #endif
  47. #ifndef HALMAC_PCIE_SUPPORT
  48. #define HALMAC_PCIE_SUPPORT 1
  49. #endif
  50. #ifndef HALMAC_MSG_LEVEL
  51. #define HALMAC_MSG_LEVEL HALMAC_MSG_LEVEL_TRACE
  52. #endif
  53. /* platform api */
  54. #define PLTFM_SDIO_CMD52_R(offset) \
  55. adapter->pltfm_api->SDIO_CMD52_READ(adapter->drv_adapter, offset)
  56. #define PLTFM_SDIO_CMD53_R8(offset) \
  57. adapter->pltfm_api->SDIO_CMD53_READ_8(adapter->drv_adapter, offset)
  58. #define PLTFM_SDIO_CMD53_R16(offset) \
  59. adapter->pltfm_api->SDIO_CMD53_READ_16(adapter->drv_adapter, offset)
  60. #define PLTFM_SDIO_CMD53_R32(offset) \
  61. adapter->pltfm_api->SDIO_CMD53_READ_32(adapter->drv_adapter, offset)
  62. #define PLTFM_SDIO_CMD53_RN(offset, size, data) \
  63. adapter->pltfm_api->SDIO_CMD53_READ_N(adapter->drv_adapter, offset, \
  64. size, data)
  65. #define PLTFM_SDIO_CMD52_W(offset, val) \
  66. adapter->pltfm_api->SDIO_CMD52_WRITE(adapter->drv_adapter, offset, val)
  67. #define PLTFM_SDIO_CMD53_W8(offset, val) \
  68. adapter->pltfm_api->SDIO_CMD53_WRITE_8(adapter->drv_adapter, offset, \
  69. val)
  70. #define PLTFM_SDIO_CMD53_W16(offset, val) \
  71. adapter->pltfm_api->SDIO_CMD53_WRITE_16(adapter->drv_adapter, offset, \
  72. val)
  73. #define PLTFM_SDIO_CMD53_W32(offset, val) \
  74. adapter->pltfm_api->SDIO_CMD53_WRITE_32(adapter->drv_adapter, offset, \
  75. val)
  76. #define PLTFM_SDIO_CMD52_CIA_R(offset) \
  77. adapter->pltfm_api->SDIO_CMD52_CIA_READ(adapter->drv_adapter, offset)
  78. #define PLTFM_REG_R8(offset) \
  79. adapter->pltfm_api->REG_READ_8(adapter->drv_adapter, offset)
  80. #define PLTFM_REG_R16(offset) \
  81. adapter->pltfm_api->REG_READ_16(adapter->drv_adapter, offset)
  82. #define PLTFM_REG_R32(offset) \
  83. adapter->pltfm_api->REG_READ_32(adapter->drv_adapter, offset)
  84. #define PLTFM_REG_W8(offset, val) \
  85. adapter->pltfm_api->REG_WRITE_8(adapter->drv_adapter, offset, val)
  86. #define PLTFM_REG_W16(offset, val) \
  87. adapter->pltfm_api->REG_WRITE_16(adapter->drv_adapter, offset, val)
  88. #define PLTFM_REG_W32(offset, val) \
  89. adapter->pltfm_api->REG_WRITE_32(adapter->drv_adapter, offset, val)
  90. #define PLTFM_SEND_RSVD_PAGE(buf, size) \
  91. adapter->pltfm_api->SEND_RSVD_PAGE(adapter->drv_adapter, buf, size)
  92. #define PLTFM_SEND_H2C_PKT(buf, size) \
  93. adapter->pltfm_api->SEND_H2C_PKT(adapter->drv_adapter, buf, size)
  94. #define PLTFM_FREE(buf, size) \
  95. adapter->pltfm_api->RTL_FREE(adapter->drv_adapter, buf, size)
  96. #define PLTFM_MALLOC(size) \
  97. adapter->pltfm_api->RTL_MALLOC(adapter->drv_adapter, size)
  98. #define PLTFM_MEMCPY(dest, src, size) \
  99. adapter->pltfm_api->RTL_MEMCPY(adapter->drv_adapter, dest, src, size)
  100. #define PLTFM_MEMSET(addr, value, size) \
  101. adapter->pltfm_api->RTL_MEMSET(adapter->drv_adapter, addr, value, size)
  102. #define PLTFM_DELAY_US(us) \
  103. adapter->pltfm_api->RTL_DELAY_US(adapter->drv_adapter, us)
  104. #define PLTFM_MUTEX_INIT(mutex) \
  105. adapter->pltfm_api->MUTEX_INIT(adapter->drv_adapter, mutex)
  106. #define PLTFM_MUTEX_DEINIT(mutex) \
  107. adapter->pltfm_api->MUTEX_DEINIT(adapter->drv_adapter, mutex)
  108. #define PLTFM_MUTEX_LOCK(mutex) \
  109. adapter->pltfm_api->MUTEX_LOCK(adapter->drv_adapter, mutex)
  110. #define PLTFM_MUTEX_UNLOCK(mutex) \
  111. adapter->pltfm_api->MUTEX_UNLOCK(adapter->drv_adapter, mutex)
  112. #define PLTFM_EVENT_SIG(feature_id, proc_status, buf, size) \
  113. adapter->pltfm_api->EVENT_INDICATION(adapter->drv_adapter, feature_id, \
  114. proc_status, buf, size)
  115. #if HALMAC_PLATFORM_WINDOWS
  116. #define PLTFM_MSG_PRINT adapter->pltfm_api->MSG_PRINT
  117. #endif
  118. #define PLTFM_MSG_ALWAYS(...) \
  119. adapter->pltfm_api->MSG_PRINT(adapter->drv_adapter, HALMAC_MSG_INIT, \
  120. HALMAC_DBG_ALWAYS, __VA_ARGS__)
  121. #if HALMAC_DBG_MSG_ENABLE
  122. /* Enable debug msg depends on HALMAC_MSG_LEVEL */
  123. #if (HALMAC_MSG_LEVEL >= HALMAC_MSG_LEVEL_ERR)
  124. #define PLTFM_MSG_ERR(...) \
  125. adapter->pltfm_api->MSG_PRINT(adapter->drv_adapter, HALMAC_MSG_INIT, \
  126. HALMAC_DBG_ERR, __VA_ARGS__)
  127. #else
  128. #define PLTFM_MSG_ERR(...) do {} while (0)
  129. #endif
  130. #if (HALMAC_MSG_LEVEL >= HALMAC_MSG_LEVEL_WARNING)
  131. #define PLTFM_MSG_WARN(...) \
  132. adapter->pltfm_api->MSG_PRINT(adapter->drv_adapter, HALMAC_MSG_INIT, \
  133. HALMAC_DBG_WARN, __VA_ARGS__)
  134. #else
  135. #define PLTFM_MSG_WARN(...) do {} while (0)
  136. #endif
  137. #if (HALMAC_MSG_LEVEL >= HALMAC_MSG_LEVEL_TRACE)
  138. #define PLTFM_MSG_TRACE(...) \
  139. adapter->pltfm_api->MSG_PRINT(adapter->drv_adapter, HALMAC_MSG_INIT, \
  140. HALMAC_DBG_TRACE, __VA_ARGS__)
  141. #else
  142. #define PLTFM_MSG_TRACE(...) do {} while (0)
  143. #endif
  144. #else
  145. /* Disable debug msg */
  146. #define PLTFM_MSG_ERR(...) do {} while (0)
  147. #define PLTFM_MSG_WARN(...) do {} while (0)
  148. #define PLTFM_MSG_TRACE(...) do {} while (0)
  149. #endif
  150. #define HALMAC_REG_R8(offset) api->halmac_reg_read_8(adapter, offset)
  151. #define HALMAC_REG_R16(offset) api->halmac_reg_read_16(adapter, offset)
  152. #define HALMAC_REG_R32(offset) api->halmac_reg_read_32(adapter, offset)
  153. #define HALMAC_REG_W8(offset, val) api->halmac_reg_write_8(adapter, offset, val)
  154. #define HALMAC_REG_W16(offset, val) \
  155. api->halmac_reg_write_16(adapter, offset, val)
  156. #define HALMAC_REG_W32(offset, val) \
  157. api->halmac_reg_write_32(adapter, offset, val)
  158. #define HALMAC_REG_SDIO_RN(offset, size, data) \
  159. api->halmac_reg_sdio_cmd53_read_n(adapter, offset, size, data)
  160. #define HALMAC_REG_W8_CLR(offset, mask) \
  161. do { \
  162. u32 __offset = (u32)offset; \
  163. HALMAC_REG_W8(__offset, HALMAC_REG_R8(__offset) & ~(mask)); \
  164. } while (0)
  165. #define HALMAC_REG_W16_CLR(offset, mask) \
  166. do { \
  167. u32 __offset = (u32)offset; \
  168. HALMAC_REG_W16(__offset, HALMAC_REG_R16(__offset) & ~(mask)); \
  169. } while (0)
  170. #define HALMAC_REG_W32_CLR(offset, mask) \
  171. do { \
  172. u32 __offset = (u32)offset; \
  173. HALMAC_REG_W32(__offset, HALMAC_REG_R32(__offset) & ~(mask)); \
  174. } while (0)
  175. #define HALMAC_REG_W8_SET(offset, mask) \
  176. do { \
  177. u32 __offset = (u32)offset; \
  178. HALMAC_REG_W8(__offset, HALMAC_REG_R8(__offset) | mask); \
  179. } while (0)
  180. #define HALMAC_REG_W16_SET(offset, mask) \
  181. do { \
  182. u32 __offset = (u32)offset; \
  183. HALMAC_REG_W16(__offset, HALMAC_REG_R16(__offset) | mask); \
  184. } while (0)
  185. #define HALMAC_REG_W32_SET(offset, mask) \
  186. do { \
  187. u32 __offset = (u32)offset; \
  188. HALMAC_REG_W32(__offset, HALMAC_REG_R32(__offset) | mask); \
  189. } while (0)
  190. /* Swap Little-endian <-> Big-endia*/
  191. #define SWAP32(x) \
  192. ((u32)((((u32)(x) & (u32)0x000000ff) << 24) | \
  193. (((u32)(x) & (u32)0x0000ff00) << 8) | \
  194. (((u32)(x) & (u32)0x00ff0000) >> 8) | \
  195. (((u32)(x) & (u32)0xff000000) >> 24)))
  196. #define SWAP16(x) \
  197. ((u16)((((u16)(x) & (u16)0x00ff) << 8) | \
  198. (((u16)(x) & (u16)0xff00) >> 8)))
  199. /*1->Little endian 0->Big endian*/
  200. #if HALMAC_SYSTEM_ENDIAN
  201. #ifndef rtk_le16_to_cpu
  202. #define rtk_cpu_to_le32(x) ((u32)(x))
  203. #define rtk_le32_to_cpu(x) ((u32)(x))
  204. #define rtk_cpu_to_le16(x) ((u16)(x))
  205. #define rtk_le16_to_cpu(x) ((u16)(x))
  206. #define rtk_cpu_to_be32(x) SWAP32((x))
  207. #define rtk_be32_to_cpu(x) SWAP32((x))
  208. #define rtk_cpu_to_be16(x) SWAP16((x))
  209. #define rtk_be16_to_cpu(x) SWAP16((x))
  210. #endif
  211. #else
  212. #ifndef rtk_le16_to_cpu
  213. #define rtk_cpu_to_le32(x) SWAP32((x))
  214. #define rtk_le32_to_cpu(x) SWAP32((x))
  215. #define rtk_cpu_to_le16(x) SWAP16((x))
  216. #define rtk_le16_to_cpu(x) SWAP16((x))
  217. #define rtk_cpu_to_be32(x) ((u32)(x))
  218. #define rtk_be32_to_cpu(x) ((u32)(x))
  219. #define rtk_cpu_to_be16(x) ((u16)(x))
  220. #define rtk_be16_to_cpu(x) ((u16)(x))
  221. #endif
  222. #endif
  223. #define HALMAC_ALIGN(x, a) HALMAC_ALIGN_MASK(x, (a) - 1)
  224. #define HALMAC_ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
  225. /* #if !HALMAC_PLATFORM_WINDOWS */
  226. #if !((HALMAC_PLATFORM_WINDOWS == 1) && (HALMAC_PLATFORM_TESTPROGRAM == 0))
  227. /* Byte Swapping routine */
  228. #ifndef EF1BYTE
  229. #define EF1BYTE (u8)
  230. #endif
  231. #ifndef EF2BYTE
  232. #define EF2BYTE rtk_le16_to_cpu
  233. #endif
  234. #ifndef EF4BYTE
  235. #define EF4BYTE rtk_le32_to_cpu
  236. #endif
  237. /* Example:
  238. * BIT_LEN_MASK_32(0) => 0x00000000
  239. * BIT_LEN_MASK_32(1) => 0x00000001
  240. * BIT_LEN_MASK_32(2) => 0x00000003
  241. * BIT_LEN_MASK_32(32) => 0xFFFFFFFF
  242. */
  243. #ifndef BIT_LEN_MASK_32
  244. #define BIT_LEN_MASK_32(__bitlen) (0xFFFFFFFF >> (32 - (__bitlen)))
  245. #endif
  246. /* Example:
  247. * BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
  248. * BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
  249. */
  250. #ifndef BIT_OFFSET_LEN_MASK_32
  251. #define BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen) \
  252. (BIT_LEN_MASK_32(__bitlen) << (__bitoffset))
  253. #endif
  254. /* Return 4-byte value in host byte ordering from
  255. * 4-byte pointer in litten-endian system
  256. */
  257. #ifndef LE_P4BYTE_TO_HOST_4BYTE
  258. #define LE_P4BYTE_TO_HOST_4BYTE(__start) (EF4BYTE(*((u32 *)(__start))))
  259. #endif
  260. /* Translate subfield (continuous bits in little-endian) of
  261. * 4-byte value in litten byte to 4-byte value in host byte ordering
  262. */
  263. #ifndef LE_BITS_TO_4BYTE
  264. #define LE_BITS_TO_4BYTE(__start, __bitoffset, __bitlen) \
  265. ((LE_P4BYTE_TO_HOST_4BYTE(__start) >> (__bitoffset)) & \
  266. BIT_LEN_MASK_32(__bitlen))
  267. #endif
  268. /* Mask subfield (continuous bits in little-endian) of 4-byte
  269. * value in litten byte oredering and return the result in 4-byte
  270. * value in host byte ordering
  271. */
  272. #ifndef LE_BITS_CLEARED_TO_4BYTE
  273. #define LE_BITS_CLEARED_TO_4BYTE(__start, __bitoffset, __bitlen) \
  274. (LE_P4BYTE_TO_HOST_4BYTE(__start) & \
  275. (~BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen)))
  276. #endif
  277. /* Set subfield of little-endian 4-byte value to specified value */
  278. #ifndef SET_BITS_TO_LE_4BYTE
  279. #define SET_BITS_TO_LE_4BYTE(__start, __bitoffset, __bitlen, __value) \
  280. do { \
  281. *((u32 *)(__start)) = \
  282. EF4BYTE( \
  283. LE_BITS_CLEARED_TO_4BYTE(__start, __bitoffset, __bitlen) | \
  284. ((((u32)__value) & BIT_LEN_MASK_32(__bitlen)) << (__bitoffset))\
  285. ); \
  286. } while (0)
  287. #endif
  288. #ifndef HALMAC_BIT_OFFSET_VAL_MASK_32
  289. #define HALMAC_BIT_OFFSET_VAL_MASK_32(__bitval, __bitoffset) \
  290. (__bitval << (__bitoffset))
  291. #endif
  292. #ifndef SET_MEM_OP
  293. #define SET_MEM_OP(dw, value32, mask, shift) \
  294. (((dw) & ~((mask) << (shift))) | (((value32) & (mask)) << (shift)))
  295. #endif
  296. #ifndef HALMAC_SET_DESC_FIELD_CLR
  297. #define HALMAC_SET_DESC_FIELD_CLR(dw, value32, mask, shift) \
  298. (dw = (rtk_cpu_to_le32( \
  299. SET_MEM_OP(rtk_cpu_to_le32(dw), value32, mask, shift))))
  300. #endif
  301. #ifndef HALMAC_SET_DESC_FIELD_NO_CLR
  302. #define HALMAC_SET_DESC_FIELD_NO_CLR(dw, value32, mask, shift) \
  303. (dw |= (rtk_cpu_to_le32(((value32) & (mask)) << (shift))))
  304. #endif
  305. #ifndef HALMAC_GET_DESC_FIELD
  306. #define HALMAC_GET_DESC_FIELD(dw, mask, shift) \
  307. ((rtk_le32_to_cpu(dw) >> (shift)) & (mask))
  308. #endif
  309. #define HALMAC_SET_BD_FIELD_CLR HALMAC_SET_DESC_FIELD_CLR
  310. #define HALMAC_SET_BD_FIELD_NO_CLR HALMAC_SET_DESC_FIELD_NO_CLR
  311. #define HALMAC_GET_BD_FIELD HALMAC_GET_DESC_FIELD
  312. #ifndef GET_H2C_FIELD
  313. #define GET_H2C_FIELD LE_BITS_TO_4BYTE
  314. #endif
  315. #ifndef SET_H2C_FIELD_CLR
  316. #define SET_H2C_FIELD_CLR SET_BITS_TO_LE_4BYTE
  317. #endif
  318. #ifndef SET_H2C_FIELD_NO_CLR
  319. #define SET_H2C_FIELD_NO_CLR SET_BITS_TO_LE_4BYTE
  320. #endif
  321. #ifndef GET_C2H_FIELD
  322. #define GET_C2H_FIELD LE_BITS_TO_4BYTE
  323. #endif
  324. #ifndef SET_C2H_FIELD_CLR
  325. #define SET_C2H_FIELD_CLR SET_BITS_TO_LE_4BYTE
  326. #endif
  327. #ifndef SET_C2H_FIELD_NO_CLR
  328. #define SET_C2H_FIELD_NO_CLR SET_BITS_TO_LE_4BYTE
  329. #endif
  330. #endif /* #if !HALMAC_PLATFORM_WINDOWS */
  331. #ifndef BIT
  332. #define BIT(x) (1 << (x))
  333. #endif
  334. #ifndef ARRAY_SIZE
  335. #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
  336. #endif
  337. /* HALMAC API return status*/
  338. enum halmac_ret_status {
  339. HALMAC_RET_SUCCESS = 0x00,
  340. HALMAC_RET_NOT_SUPPORT = 0x01,
  341. HALMAC_RET_SUCCESS_ENQUEUE = 0x01, /*Don't use this return code!!*/
  342. HALMAC_RET_PLATFORM_API_NULL = 0x02,
  343. HALMAC_RET_EFUSE_SIZE_INCORRECT = 0x03,
  344. HALMAC_RET_MALLOC_FAIL = 0x04,
  345. HALMAC_RET_ADAPTER_INVALID = 0x05,
  346. HALMAC_RET_ITF_INCORRECT = 0x06,
  347. HALMAC_RET_DLFW_FAIL = 0x07,
  348. HALMAC_RET_PORT_NOT_SUPPORT = 0x08,
  349. HALMAC_RET_TXAGG_OVERFLOW = 0x09,
  350. HALMAC_RET_INIT_LLT_FAIL = 0x0A,
  351. HALMAC_RET_POWER_STATE_INVALID = 0x0B,
  352. HALMAC_RET_H2C_ACK_NOT_RECEIVED = 0x0C,
  353. HALMAC_RET_DL_RSVD_PAGE_FAIL = 0x0D,
  354. HALMAC_RET_EFUSE_R_FAIL = 0x0E,
  355. HALMAC_RET_EFUSE_W_FAIL = 0x0F,
  356. HALMAC_RET_H2C_SW_RES_FAIL = 0x10,
  357. HALMAC_RET_SEND_H2C_FAIL = 0x11,
  358. HALMAC_RET_PARA_NOT_SUPPORT = 0x12,
  359. HALMAC_RET_PLATFORM_API_INCORRECT = 0x13,
  360. HALMAC_RET_ENDIAN_ERR = 0x14,
  361. HALMAC_RET_FW_SIZE_ERR = 0x15,
  362. HALMAC_RET_TRX_MODE_NOT_SUPPORT = 0x16,
  363. HALMAC_RET_FAIL = 0x17,
  364. HALMAC_RET_CHANGE_PS_FAIL = 0x18,
  365. HALMAC_RET_CFG_PARA_FAIL = 0x19,
  366. HALMAC_RET_UPDATE_PROBE_FAIL = 0x1A,
  367. HALMAC_RET_SCAN_FAIL = 0x1B,
  368. HALMAC_RET_STOP_SCAN_FAIL = 0x1C,
  369. HALMAC_RET_BCN_PARSER_CMD_FAIL = 0x1D,
  370. HALMAC_RET_POWER_ON_FAIL = 0x1E,
  371. HALMAC_RET_POWER_OFF_FAIL = 0x1F,
  372. HALMAC_RET_RX_AGG_MODE_FAIL = 0x20,
  373. HALMAC_RET_DATA_BUF_NULL = 0x21,
  374. HALMAC_RET_DATA_SIZE_INCORRECT = 0x22,
  375. HALMAC_RET_QSEL_INCORRECT = 0x23,
  376. HALMAC_RET_DMA_MAP_INCORRECT = 0x24,
  377. HALMAC_RET_SEND_ORIGINAL_H2C_FAIL = 0x25,
  378. HALMAC_RET_DDMA_FAIL = 0x26,
  379. HALMAC_RET_FW_CHECKSUM_FAIL = 0x27,
  380. HALMAC_RET_PWRSEQ_POLLING_FAIL = 0x28,
  381. HALMAC_RET_PWRSEQ_CMD_INCORRECT = 0x29,
  382. HALMAC_RET_WRITE_DATA_FAIL = 0x2A,
  383. HALMAC_RET_DUMP_FIFOSIZE_INCORRECT = 0x2B,
  384. HALMAC_RET_NULL_POINTER = 0x2C,
  385. HALMAC_RET_PROBE_NOT_FOUND = 0x2D,
  386. HALMAC_RET_FW_NO_MEMORY = 0x2E,
  387. HALMAC_RET_H2C_STATUS_ERR = 0x2F,
  388. HALMAC_RET_GET_H2C_SPACE_ERR = 0x30,
  389. HALMAC_RET_H2C_SPACE_FULL = 0x31,
  390. HALMAC_RET_DATAPACK_NO_FOUND = 0x32,
  391. HALMAC_RET_CANNOT_FIND_H2C_RESOURCE = 0x33,
  392. HALMAC_RET_TX_DMA_ERR = 0x34,
  393. HALMAC_RET_RX_DMA_ERR = 0x35,
  394. HALMAC_RET_CHIP_NOT_SUPPORT = 0x36,
  395. HALMAC_RET_FREE_SPACE_NOT_ENOUGH = 0x37,
  396. HALMAC_RET_CH_SW_SEQ_WRONG = 0x38,
  397. HALMAC_RET_CH_SW_NO_BUF = 0x39,
  398. HALMAC_RET_SW_CASE_NOT_SUPPORT = 0x3A,
  399. HALMAC_RET_CONVERT_SDIO_OFFSET_FAIL = 0x3B,
  400. HALMAC_RET_INVALID_SOUNDING_SETTING = 0x3C,
  401. HALMAC_RET_GEN_INFO_NOT_SENT = 0x3D,
  402. HALMAC_RET_STATE_INCORRECT = 0x3E,
  403. HALMAC_RET_H2C_BUSY = 0x3F,
  404. HALMAC_RET_INVALID_FEATURE_ID = 0x40,
  405. HALMAC_RET_BUFFER_TOO_SMALL = 0x41,
  406. HALMAC_RET_ZERO_LEN_RSVD_PACKET = 0x42,
  407. HALMAC_RET_BUSY_STATE = 0x43,
  408. HALMAC_RET_ERROR_STATE = 0x44,
  409. HALMAC_RET_API_INVALID = 0x45,
  410. HALMAC_RET_POLLING_BCN_VALID_FAIL = 0x46,
  411. HALMAC_RET_SDIO_LEAVE_SUSPEND_FAIL = 0x47,
  412. HALMAC_RET_EEPROM_PARSING_FAIL = 0x48,
  413. HALMAC_RET_EFUSE_NOT_ENOUGH = 0x49,
  414. HALMAC_RET_WRONG_ARGUMENT = 0x4A,
  415. HALMAC_RET_C2H_NOT_HANDLED = 0x4C,
  416. HALMAC_RET_PARA_SENDING = 0x4D,
  417. HALMAC_RET_CFG_DLFW_SIZE_FAIL = 0x4E,
  418. HALMAC_RET_CFG_TXFIFO_PAGE_FAIL = 0x4F,
  419. HALMAC_RET_SWITCH_CASE_ERROR = 0x50,
  420. HALMAC_RET_EFUSE_BANK_INCORRECT = 0x51,
  421. HALMAC_RET_SWITCH_EFUSE_BANK_FAIL = 0x52,
  422. HALMAC_RET_USB_MODE_UNCHANGE = 0x53,
  423. HALMAC_RET_NO_DLFW = 0x54,
  424. HALMAC_RET_USB2_3_SWITCH_UNSUPPORT = 0x55,
  425. HALMAC_RET_BIP_NO_SUPPORT = 0x56,
  426. HALMAC_RET_ENTRY_INDEX_ERROR = 0x57,
  427. HALMAC_RET_ENTRY_KEY_ID_ERROR = 0x58,
  428. HALMAC_RET_DRV_DL_ERR = 0x59,
  429. HALMAC_RET_OQT_NOT_ENOUGH = 0x5A,
  430. HALMAC_RET_PWR_UNCHANGE = 0x5B,
  431. HALMAC_RET_WRONG_INTF = 0x5C,
  432. HALMAC_RET_POLLING_HIOE_REQ_FAIL = 0x5E,
  433. HALMAC_RET_HIOE_CHKSUM_FAIL = 0x5F,
  434. HALMAC_RET_HIOE_ERR = 0x60,
  435. HALMAC_RET_FW_NO_SUPPORT = 0x60,
  436. HALMAC_RET_TXFIFO_NO_EMPTY = 0x61,
  437. HALMAC_RET_SDIO_CLOCK_ERR = 0x62,
  438. HALMAC_RET_GET_PINMUX_ERR = 0x63,
  439. HALMAC_RET_PINMUX_USED = 0x64,
  440. HALMAC_RET_WRONG_GPIO = 0x65,
  441. HALMAC_RET_LTECOEX_READY_FAIL = 0x66,
  442. HALMAC_RET_IDMEM_CHKSUM_FAIL = 0x67,
  443. HALMAC_RET_ILLEGAL_KEY_FAIL = 0x68,
  444. HALMAC_RET_FW_READY_CHK_FAIL = 0x69,
  445. HALMAC_RET_RSVD_PG_OVERFLOW_FAIL = 0x70,
  446. HALMAC_RET_THRESHOLD_FAIL = 0x71,
  447. HALMAC_RET_SDIO_MIX_MODE = 0x72,
  448. HALMAC_RET_TXDESC_SET_FAIL = 0x73,
  449. HALMAC_RET_WLHDR_FAIL = 0x74,
  450. HALMAC_RET_WLAN_MODE_FAIL = 0x75,
  451. };
  452. enum halmac_chip_id {
  453. HALMAC_CHIP_ID_8822B = 0,
  454. HALMAC_CHIP_ID_8821C = 1,
  455. HALMAC_CHIP_ID_8814B = 2,
  456. HALMAC_CHIP_ID_8197F = 3,
  457. HALMAC_CHIP_ID_8822C = 4,
  458. HALMAC_CHIP_ID_8812F = 5,
  459. HALMAC_CHIP_ID_UNDEFINE = 0x7F,
  460. };
  461. enum halmac_chip_ver {
  462. HALMAC_CHIP_VER_A_CUT = 0x00,
  463. HALMAC_CHIP_VER_B_CUT = 0x01,
  464. HALMAC_CHIP_VER_C_CUT = 0x02,
  465. HALMAC_CHIP_VER_D_CUT = 0x03,
  466. HALMAC_CHIP_VER_E_CUT = 0x04,
  467. HALMAC_CHIP_VER_F_CUT = 0x05,
  468. HALMAC_CHIP_VER_TEST = 0xFF,
  469. HALMAC_CHIP_VER_UNDEFINE = 0x7FFF,
  470. };
  471. enum halmac_network_type_select {
  472. HALMAC_NETWORK_NO_LINK = 0,
  473. HALMAC_NETWORK_ADHOC = 1,
  474. HALMAC_NETWORK_INFRASTRUCTURE = 2,
  475. HALMAC_NETWORK_AP = 3,
  476. HALMAC_NETWORK_UNDEFINE = 0x7F,
  477. };
  478. enum halmac_transfer_mode_select {
  479. HALMAC_TRNSFER_NORMAL = 0x0,
  480. HALMAC_TRNSFER_LOOPBACK_DIRECT = 0xB,
  481. HALMAC_TRNSFER_LOOPBACK_DELAY = 0x3,
  482. HALMAC_TRNSFER_UNDEFINE = 0x7F,
  483. };
  484. enum halmac_dma_mapping {
  485. HALMAC_DMA_MAPPING_EXTRA = 0,
  486. HALMAC_DMA_MAPPING_LOW = 1,
  487. HALMAC_DMA_MAPPING_NORMAL = 2,
  488. HALMAC_DMA_MAPPING_HIGH = 3,
  489. HALMAC_DMA_MAPPING_UNDEFINE = 0x7F,
  490. };
  491. enum halmac_io_size {
  492. HALMAC_IO_BYTE = 0x0,
  493. HALMAC_IO_WORD = 0x1,
  494. HALMAC_IO_DWORD = 0x2,
  495. HALMAC_IO_UNDEFINE = 0x7F,
  496. };
  497. #define HALMAC_MAP2_HQ HALMAC_DMA_MAPPING_HIGH
  498. #define HALMAC_MAP2_NQ HALMAC_DMA_MAPPING_NORMAL
  499. #define HALMAC_MAP2_LQ HALMAC_DMA_MAPPING_LOW
  500. #define HALMAC_MAP2_EXQ HALMAC_DMA_MAPPING_EXTRA
  501. #define HALMAC_MAP2_UNDEF HALMAC_DMA_MAPPING_UNDEFINE
  502. enum halmac_txdesc_queue_tid {
  503. HALMAC_TXDESC_QSEL_TID0 = 0,
  504. HALMAC_TXDESC_QSEL_TID1 = 1,
  505. HALMAC_TXDESC_QSEL_TID2 = 2,
  506. HALMAC_TXDESC_QSEL_TID3 = 3,
  507. HALMAC_TXDESC_QSEL_TID4 = 4,
  508. HALMAC_TXDESC_QSEL_TID5 = 5,
  509. HALMAC_TXDESC_QSEL_TID6 = 6,
  510. HALMAC_TXDESC_QSEL_TID7 = 7,
  511. HALMAC_TXDESC_QSEL_TID8 = 8,
  512. HALMAC_TXDESC_QSEL_TID9 = 9,
  513. HALMAC_TXDESC_QSEL_TIDA = 10,
  514. HALMAC_TXDESC_QSEL_TIDB = 11,
  515. HALMAC_TXDESC_QSEL_TIDC = 12,
  516. HALMAC_TXDESC_QSEL_TIDD = 13,
  517. HALMAC_TXDESC_QSEL_TIDE = 14,
  518. HALMAC_TXDESC_QSEL_TIDF = 15,
  519. HALMAC_TXDESC_QSEL_BEACON = 0x10,
  520. HALMAC_TXDESC_QSEL_HIGH = 0x11,
  521. HALMAC_TXDESC_QSEL_MGT = 0x12,
  522. HALMAC_TXDESC_QSEL_H2C_CMD = 0x13,
  523. HALMAC_TXDESC_QSEL_FWCMD = 0x14,
  524. HALMAC_TXDESC_QSEL_UNDEFINE = 0x7F,
  525. };
  526. enum halmac_pq_map_id {
  527. HALMAC_PQ_MAP_VO = 0x0,
  528. HALMAC_PQ_MAP_VI = 0x1,
  529. HALMAC_PQ_MAP_BE = 0x2,
  530. HALMAC_PQ_MAP_BK = 0x3,
  531. HALMAC_PQ_MAP_MG = 0x4,
  532. HALMAC_PQ_MAP_HI = 0x5,
  533. HALMAC_PQ_MAP_NUM = 0x6,
  534. HALMAC_PQ_MAP_UNDEF = 0x7F,
  535. };
  536. enum halmac_qsel {
  537. HALMAC_QSEL_VO = HALMAC_TXDESC_QSEL_TID6,
  538. HALMAC_QSEL_VI = HALMAC_TXDESC_QSEL_TID4,
  539. HALMAC_QSEL_BE = HALMAC_TXDESC_QSEL_TID0,
  540. HALMAC_QSEL_BK = HALMAC_TXDESC_QSEL_TID1,
  541. HALMAC_QSEL_VO_V2 = HALMAC_TXDESC_QSEL_TID7,
  542. HALMAC_QSEL_VI_V2 = HALMAC_TXDESC_QSEL_TID5,
  543. HALMAC_QSEL_BE_V2 = HALMAC_TXDESC_QSEL_TID3,
  544. HALMAC_QSEL_BK_V2 = HALMAC_TXDESC_QSEL_TID2,
  545. HALMAC_QSEL_TID8 = HALMAC_TXDESC_QSEL_TID8,
  546. HALMAC_QSEL_TID9 = HALMAC_TXDESC_QSEL_TID9,
  547. HALMAC_QSEL_TIDA = HALMAC_TXDESC_QSEL_TIDA,
  548. HALMAC_QSEL_TIDB = HALMAC_TXDESC_QSEL_TIDB,
  549. HALMAC_QSEL_TIDC = HALMAC_TXDESC_QSEL_TIDC,
  550. HALMAC_QSEL_TIDD = HALMAC_TXDESC_QSEL_TIDD,
  551. HALMAC_QSEL_TIDE = HALMAC_TXDESC_QSEL_TIDE,
  552. HALMAC_QSEL_TIDF = HALMAC_TXDESC_QSEL_TIDF,
  553. HALMAC_QSEL_BCN = HALMAC_TXDESC_QSEL_BEACON,
  554. HALMAC_QSEL_HIGH = HALMAC_TXDESC_QSEL_HIGH,
  555. HALMAC_QSEL_MGNT = HALMAC_TXDESC_QSEL_MGT,
  556. HALMAC_QSEL_CMD = HALMAC_TXDESC_QSEL_H2C_CMD,
  557. HALMAC_QSEL_FWCMD = HALMAC_TXDESC_QSEL_FWCMD,
  558. HALMAC_QSEL_UNDEFINE = 0x7F,
  559. };
  560. enum halmac_acq_id {
  561. HALMAC_ACQ_ID_VO = 0,
  562. HALMAC_ACQ_ID_VI = 1,
  563. HALMAC_ACQ_ID_BE = 2,
  564. HALMAC_ACQ_ID_BK = 3,
  565. HALMAC_ACQ_ID_MAX = 0x7F,
  566. };
  567. enum halmac_txdesc_dma_ch {
  568. HALMAC_TXDESC_DMA_CH0 = 0,
  569. HALMAC_TXDESC_DMA_CH1 = 1,
  570. HALMAC_TXDESC_DMA_CH2 = 2,
  571. HALMAC_TXDESC_DMA_CH3 = 3,
  572. HALMAC_TXDESC_DMA_CH4 = 4,
  573. HALMAC_TXDESC_DMA_CH5 = 5,
  574. HALMAC_TXDESC_DMA_CH6 = 6,
  575. HALMAC_TXDESC_DMA_CH7 = 7,
  576. HALMAC_TXDESC_DMA_CH8 = 8,
  577. HALMAC_TXDESC_DMA_CH9 = 9,
  578. HALMAC_TXDESC_DMA_CH10 = 10,
  579. HALMAC_TXDESC_DMA_CH11 = 11,
  580. HALMAC_TXDESC_DMA_CH12 = 12,
  581. HALMAC_TXDESC_DMA_CH13 = 13,
  582. HALMAC_TXDESC_DMA_CH14 = 14,
  583. HALMAC_TXDESC_DMA_CH15 = 15,
  584. HALMAC_TXDESC_DMA_CH16 = 16,
  585. HALMAC_TXDESC_DMA_CH17 = 17,
  586. HALMAC_TXDESC_DMA_CH18 = 18,
  587. HALMAC_TXDESC_DMA_CH19 = 19,
  588. HALMAC_TXDESC_DMA_CH20 = 20,
  589. HALMAC_TXDESC_DMA_CHMAX,
  590. HALMAC_TXDESC_DMA_CHUNDEFINE = 0x7F,
  591. };
  592. enum halmac_dma_ch {
  593. HALMAC_DMA_CH_0 = HALMAC_TXDESC_DMA_CH0,
  594. HALMAC_DMA_CH_1 = HALMAC_TXDESC_DMA_CH1,
  595. HALMAC_DMA_CH_2 = HALMAC_TXDESC_DMA_CH2,
  596. HALMAC_DMA_CH_3 = HALMAC_TXDESC_DMA_CH3,
  597. HALMAC_DMA_CH_4 = HALMAC_TXDESC_DMA_CH4,
  598. HALMAC_DMA_CH_5 = HALMAC_TXDESC_DMA_CH5,
  599. HALMAC_DMA_CH_6 = HALMAC_TXDESC_DMA_CH6,
  600. HALMAC_DMA_CH_7 = HALMAC_TXDESC_DMA_CH7,
  601. HALMAC_DMA_CH_8 = HALMAC_TXDESC_DMA_CH8,
  602. HALMAC_DMA_CH_9 = HALMAC_TXDESC_DMA_CH9,
  603. HALMAC_DMA_CH_10 = HALMAC_TXDESC_DMA_CH10,
  604. HALMAC_DMA_CH_11 = HALMAC_TXDESC_DMA_CH11,
  605. HALMAC_DMA_CH_S0 = HALMAC_TXDESC_DMA_CH12,
  606. HALMAC_DMA_CH_S1 = HALMAC_TXDESC_DMA_CH13,
  607. HALMAC_DMA_CH_MGQ = HALMAC_TXDESC_DMA_CH14,
  608. HALMAC_DMA_CH_HIGH = HALMAC_TXDESC_DMA_CH15,
  609. HALMAC_DMA_CH_FWCMD = HALMAC_TXDESC_DMA_CH16,
  610. HALMAC_DMA_CH_MGQ_BAND1 = HALMAC_TXDESC_DMA_CH17,
  611. HALMAC_DMA_CH_HIGH_BAND1 = HALMAC_TXDESC_DMA_CH18,
  612. HALMAC_DMA_CH_BCN = HALMAC_TXDESC_DMA_CH19,
  613. HALMAC_DMA_CH_H2C = HALMAC_TXDESC_DMA_CH20,
  614. HALMAC_DMA_CH_MAX = HALMAC_TXDESC_DMA_CHMAX,
  615. HALMAC_DMA_CH_UNDEFINE = 0x7F,
  616. };
  617. enum halmac_interface {
  618. HALMAC_INTERFACE_PCIE = 0x0,
  619. HALMAC_INTERFACE_USB = 0x1,
  620. HALMAC_INTERFACE_SDIO = 0x2,
  621. HALMAC_INTERFACE_AXI = 0x3,
  622. HALMAC_INTERFACE_UNDEFINE = 0x7F,
  623. };
  624. enum halmac_rx_agg_mode {
  625. HALMAC_RX_AGG_MODE_NONE = 0x0,
  626. HALMAC_RX_AGG_MODE_DMA = 0x1,
  627. HALMAC_RX_AGG_MODE_USB = 0x2,
  628. HALMAC_RX_AGG_MODE_UNDEFINE = 0x7F,
  629. };
  630. struct halmac_rxagg_th {
  631. u8 drv_define;
  632. u8 timeout;
  633. u8 size;
  634. u8 size_limit_en;
  635. };
  636. struct halmac_rxagg_cfg {
  637. enum halmac_rx_agg_mode mode;
  638. struct halmac_rxagg_th threshold;
  639. };
  640. struct halmac_api_registry {
  641. u8 rx_exp_en:1;
  642. u8 la_mode_en:1;
  643. u8 cfg_drv_rsvd_pg_en:1;
  644. u8 sdio_cmd53_4byte_en:1;
  645. u8 rsvd:4;
  646. };
  647. enum halmac_trx_mode {
  648. HALMAC_TRX_MODE_NORMAL = 0x0,
  649. HALMAC_TRX_MODE_TRXSHARE = 0x1,
  650. HALMAC_TRX_MODE_WMM = 0x2,
  651. HALMAC_TRX_MODE_P2P = 0x3,
  652. HALMAC_TRX_MODE_LOOPBACK = 0x4,
  653. HALMAC_TRX_MODE_DELAY_LOOPBACK = 0x5,
  654. HALMAC_TRX_MODE_MAX = 0x6,
  655. HALMAC_TRX_MODE_WMM_LINUX = 0x7E,
  656. HALMAC_TRX_MODE_UNDEFINE = 0x7F,
  657. };
  658. enum halmac_wireless_mode {
  659. HALMAC_WIRELESS_MODE_B = 0x0,
  660. HALMAC_WIRELESS_MODE_G = 0x1,
  661. HALMAC_WIRELESS_MODE_N = 0x2,
  662. HALMAC_WIRELESS_MODE_AC = 0x3,
  663. HALMAC_WIRELESS_MODE_UNDEFINE = 0x7F,
  664. };
  665. enum halmac_bw {
  666. HALMAC_BW_20 = 0x00,
  667. HALMAC_BW_40 = 0x01,
  668. HALMAC_BW_80 = 0x02,
  669. HALMAC_BW_160 = 0x03,
  670. HALMAC_BW_5 = 0x04,
  671. HALMAC_BW_10 = 0x05,
  672. HALMAC_BW_MAX = 0x06,
  673. HALMAC_BW_UNDEFINE = 0x7F,
  674. };
  675. enum halmac_efuse_read_cfg {
  676. HALMAC_EFUSE_R_AUTO = 0x00,
  677. HALMAC_EFUSE_R_DRV = 0x01,
  678. HALMAC_EFUSE_R_FW = 0x02,
  679. HALMAC_EFUSE_R_UNDEFINE = 0x7F,
  680. };
  681. enum halmac_dlfw_mem {
  682. HALMAC_DLFW_MEM_EMEM = 0x00,
  683. HALMAC_DLFW_MEM_EMEM_RSVD_PG = 0x01,
  684. HALMAC_DLFW_MEM_UNDEFINE = 0x7F,
  685. };
  686. struct halmac_tx_desc {
  687. u32 dword0;
  688. u32 dword1;
  689. u32 dword2;
  690. u32 dword3;
  691. u32 dword4;
  692. u32 dword5;
  693. u32 dword6;
  694. u32 dword7;
  695. u32 dword8;
  696. u32 dword9;
  697. u32 dword10;
  698. u32 dword11;
  699. };
  700. struct halmac_rx_desc {
  701. u32 dword0;
  702. u32 dword1;
  703. u32 dword2;
  704. u32 dword3;
  705. u32 dword4;
  706. u32 dword5;
  707. };
  708. struct halmac_bcn_ie_info {
  709. u8 func_en;
  710. u8 size_th;
  711. u8 timeout;
  712. u8 ie_bmp[HALMAC_BCN_IE_BMP_SIZE];
  713. };
  714. enum halmac_parameter_cmd {
  715. /* HALMAC_PARAMETER_CMD_LLT = 0x1, */
  716. /* HALMAC_PARAMETER_CMD_R_EFUSE = 0x2, */
  717. /* HALMAC_PARAMETER_CMD_EFUSE_PATCH = 0x3, */
  718. HALMAC_PARAMETER_CMD_MAC_W8 = 0x4,
  719. HALMAC_PARAMETER_CMD_MAC_W16 = 0x5,
  720. HALMAC_PARAMETER_CMD_MAC_W32 = 0x6,
  721. HALMAC_PARAMETER_CMD_RF_W = 0x7,
  722. HALMAC_PARAMETER_CMD_BB_W8 = 0x8,
  723. HALMAC_PARAMETER_CMD_BB_W16 = 0x9,
  724. HALMAC_PARAMETER_CMD_BB_W32 = 0XA,
  725. HALMAC_PARAMETER_CMD_DELAY_US = 0X10,
  726. HALMAC_PARAMETER_CMD_DELAY_MS = 0X11,
  727. HALMAC_PARAMETER_CMD_END = 0XFF,
  728. };
  729. union halmac_parameter_content {
  730. struct _MAC_REG_W {
  731. u32 value;
  732. u32 msk;
  733. u16 offset;
  734. u8 msk_en;
  735. } MAC_REG_W;
  736. struct _BB_REG_W {
  737. u32 value;
  738. u32 msk;
  739. u16 offset;
  740. u8 msk_en;
  741. } BB_REG_W;
  742. struct _RF_REG_W {
  743. u32 value;
  744. u32 msk;
  745. u8 offset;
  746. u8 msk_en;
  747. u8 rf_path;
  748. } RF_REG_W;
  749. struct _DELAY_TIME {
  750. u32 rsvd1;
  751. u32 rsvd2;
  752. u16 delay_time;
  753. u8 rsvd3;
  754. } DELAY_TIME;
  755. };
  756. struct halmac_phy_parameter_info {
  757. enum halmac_parameter_cmd cmd_id;
  758. union halmac_parameter_content content;
  759. };
  760. struct halmac_pg_efuse_info {
  761. u8 *efuse_map;
  762. u32 efuse_map_size;
  763. u8 *efuse_mask;
  764. u32 efuse_mask_size;
  765. };
  766. struct halmac_cfg_param_info {
  767. u32 buf_size;
  768. u8 *buf;
  769. u8 *buf_wptr;
  770. u32 num;
  771. u32 avl_buf_size;
  772. u32 offset_accum;
  773. u32 value_accum;
  774. enum halmac_data_type data_type;
  775. u8 full_fifo_mode;
  776. };
  777. struct halmac_hw_cfg_info {
  778. u32 efuse_size;
  779. u32 eeprom_size;
  780. u32 bt_efuse_size;
  781. u32 tx_fifo_size;
  782. u32 rx_fifo_size;
  783. u32 rx_desc_fifo_size;
  784. u32 page_size;
  785. u16 tx_align_size;
  786. u8 txdesc_size;
  787. u8 rxdesc_size;
  788. u8 cam_entry_num;
  789. u8 chk_security_keyid;
  790. u8 txdesc_ie_max_num;
  791. u8 txdesc_body_size;
  792. u8 ac_oqt_size;
  793. u8 non_ac_oqt_size;
  794. u8 acq_num;
  795. u8 trx_mode;
  796. u8 usb_txagg_num;
  797. };
  798. struct halmac_sdio_free_space {
  799. u16 hiq_pg_num;
  800. u16 miq_pg_num;
  801. u16 lowq_pg_num;
  802. u16 pubq_pg_num;
  803. u16 exq_pg_num;
  804. u8 ac_oqt_num;
  805. u8 non_ac_oqt_num;
  806. u8 ac_empty;
  807. u8 *macid_map;
  808. u32 macid_map_size;
  809. };
  810. enum hal_fifo_sel {
  811. HAL_FIFO_SEL_TX,
  812. HAL_FIFO_SEL_RX,
  813. HAL_FIFO_SEL_RSVD_PAGE,
  814. HAL_FIFO_SEL_REPORT,
  815. HAL_FIFO_SEL_LLT,
  816. HAL_FIFO_SEL_RXBUF_FW,
  817. HAL_FIFO_SEL_RXBUF_PHY,
  818. HAL_FIFO_SEL_RXDESC,
  819. HAL_BUF_SECURITY_CAM,
  820. HAL_BUF_WOW_CAM,
  821. HAL_BUF_RX_FILTER_CAM,
  822. HAL_BUF_BA_CAM,
  823. HAL_BUF_MBSSID_CAM
  824. };
  825. enum halmac_drv_info {
  826. /* No information is appended in rx_pkt */
  827. HALMAC_DRV_INFO_NONE,
  828. /* PHY status is appended after rx_desc */
  829. HALMAC_DRV_INFO_PHY_STATUS,
  830. /* PHY status and sniffer info are appended after rx_desc */
  831. HALMAC_DRV_INFO_PHY_SNIFFER,
  832. /* PHY status and plcp header are appended after rx_desc */
  833. HALMAC_DRV_INFO_PHY_PLCP,
  834. HALMAC_DRV_INFO_UNDEFINE,
  835. };
  836. enum halmac_pri_ch_idx {
  837. HALMAC_CH_IDX_UNDEFINE = 0,
  838. HALMAC_CH_IDX_1 = 1,
  839. HALMAC_CH_IDX_2 = 2,
  840. HALMAC_CH_IDX_3 = 3,
  841. HALMAC_CH_IDX_4 = 4,
  842. HALMAC_CH_IDX_MAX = 5,
  843. };
  844. struct halmac_ch_info {
  845. enum halmac_cs_action_id action_id;
  846. enum halmac_bw bw;
  847. enum halmac_pri_ch_idx pri_ch_idx;
  848. u8 channel;
  849. u8 timeout;
  850. u8 extra_info;
  851. };
  852. struct halmac_ch_extra_info {
  853. u8 extra_info;
  854. enum halmac_cs_extra_action_id extra_action_id;
  855. u8 extra_info_size;
  856. u8 *extra_info_data;
  857. };
  858. enum halmac_cs_periodic_option {
  859. HALMAC_CS_PERIODIC_NONE,
  860. HALMAC_CS_PERIODIC_NORMAL,
  861. HALMAC_CS_PERIODIC_2_PHASE,
  862. HALMAC_CS_PERIODIC_SEAMLESS,
  863. };
  864. struct halmac_ch_switch_option {
  865. enum halmac_bw dest_bw;
  866. enum halmac_cs_periodic_option periodic_option;
  867. enum halmac_pri_ch_idx dest_pri_ch_idx;
  868. /* u32 tsf_high; */
  869. u32 tsf_low;
  870. u8 switch_en;
  871. u8 dest_ch_en;
  872. u8 absolute_time_en;
  873. u8 dest_ch;
  874. u8 normal_period;
  875. u8 normal_period_sel;
  876. u8 normal_cycle;
  877. u8 phase_2_period;
  878. u8 phase_2_period_sel;
  879. };
  880. struct halmac_p2pps {
  881. u8 offload_en:1;
  882. u8 role:1;
  883. u8 ctwindow_en:1;
  884. u8 noa_en:1;
  885. u8 noa_sel:1;
  886. u8 all_sta_sleep:1;
  887. u8 discovery:1;
  888. u8 disable_close_rf:1;
  889. u8 p2p_port_id;
  890. u8 p2p_group;
  891. u8 p2p_macid;
  892. u8 ctwindow_length;
  893. u8 rsvd3;
  894. u8 rsvd4;
  895. u8 rsvd5;
  896. u32 noa_duration_para;
  897. u32 noa_interval_para;
  898. u32 noa_start_time_para;
  899. u32 noa_count_para;
  900. };
  901. struct halmac_fw_build_time {
  902. u16 year;
  903. u8 month;
  904. u8 date;
  905. u8 hour;
  906. u8 min;
  907. };
  908. struct halmac_fw_version {
  909. u16 version;
  910. u8 sub_version;
  911. u8 sub_index;
  912. u16 h2c_version;
  913. struct halmac_fw_build_time build_time;
  914. };
  915. enum halmac_rf_type {
  916. HALMAC_RF_1T2R = 0,
  917. HALMAC_RF_2T4R = 1,
  918. HALMAC_RF_2T2R = 2,
  919. HALMAC_RF_2T3R = 3,
  920. HALMAC_RF_1T1R = 4,
  921. HALMAC_RF_2T2R_GREEN = 5,
  922. HALMAC_RF_3T3R = 6,
  923. HALMAC_RF_3T4R = 7,
  924. HALMAC_RF_4T4R = 8,
  925. HALMAC_RF_MAX_TYPE = 0xF,
  926. };
  927. struct halmac_general_info {
  928. u8 rfe_type;
  929. enum halmac_rf_type rf_type;
  930. u8 tx_ant_status;
  931. u8 rx_ant_status;
  932. };
  933. struct halmac_pwr_tracking_para {
  934. u8 enable;
  935. u8 tx_pwr_index;
  936. u8 pwr_tracking_offset_value;
  937. u8 tssi_value;
  938. };
  939. struct halmac_pwr_tracking_option {
  940. u8 type;
  941. u8 bbswing_index;
  942. /* pathA, pathB, pathC, pathD */
  943. struct halmac_pwr_tracking_para pwr_tracking_para[4];
  944. };
  945. struct halmac_fast_edca_cfg {
  946. enum halmac_acq_id acq_id;
  947. u8 queue_to; /* unit : 32us*/
  948. };
  949. enum halmac_data_rate {
  950. HALMAC_CCK1,
  951. HALMAC_CCK2,
  952. HALMAC_CCK5_5,
  953. HALMAC_CCK11,
  954. HALMAC_OFDM6,
  955. HALMAC_OFDM9,
  956. HALMAC_OFDM12,
  957. HALMAC_OFDM18,
  958. HALMAC_OFDM24,
  959. HALMAC_OFDM36,
  960. HALMAC_OFDM48,
  961. HALMAC_OFDM54,
  962. HALMAC_MCS0,
  963. HALMAC_MCS1,
  964. HALMAC_MCS2,
  965. HALMAC_MCS3,
  966. HALMAC_MCS4,
  967. HALMAC_MCS5,
  968. HALMAC_MCS6,
  969. HALMAC_MCS7,
  970. HALMAC_MCS8,
  971. HALMAC_MCS9,
  972. HALMAC_MCS10,
  973. HALMAC_MCS11,
  974. HALMAC_MCS12,
  975. HALMAC_MCS13,
  976. HALMAC_MCS14,
  977. HALMAC_MCS15,
  978. HALMAC_MCS16,
  979. HALMAC_MCS17,
  980. HALMAC_MCS18,
  981. HALMAC_MCS19,
  982. HALMAC_MCS20,
  983. HALMAC_MCS21,
  984. HALMAC_MCS22,
  985. HALMAC_MCS23,
  986. HALMAC_MCS24,
  987. HALMAC_MCS25,
  988. HALMAC_MCS26,
  989. HALMAC_MCS27,
  990. HALMAC_MCS28,
  991. HALMAC_MCS29,
  992. HALMAC_MCS30,
  993. HALMAC_MCS31,
  994. HALMAC_VHT_NSS1_MCS0,
  995. HALMAC_VHT_NSS1_MCS1,
  996. HALMAC_VHT_NSS1_MCS2,
  997. HALMAC_VHT_NSS1_MCS3,
  998. HALMAC_VHT_NSS1_MCS4,
  999. HALMAC_VHT_NSS1_MCS5,
  1000. HALMAC_VHT_NSS1_MCS6,
  1001. HALMAC_VHT_NSS1_MCS7,
  1002. HALMAC_VHT_NSS1_MCS8,
  1003. HALMAC_VHT_NSS1_MCS9,
  1004. HALMAC_VHT_NSS2_MCS0,
  1005. HALMAC_VHT_NSS2_MCS1,
  1006. HALMAC_VHT_NSS2_MCS2,
  1007. HALMAC_VHT_NSS2_MCS3,
  1008. HALMAC_VHT_NSS2_MCS4,
  1009. HALMAC_VHT_NSS2_MCS5,
  1010. HALMAC_VHT_NSS2_MCS6,
  1011. HALMAC_VHT_NSS2_MCS7,
  1012. HALMAC_VHT_NSS2_MCS8,
  1013. HALMAC_VHT_NSS2_MCS9,
  1014. HALMAC_VHT_NSS3_MCS0,
  1015. HALMAC_VHT_NSS3_MCS1,
  1016. HALMAC_VHT_NSS3_MCS2,
  1017. HALMAC_VHT_NSS3_MCS3,
  1018. HALMAC_VHT_NSS3_MCS4,
  1019. HALMAC_VHT_NSS3_MCS5,
  1020. HALMAC_VHT_NSS3_MCS6,
  1021. HALMAC_VHT_NSS3_MCS7,
  1022. HALMAC_VHT_NSS3_MCS8,
  1023. HALMAC_VHT_NSS3_MCS9,
  1024. HALMAC_VHT_NSS4_MCS0,
  1025. HALMAC_VHT_NSS4_MCS1,
  1026. HALMAC_VHT_NSS4_MCS2,
  1027. HALMAC_VHT_NSS4_MCS3,
  1028. HALMAC_VHT_NSS4_MCS4,
  1029. HALMAC_VHT_NSS4_MCS5,
  1030. HALMAC_VHT_NSS4_MCS6,
  1031. HALMAC_VHT_NSS4_MCS7,
  1032. HALMAC_VHT_NSS4_MCS8,
  1033. HALMAC_VHT_NSS4_MCS9,
  1034. /*FPGA only*/
  1035. HALMAC_VHT_NSS5_MCS0,
  1036. HALMAC_VHT_NSS6_MCS0,
  1037. HALMAC_VHT_NSS7_MCS0,
  1038. HALMAC_VHT_NSS8_MCS0
  1039. };
  1040. enum halmac_rf_path {
  1041. HALMAC_RF_PATH_A,
  1042. HALMAC_RF_PATH_B,
  1043. HALMAC_RF_PATH_C,
  1044. HALMAC_RF_PATH_D
  1045. };
  1046. enum hal_security_type {
  1047. HAL_SECURITY_TYPE_NONE = 0,
  1048. HAL_SECURITY_TYPE_WEP40 = 1,
  1049. HAL_SECURITY_TYPE_WEP104 = 2,
  1050. HAL_SECURITY_TYPE_TKIP = 3,
  1051. HAL_SECURITY_TYPE_AES128 = 4,
  1052. HAL_SECURITY_TYPE_WAPI = 5,
  1053. HAL_SECURITY_TYPE_AES256 = 6,
  1054. HAL_SECURITY_TYPE_GCMP128 = 7,
  1055. HAL_SECURITY_TYPE_GCMP256 = 8,
  1056. HAL_SECURITY_TYPE_GCMSMS4 = 9,
  1057. HAL_SECURITY_TYPE_BIP = 10,
  1058. HAL_SECURITY_TYPE_UNDEFINE = 0x7F,
  1059. };
  1060. enum hal_intf_phy {
  1061. HAL_INTF_PHY_USB2 = 0,
  1062. HAL_INTF_PHY_USB3 = 1,
  1063. HAL_INTF_PHY_PCIE_GEN1 = 2,
  1064. HAL_INTF_PHY_PCIE_GEN2 = 3,
  1065. HAL_INTF_PHY_UNDEFINE = 0x7F,
  1066. };
  1067. struct halmac_cut_amsdu_cfg {
  1068. u8 cut_amsdu_en;
  1069. u8 chk_len_en;
  1070. u8 chk_len_def_val;
  1071. u8 chk_len_l_th;
  1072. u16 chk_len_h_th;
  1073. };
  1074. enum halmac_dbg_msg_info {
  1075. HALMAC_DBG_ALWAYS,
  1076. HALMAC_DBG_ERR,
  1077. HALMAC_DBG_WARN,
  1078. HALMAC_DBG_TRACE,
  1079. };
  1080. enum halmac_dbg_msg_type {
  1081. HALMAC_MSG_INIT,
  1082. HALMAC_MSG_EFUSE,
  1083. HALMAC_MSG_FW,
  1084. HALMAC_MSG_H2C,
  1085. HALMAC_MSG_PWR,
  1086. HALMAC_MSG_SND,
  1087. HALMAC_MSG_COMMON,
  1088. HALMAC_MSG_DBI,
  1089. HALMAC_MSG_MDIO,
  1090. HALMAC_MSG_USB,
  1091. };
  1092. enum halmac_feature_id {
  1093. HALMAC_FEATURE_CFG_PARA, /* Support */
  1094. HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE, /* Support */
  1095. HALMAC_FEATURE_DUMP_LOGICAL_EFUSE, /* Support */
  1096. HALMAC_FEATURE_UPDATE_PACKET, /* Support */
  1097. HALMAC_FEATURE_UPDATE_DATAPACK,
  1098. HALMAC_FEATURE_RUN_DATAPACK,
  1099. HALMAC_FEATURE_CHANNEL_SWITCH, /* Support */
  1100. HALMAC_FEATURE_IQK, /* Support */
  1101. HALMAC_FEATURE_POWER_TRACKING, /* Support */
  1102. HALMAC_FEATURE_PSD, /* Support */
  1103. HALMAC_FEATURE_FW_SNDING, /* Support */
  1104. HALMAC_FEATURE_ALL, /* Support, only for reset */
  1105. };
  1106. enum halmac_drv_rsvd_pg_num {
  1107. HALMAC_RSVD_PG_NUM8, /* 1K */
  1108. HALMAC_RSVD_PG_NUM16, /* 2K */
  1109. HALMAC_RSVD_PG_NUM24, /* 3K */
  1110. HALMAC_RSVD_PG_NUM32, /* 4K */
  1111. HALMAC_RSVD_PG_NUM64, /* 8K */
  1112. HALMAC_RSVD_PG_NUM128, /* 16K */
  1113. };
  1114. enum halmac_pcie_cfg {
  1115. HALMAC_PCIE_GEN1,
  1116. HALMAC_PCIE_GEN2,
  1117. HALMAC_PCIE_CFG_UNDEFINE,
  1118. };
  1119. enum halmac_portid {
  1120. HALMAC_PORTID0 = 0,
  1121. HALMAC_PORTID1 = 1,
  1122. HALMAC_PORTID2 = 2,
  1123. HALMAC_PORTID3 = 3,
  1124. HALMAC_PORTID4 = 4,
  1125. HALMAC_PORTID_NUM = 5,
  1126. };
  1127. struct halmac_bcn_ctrl {
  1128. u8 dis_rx_bssid_fit;
  1129. u8 en_txbcn_rpt;
  1130. u8 dis_tsf_udt;
  1131. u8 en_bcn;
  1132. u8 en_rxbcn_rpt;
  1133. u8 en_p2p_ctwin;
  1134. u8 en_p2p_bcn_area;
  1135. };
  1136. /* User only can use Address[6]*/
  1137. /* Address[0] is lowest, Address[5] is highest */
  1138. union halmac_wlan_addr {
  1139. u8 addr[6];
  1140. struct {
  1141. union {
  1142. __le32 low;
  1143. u8 low_byte[4];
  1144. };
  1145. union {
  1146. __le16 high;
  1147. u8 high_byte[2];
  1148. };
  1149. } addr_l_h;
  1150. };
  1151. struct halmac_platform_api {
  1152. /* R/W register */
  1153. u8 (*SDIO_CMD52_READ)(void *drv_adapter, u32 offset);
  1154. u8 (*SDIO_CMD53_READ_8)(void *drv_adapter, u32 offset);
  1155. u16 (*SDIO_CMD53_READ_16)(void *drv_adapter, u32 offset);
  1156. u32 (*SDIO_CMD53_READ_32)(void *drv_adapter, u32 offset);
  1157. u8 (*SDIO_CMD53_READ_N)(void *drv_adapter, u32 offset, u32 size,
  1158. u8 *data);
  1159. void (*SDIO_CMD52_WRITE)(void *drv_adapter, u32 offset, u8 value);
  1160. void (*SDIO_CMD53_WRITE_8)(void *drv_adapter, u32 offset, u8 value);
  1161. void (*SDIO_CMD53_WRITE_16)(void *drv_adapter, u32 offset, u16 value);
  1162. void (*SDIO_CMD53_WRITE_32)(void *drv_adapter, u32 offset, u32 value);
  1163. u8 (*REG_READ_8)(void *drv_adapter, u32 offset);
  1164. u16 (*REG_READ_16)(void *drv_adapter, u32 offset);
  1165. u32 (*REG_READ_32)(void *drv_adapter, u32 offset);
  1166. void (*REG_WRITE_8)(void *drv_adapter, u32 offset, u8 value);
  1167. void (*REG_WRITE_16)(void *drv_adapter, u32 offset, u16 value);
  1168. void (*REG_WRITE_32)(void *drv_adapter, u32 offset, u32 value);
  1169. u8 (*SDIO_CMD52_CIA_READ)(void *drv_adapter, u32 offset);
  1170. /* send pBuf to reserved page, the tx_desc is not included in pBuf */
  1171. /* driver need to fill tx_desc with qsel = bcn */
  1172. u8 (*SEND_RSVD_PAGE)(void *drv_adapter, u8 *buf, u32 size);
  1173. /* send pBuf to h2c queue, the tx_desc is not included in pBuf */
  1174. /* driver need to fill tx_desc with qsel = h2c */
  1175. u8 (*SEND_H2C_PKT)(void *drv_adapter, u8 *buf, u32 size);
  1176. u8 (*RTL_FREE)(void *drv_adapter, void *buf, u32 size);
  1177. void* (*RTL_MALLOC)(void *drv_adapter, u32 size);
  1178. u8 (*RTL_MEMCPY)(void *drv_adapter, void *dest, void *src, u32 size);
  1179. u8 (*RTL_MEMSET)(void *drv_adapter, void *addr, u8 value, u32 size);
  1180. void (*RTL_DELAY_US)(void *drv_adapter, u32 us);
  1181. u8 (*MUTEX_INIT)(void *drv_adapter, HALMAC_MUTEX *mutex);
  1182. u8 (*MUTEX_DEINIT)(void *drv_adapter, HALMAC_MUTEX *mutex);
  1183. u8 (*MUTEX_LOCK)(void *drv_adapter, HALMAC_MUTEX *mutex);
  1184. u8 (*MUTEX_UNLOCK)(void *drv_adapter, HALMAC_MUTEX *mutex);
  1185. u8 (*MSG_PRINT)(void *drv_adapter, u32 msg_type, u8 msg_level,
  1186. s8 *fmt, ...);
  1187. u8 (*BUFF_PRINT)(void *drv_adapter, u32 msg_type, u8 msg_level, s8 *buf,
  1188. u32 size);
  1189. u8 (*EVENT_INDICATION)(void *drv_adapter,
  1190. enum halmac_feature_id feature_id,
  1191. enum halmac_cmd_process_status process_status,
  1192. u8 *buf, u32 size);
  1193. #if HALMAC_PLATFORM_TESTPROGRAM
  1194. struct halmisc_platform_api *halmisc_pltfm_api;
  1195. #endif
  1196. };
  1197. enum halmac_snd_role {
  1198. HAL_BFER = 0,
  1199. HAL_BFEE = 1,
  1200. };
  1201. enum halmac_csi_seg_len {
  1202. HAL_CSI_SEG_4K = 0,
  1203. HAL_CSI_SEG_8K = 1,
  1204. HAL_CSI_SEG_11K = 2,
  1205. };
  1206. struct halmac_cfg_mumimo_para {
  1207. enum halmac_snd_role role;
  1208. u8 sounding_sts[6];
  1209. u16 grouping_bitmap;
  1210. u8 mu_tx_en;
  1211. u32 given_gid_tab[2];
  1212. u32 given_user_pos[4];
  1213. };
  1214. struct halmac_su_bfer_init_para {
  1215. u8 userid;
  1216. u16 paid;
  1217. u16 csi_para;
  1218. union halmac_wlan_addr bfer_address;
  1219. };
  1220. struct halmac_mu_bfee_init_para {
  1221. u8 userid;
  1222. u16 paid;
  1223. u32 user_position_l; /*for gid 0~15*/
  1224. u32 user_position_h; /*for gid 16~31*/
  1225. u32 user_position_l_1; /*for gid 32~47*/
  1226. u32 user_position_h_1; /*for gid 48~63*/
  1227. };
  1228. struct halmac_mu_bfer_init_para {
  1229. u16 paid;
  1230. u16 csi_para;
  1231. u16 my_aid;
  1232. enum halmac_csi_seg_len csi_length_sel;
  1233. union halmac_wlan_addr bfer_address;
  1234. };
  1235. struct halmac_ch_sw_info {
  1236. u8 *buf;
  1237. u8 *buf_wptr;
  1238. u8 extra_info_en;
  1239. u32 buf_size;
  1240. u32 avl_buf_size;
  1241. u32 total_size;
  1242. u32 ch_num;
  1243. };
  1244. struct halmac_event_trigger {
  1245. u32 phy_efuse_map : 1;
  1246. u32 log_efuse_map : 1;
  1247. u32 rsvd1 : 28;
  1248. };
  1249. struct halmac_h2c_header_info {
  1250. u16 sub_cmd_id;
  1251. u16 content_size;
  1252. u8 ack;
  1253. };
  1254. struct halmac_ver {
  1255. u8 major_ver;
  1256. u8 prototype_ver;
  1257. u8 minor_ver;
  1258. };
  1259. enum halmac_api_id {
  1260. /*stuff, need to be the 1st*/
  1261. HALMAC_API_STUFF = 0x0,
  1262. /*stuff, need to be the 1st*/
  1263. HALMAC_API_MAC_POWER_SWITCH = 0x1,
  1264. HALMAC_API_DOWNLOAD_FIRMWARE = 0x2,
  1265. HALMAC_API_CFG_MAC_ADDR = 0x3,
  1266. HALMAC_API_CFG_BSSID = 0x4,
  1267. HALMAC_API_CFG_MULTICAST_ADDR = 0x5,
  1268. HALMAC_API_PRE_INIT_SYSTEM_CFG = 0x6,
  1269. HALMAC_API_INIT_SYSTEM_CFG = 0x7,
  1270. HALMAC_API_INIT_TRX_CFG = 0x8,
  1271. HALMAC_API_CFG_RX_AGGREGATION = 0x9,
  1272. HALMAC_API_INIT_PROTOCOL_CFG = 0xA,
  1273. HALMAC_API_INIT_EDCA_CFG = 0xB,
  1274. HALMAC_API_CFG_OPERATION_MODE = 0xC,
  1275. HALMAC_API_CFG_CH_BW = 0xD,
  1276. HALMAC_API_CFG_BW = 0xE,
  1277. HALMAC_API_INIT_WMAC_CFG = 0xF,
  1278. HALMAC_API_INIT_MAC_CFG = 0x10,
  1279. HALMAC_API_INIT_SDIO_CFG = 0x11,
  1280. HALMAC_API_INIT_USB_CFG = 0x12,
  1281. HALMAC_API_INIT_PCIE_CFG = 0x13,
  1282. HALMAC_API_INIT_INTERFACE_CFG = 0x14,
  1283. HALMAC_API_DEINIT_SDIO_CFG = 0x15,
  1284. HALMAC_API_DEINIT_USB_CFG = 0x16,
  1285. HALMAC_API_DEINIT_PCIE_CFG = 0x17,
  1286. HALMAC_API_DEINIT_INTERFACE_CFG = 0x18,
  1287. HALMAC_API_GET_EFUSE_SIZE = 0x19,
  1288. HALMAC_API_DUMP_EFUSE_MAP = 0x1A,
  1289. HALMAC_API_GET_LOGICAL_EFUSE_SIZE = 0x1D,
  1290. HALMAC_API_DUMP_LOGICAL_EFUSE_MAP = 0x1E,
  1291. HALMAC_API_WRITE_LOGICAL_EFUSE = 0x1F,
  1292. HALMAC_API_READ_LOGICAL_EFUSE = 0x20,
  1293. HALMAC_API_PG_EFUSE_BY_MAP = 0x21,
  1294. HALMAC_API_GET_C2H_INFO = 0x22,
  1295. HALMAC_API_CFG_FWLPS_OPTION = 0x23,
  1296. HALMAC_API_CFG_FWIPS_OPTION = 0x24,
  1297. HALMAC_API_ENTER_WOWLAN = 0x25,
  1298. HALMAC_API_LEAVE_WOWLAN = 0x26,
  1299. HALMAC_API_ENTER_PS = 0x27,
  1300. HALMAC_API_LEAVE_PS = 0x28,
  1301. HALMAC_API_H2C_LB = 0x29,
  1302. HALMAC_API_DEBUG = 0x2A,
  1303. HALMAC_API_CFG_PARAMETER = 0x2B,
  1304. HALMAC_API_UPDATE_PACKET = 0x2C,
  1305. HALMAC_API_BCN_IE_FILTER = 0x2D,
  1306. HALMAC_API_REG_READ_8 = 0x2E,
  1307. HALMAC_API_REG_WRITE_8 = 0x2F,
  1308. HALMAC_API_REG_READ_16 = 0x30,
  1309. HALMAC_API_REG_WRITE_16 = 0x31,
  1310. HALMAC_API_REG_READ_32 = 0x32,
  1311. HALMAC_API_REG_WRITE_32 = 0x33,
  1312. HALMAC_API_TX_ALLOWED_SDIO = 0x34,
  1313. HALMAC_API_SET_BULKOUT_NUM = 0x35,
  1314. HALMAC_API_GET_SDIO_TX_ADDR = 0x36,
  1315. HALMAC_API_GET_USB_BULKOUT_ID = 0x37,
  1316. HALMAC_API_TIMER_2S = 0x38,
  1317. HALMAC_API_FILL_TXDESC_CHECKSUM = 0x39,
  1318. HALMAC_API_SEND_ORIGINAL_H2C = 0x3A,
  1319. HALMAC_API_UPDATE_DATAPACK = 0x3B,
  1320. HALMAC_API_RUN_DATAPACK = 0x3C,
  1321. HALMAC_API_CFG_DRV_INFO = 0x3D,
  1322. HALMAC_API_SEND_BT_COEX = 0x3E,
  1323. HALMAC_API_VERIFY_PLATFORM_API = 0x3F,
  1324. HALMAC_API_GET_FIFO_SIZE = 0x40,
  1325. HALMAC_API_DUMP_FIFO = 0x41,
  1326. HALMAC_API_CFG_TXBF = 0x42,
  1327. HALMAC_API_CFG_MUMIMO = 0x43,
  1328. HALMAC_API_CFG_SOUNDING = 0x44,
  1329. HALMAC_API_DEL_SOUNDING = 0x45,
  1330. HALMAC_API_SU_BFER_ENTRY_INIT = 0x46,
  1331. HALMAC_API_SU_BFEE_ENTRY_INIT = 0x47,
  1332. HALMAC_API_MU_BFER_ENTRY_INIT = 0x48,
  1333. HALMAC_API_MU_BFEE_ENTRY_INIT = 0x49,
  1334. HALMAC_API_SU_BFER_ENTRY_DEL = 0x4A,
  1335. HALMAC_API_SU_BFEE_ENTRY_DEL = 0x4B,
  1336. HALMAC_API_MU_BFER_ENTRY_DEL = 0x4C,
  1337. HALMAC_API_MU_BFEE_ENTRY_DEL = 0x4D,
  1338. HALMAC_API_ADD_CH_INFO = 0x4E,
  1339. HALMAC_API_ADD_EXTRA_CH_INFO = 0x4F,
  1340. HALMAC_API_CTRL_CH_SWITCH = 0x50,
  1341. HALMAC_API_CLEAR_CH_INFO = 0x51,
  1342. HALMAC_API_SEND_GENERAL_INFO = 0x52,
  1343. HALMAC_API_START_IQK = 0x53,
  1344. HALMAC_API_CTRL_PWR_TRACKING = 0x54,
  1345. HALMAC_API_PSD = 0x55,
  1346. HALMAC_API_CFG_TX_AGG_ALIGN = 0x56,
  1347. HALMAC_API_QUERY_STATE = 0x57,
  1348. HALMAC_API_RESET_FEATURE = 0x58,
  1349. HALMAC_API_CHECK_FW_STATUS = 0x59,
  1350. HALMAC_API_DUMP_FW_DMEM = 0x5A,
  1351. HALMAC_API_CFG_MAX_DL_SIZE = 0x5B,
  1352. HALMAC_API_INIT_OBJ = 0x5C,
  1353. HALMAC_API_DEINIT_OBJ = 0x5D,
  1354. HALMAC_API_CFG_LA_MODE = 0x5E,
  1355. HALMAC_API_GET_HW_VALUE = 0x5F,
  1356. HALMAC_API_SET_HW_VALUE = 0x60,
  1357. HALMAC_API_CFG_DRV_RSVD_PG_NUM = 0x61,
  1358. HALMAC_API_WRITE_EFUSE_BT = 0x63,
  1359. HALMAC_API_DUMP_EFUSE_MAP_BT = 0x64,
  1360. HALMAC_API_DL_DRV_RSVD_PG = 0x65,
  1361. HALMAC_API_PCIE_SWITCH = 0x66,
  1362. HALMAC_API_PHY_CFG = 0x67,
  1363. HALMAC_API_CFG_RX_FIFO_EXPANDING_MODE = 0x68,
  1364. HALMAC_API_CFG_CSI_RATE = 0x69,
  1365. HALMAC_API_P2PPS = 0x6A,
  1366. HALMAC_API_CFG_TX_ADDR = 0x6B,
  1367. HALMAC_API_CFG_NET_TYPE = 0x6C,
  1368. HALMAC_API_CFG_TSF_RESET = 0x6D,
  1369. HALMAC_API_CFG_BCN_SPACE = 0x6E,
  1370. HALMAC_API_CFG_BCN_CTRL = 0x6F,
  1371. HALMAC_API_CFG_SIDEBAND_INT = 0x70,
  1372. HALMAC_API_REGISTER_API = 0x71,
  1373. HALMAC_API_FREE_DOWNLOAD_FIRMWARE = 0x72,
  1374. HALMAC_API_GET_FW_VERSION = 0x73,
  1375. HALMAC_API_GET_EFUSE_AVAL_SIZE = 0x74,
  1376. HALMAC_API_CHK_TXDESC = 0x75,
  1377. HALMAC_API_SDIO_CMD53_4BYTE = 0x76,
  1378. HALMAC_API_CFG_TRANS_ADDR = 0x77,
  1379. HALMAC_API_INTF_INTEGRA_TUNING = 0x78,
  1380. HALMAC_API_TXFIFO_IS_EMPTY = 0x79,
  1381. HALMAC_API_DOWNLOAD_FLASH = 0x7A,
  1382. HALMAC_API_READ_FLASH = 0x7B,
  1383. HALMAC_API_ERASE_FLASH = 0x7C,
  1384. HALMAC_API_CHECK_FLASH = 0x7D,
  1385. HALMAC_API_SDIO_HW_INFO = 0x80,
  1386. HALMAC_API_READ_EFUSE_BT = 0x81,
  1387. HALMAC_API_CFG_EFUSE_AUTO_CHECK = 0x82,
  1388. HALMAC_API_CFG_PINMUX_GET_FUNC = 0x83,
  1389. HALMAC_API_CFG_PINMUX_SET_FUNC = 0x84,
  1390. HALMAC_API_CFG_PINMUX_FREE_FUNC = 0x85,
  1391. HALMAC_API_CFG_PINMUX_WL_LED_MODE = 0x86,
  1392. HALMAC_API_CFG_PINMUX_WL_LED_SW_CTRL = 0x87,
  1393. HALMAC_API_CFG_PINMUX_SDIO_INT_POLARITY = 0x88,
  1394. HALMAC_API_CFG_PINMUX_GPIO_MODE = 0x89,
  1395. HALMAC_API_CFG_PINMUX_GPIO_OUTPUT = 0x90,
  1396. HALMAC_API_REG_READ_INDIRECT_32 = 0x91,
  1397. HALMAC_API_REG_SDIO_CMD53_READ_N = 0x92,
  1398. HALMAC_API_PINMUX_PIN_STATUS = 0x94,
  1399. HALMAC_API_OFLD_FUNC_CFG = 0x95,
  1400. HALMAC_API_MASK_LOGICAL_EFUSE = 0x96,
  1401. HALMAC_API_RX_CUT_AMSDU_CFG = 0x97,
  1402. HALMAC_API_FW_SNDING = 0x98,
  1403. HALMAC_API_ENTER_CPU_SLEEP_MODE = 0x99,
  1404. HALMAC_API_GET_CPU_MODE = 0x9A,
  1405. HALMAC_API_DRV_FWCTRL = 0x9B,
  1406. HALMAC_API_EN_REF_AUTOK = 0x9C,
  1407. HALMAC_API_MAX
  1408. };
  1409. enum halmac_la_mode {
  1410. HALMAC_LA_MODE_DISABLE = 0,
  1411. HALMAC_LA_MODE_PARTIAL = 1,
  1412. HALMAC_LA_MODE_FULL = 2,
  1413. HALMAC_LA_MODE_UNDEFINE = 0x7F,
  1414. };
  1415. enum halmac_rx_fifo_expanding_mode {
  1416. HALMAC_RX_FIFO_EXPANDING_MODE_DISABLE = 0,
  1417. HALMAC_RX_FIFO_EXPANDING_MODE_1_BLOCK = 1,
  1418. HALMAC_RX_FIFO_EXPANDING_MODE_2_BLOCK = 2,
  1419. HALMAC_RX_FIFO_EXPANDING_MODE_3_BLOCK = 3,
  1420. HALMAC_RX_FIFO_EXPANDING_MODE_4_BLOCK = 4,
  1421. HALMAC_RX_FIFO_EXPANDING_MODE_UNDEFINE = 0x7F,
  1422. };
  1423. enum halmac_sdio_cmd53_4byte_mode {
  1424. HALMAC_SDIO_CMD53_4BYTE_MODE_DISABLE = 0,
  1425. HALMAC_SDIO_CMD53_4BYTE_MODE_RW = 1,
  1426. HALMAC_SDIO_CMD53_4BYTE_MODE_R = 2,
  1427. HALMAC_SDIO_CMD53_4BYTE_MODE_W = 3,
  1428. HALMAC_SDIO_CMD53_4BYTE_MODE_UNDEFINE = 0x7F,
  1429. };
  1430. enum halmac_usb_mode {
  1431. HALMAC_USB_MODE_U2 = 1,
  1432. HALMAC_USB_MODE_U3 = 2,
  1433. };
  1434. enum halmac_sdio_tx_format {
  1435. HALMAC_SDIO_AGG_MODE = 1,
  1436. HALMAC_SDIO_DUMMY_BLOCK_MODE = 2,
  1437. HALMAC_SDIO_DUMMY_AUTO_MODE = 3,
  1438. };
  1439. enum halmac_sdio_clk_monitor {
  1440. HALMAC_MONITOR_5US = 1,
  1441. HALMAC_MONITOR_50US = 2,
  1442. HALMAC_MONITOR_9MS = 3,
  1443. };
  1444. enum halmac_hw_id {
  1445. /* Get HW value */
  1446. HALMAC_HW_RQPN_MAPPING = 0x00,
  1447. HALMAC_HW_EFUSE_SIZE = 0x01,
  1448. HALMAC_HW_EEPROM_SIZE = 0x02,
  1449. HALMAC_HW_BT_BANK_EFUSE_SIZE = 0x03,
  1450. HALMAC_HW_BT_BANK1_EFUSE_SIZE = 0x04,
  1451. HALMAC_HW_BT_BANK2_EFUSE_SIZE = 0x05,
  1452. HALMAC_HW_TXFIFO_SIZE = 0x06,
  1453. HALMAC_HW_RXFIFO_SIZE = 0x07,
  1454. HALMAC_HW_RSVD_PG_BNDY = 0x08,
  1455. HALMAC_HW_CAM_ENTRY_NUM = 0x09,
  1456. HALMAC_HW_IC_VERSION = 0x0A,
  1457. HALMAC_HW_PAGE_SIZE = 0x0B,
  1458. HALMAC_HW_TX_AGG_ALIGN_SIZE = 0x0C,
  1459. HALMAC_HW_RX_AGG_ALIGN_SIZE = 0x0D,
  1460. HALMAC_HW_DRV_INFO_SIZE = 0x0E,
  1461. HALMAC_HW_TXFF_ALLOCATION = 0x0F,
  1462. HALMAC_HW_RSVD_EFUSE_SIZE = 0x10,
  1463. HALMAC_HW_FW_HDR_SIZE = 0x11,
  1464. HALMAC_HW_TX_DESC_SIZE = 0x12,
  1465. HALMAC_HW_RX_DESC_SIZE = 0x13,
  1466. HALMAC_HW_FW_MAX_SIZE = 0x14,
  1467. HALMAC_HW_ORI_H2C_SIZE = 0x15,
  1468. HALMAC_HW_RSVD_DRV_PGNUM = 0x16,
  1469. HALMAC_HW_TX_PAGE_SIZE = 0x17,
  1470. HALMAC_HW_USB_TXAGG_DESC_NUM = 0x18,
  1471. HALMAC_HW_WLAN_EFUSE_AVAILABLE_SIZE = 0x19,
  1472. HALMAC_HW_AC_OQT_SIZE = 0x1C,
  1473. HALMAC_HW_NON_AC_OQT_SIZE = 0x1D,
  1474. HALMAC_HW_AC_QUEUE_NUM = 0x1E,
  1475. HALMAC_HW_RQPN_CH_MAPPING = 0x1F,
  1476. HALMAC_HW_PWR_STATE = 0x20,
  1477. HALMAC_HW_SDIO_INT_LAT = 0x21,
  1478. HALMAC_HW_SDIO_CLK_CNT = 0x22,
  1479. /* Set HW value */
  1480. HALMAC_HW_USB_MODE = 0x60,
  1481. HALMAC_HW_SEQ_EN = 0x61,
  1482. HALMAC_HW_BANDWIDTH = 0x62,
  1483. HALMAC_HW_CHANNEL = 0x63,
  1484. HALMAC_HW_PRI_CHANNEL_IDX = 0x64,
  1485. HALMAC_HW_EN_BB_RF = 0x65,
  1486. HALMAC_HW_SDIO_TX_PAGE_THRESHOLD = 0x66,
  1487. HALMAC_HW_AMPDU_CONFIG = 0x67,
  1488. HALMAC_HW_RX_SHIFT = 0x68,
  1489. HALMAC_HW_TXDESC_CHECKSUM = 0x69,
  1490. HALMAC_HW_RX_CLK_GATE = 0x6A,
  1491. HALMAC_HW_RXGCK_FIFO = 0x6B,
  1492. HALMAC_HW_RX_IGNORE = 0x6C,
  1493. HALMAC_HW_SDIO_TX_FORMAT = 0x6D,
  1494. HALMAC_HW_FAST_EDCA = 0x6E,
  1495. HALMAC_HW_LDO25_EN = 0x6F,
  1496. HALMAC_HW_PCIE_REF_AUTOK = 0x70,
  1497. HALMAC_HW_RTS_FULL_BW = 0x71,
  1498. HALMAC_HW_FREE_CNT_EN = 0x72,
  1499. HALMAC_HW_SDIO_WT_EN = 0x73,
  1500. HALMAC_HW_SDIO_CLK_MONITOR = 0x74,
  1501. HALMAC_HW_ID_UNDEFINE = 0x7F,
  1502. };
  1503. enum halmac_efuse_bank {
  1504. HALMAC_EFUSE_BANK_WIFI = 0,
  1505. HALMAC_EFUSE_BANK_BT = 1,
  1506. HALMAC_EFUSE_BANK_BT_1 = 2,
  1507. HALMAC_EFUSE_BANK_BT_2 = 3,
  1508. HALMAC_EFUSE_BANK_MAX,
  1509. HALMAC_EFUSE_BANK_UNDEFINE = 0X7F,
  1510. };
  1511. enum halmac_sdio_spec_ver {
  1512. HALMAC_SDIO_SPEC_VER_2_00 = 0,
  1513. HALMAC_SDIO_SPEC_VER_3_00 = 1,
  1514. HALMAC_SDIO_SPEC_VER_UNDEFINE = 0X7F,
  1515. };
  1516. enum halmac_gpio_func {
  1517. HALMAC_GPIO_FUNC_WL_LED = 0,
  1518. HALMAC_GPIO_FUNC_SDIO_INT = 1,
  1519. HALMAC_GPIO_FUNC_SW_IO_0 = 2,
  1520. HALMAC_GPIO_FUNC_SW_IO_1 = 3,
  1521. HALMAC_GPIO_FUNC_SW_IO_2 = 4,
  1522. HALMAC_GPIO_FUNC_SW_IO_3 = 5,
  1523. HALMAC_GPIO_FUNC_SW_IO_4 = 6,
  1524. HALMAC_GPIO_FUNC_SW_IO_5 = 7,
  1525. HALMAC_GPIO_FUNC_SW_IO_6 = 8,
  1526. HALMAC_GPIO_FUNC_SW_IO_7 = 9,
  1527. HALMAC_GPIO_FUNC_SW_IO_8 = 10,
  1528. HALMAC_GPIO_FUNC_SW_IO_9 = 11,
  1529. HALMAC_GPIO_FUNC_SW_IO_10 = 12,
  1530. HALMAC_GPIO_FUNC_SW_IO_11 = 13,
  1531. HALMAC_GPIO_FUNC_SW_IO_12 = 14,
  1532. HALMAC_GPIO_FUNC_SW_IO_13 = 15,
  1533. HALMAC_GPIO_FUNC_SW_IO_14 = 16,
  1534. HALMAC_GPIO_FUNC_SW_IO_15 = 17,
  1535. HALMAC_GPIO_FUNC_BT_HOST_WAKE1 = 18,
  1536. HALMAC_GPIO_FUNC_BT_DEV_WAKE1 = 19,
  1537. HALMAC_GPIO_FUNC_UNDEFINE = 0X7F,
  1538. };
  1539. enum halmac_wlled_mode {
  1540. HALMAC_WLLED_MODE_TRX = 0,
  1541. HALMAC_WLLED_MODE_TX = 1,
  1542. HALMAC_WLLED_MODE_RX = 2,
  1543. HALMAC_WLLED_MODE_SW_CTRL = 3,
  1544. HALMAC_WLLED_MODE_UNDEFINE = 0X7F,
  1545. };
  1546. enum halmac_psf_fcs_chk_thr {
  1547. HALMAC_PSF_FCS_CHK_THR_1 = 0,
  1548. HALMAC_PSF_FCS_CHK_THR_4 = 1,
  1549. HALMAC_PSF_FCS_CHK_THR_8 = 2,
  1550. HALMAC_PSF_FCS_CHK_THR_12 = 3,
  1551. HALMAC_PSF_FCS_CHK_THR_16 = 4,
  1552. HALMAC_PSF_FCS_CHK_THR_20 = 5,
  1553. HALMAC_PSF_FCS_CHK_THR_24 = 6,
  1554. HALMAC_PSF_FCS_CHK_THR_28 = 7,
  1555. };
  1556. struct halmac_txff_allocation {
  1557. u16 tx_fifo_pg_num;
  1558. u16 rsvd_pg_num;
  1559. u16 rsvd_drv_pg_num;
  1560. u16 acq_pg_num;
  1561. u16 high_queue_pg_num;
  1562. u16 low_queue_pg_num;
  1563. u16 normal_queue_pg_num;
  1564. u16 extra_queue_pg_num;
  1565. u16 pub_queue_pg_num;
  1566. u16 rsvd_boundary;
  1567. u16 rsvd_drv_addr;
  1568. u16 rsvd_h2c_info_addr;
  1569. u16 rsvd_h2c_sta_info_addr;
  1570. u16 rsvd_h2cq_addr;
  1571. u16 rsvd_cpu_instr_addr;
  1572. u16 rsvd_fw_txbuf_addr;
  1573. u16 rsvd_csibuf_addr;
  1574. enum halmac_la_mode la_mode;
  1575. enum halmac_rx_fifo_expanding_mode rx_fifo_exp_mode;
  1576. };
  1577. struct halmac_rqpn_map {
  1578. enum halmac_dma_mapping dma_map_vo;
  1579. enum halmac_dma_mapping dma_map_vi;
  1580. enum halmac_dma_mapping dma_map_be;
  1581. enum halmac_dma_mapping dma_map_bk;
  1582. enum halmac_dma_mapping dma_map_mg;
  1583. enum halmac_dma_mapping dma_map_hi;
  1584. };
  1585. struct halmac_rqpn_ch_map {
  1586. enum halmac_dma_ch dma_map_vo;
  1587. enum halmac_dma_ch dma_map_vi;
  1588. enum halmac_dma_ch dma_map_be;
  1589. enum halmac_dma_ch dma_map_bk;
  1590. enum halmac_dma_ch dma_map_mg;
  1591. enum halmac_dma_ch dma_map_hi;
  1592. };
  1593. struct halmac_security_setting {
  1594. u8 tx_encryption;
  1595. u8 rx_decryption;
  1596. u8 bip_enable;
  1597. u8 compare_keyid;
  1598. };
  1599. struct halmac_cam_entry_info {
  1600. enum hal_security_type security_type;
  1601. u32 key[4];
  1602. u32 key_ext[4];
  1603. u8 mac_address[6];
  1604. u8 unicast;
  1605. u8 key_id;
  1606. u8 valid;
  1607. };
  1608. struct halmac_cam_entry_format {
  1609. u16 key_id : 2;
  1610. u16 type : 3;
  1611. u16 mic : 1;
  1612. u16 grp : 1;
  1613. u16 spp_mode : 1;
  1614. u16 rpt_md : 1;
  1615. u16 ext_sectype : 1;
  1616. u16 mgnt : 1;
  1617. u16 rsvd1 : 4;
  1618. u16 valid : 1;
  1619. u8 mac_address[6];
  1620. u32 key[4];
  1621. u32 rsvd[2];
  1622. };
  1623. struct halmac_tx_page_threshold_info {
  1624. u32 threshold;
  1625. enum halmac_dma_mapping dma_queue_sel;
  1626. u8 enable;
  1627. };
  1628. struct halmac_ampdu_config {
  1629. u8 max_agg_num;
  1630. u8 max_len_en;
  1631. u32 ht_max_len;
  1632. u32 vht_max_len;
  1633. };
  1634. struct halmac_rqpn {
  1635. enum halmac_trx_mode mode;
  1636. enum halmac_dma_mapping dma_map_vo;
  1637. enum halmac_dma_mapping dma_map_vi;
  1638. enum halmac_dma_mapping dma_map_be;
  1639. enum halmac_dma_mapping dma_map_bk;
  1640. enum halmac_dma_mapping dma_map_mg;
  1641. enum halmac_dma_mapping dma_map_hi;
  1642. };
  1643. struct halmac_ch_mapping {
  1644. enum halmac_trx_mode mode;
  1645. enum halmac_dma_ch dma_map_vo;
  1646. enum halmac_dma_ch dma_map_vi;
  1647. enum halmac_dma_ch dma_map_be;
  1648. enum halmac_dma_ch dma_map_bk;
  1649. enum halmac_dma_ch dma_map_mg;
  1650. enum halmac_dma_ch dma_map_hi;
  1651. };
  1652. struct halmac_pg_num {
  1653. enum halmac_trx_mode mode;
  1654. u16 hq_num;
  1655. u16 nq_num;
  1656. u16 lq_num;
  1657. u16 exq_num;
  1658. u16 gap_num;/*used for loopback mode*/
  1659. };
  1660. struct halmac_ch_pg_num {
  1661. enum halmac_trx_mode mode;
  1662. u16 ch_num[HALMAC_TXDESC_DMA_CH16 + 1];
  1663. u16 gap_num;
  1664. };
  1665. struct halmac_intf_phy_para {
  1666. u16 offset;
  1667. u16 value;
  1668. u16 ip_sel;
  1669. u16 cut;
  1670. u16 plaform;
  1671. };
  1672. struct halmac_iqk_para {
  1673. u8 clear;
  1674. u8 segment_iqk;
  1675. };
  1676. struct halmac_txdesc_ie_param {
  1677. u8 *start_offset;
  1678. u8 *end_offset;
  1679. u8 *ie_offset;
  1680. u8 *ie_exist;
  1681. };
  1682. struct halmac_sdio_hw_info {
  1683. enum halmac_sdio_spec_ver spec_ver;
  1684. u32 clock_speed;
  1685. u8 io_hi_speed_flag; /* Halmac internal use */
  1686. enum halmac_sdio_tx_format tx_addr_format;
  1687. u16 block_size;
  1688. u8 tx_seq;
  1689. u8 io_indir_flag; /* Halmac internal use */
  1690. };
  1691. struct halmac_edca_para {
  1692. u8 aifs;
  1693. u8 cw;
  1694. u16 txop_limit;
  1695. };
  1696. struct halmac_mac_rx_ignore_cfg {
  1697. u8 hdr_chk_en;
  1698. u8 fcs_chk_en;
  1699. u8 cck_rst_en;
  1700. enum halmac_psf_fcs_chk_thr fcs_chk_thr;
  1701. };
  1702. struct halmac_rx_ignore_info {
  1703. u8 hdr_chk_mask;
  1704. u8 fcs_chk_mask;
  1705. u8 hdr_chk_en;
  1706. u8 fcs_chk_en;
  1707. u8 cck_rst_en;
  1708. enum halmac_psf_fcs_chk_thr fcs_chk_thr;
  1709. };
  1710. struct halmac_pinmux_info {
  1711. /* byte0 */
  1712. u8 wl_led:1;
  1713. u8 sdio_int:1;
  1714. u8 bt_host_wake:1;
  1715. u8 bt_dev_wake:1;
  1716. u8 rsvd1:4;
  1717. /* byte1 */
  1718. u8 sw_io_0:1;
  1719. u8 sw_io_1:1;
  1720. u8 sw_io_2:1;
  1721. u8 sw_io_3:1;
  1722. u8 sw_io_4:1;
  1723. u8 sw_io_5:1;
  1724. u8 sw_io_6:1;
  1725. u8 sw_io_7:1;
  1726. /* byte2 */
  1727. u8 sw_io_8:1;
  1728. u8 sw_io_9:1;
  1729. u8 sw_io_10:1;
  1730. u8 sw_io_11:1;
  1731. u8 sw_io_12:1;
  1732. u8 sw_io_13:1;
  1733. u8 sw_io_14:1;
  1734. u8 sw_io_15:1;
  1735. };
  1736. struct halmac_ofld_func_info {
  1737. u32 halmac_malloc_max_sz;
  1738. u32 rsvd_pg_drv_buf_max_sz;
  1739. };
  1740. struct halmac_pltfm_cfg_info {
  1741. u32 malloc_size;
  1742. u32 rsvd_pg_size;
  1743. };
  1744. struct halmac_su_snding_info {
  1745. u8 su0_en;
  1746. u8 *su0_ndpa_pkt;
  1747. u32 su0_pkt_sz;
  1748. };
  1749. struct halmac_mu_snding_info {
  1750. u8 tmp;
  1751. };
  1752. struct halmac_h2c_info {
  1753. u32 buf_fs;
  1754. u32 buf_size;
  1755. u8 seq_num;
  1756. };
  1757. struct halmac_adapter {
  1758. enum halmac_dma_mapping pq_map[HALMAC_PQ_MAP_NUM];
  1759. enum halmac_dma_ch ch_map[HALMAC_PQ_MAP_NUM];
  1760. HALMAC_MUTEX h2c_seq_mutex; /* protect h2c seq num */
  1761. HALMAC_MUTEX efuse_mutex; /*protect adapter efuse map */
  1762. HALMAC_MUTEX sdio_indir_mutex; /*protect sdio indirect access */
  1763. struct halmac_cfg_param_info cfg_param_info;
  1764. struct halmac_ch_sw_info ch_sw_info;
  1765. struct halmac_event_trigger evnt;
  1766. struct halmac_hw_cfg_info hw_cfg_info;
  1767. struct halmac_sdio_free_space sdio_fs;
  1768. struct halmac_api_registry api_registry;
  1769. struct halmac_pinmux_info pinmux_info;
  1770. struct halmac_pltfm_cfg_info pltfm_info;
  1771. struct halmac_h2c_info h2c_info;
  1772. void *drv_adapter;
  1773. u8 *efuse_map;
  1774. void *halmac_api;
  1775. struct halmac_platform_api *pltfm_api;
  1776. u32 efuse_end;
  1777. u32 dlfw_pkt_size;
  1778. enum halmac_chip_id chip_id;
  1779. enum halmac_chip_ver chip_ver;
  1780. struct halmac_fw_version fw_ver;
  1781. struct halmac_state halmac_state;
  1782. enum halmac_interface intf;
  1783. enum halmac_trx_mode trx_mode;
  1784. struct halmac_txff_allocation txff_alloc;
  1785. u8 efuse_map_valid;
  1786. u8 efuse_seg_size;
  1787. u8 rpwm;
  1788. u8 bulkout_num;
  1789. u8 drv_info_size;
  1790. enum halmac_sdio_cmd53_4byte_mode sdio_cmd53_4byte;
  1791. struct halmac_sdio_hw_info sdio_hw_info;
  1792. u8 tx_desc_transfer;
  1793. u8 tx_desc_checksum;
  1794. u8 efuse_auto_check_en;
  1795. u8 pcie_refautok_en;
  1796. u8 pwr_off_flow_flag;
  1797. struct halmac_rx_ignore_info rx_ignore_info;
  1798. #if HALMAC_PLATFORM_TESTPROGRAM
  1799. struct halmisc_adapter *halmisc_adapter;
  1800. #endif
  1801. };
  1802. struct halmac_api {
  1803. enum halmac_ret_status
  1804. (*halmac_register_api)(struct halmac_adapter *adapter,
  1805. struct halmac_api_registry *registry);
  1806. enum halmac_ret_status
  1807. (*halmac_mac_power_switch)(struct halmac_adapter *adapter,
  1808. enum halmac_mac_power pwr);
  1809. enum halmac_ret_status
  1810. (*halmac_download_firmware)(struct halmac_adapter *adapter, u8 *fw_bin,
  1811. u32 size);
  1812. enum halmac_ret_status
  1813. (*halmac_free_download_firmware)(struct halmac_adapter *adapter,
  1814. enum halmac_dlfw_mem mem_sel,
  1815. u8 *fw_bin, u32 size);
  1816. enum halmac_ret_status
  1817. (*halmac_get_fw_version)(struct halmac_adapter *adapter,
  1818. struct halmac_fw_version *ver);
  1819. enum halmac_ret_status
  1820. (*halmac_cfg_mac_addr)(struct halmac_adapter *adapter,
  1821. u8 port, union halmac_wlan_addr *addr);
  1822. enum halmac_ret_status
  1823. (*halmac_cfg_bssid)(struct halmac_adapter *adapter, u8 port,
  1824. union halmac_wlan_addr *addr);
  1825. enum halmac_ret_status
  1826. (*halmac_cfg_multicast_addr)(struct halmac_adapter *adapter,
  1827. union halmac_wlan_addr *addr);
  1828. enum halmac_ret_status
  1829. (*halmac_pre_init_system_cfg)(struct halmac_adapter *adapter);
  1830. enum halmac_ret_status
  1831. (*halmac_init_system_cfg)(struct halmac_adapter *adapter);
  1832. enum halmac_ret_status
  1833. (*halmac_init_trx_cfg)(struct halmac_adapter *adapter,
  1834. enum halmac_trx_mode mode);
  1835. enum halmac_ret_status
  1836. (*halmac_init_h2c)(struct halmac_adapter *adapter);
  1837. enum halmac_ret_status
  1838. (*halmac_cfg_rx_aggregation)(struct halmac_adapter *adapter,
  1839. struct halmac_rxagg_cfg *cfg);
  1840. enum halmac_ret_status
  1841. (*halmac_init_protocol_cfg)(struct halmac_adapter *adapter);
  1842. enum halmac_ret_status
  1843. (*halmac_init_edca_cfg)(struct halmac_adapter *adapter);
  1844. enum halmac_ret_status
  1845. (*halmac_cfg_operation_mode)(struct halmac_adapter *adapter,
  1846. enum halmac_wireless_mode mode);
  1847. enum halmac_ret_status
  1848. (*halmac_cfg_ch_bw)(struct halmac_adapter *adapter, u8 ch,
  1849. enum halmac_pri_ch_idx idx, enum halmac_bw bw);
  1850. enum halmac_ret_status
  1851. (*halmac_cfg_bw)(struct halmac_adapter *adapter, enum halmac_bw bw);
  1852. enum halmac_ret_status
  1853. (*halmac_init_wmac_cfg)(struct halmac_adapter *adapter);
  1854. enum halmac_ret_status
  1855. (*halmac_init_mac_cfg)(struct halmac_adapter *adapter,
  1856. enum halmac_trx_mode mode);
  1857. enum halmac_ret_status
  1858. (*halmac_init_interface_cfg)(struct halmac_adapter *adapter);
  1859. enum halmac_ret_status
  1860. (*halmac_deinit_interface_cfg)(struct halmac_adapter *adapter);
  1861. enum halmac_ret_status
  1862. (*halmac_init_sdio_cfg)(struct halmac_adapter *adapter);
  1863. enum halmac_ret_status
  1864. (*halmac_init_usb_cfg)(struct halmac_adapter *adapter);
  1865. enum halmac_ret_status
  1866. (*halmac_init_pcie_cfg)(struct halmac_adapter *adapter);
  1867. enum halmac_ret_status
  1868. (*halmac_deinit_sdio_cfg)(struct halmac_adapter *adapter);
  1869. enum halmac_ret_status
  1870. (*halmac_deinit_usb_cfg)(struct halmac_adapter *adapter);
  1871. enum halmac_ret_status
  1872. (*halmac_deinit_pcie_cfg)(struct halmac_adapter *adapter);
  1873. enum halmac_ret_status
  1874. (*halmac_get_efuse_size)(struct halmac_adapter *adapter, u32 *size);
  1875. enum halmac_ret_status
  1876. (*halmac_get_efuse_available_size)(struct halmac_adapter *adapter,
  1877. u32 *size);
  1878. enum halmac_ret_status
  1879. (*halmac_dump_efuse_map)(struct halmac_adapter *adapter,
  1880. enum halmac_efuse_read_cfg cfg);
  1881. enum halmac_ret_status
  1882. (*halmac_dump_efuse_map_bt)(struct halmac_adapter *adapter,
  1883. enum halmac_efuse_bank bank, u32 size,
  1884. u8 *map);
  1885. enum halmac_ret_status
  1886. (*halmac_write_efuse_bt)(struct halmac_adapter *adapter, u32 offset,
  1887. u8 value, enum halmac_efuse_bank bank);
  1888. enum halmac_ret_status
  1889. (*halmac_read_efuse_bt)(struct halmac_adapter *adapter, u32 offset,
  1890. u8 *value, enum halmac_efuse_bank bank);
  1891. enum halmac_ret_status
  1892. (*halmac_cfg_efuse_auto_check)(struct halmac_adapter *adapter,
  1893. u8 enable);
  1894. enum halmac_ret_status
  1895. (*halmac_get_logical_efuse_size)(struct halmac_adapter *adapter,
  1896. u32 *size);
  1897. enum halmac_ret_status
  1898. (*halmac_dump_logical_efuse_map)(struct halmac_adapter *adapter,
  1899. enum halmac_efuse_read_cfg cfg);
  1900. enum halmac_ret_status
  1901. (*halmac_write_logical_efuse)(struct halmac_adapter *adapter,
  1902. u32 offset, u8 value);
  1903. enum halmac_ret_status
  1904. (*halmac_read_logical_efuse)(struct halmac_adapter *adapter, u32 offset,
  1905. u8 *value);
  1906. enum halmac_ret_status
  1907. (*halmac_pg_efuse_by_map)(struct halmac_adapter *adapter,
  1908. struct halmac_pg_efuse_info *info,
  1909. enum halmac_efuse_read_cfg cfg);
  1910. enum halmac_ret_status
  1911. (*halmac_mask_logical_efuse)(struct halmac_adapter *adapter,
  1912. struct halmac_pg_efuse_info *info);
  1913. enum halmac_ret_status
  1914. (*halmac_get_c2h_info)(struct halmac_adapter *adapter, u8 *buf,
  1915. u32 size);
  1916. enum halmac_ret_status
  1917. (*halmac_h2c_lb)(struct halmac_adapter *adapter);
  1918. enum halmac_ret_status
  1919. (*halmac_debug)(struct halmac_adapter *adapter);
  1920. enum halmac_ret_status
  1921. (*halmac_cfg_parameter)(struct halmac_adapter *adapter,
  1922. struct halmac_phy_parameter_info *info,
  1923. u8 full_fifo);
  1924. enum halmac_ret_status
  1925. (*halmac_update_packet)(struct halmac_adapter *adapter,
  1926. enum halmac_packet_id pkt_id, u8 *pkt,
  1927. u32 size);
  1928. enum halmac_ret_status
  1929. (*halmac_bcn_ie_filter)(struct halmac_adapter *adapter,
  1930. struct halmac_bcn_ie_info *info);
  1931. u8
  1932. (*halmac_reg_read_8)(struct halmac_adapter *adapter, u32 offset);
  1933. enum halmac_ret_status
  1934. (*halmac_reg_write_8)(struct halmac_adapter *adapter, u32 offset,
  1935. u8 value);
  1936. u16
  1937. (*halmac_reg_read_16)(struct halmac_adapter *adapter, u32 offset);
  1938. enum halmac_ret_status
  1939. (*halmac_reg_write_16)(struct halmac_adapter *adapter, u32 offset,
  1940. u16 value);
  1941. u32
  1942. (*halmac_reg_read_32)(struct halmac_adapter *adapter, u32 offset);
  1943. enum halmac_ret_status
  1944. (*halmac_reg_write_32)(struct halmac_adapter *adapter, u32 offset,
  1945. u32 value);
  1946. u32
  1947. (*halmac_reg_read_indirect_32)(struct halmac_adapter *adapter,
  1948. u32 offset);
  1949. enum halmac_ret_status
  1950. (*halmac_reg_sdio_cmd53_read_n)(struct halmac_adapter *adapter,
  1951. u32 offset, u32 size, u8 *value);
  1952. enum halmac_ret_status
  1953. (*halmac_tx_allowed_sdio)(struct halmac_adapter *adapter, u8 *buf,
  1954. u32 size);
  1955. enum halmac_ret_status
  1956. (*halmac_set_bulkout_num)(struct halmac_adapter *adapter, u8 num);
  1957. enum halmac_ret_status
  1958. (*halmac_get_sdio_tx_addr)(struct halmac_adapter *adapter, u8 *buf,
  1959. u32 size, u32 *cmd53_addr);
  1960. enum halmac_ret_status
  1961. (*halmac_get_usb_bulkout_id)(struct halmac_adapter *adapter, u8 *buf,
  1962. u32 size, u8 *id);
  1963. enum halmac_ret_status
  1964. (*halmac_fill_txdesc_checksum)(struct halmac_adapter *adapter,
  1965. u8 *txdesc);
  1966. enum halmac_ret_status
  1967. (*halmac_update_datapack)(struct halmac_adapter *adapter,
  1968. enum halmac_data_type data_type,
  1969. struct halmac_phy_parameter_info *info);
  1970. enum halmac_ret_status
  1971. (*halmac_run_datapack)(struct halmac_adapter *adapter,
  1972. enum halmac_data_type data_type);
  1973. enum halmac_ret_status
  1974. (*halmac_cfg_drv_info)(struct halmac_adapter *adapter,
  1975. enum halmac_drv_info drv_info);
  1976. enum halmac_ret_status
  1977. (*halmac_send_bt_coex)(struct halmac_adapter *adapter, u8 *buf,
  1978. u32 size, u8 ack);
  1979. enum halmac_ret_status
  1980. (*halmac_verify_platform_api)(struct halmac_adapter *adapter);
  1981. u32
  1982. (*halmac_get_fifo_size)(struct halmac_adapter *adapter,
  1983. enum hal_fifo_sel sel);
  1984. enum halmac_ret_status
  1985. (*halmac_dump_fifo)(struct halmac_adapter *adapter,
  1986. enum hal_fifo_sel sel, u32 start_addr, u32 size,
  1987. u8 *data);
  1988. enum halmac_ret_status
  1989. (*halmac_cfg_txbf)(struct halmac_adapter *adapter, u8 userid,
  1990. enum halmac_bw bw, u8 txbf_en);
  1991. enum halmac_ret_status
  1992. (*halmac_cfg_mumimo)(struct halmac_adapter *adapter,
  1993. struct halmac_cfg_mumimo_para *param);
  1994. enum halmac_ret_status
  1995. (*halmac_cfg_sounding)(struct halmac_adapter *adapter,
  1996. enum halmac_snd_role role,
  1997. enum halmac_data_rate rate);
  1998. enum halmac_ret_status
  1999. (*halmac_del_sounding)(struct halmac_adapter *adapter,
  2000. enum halmac_snd_role role);
  2001. enum halmac_ret_status
  2002. (*halmac_su_bfer_entry_init)(struct halmac_adapter *adapter,
  2003. struct halmac_su_bfer_init_para *param);
  2004. enum halmac_ret_status
  2005. (*halmac_su_bfee_entry_init)(struct halmac_adapter *adapter, u8 userid,
  2006. u16 paid);
  2007. enum halmac_ret_status
  2008. (*halmac_mu_bfer_entry_init)(struct halmac_adapter *adapter,
  2009. struct halmac_mu_bfer_init_para *param);
  2010. enum halmac_ret_status
  2011. (*halmac_mu_bfee_entry_init)(struct halmac_adapter *adapter,
  2012. struct halmac_mu_bfee_init_para *param);
  2013. enum halmac_ret_status
  2014. (*halmac_su_bfer_entry_del)(struct halmac_adapter *adapter, u8 userid);
  2015. enum halmac_ret_status
  2016. (*halmac_su_bfee_entry_del)(struct halmac_adapter *adapter, u8 userid);
  2017. enum halmac_ret_status
  2018. (*halmac_mu_bfer_entry_del)(struct halmac_adapter *adapter);
  2019. enum halmac_ret_status
  2020. (*halmac_mu_bfee_entry_del)(struct halmac_adapter *adapter, u8 userid);
  2021. enum halmac_ret_status
  2022. (*halmac_add_ch_info)(struct halmac_adapter *adapter,
  2023. struct halmac_ch_info *info);
  2024. enum halmac_ret_status
  2025. (*halmac_add_extra_ch_info)(struct halmac_adapter *adapter,
  2026. struct halmac_ch_extra_info *info);
  2027. enum halmac_ret_status
  2028. (*halmac_ctrl_ch_switch)(struct halmac_adapter *adapter,
  2029. struct halmac_ch_switch_option *opt);
  2030. enum halmac_ret_status
  2031. (*halmac_p2pps)(struct halmac_adapter *adapter,
  2032. struct halmac_p2pps *info);
  2033. enum halmac_ret_status
  2034. (*halmac_clear_ch_info)(struct halmac_adapter *adapter);
  2035. enum halmac_ret_status
  2036. (*halmac_send_general_info)(struct halmac_adapter *adapter,
  2037. struct halmac_general_info *info);
  2038. enum halmac_ret_status
  2039. (*halmac_start_iqk)(struct halmac_adapter *adapter,
  2040. struct halmac_iqk_para *param);
  2041. enum halmac_ret_status
  2042. (*halmac_ctrl_pwr_tracking)(struct halmac_adapter *adapter,
  2043. struct halmac_pwr_tracking_option *opt);
  2044. enum halmac_ret_status
  2045. (*halmac_psd)(struct halmac_adapter *adapter, u16 start_psd,
  2046. u16 end_psd);
  2047. enum halmac_ret_status
  2048. (*halmac_cfg_tx_agg_align)(struct halmac_adapter *adapter, u8 enable,
  2049. u16 align_size);
  2050. enum halmac_ret_status
  2051. (*halmac_query_status)(struct halmac_adapter *adapter,
  2052. enum halmac_feature_id feature_id,
  2053. enum halmac_cmd_process_status *proc_status,
  2054. u8 *data, u32 *size);
  2055. enum halmac_ret_status
  2056. (*halmac_reset_feature)(struct halmac_adapter *adapter,
  2057. enum halmac_feature_id feature_id);
  2058. enum halmac_ret_status
  2059. (*halmac_check_fw_status)(struct halmac_adapter *adapter,
  2060. u8 *fw_status);
  2061. enum halmac_ret_status
  2062. (*halmac_dump_fw_dmem)(struct halmac_adapter *adapter, u8 *dmem,
  2063. u32 *size);
  2064. enum halmac_ret_status
  2065. (*halmac_cfg_max_dl_size)(struct halmac_adapter *adapter, u32 size);
  2066. enum halmac_ret_status
  2067. (*halmac_cfg_la_mode)(struct halmac_adapter *adapter,
  2068. enum halmac_la_mode mode);
  2069. enum halmac_ret_status
  2070. (*halmac_cfg_rxff_expand_mode)(struct halmac_adapter *adapter,
  2071. enum halmac_rx_fifo_expanding_mode mode);
  2072. enum halmac_ret_status
  2073. (*halmac_config_security)(struct halmac_adapter *adapter,
  2074. struct halmac_security_setting *setting);
  2075. u8
  2076. (*halmac_get_used_cam_entry_num)(struct halmac_adapter *adapter,
  2077. enum hal_security_type sec_type);
  2078. enum halmac_ret_status
  2079. (*halmac_write_cam)(struct halmac_adapter *adapter, u32 idx,
  2080. struct halmac_cam_entry_info *info);
  2081. enum halmac_ret_status
  2082. (*halmac_read_cam_entry)(struct halmac_adapter *adapter, u32 idx,
  2083. struct halmac_cam_entry_format *content);
  2084. enum halmac_ret_status
  2085. (*halmac_clear_cam_entry)(struct halmac_adapter *adapter, u32 idx);
  2086. enum halmac_ret_status
  2087. (*halmac_get_hw_value)(struct halmac_adapter *adapter,
  2088. enum halmac_hw_id hw_id, void *value);
  2089. enum halmac_ret_status
  2090. (*halmac_set_hw_value)(struct halmac_adapter *adapter,
  2091. enum halmac_hw_id hw_id, void *value);
  2092. enum halmac_ret_status
  2093. (*halmac_cfg_drv_rsvd_pg_num)(struct halmac_adapter *adapter,
  2094. enum halmac_drv_rsvd_pg_num pg_num);
  2095. enum halmac_ret_status
  2096. (*halmac_get_chip_version)(struct halmac_adapter *adapter,
  2097. struct halmac_ver *ver);
  2098. enum halmac_ret_status
  2099. (*halmac_chk_txdesc)(struct halmac_adapter *adapter, u8 *buf, u32 size);
  2100. enum halmac_ret_status
  2101. (*halmac_dl_drv_rsvd_page)(struct halmac_adapter *adapter, u8 pg_offset,
  2102. u8 *buf, u32 size);
  2103. enum halmac_ret_status
  2104. (*halmac_pcie_switch)(struct halmac_adapter *adapter,
  2105. enum halmac_pcie_cfg cfg);
  2106. enum halmac_ret_status
  2107. (*halmac_phy_cfg)(struct halmac_adapter *adapter,
  2108. enum halmac_intf_phy_platform pltfm);
  2109. enum halmac_ret_status
  2110. (*halmac_cfg_csi_rate)(struct halmac_adapter *adapter, u8 rssi,
  2111. u8 cur_rate, u8 fixrate_en, u8 *new_rate);
  2112. #if HALMAC_SDIO_SUPPORT
  2113. enum halmac_ret_status
  2114. (*halmac_sdio_cmd53_4byte)(struct halmac_adapter *adapter,
  2115. enum halmac_sdio_cmd53_4byte_mode mode);
  2116. enum halmac_ret_status
  2117. (*halmac_sdio_hw_info)(struct halmac_adapter *adapter,
  2118. struct halmac_sdio_hw_info *info);
  2119. #endif
  2120. enum halmac_ret_status
  2121. (*halmac_cfg_transmitter_addr)(struct halmac_adapter *adapter, u8 port,
  2122. union halmac_wlan_addr *addr);
  2123. enum halmac_ret_status
  2124. (*halmac_cfg_net_type)(struct halmac_adapter *adapter, u8 port,
  2125. enum halmac_network_type_select net_type);
  2126. enum halmac_ret_status
  2127. (*halmac_cfg_tsf_rst)(struct halmac_adapter *adapter, u8 port);
  2128. enum halmac_ret_status
  2129. (*halmac_cfg_bcn_space)(struct halmac_adapter *adapter, u8 port,
  2130. u32 bcn_space);
  2131. enum halmac_ret_status
  2132. (*halmac_rw_bcn_ctrl)(struct halmac_adapter *adapter, u8 port,
  2133. u8 write_en, struct halmac_bcn_ctrl *ctrl);
  2134. enum halmac_ret_status
  2135. (*halmac_interface_integration_tuning)(struct halmac_adapter *adapter);
  2136. enum halmac_ret_status
  2137. (*halmac_txfifo_is_empty)(struct halmac_adapter *adapter, u32 chk_num);
  2138. enum halmac_ret_status
  2139. (*halmac_download_flash)(struct halmac_adapter *adapter, u8 *fw_bin,
  2140. u32 size, u32 rom_addr);
  2141. enum halmac_ret_status
  2142. (*halmac_read_flash)(struct halmac_adapter *adapter, u32 addr,
  2143. u32 length);
  2144. enum halmac_ret_status
  2145. (*halmac_erase_flash)(struct halmac_adapter *adapter, u8 erase_cmd,
  2146. u32 addr);
  2147. enum halmac_ret_status
  2148. (*halmac_check_flash)(struct halmac_adapter *adapter, u8 *fw_bin,
  2149. u32 size, u32 addr);
  2150. enum halmac_ret_status
  2151. (*halmac_cfg_edca_para)(struct halmac_adapter *adapter,
  2152. enum halmac_acq_id acq_id,
  2153. struct halmac_edca_para *param);
  2154. enum halmac_ret_status
  2155. (*halmac_pinmux_get_func)(struct halmac_adapter *adapter,
  2156. enum halmac_gpio_func gpio_func, u8 *enable);
  2157. enum halmac_ret_status
  2158. (*halmac_pinmux_set_func)(struct halmac_adapter *adapter,
  2159. enum halmac_gpio_func gpio_func);
  2160. enum halmac_ret_status
  2161. (*halmac_pinmux_free_func)(struct halmac_adapter *adapter,
  2162. enum halmac_gpio_func gpio_func);
  2163. enum halmac_ret_status
  2164. (*halmac_pinmux_wl_led_mode)(struct halmac_adapter *adapter,
  2165. enum halmac_wlled_mode mode);
  2166. void
  2167. (*halmac_pinmux_wl_led_sw_ctrl)(struct halmac_adapter *adapter, u8 on);
  2168. void
  2169. (*halmac_pinmux_sdio_int_polarity)(struct halmac_adapter *adapter,
  2170. u8 low_active);
  2171. enum halmac_ret_status
  2172. (*halmac_pinmux_gpio_mode)(struct halmac_adapter *adapter, u8 gpio_id,
  2173. u8 output);
  2174. enum halmac_ret_status
  2175. (*halmac_pinmux_gpio_output)(struct halmac_adapter *adapter, u8 gpio_id,
  2176. u8 high);
  2177. enum halmac_ret_status
  2178. (*halmac_pinmux_pin_status)(struct halmac_adapter *adapter, u8 pin_id,
  2179. u8 *high);
  2180. enum halmac_ret_status
  2181. (*halmac_ofld_func_cfg)(struct halmac_adapter *adapter,
  2182. struct halmac_ofld_func_info *info);
  2183. enum halmac_ret_status
  2184. (*halmac_rx_cut_amsdu_cfg)(struct halmac_adapter *adapter,
  2185. struct halmac_cut_amsdu_cfg *cfg);
  2186. enum halmac_ret_status
  2187. (*halmac_fw_snding)(struct halmac_adapter *adapter,
  2188. struct halmac_su_snding_info *su_info,
  2189. struct halmac_mu_snding_info *mu_info, u8 period);
  2190. enum halmac_ret_status
  2191. (*halmac_get_mac_addr)(struct halmac_adapter *adapter, u8 port,
  2192. union halmac_wlan_addr *addr);
  2193. enum halmac_ret_status
  2194. (*halmac_init_low_pwr)(struct halmac_adapter *adapter);
  2195. enum halmac_ret_status
  2196. (*halmac_enter_cpu_sleep_mode)(struct halmac_adapter *adapter);
  2197. enum halmac_ret_status
  2198. (*halmac_get_cpu_mode)(struct halmac_adapter *adapter,
  2199. enum halmac_wlcpu_mode *mode);
  2200. enum halmac_ret_status
  2201. (*halmac_drv_fwctrl)(struct halmac_adapter *adapter, u8 *payload,
  2202. u32 size, u8 ack);
  2203. enum halmac_ret_status
  2204. (*halmac_read_efuse)(struct halmac_adapter *adapter, u32 offset,
  2205. u8 *value);
  2206. enum halmac_ret_status
  2207. (*halmac_write_efuse)(struct halmac_adapter *adapter, u32 offset,
  2208. u8 value);
  2209. #if HALMAC_PCIE_SUPPORT
  2210. void
  2211. (*halmac_en_ref_autok_pcie)(struct halmac_adapter *adapter, u8 en);
  2212. #endif
  2213. #if HALMAC_PLATFORM_TESTPROGRAM
  2214. struct halmisc_api *halmisc_api;
  2215. #endif
  2216. };
  2217. #define HALMAC_GET_API(halmac_adapter) \
  2218. ((struct halmac_api *)halmac_adapter->halmac_api)
  2219. static HALMAC_INLINE enum halmac_ret_status
  2220. halmac_fw_validate(struct halmac_adapter *adapter)
  2221. {
  2222. if (adapter->halmac_state.dlfw_state != HALMAC_DLFW_DONE &&
  2223. adapter->halmac_state.dlfw_state != HALMAC_GEN_INFO_SENT)
  2224. return HALMAC_RET_NO_DLFW;
  2225. return HALMAC_RET_SUCCESS;
  2226. }
  2227. #endif