hal.h 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552
  1. /* SPDX-License-Identifier: BSD-3-Clause-Clear */
  2. /*
  3. * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
  4. * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  5. */
  6. #ifndef ATH12K_HAL_H
  7. #define ATH12K_HAL_H
  8. #include "hw.h"
  9. struct ath12k_base;
  10. #define HAL_DESC_REO_NON_QOS_TID 16
  11. #define HAL_INVALID_PEERID 0x3fff
  12. #define VHT_SIG_SU_NSS_MASK 0x7
  13. #define HAL_TX_ADDRX_EN 1
  14. #define HAL_TX_ADDRY_EN 2
  15. #define HAL_TX_ADDR_SEARCH_DEFAULT 0
  16. #define HAL_TX_ADDR_SEARCH_INDEX 1
  17. #define HAL_RX_MAX_MPDU 256
  18. #define HAL_RX_NUM_WORDS_PER_PPDU_BITMAP (HAL_RX_MAX_MPDU >> 5)
  19. /* TODO: 16 entries per radio times MAX_VAPS_SUPPORTED */
  20. #define HAL_DSCP_TID_MAP_TBL_NUM_ENTRIES_MAX 32
  21. #define HAL_DSCP_TID_TBL_SIZE 24
  22. #define EHT_MAX_USER_INFO 4
  23. #define HAL_RX_MON_MAX_AGGR_SIZE 128
  24. #define HAL_MAX_UL_MU_USERS 37
  25. #define MAX_USER_POS 8
  26. #define MAX_MU_GROUP_ID 64
  27. #define MAX_MU_GROUP_SHOW 16
  28. #define MAX_MU_GROUP_LENGTH (6 * MAX_MU_GROUP_SHOW)
  29. #define HAL_CE_REMAP_REG_BASE (ab->ce_remap_base_addr)
  30. #define HAL_LINK_DESC_SIZE (32 << 2)
  31. #define HAL_LINK_DESC_ALIGN 128
  32. #define HAL_NUM_MPDUS_PER_LINK_DESC 6
  33. #define HAL_NUM_TX_MSDUS_PER_LINK_DESC 7
  34. #define HAL_NUM_RX_MSDUS_PER_LINK_DESC 6
  35. #define HAL_NUM_MPDU_LINKS_PER_QUEUE_DESC 12
  36. #define HAL_MAX_AVAIL_BLK_RES 3
  37. #define HAL_RING_BASE_ALIGN 8
  38. #define HAL_REO_QLUT_ADDR_ALIGN 256
  39. #define HAL_ADDR_LSB_REG_MASK 0xffffffff
  40. #define HAL_ADDR_MSB_REG_SHIFT 32
  41. #define HAL_WBM2SW_REL_ERR_RING_NUM 3
  42. #define HAL_SHADOW_NUM_REGS_MAX 40
  43. #define HAL_WBM_IDLE_SCATTER_BUF_SIZE_MAX 32704
  44. /* TODO: Check with hw team on the supported scatter buf size */
  45. #define HAL_WBM_IDLE_SCATTER_NEXT_PTR_SIZE 8
  46. #define HAL_WBM_IDLE_SCATTER_BUF_SIZE (HAL_WBM_IDLE_SCATTER_BUF_SIZE_MAX - \
  47. HAL_WBM_IDLE_SCATTER_NEXT_PTR_SIZE)
  48. #define HAL_AST_IDX_INVALID 0xFFFF
  49. #define HAL_RX_MAX_MCS 12
  50. #define HAL_RX_MAX_MCS_HT 31
  51. #define HAL_RX_MAX_MCS_VHT 9
  52. #define HAL_RX_MAX_MCS_HE 11
  53. #define HAL_RX_MAX_MCS_BE 15
  54. #define HAL_RX_MAX_NSS 8
  55. #define HAL_RX_MAX_NUM_LEGACY_RATES 12
  56. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W0_VALID BIT(30)
  57. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W0_VER BIT(31)
  58. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_NSS GENMASK(2, 0)
  59. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_MCS GENMASK(6, 3)
  60. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_LDPC BIT(7)
  61. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_DCM BIT(8)
  62. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_RU_START GENMASK(15, 9)
  63. #define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_RU_SIZE GENMASK(18, 16)
  64. #define HAL_RX_FCS_LEN 4
  65. enum hal_srng_ring_id {
  66. HAL_SRNG_RING_ID_REO2SW0 = 0,
  67. HAL_SRNG_RING_ID_REO2SW1,
  68. HAL_SRNG_RING_ID_REO2SW2,
  69. HAL_SRNG_RING_ID_REO2SW3,
  70. HAL_SRNG_RING_ID_REO2SW4,
  71. HAL_SRNG_RING_ID_REO2SW5,
  72. HAL_SRNG_RING_ID_REO2SW6,
  73. HAL_SRNG_RING_ID_REO2SW7,
  74. HAL_SRNG_RING_ID_REO2SW8,
  75. HAL_SRNG_RING_ID_REO2TCL,
  76. HAL_SRNG_RING_ID_REO2PPE,
  77. HAL_SRNG_RING_ID_SW2REO = 16,
  78. HAL_SRNG_RING_ID_SW2REO1,
  79. HAL_SRNG_RING_ID_SW2REO2,
  80. HAL_SRNG_RING_ID_SW2REO3,
  81. HAL_SRNG_RING_ID_REO_CMD,
  82. HAL_SRNG_RING_ID_REO_STATUS,
  83. HAL_SRNG_RING_ID_SW2TCL1 = 24,
  84. HAL_SRNG_RING_ID_SW2TCL2,
  85. HAL_SRNG_RING_ID_SW2TCL3,
  86. HAL_SRNG_RING_ID_SW2TCL4,
  87. HAL_SRNG_RING_ID_SW2TCL5,
  88. HAL_SRNG_RING_ID_SW2TCL6,
  89. HAL_SRNG_RING_ID_PPE2TCL1 = 30,
  90. HAL_SRNG_RING_ID_SW2TCL_CMD = 40,
  91. HAL_SRNG_RING_ID_SW2TCL1_CMD,
  92. HAL_SRNG_RING_ID_TCL_STATUS,
  93. HAL_SRNG_RING_ID_CE0_SRC = 64,
  94. HAL_SRNG_RING_ID_CE1_SRC,
  95. HAL_SRNG_RING_ID_CE2_SRC,
  96. HAL_SRNG_RING_ID_CE3_SRC,
  97. HAL_SRNG_RING_ID_CE4_SRC,
  98. HAL_SRNG_RING_ID_CE5_SRC,
  99. HAL_SRNG_RING_ID_CE6_SRC,
  100. HAL_SRNG_RING_ID_CE7_SRC,
  101. HAL_SRNG_RING_ID_CE8_SRC,
  102. HAL_SRNG_RING_ID_CE9_SRC,
  103. HAL_SRNG_RING_ID_CE10_SRC,
  104. HAL_SRNG_RING_ID_CE11_SRC,
  105. HAL_SRNG_RING_ID_CE12_SRC,
  106. HAL_SRNG_RING_ID_CE13_SRC,
  107. HAL_SRNG_RING_ID_CE14_SRC,
  108. HAL_SRNG_RING_ID_CE15_SRC,
  109. HAL_SRNG_RING_ID_CE0_DST = 81,
  110. HAL_SRNG_RING_ID_CE1_DST,
  111. HAL_SRNG_RING_ID_CE2_DST,
  112. HAL_SRNG_RING_ID_CE3_DST,
  113. HAL_SRNG_RING_ID_CE4_DST,
  114. HAL_SRNG_RING_ID_CE5_DST,
  115. HAL_SRNG_RING_ID_CE6_DST,
  116. HAL_SRNG_RING_ID_CE7_DST,
  117. HAL_SRNG_RING_ID_CE8_DST,
  118. HAL_SRNG_RING_ID_CE9_DST,
  119. HAL_SRNG_RING_ID_CE10_DST,
  120. HAL_SRNG_RING_ID_CE11_DST,
  121. HAL_SRNG_RING_ID_CE12_DST,
  122. HAL_SRNG_RING_ID_CE13_DST,
  123. HAL_SRNG_RING_ID_CE14_DST,
  124. HAL_SRNG_RING_ID_CE15_DST,
  125. HAL_SRNG_RING_ID_CE0_DST_STATUS = 100,
  126. HAL_SRNG_RING_ID_CE1_DST_STATUS,
  127. HAL_SRNG_RING_ID_CE2_DST_STATUS,
  128. HAL_SRNG_RING_ID_CE3_DST_STATUS,
  129. HAL_SRNG_RING_ID_CE4_DST_STATUS,
  130. HAL_SRNG_RING_ID_CE5_DST_STATUS,
  131. HAL_SRNG_RING_ID_CE6_DST_STATUS,
  132. HAL_SRNG_RING_ID_CE7_DST_STATUS,
  133. HAL_SRNG_RING_ID_CE8_DST_STATUS,
  134. HAL_SRNG_RING_ID_CE9_DST_STATUS,
  135. HAL_SRNG_RING_ID_CE10_DST_STATUS,
  136. HAL_SRNG_RING_ID_CE11_DST_STATUS,
  137. HAL_SRNG_RING_ID_CE12_DST_STATUS,
  138. HAL_SRNG_RING_ID_CE13_DST_STATUS,
  139. HAL_SRNG_RING_ID_CE14_DST_STATUS,
  140. HAL_SRNG_RING_ID_CE15_DST_STATUS,
  141. HAL_SRNG_RING_ID_WBM_IDLE_LINK = 120,
  142. HAL_SRNG_RING_ID_WBM_SW0_RELEASE,
  143. HAL_SRNG_RING_ID_WBM_SW1_RELEASE,
  144. HAL_SRNG_RING_ID_WBM_PPE_RELEASE = 123,
  145. HAL_SRNG_RING_ID_WBM2SW0_RELEASE = 128,
  146. HAL_SRNG_RING_ID_WBM2SW1_RELEASE,
  147. HAL_SRNG_RING_ID_WBM2SW2_RELEASE,
  148. HAL_SRNG_RING_ID_WBM2SW3_RELEASE, /* RX ERROR RING */
  149. HAL_SRNG_RING_ID_WBM2SW4_RELEASE,
  150. HAL_SRNG_RING_ID_WBM2SW5_RELEASE,
  151. HAL_SRNG_RING_ID_WBM2SW6_RELEASE,
  152. HAL_SRNG_RING_ID_WBM2SW7_RELEASE,
  153. HAL_SRNG_RING_ID_UMAC_ID_END = 159,
  154. /* Common DMAC rings shared by all LMACs */
  155. HAL_SRNG_RING_ID_DMAC_CMN_ID_START = 160,
  156. HAL_SRNG_SW2RXDMA_BUF0 = HAL_SRNG_RING_ID_DMAC_CMN_ID_START,
  157. HAL_SRNG_SW2RXDMA_BUF1 = 161,
  158. HAL_SRNG_SW2RXDMA_BUF2 = 162,
  159. HAL_SRNG_SW2RXMON_BUF0 = 168,
  160. HAL_SRNG_SW2TXMON_BUF0 = 176,
  161. HAL_SRNG_RING_ID_DMAC_CMN_ID_END = 183,
  162. HAL_SRNG_RING_ID_PMAC1_ID_START = 184,
  163. HAL_SRNG_RING_ID_WMAC1_SW2RXMON_BUF0 = HAL_SRNG_RING_ID_PMAC1_ID_START,
  164. HAL_SRNG_RING_ID_WMAC1_SW2RXDMA1_STATBUF,
  165. HAL_SRNG_RING_ID_WMAC1_RXDMA2SW0,
  166. HAL_SRNG_RING_ID_WMAC1_RXDMA2SW1,
  167. HAL_SRNG_RING_ID_WMAC1_RXMON2SW0 = HAL_SRNG_RING_ID_WMAC1_RXDMA2SW1,
  168. HAL_SRNG_RING_ID_WMAC1_SW2RXDMA1_DESC,
  169. HAL_SRNG_RING_ID_RXDMA_DIR_BUF,
  170. HAL_SRNG_RING_ID_WMAC1_TXMON2SW0_BUF0,
  171. HAL_SRNG_RING_ID_WMAC1_SW2TXMON_BUF0,
  172. HAL_SRNG_RING_ID_PMAC1_ID_END,
  173. };
  174. /* SRNG registers are split into two groups R0 and R2 */
  175. #define HAL_SRNG_REG_GRP_R0 0
  176. #define HAL_SRNG_REG_GRP_R2 1
  177. #define HAL_SRNG_NUM_REG_GRP 2
  178. /* TODO: number of PMACs */
  179. #define HAL_SRNG_NUM_PMACS 3
  180. #define HAL_SRNG_NUM_DMAC_RINGS (HAL_SRNG_RING_ID_DMAC_CMN_ID_END - \
  181. HAL_SRNG_RING_ID_DMAC_CMN_ID_START)
  182. #define HAL_SRNG_RINGS_PER_PMAC (HAL_SRNG_RING_ID_PMAC1_ID_END - \
  183. HAL_SRNG_RING_ID_PMAC1_ID_START)
  184. #define HAL_SRNG_NUM_PMAC_RINGS (HAL_SRNG_NUM_PMACS * HAL_SRNG_RINGS_PER_PMAC)
  185. #define HAL_SRNG_RING_ID_MAX (HAL_SRNG_RING_ID_DMAC_CMN_ID_END + \
  186. HAL_SRNG_NUM_PMAC_RINGS)
  187. enum hal_rx_su_mu_coding {
  188. HAL_RX_SU_MU_CODING_BCC,
  189. HAL_RX_SU_MU_CODING_LDPC,
  190. HAL_RX_SU_MU_CODING_MAX,
  191. };
  192. enum hal_rx_gi {
  193. HAL_RX_GI_0_8_US,
  194. HAL_RX_GI_0_4_US,
  195. HAL_RX_GI_1_6_US,
  196. HAL_RX_GI_3_2_US,
  197. HAL_RX_GI_MAX,
  198. };
  199. enum hal_rx_bw {
  200. HAL_RX_BW_20MHZ,
  201. HAL_RX_BW_40MHZ,
  202. HAL_RX_BW_80MHZ,
  203. HAL_RX_BW_160MHZ,
  204. HAL_RX_BW_320MHZ,
  205. HAL_RX_BW_MAX,
  206. };
  207. enum hal_rx_preamble {
  208. HAL_RX_PREAMBLE_11A,
  209. HAL_RX_PREAMBLE_11B,
  210. HAL_RX_PREAMBLE_11N,
  211. HAL_RX_PREAMBLE_11AC,
  212. HAL_RX_PREAMBLE_11AX,
  213. HAL_RX_PREAMBLE_11BA,
  214. HAL_RX_PREAMBLE_11BE,
  215. HAL_RX_PREAMBLE_MAX,
  216. };
  217. enum hal_rx_reception_type {
  218. HAL_RX_RECEPTION_TYPE_SU,
  219. HAL_RX_RECEPTION_TYPE_MU_MIMO,
  220. HAL_RX_RECEPTION_TYPE_MU_OFDMA,
  221. HAL_RX_RECEPTION_TYPE_MU_OFDMA_MIMO,
  222. HAL_RX_RECEPTION_TYPE_MAX,
  223. };
  224. enum hal_rx_legacy_rate {
  225. HAL_RX_LEGACY_RATE_1_MBPS,
  226. HAL_RX_LEGACY_RATE_2_MBPS,
  227. HAL_RX_LEGACY_RATE_5_5_MBPS,
  228. HAL_RX_LEGACY_RATE_6_MBPS,
  229. HAL_RX_LEGACY_RATE_9_MBPS,
  230. HAL_RX_LEGACY_RATE_11_MBPS,
  231. HAL_RX_LEGACY_RATE_12_MBPS,
  232. HAL_RX_LEGACY_RATE_18_MBPS,
  233. HAL_RX_LEGACY_RATE_24_MBPS,
  234. HAL_RX_LEGACY_RATE_36_MBPS,
  235. HAL_RX_LEGACY_RATE_48_MBPS,
  236. HAL_RX_LEGACY_RATE_54_MBPS,
  237. HAL_RX_LEGACY_RATE_INVALID,
  238. };
  239. enum hal_ring_type {
  240. HAL_REO_DST,
  241. HAL_REO_EXCEPTION,
  242. HAL_REO_REINJECT,
  243. HAL_REO_CMD,
  244. HAL_REO_STATUS,
  245. HAL_TCL_DATA,
  246. HAL_TCL_CMD,
  247. HAL_TCL_STATUS,
  248. HAL_CE_SRC,
  249. HAL_CE_DST,
  250. HAL_CE_DST_STATUS,
  251. HAL_WBM_IDLE_LINK,
  252. HAL_SW2WBM_RELEASE,
  253. HAL_WBM2SW_RELEASE,
  254. HAL_RXDMA_BUF,
  255. HAL_RXDMA_DST,
  256. HAL_RXDMA_MONITOR_BUF,
  257. HAL_RXDMA_MONITOR_STATUS,
  258. HAL_RXDMA_MONITOR_DST,
  259. HAL_RXDMA_MONITOR_DESC,
  260. HAL_RXDMA_DIR_BUF,
  261. HAL_PPE2TCL,
  262. HAL_PPE_RELEASE,
  263. HAL_TX_MONITOR_BUF,
  264. HAL_TX_MONITOR_DST,
  265. HAL_MAX_RING_TYPES,
  266. };
  267. /**
  268. * enum hal_reo_cmd_type: Enum for REO command type
  269. * @HAL_REO_CMD_GET_QUEUE_STATS: Get REO queue status/stats
  270. * @HAL_REO_CMD_FLUSH_QUEUE: Flush all frames in REO queue
  271. * @HAL_REO_CMD_FLUSH_CACHE: Flush descriptor entries in the cache
  272. * @HAL_REO_CMD_UNBLOCK_CACHE: Unblock a descriptor's address that was blocked
  273. * earlier with a 'REO_FLUSH_CACHE' command
  274. * @HAL_REO_CMD_FLUSH_TIMEOUT_LIST: Flush buffers/descriptors from timeout list
  275. * @HAL_REO_CMD_UPDATE_RX_QUEUE: Update REO queue settings
  276. */
  277. enum hal_reo_cmd_type {
  278. HAL_REO_CMD_GET_QUEUE_STATS = 0,
  279. HAL_REO_CMD_FLUSH_QUEUE = 1,
  280. HAL_REO_CMD_FLUSH_CACHE = 2,
  281. HAL_REO_CMD_UNBLOCK_CACHE = 3,
  282. HAL_REO_CMD_FLUSH_TIMEOUT_LIST = 4,
  283. HAL_REO_CMD_UPDATE_RX_QUEUE = 5,
  284. };
  285. /**
  286. * enum hal_reo_cmd_status: Enum for execution status of REO command
  287. * @HAL_REO_CMD_SUCCESS: Command has successfully executed
  288. * @HAL_REO_CMD_BLOCKED: Command could not be executed as the queue
  289. * or cache was blocked
  290. * @HAL_REO_CMD_FAILED: Command execution failed, could be due to
  291. * invalid queue desc
  292. * @HAL_REO_CMD_RESOURCE_BLOCKED: Command could not be executed because
  293. * one or more descriptors were blocked
  294. * @HAL_REO_CMD_DRAIN:
  295. */
  296. enum hal_reo_cmd_status {
  297. HAL_REO_CMD_SUCCESS = 0,
  298. HAL_REO_CMD_BLOCKED = 1,
  299. HAL_REO_CMD_FAILED = 2,
  300. HAL_REO_CMD_RESOURCE_BLOCKED = 3,
  301. HAL_REO_CMD_DRAIN = 0xff,
  302. };
  303. enum hal_tcl_encap_type {
  304. HAL_TCL_ENCAP_TYPE_RAW,
  305. HAL_TCL_ENCAP_TYPE_NATIVE_WIFI,
  306. HAL_TCL_ENCAP_TYPE_ETHERNET,
  307. HAL_TCL_ENCAP_TYPE_802_3 = 3,
  308. HAL_TCL_ENCAP_TYPE_MAX
  309. };
  310. enum hal_tcl_desc_type {
  311. HAL_TCL_DESC_TYPE_BUFFER,
  312. HAL_TCL_DESC_TYPE_EXT_DESC,
  313. HAL_TCL_DESC_TYPE_MAX,
  314. };
  315. enum hal_reo_dest_ring_buffer_type {
  316. HAL_REO_DEST_RING_BUFFER_TYPE_MSDU,
  317. HAL_REO_DEST_RING_BUFFER_TYPE_LINK_DESC,
  318. };
  319. enum hal_reo_dest_ring_push_reason {
  320. HAL_REO_DEST_RING_PUSH_REASON_ERR_DETECTED,
  321. HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION,
  322. };
  323. enum hal_reo_entr_rxdma_push_reason {
  324. HAL_REO_ENTR_RING_RXDMA_PUSH_REASON_ERR_DETECTED,
  325. HAL_REO_ENTR_RING_RXDMA_PUSH_REASON_ROUTING_INSTRUCTION,
  326. HAL_REO_ENTR_RING_RXDMA_PUSH_REASON_RX_FLUSH,
  327. };
  328. enum hal_reo_dest_ring_error_code {
  329. HAL_REO_DEST_RING_ERROR_CODE_DESC_ADDR_ZERO,
  330. HAL_REO_DEST_RING_ERROR_CODE_DESC_INVALID,
  331. HAL_REO_DEST_RING_ERROR_CODE_AMPDU_IN_NON_BA,
  332. HAL_REO_DEST_RING_ERROR_CODE_NON_BA_DUPLICATE,
  333. HAL_REO_DEST_RING_ERROR_CODE_BA_DUPLICATE,
  334. HAL_REO_DEST_RING_ERROR_CODE_FRAME_2K_JUMP,
  335. HAL_REO_DEST_RING_ERROR_CODE_BAR_2K_JUMP,
  336. HAL_REO_DEST_RING_ERROR_CODE_FRAME_OOR,
  337. HAL_REO_DEST_RING_ERROR_CODE_BAR_OOR,
  338. HAL_REO_DEST_RING_ERROR_CODE_NO_BA_SESSION,
  339. HAL_REO_DEST_RING_ERROR_CODE_FRAME_SN_EQUALS_SSN,
  340. HAL_REO_DEST_RING_ERROR_CODE_PN_CHECK_FAILED,
  341. HAL_REO_DEST_RING_ERROR_CODE_2K_ERR_FLAG_SET,
  342. HAL_REO_DEST_RING_ERROR_CODE_PN_ERR_FLAG_SET,
  343. HAL_REO_DEST_RING_ERROR_CODE_DESC_BLOCKED,
  344. HAL_REO_DEST_RING_ERROR_CODE_MAX,
  345. };
  346. enum hal_reo_entr_rxdma_ecode {
  347. HAL_REO_ENTR_RING_RXDMA_ECODE_OVERFLOW_ERR,
  348. HAL_REO_ENTR_RING_RXDMA_ECODE_MPDU_LEN_ERR,
  349. HAL_REO_ENTR_RING_RXDMA_ECODE_FCS_ERR,
  350. HAL_REO_ENTR_RING_RXDMA_ECODE_DECRYPT_ERR,
  351. HAL_REO_ENTR_RING_RXDMA_ECODE_TKIP_MIC_ERR,
  352. HAL_REO_ENTR_RING_RXDMA_ECODE_UNECRYPTED_ERR,
  353. HAL_REO_ENTR_RING_RXDMA_ECODE_MSDU_LEN_ERR,
  354. HAL_REO_ENTR_RING_RXDMA_ECODE_MSDU_LIMIT_ERR,
  355. HAL_REO_ENTR_RING_RXDMA_ECODE_WIFI_PARSE_ERR,
  356. HAL_REO_ENTR_RING_RXDMA_ECODE_AMSDU_PARSE_ERR,
  357. HAL_REO_ENTR_RING_RXDMA_ECODE_SA_TIMEOUT_ERR,
  358. HAL_REO_ENTR_RING_RXDMA_ECODE_DA_TIMEOUT_ERR,
  359. HAL_REO_ENTR_RING_RXDMA_ECODE_FLOW_TIMEOUT_ERR,
  360. HAL_REO_ENTR_RING_RXDMA_ECODE_FLUSH_REQUEST_ERR,
  361. HAL_REO_ENTR_RING_RXDMA_ECODE_AMSDU_FRAG_ERR,
  362. HAL_REO_ENTR_RING_RXDMA_ECODE_MULTICAST_ECHO_ERR,
  363. HAL_REO_ENTR_RING_RXDMA_ECODE_AMSDU_MISMATCH_ERR,
  364. HAL_REO_ENTR_RING_RXDMA_ECODE_UNAUTH_WDS_ERR,
  365. HAL_REO_ENTR_RING_RXDMA_ECODE_GRPCAST_AMSDU_WDS_ERR,
  366. HAL_REO_ENTR_RING_RXDMA_ECODE_MAX,
  367. };
  368. enum hal_wbm_htt_tx_comp_status {
  369. HAL_WBM_REL_HTT_TX_COMP_STATUS_OK,
  370. HAL_WBM_REL_HTT_TX_COMP_STATUS_DROP,
  371. HAL_WBM_REL_HTT_TX_COMP_STATUS_TTL,
  372. HAL_WBM_REL_HTT_TX_COMP_STATUS_REINJ,
  373. HAL_WBM_REL_HTT_TX_COMP_STATUS_INSPECT,
  374. HAL_WBM_REL_HTT_TX_COMP_STATUS_MEC_NOTIFY,
  375. HAL_WBM_REL_HTT_TX_COMP_STATUS_VDEVID_MISMATCH,
  376. HAL_WBM_REL_HTT_TX_COMP_STATUS_MAX,
  377. };
  378. enum hal_encrypt_type {
  379. HAL_ENCRYPT_TYPE_WEP_40,
  380. HAL_ENCRYPT_TYPE_WEP_104,
  381. HAL_ENCRYPT_TYPE_TKIP_NO_MIC,
  382. HAL_ENCRYPT_TYPE_WEP_128,
  383. HAL_ENCRYPT_TYPE_TKIP_MIC,
  384. HAL_ENCRYPT_TYPE_WAPI,
  385. HAL_ENCRYPT_TYPE_CCMP_128,
  386. HAL_ENCRYPT_TYPE_OPEN,
  387. HAL_ENCRYPT_TYPE_CCMP_256,
  388. HAL_ENCRYPT_TYPE_GCMP_128,
  389. HAL_ENCRYPT_TYPE_AES_GCMP_256,
  390. HAL_ENCRYPT_TYPE_WAPI_GCM_SM4,
  391. };
  392. enum hal_tx_rate_stats_bw {
  393. HAL_TX_RATE_STATS_BW_20,
  394. HAL_TX_RATE_STATS_BW_40,
  395. HAL_TX_RATE_STATS_BW_80,
  396. HAL_TX_RATE_STATS_BW_160,
  397. };
  398. enum hal_tx_rate_stats_pkt_type {
  399. HAL_TX_RATE_STATS_PKT_TYPE_11A,
  400. HAL_TX_RATE_STATS_PKT_TYPE_11B,
  401. HAL_TX_RATE_STATS_PKT_TYPE_11N,
  402. HAL_TX_RATE_STATS_PKT_TYPE_11AC,
  403. HAL_TX_RATE_STATS_PKT_TYPE_11AX,
  404. HAL_TX_RATE_STATS_PKT_TYPE_11BA,
  405. HAL_TX_RATE_STATS_PKT_TYPE_11BE,
  406. };
  407. enum hal_tx_rate_stats_sgi {
  408. HAL_TX_RATE_STATS_SGI_08US,
  409. HAL_TX_RATE_STATS_SGI_04US,
  410. HAL_TX_RATE_STATS_SGI_16US,
  411. HAL_TX_RATE_STATS_SGI_32US,
  412. };
  413. struct hal_wbm_idle_scatter_list {
  414. dma_addr_t paddr;
  415. struct hal_wbm_link_desc *vaddr;
  416. };
  417. struct hal_srng_params {
  418. dma_addr_t ring_base_paddr;
  419. u32 *ring_base_vaddr;
  420. int num_entries;
  421. u32 intr_batch_cntr_thres_entries;
  422. u32 intr_timer_thres_us;
  423. u32 flags;
  424. u32 max_buffer_len;
  425. u32 low_threshold;
  426. u32 high_threshold;
  427. dma_addr_t msi_addr;
  428. dma_addr_t msi2_addr;
  429. u32 msi_data;
  430. u32 msi2_data;
  431. /* Add more params as needed */
  432. };
  433. enum hal_srng_dir {
  434. HAL_SRNG_DIR_SRC,
  435. HAL_SRNG_DIR_DST
  436. };
  437. enum rx_msdu_start_pkt_type {
  438. RX_MSDU_START_PKT_TYPE_11A,
  439. RX_MSDU_START_PKT_TYPE_11B,
  440. RX_MSDU_START_PKT_TYPE_11N,
  441. RX_MSDU_START_PKT_TYPE_11AC,
  442. RX_MSDU_START_PKT_TYPE_11AX,
  443. RX_MSDU_START_PKT_TYPE_11BA,
  444. RX_MSDU_START_PKT_TYPE_11BE,
  445. };
  446. enum rx_msdu_start_sgi {
  447. RX_MSDU_START_SGI_0_8_US,
  448. RX_MSDU_START_SGI_0_4_US,
  449. RX_MSDU_START_SGI_1_6_US,
  450. RX_MSDU_START_SGI_3_2_US,
  451. };
  452. enum rx_msdu_start_recv_bw {
  453. RX_MSDU_START_RECV_BW_20MHZ,
  454. RX_MSDU_START_RECV_BW_40MHZ,
  455. RX_MSDU_START_RECV_BW_80MHZ,
  456. RX_MSDU_START_RECV_BW_160MHZ,
  457. };
  458. enum rx_msdu_start_reception_type {
  459. RX_MSDU_START_RECEPTION_TYPE_SU,
  460. RX_MSDU_START_RECEPTION_TYPE_DL_MU_MIMO,
  461. RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA,
  462. RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA_MIMO,
  463. RX_MSDU_START_RECEPTION_TYPE_UL_MU_MIMO,
  464. RX_MSDU_START_RECEPTION_TYPE_UL_MU_OFDMA,
  465. RX_MSDU_START_RECEPTION_TYPE_UL_MU_OFDMA_MIMO,
  466. };
  467. enum rx_desc_decap_type {
  468. RX_DESC_DECAP_TYPE_RAW,
  469. RX_DESC_DECAP_TYPE_NATIVE_WIFI,
  470. RX_DESC_DECAP_TYPE_ETHERNET2_DIX,
  471. RX_DESC_DECAP_TYPE_8023,
  472. };
  473. struct hal_rx_user_status {
  474. u32 mcs:4,
  475. nss:3,
  476. ofdma_info_valid:1,
  477. ul_ofdma_ru_start_index:7,
  478. ul_ofdma_ru_width:7,
  479. ul_ofdma_ru_size:8;
  480. u32 ul_ofdma_user_v0_word0;
  481. u32 ul_ofdma_user_v0_word1;
  482. u32 ast_index;
  483. u32 tid;
  484. u16 tcp_msdu_count;
  485. u16 tcp_ack_msdu_count;
  486. u16 udp_msdu_count;
  487. u16 other_msdu_count;
  488. u16 frame_control;
  489. u8 frame_control_info_valid;
  490. u8 data_sequence_control_info_valid;
  491. u16 first_data_seq_ctrl;
  492. u32 preamble_type;
  493. u16 ht_flags;
  494. u16 vht_flags;
  495. u16 he_flags;
  496. u8 rs_flags;
  497. u8 ldpc;
  498. u32 mpdu_cnt_fcs_ok;
  499. u32 mpdu_cnt_fcs_err;
  500. u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
  501. u32 mpdu_ok_byte_count;
  502. u32 mpdu_err_byte_count;
  503. bool ampdu_present;
  504. u16 ampdu_id;
  505. };
  506. struct hal_rx_u_sig_info {
  507. bool ul_dl;
  508. u8 bw;
  509. u8 ppdu_type_comp_mode;
  510. u8 eht_sig_mcs;
  511. u8 num_eht_sig_sym;
  512. struct ieee80211_radiotap_eht_usig usig;
  513. };
  514. struct hal_rx_tlv_aggr_info {
  515. bool in_progress;
  516. u16 cur_len;
  517. u16 tlv_tag;
  518. u8 buf[HAL_RX_MON_MAX_AGGR_SIZE];
  519. };
  520. struct hal_rx_radiotap_eht {
  521. __le32 known;
  522. __le32 data[9];
  523. };
  524. struct hal_rx_eht_info {
  525. u8 num_user_info;
  526. struct hal_rx_radiotap_eht eht;
  527. u32 user_info[EHT_MAX_USER_INFO];
  528. };
  529. struct hal_rx_msdu_desc_info {
  530. u32 msdu_flags;
  531. u16 msdu_len; /* 14 bits for length */
  532. };
  533. /* hal_mon_buf_ring
  534. * Producer : SW
  535. * Consumer : Monitor
  536. *
  537. * paddr_lo
  538. * Lower 32-bit physical address of the buffer pointer from the source ring.
  539. * paddr_hi
  540. * bit range 7-0 : upper 8 bit of the physical address.
  541. * bit range 31-8 : reserved.
  542. * cookie
  543. * Consumer: RxMon/TxMon 64 bit cookie of the buffers.
  544. */
  545. struct hal_mon_buf_ring {
  546. __le32 paddr_lo;
  547. __le32 paddr_hi;
  548. __le64 cookie;
  549. };
  550. struct hal_rx_mon_ppdu_info {
  551. u32 ppdu_id;
  552. u32 last_ppdu_id;
  553. u64 ppdu_ts;
  554. u32 num_mpdu_fcs_ok;
  555. u32 num_mpdu_fcs_err;
  556. u32 preamble_type;
  557. u32 mpdu_len;
  558. u16 chan_num;
  559. u16 freq;
  560. u16 tcp_msdu_count;
  561. u16 tcp_ack_msdu_count;
  562. u16 udp_msdu_count;
  563. u16 other_msdu_count;
  564. u16 peer_id;
  565. u8 rate;
  566. u8 mcs;
  567. u8 nss;
  568. u8 bw;
  569. u8 vht_flag_values1;
  570. u8 vht_flag_values2;
  571. u8 vht_flag_values3[4];
  572. u8 vht_flag_values4;
  573. u8 vht_flag_values5;
  574. u16 vht_flag_values6;
  575. u8 is_stbc;
  576. u8 gi;
  577. u8 sgi;
  578. u8 ldpc;
  579. u8 beamformed;
  580. u8 rssi_comb;
  581. u16 tid;
  582. u8 fc_valid;
  583. u16 ht_flags;
  584. u16 vht_flags;
  585. u16 he_flags;
  586. u16 he_mu_flags;
  587. u8 dcm;
  588. u8 ru_alloc;
  589. u8 reception_type;
  590. u64 tsft;
  591. u64 rx_duration;
  592. u16 frame_control;
  593. u32 ast_index;
  594. u8 rs_fcs_err;
  595. u8 rs_flags;
  596. u8 cck_flag;
  597. u8 ofdm_flag;
  598. u8 ulofdma_flag;
  599. u8 frame_control_info_valid;
  600. u16 he_per_user_1;
  601. u16 he_per_user_2;
  602. u8 he_per_user_position;
  603. u8 he_per_user_known;
  604. u16 he_flags1;
  605. u16 he_flags2;
  606. u8 he_RU[4];
  607. u16 he_data1;
  608. u16 he_data2;
  609. u16 he_data3;
  610. u16 he_data4;
  611. u16 he_data5;
  612. u16 he_data6;
  613. u32 ppdu_len;
  614. u32 prev_ppdu_id;
  615. u32 device_id;
  616. u16 first_data_seq_ctrl;
  617. u8 monitor_direct_used;
  618. u8 data_sequence_control_info_valid;
  619. u8 ltf_size;
  620. u8 rxpcu_filter_pass;
  621. s8 rssi_chain[8][8];
  622. u32 num_users;
  623. u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
  624. u8 addr1[ETH_ALEN];
  625. u8 addr2[ETH_ALEN];
  626. u8 addr3[ETH_ALEN];
  627. u8 addr4[ETH_ALEN];
  628. struct hal_rx_user_status userstats[HAL_MAX_UL_MU_USERS];
  629. u8 userid;
  630. bool first_msdu_in_mpdu;
  631. bool is_ampdu;
  632. u8 medium_prot_type;
  633. bool ppdu_continuation;
  634. bool eht_usig;
  635. struct hal_rx_u_sig_info u_sig_info;
  636. bool is_eht;
  637. struct hal_rx_eht_info eht_info;
  638. struct hal_rx_tlv_aggr_info tlv_aggr;
  639. };
  640. struct hal_rx_desc_data {
  641. struct ieee80211_rx_status *rx_status;
  642. u32 phy_meta_data;
  643. u32 err_bitmap;
  644. u32 enctype;
  645. u32 msdu_done:1,
  646. is_decrypted:1,
  647. ip_csum_fail:1,
  648. l4_csum_fail:1,
  649. is_first_msdu:1,
  650. is_last_msdu:1,
  651. mesh_ctrl_present:1,
  652. addr2_present:1,
  653. is_mcbc:1,
  654. seq_ctl_valid:1,
  655. fc_valid:1;
  656. u16 msdu_len;
  657. u16 peer_id;
  658. u16 seq_no;
  659. u8 *addr2;
  660. u8 pkt_type;
  661. u8 l3_pad_bytes;
  662. u8 decap_type;
  663. u8 bw;
  664. u8 rate_mcs;
  665. u8 nss;
  666. u8 sgi;
  667. u8 tid;
  668. };
  669. #define BUFFER_ADDR_INFO0_ADDR GENMASK(31, 0)
  670. #define BUFFER_ADDR_INFO1_ADDR GENMASK(7, 0)
  671. #define BUFFER_ADDR_INFO1_RET_BUF_MGR GENMASK(11, 8)
  672. #define BUFFER_ADDR_INFO1_SW_COOKIE GENMASK(31, 12)
  673. struct ath12k_buffer_addr {
  674. __le32 info0;
  675. __le32 info1;
  676. } __packed;
  677. /* ath12k_buffer_addr
  678. *
  679. * buffer_addr_31_0
  680. * Address (lower 32 bits) of the MSDU buffer or MSDU_EXTENSION
  681. * descriptor or Link descriptor
  682. *
  683. * buffer_addr_39_32
  684. * Address (upper 8 bits) of the MSDU buffer or MSDU_EXTENSION
  685. * descriptor or Link descriptor
  686. *
  687. * return_buffer_manager (RBM)
  688. * Consumer: WBM
  689. * Producer: SW/FW
  690. * Indicates to which buffer manager the buffer or MSDU_EXTENSION
  691. * descriptor or link descriptor that is being pointed to shall be
  692. * returned after the frame has been processed. It is used by WBM
  693. * for routing purposes.
  694. *
  695. * Values are defined in enum %HAL_RX_BUF_RBM_
  696. *
  697. * sw_buffer_cookie
  698. * Cookie field exclusively used by SW. HW ignores the contents,
  699. * accept that it passes the programmed value on to other
  700. * descriptors together with the physical address.
  701. *
  702. * Field can be used by SW to for example associate the buffers
  703. * physical address with the virtual address.
  704. *
  705. * NOTE1:
  706. * The three most significant bits can have a special meaning
  707. * in case this struct is embedded in a TX_MPDU_DETAILS STRUCT,
  708. * and field transmit_bw_restriction is set
  709. *
  710. * In case of NON punctured transmission:
  711. * Sw_buffer_cookie[19:17] = 3'b000: 20 MHz TX only
  712. * Sw_buffer_cookie[19:17] = 3'b001: 40 MHz TX only
  713. * Sw_buffer_cookie[19:17] = 3'b010: 80 MHz TX only
  714. * Sw_buffer_cookie[19:17] = 3'b011: 160 MHz TX only
  715. * Sw_buffer_cookie[19:17] = 3'b101: 240 MHz TX only
  716. * Sw_buffer_cookie[19:17] = 3'b100: 320 MHz TX only
  717. * Sw_buffer_cookie[19:18] = 2'b11: reserved
  718. *
  719. * In case of punctured transmission:
  720. * Sw_buffer_cookie[19:16] = 4'b0000: pattern 0 only
  721. * Sw_buffer_cookie[19:16] = 4'b0001: pattern 1 only
  722. * Sw_buffer_cookie[19:16] = 4'b0010: pattern 2 only
  723. * Sw_buffer_cookie[19:16] = 4'b0011: pattern 3 only
  724. * Sw_buffer_cookie[19:16] = 4'b0100: pattern 4 only
  725. * Sw_buffer_cookie[19:16] = 4'b0101: pattern 5 only
  726. * Sw_buffer_cookie[19:16] = 4'b0110: pattern 6 only
  727. * Sw_buffer_cookie[19:16] = 4'b0111: pattern 7 only
  728. * Sw_buffer_cookie[19:16] = 4'b1000: pattern 8 only
  729. * Sw_buffer_cookie[19:16] = 4'b1001: pattern 9 only
  730. * Sw_buffer_cookie[19:16] = 4'b1010: pattern 10 only
  731. * Sw_buffer_cookie[19:16] = 4'b1011: pattern 11 only
  732. * Sw_buffer_cookie[19:18] = 2'b11: reserved
  733. *
  734. * Note: a punctured transmission is indicated by the presence
  735. * of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV
  736. *
  737. * Sw_buffer_cookie[20:17]: Tid: The TID field in the QoS control
  738. * field
  739. *
  740. * Sw_buffer_cookie[16]: Mpdu_qos_control_valid: This field
  741. * indicates MPDUs with a QoS control field.
  742. *
  743. */
  744. struct hal_ce_srng_dest_desc;
  745. struct hal_ce_srng_dst_status_desc;
  746. struct hal_ce_srng_src_desc;
  747. struct hal_wbm_link_desc {
  748. struct ath12k_buffer_addr buf_addr_info;
  749. } __packed;
  750. /* srng flags */
  751. #define HAL_SRNG_FLAGS_MSI_SWAP 0x00000008
  752. #define HAL_SRNG_FLAGS_RING_PTR_SWAP 0x00000010
  753. #define HAL_SRNG_FLAGS_DATA_TLV_SWAP 0x00000020
  754. #define HAL_SRNG_FLAGS_LOW_THRESH_INTR_EN 0x00010000
  755. #define HAL_SRNG_FLAGS_MSI_INTR 0x00020000
  756. #define HAL_SRNG_FLAGS_HIGH_THRESH_INTR_EN 0x00080000
  757. #define HAL_SRNG_FLAGS_LMAC_RING 0x80000000
  758. /* Common SRNG ring structure for source and destination rings */
  759. struct hal_srng {
  760. /* Unique SRNG ring ID */
  761. u8 ring_id;
  762. /* Ring initialization done */
  763. u8 initialized;
  764. /* Interrupt/MSI value assigned to this ring */
  765. int irq;
  766. /* Physical base address of the ring */
  767. dma_addr_t ring_base_paddr;
  768. /* Virtual base address of the ring */
  769. u32 *ring_base_vaddr;
  770. /* Number of entries in ring */
  771. u32 num_entries;
  772. /* Ring size */
  773. u32 ring_size;
  774. /* Ring size mask */
  775. u32 ring_size_mask;
  776. /* Size of ring entry */
  777. u32 entry_size;
  778. /* Interrupt timer threshold - in micro seconds */
  779. u32 intr_timer_thres_us;
  780. /* Interrupt batch counter threshold - in number of ring entries */
  781. u32 intr_batch_cntr_thres_entries;
  782. /* MSI Address */
  783. dma_addr_t msi_addr;
  784. /* MSI data */
  785. u32 msi_data;
  786. /* MSI2 Address */
  787. dma_addr_t msi2_addr;
  788. /* MSI2 data */
  789. u32 msi2_data;
  790. /* Misc flags */
  791. u32 flags;
  792. /* Lock for serializing ring index updates */
  793. spinlock_t lock;
  794. struct lock_class_key lock_key;
  795. /* Start offset of SRNG register groups for this ring
  796. * TBD: See if this is required - register address can be derived
  797. * from ring ID
  798. */
  799. u32 hwreg_base[HAL_SRNG_NUM_REG_GRP];
  800. u64 timestamp;
  801. /* Source or Destination ring */
  802. enum hal_srng_dir ring_dir;
  803. union {
  804. struct {
  805. /* SW tail pointer */
  806. u32 tp;
  807. /* Shadow head pointer location to be updated by HW */
  808. volatile u32 *hp_addr;
  809. /* Cached head pointer */
  810. u32 cached_hp;
  811. /* Tail pointer location to be updated by SW - This
  812. * will be a register address and need not be
  813. * accessed through SW structure
  814. */
  815. u32 *tp_addr;
  816. /* Current SW loop cnt */
  817. u32 loop_cnt;
  818. /* max transfer size */
  819. u16 max_buffer_length;
  820. /* head pointer at access end */
  821. u32 last_hp;
  822. } dst_ring;
  823. struct {
  824. /* SW head pointer */
  825. u32 hp;
  826. /* SW reap head pointer */
  827. u32 reap_hp;
  828. /* Shadow tail pointer location to be updated by HW */
  829. u32 *tp_addr;
  830. /* Cached tail pointer */
  831. u32 cached_tp;
  832. /* Head pointer location to be updated by SW - This
  833. * will be a register address and need not be accessed
  834. * through SW structure
  835. */
  836. u32 *hp_addr;
  837. /* Low threshold - in number of ring entries */
  838. u32 low_threshold;
  839. /* tail pointer at access end */
  840. u32 last_tp;
  841. } src_ring;
  842. } u;
  843. };
  844. /* hal_wbm_link_desc
  845. *
  846. * Producer: WBM
  847. * Consumer: WBM
  848. *
  849. * buf_addr_info
  850. * Details of the physical address of a buffer or MSDU
  851. * link descriptor.
  852. */
  853. enum hal_wbm_rel_src_module {
  854. HAL_WBM_REL_SRC_MODULE_TQM,
  855. HAL_WBM_REL_SRC_MODULE_RXDMA,
  856. HAL_WBM_REL_SRC_MODULE_REO,
  857. HAL_WBM_REL_SRC_MODULE_FW,
  858. HAL_WBM_REL_SRC_MODULE_SW,
  859. HAL_WBM_REL_SRC_MODULE_MAX,
  860. };
  861. /* hal_wbm_rel_desc_type
  862. *
  863. * msdu_buffer
  864. * The address points to an MSDU buffer
  865. *
  866. * msdu_link_descriptor
  867. * The address points to an Tx MSDU link descriptor
  868. *
  869. * mpdu_link_descriptor
  870. * The address points to an MPDU link descriptor
  871. *
  872. * msdu_ext_descriptor
  873. * The address points to an MSDU extension descriptor
  874. *
  875. * queue_ext_descriptor
  876. * The address points to an TQM queue extension descriptor. WBM should
  877. * treat this is the same way as a link descriptor.
  878. */
  879. enum hal_wbm_rel_desc_type {
  880. HAL_WBM_REL_DESC_TYPE_REL_MSDU,
  881. HAL_WBM_REL_DESC_TYPE_MSDU_LINK,
  882. HAL_WBM_REL_DESC_TYPE_MPDU_LINK,
  883. HAL_WBM_REL_DESC_TYPE_MSDU_EXT,
  884. HAL_WBM_REL_DESC_TYPE_QUEUE_EXT,
  885. };
  886. /* Interrupt mitigation - Batch threshold in terms of number of frames */
  887. #define HAL_SRNG_INT_BATCH_THRESHOLD_TX 256
  888. #define HAL_SRNG_INT_BATCH_THRESHOLD_RX 128
  889. #define HAL_SRNG_INT_BATCH_THRESHOLD_OTHER 1
  890. /* Interrupt mitigation - timer threshold in us */
  891. #define HAL_SRNG_INT_TIMER_THRESHOLD_TX 1000
  892. #define HAL_SRNG_INT_TIMER_THRESHOLD_RX 500
  893. #define HAL_SRNG_INT_TIMER_THRESHOLD_OTHER 256
  894. enum hal_srng_mac_type {
  895. ATH12K_HAL_SRNG_UMAC,
  896. ATH12K_HAL_SRNG_DMAC,
  897. ATH12K_HAL_SRNG_PMAC
  898. };
  899. /* HW SRNG configuration table */
  900. struct hal_srng_config {
  901. int start_ring_id;
  902. u16 max_rings;
  903. u16 entry_size;
  904. u32 reg_start[HAL_SRNG_NUM_REG_GRP];
  905. u16 reg_size[HAL_SRNG_NUM_REG_GRP];
  906. enum hal_srng_mac_type mac_type;
  907. enum hal_srng_dir ring_dir;
  908. u32 max_size;
  909. };
  910. /**
  911. * enum hal_rx_buf_return_buf_manager - manager for returned rx buffers
  912. *
  913. * @HAL_RX_BUF_RBM_WBM_IDLE_BUF_LIST: Buffer returned to WBM idle buffer list
  914. * @HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST: Descriptor returned to WBM idle
  915. * descriptor list, where the device 0 WBM is chosen in case of a multi-device config
  916. * @HAL_RX_BUF_RBM_WBM_DEV1_IDLE_DESC_LIST: Descriptor returned to WBM idle
  917. * descriptor list, where the device 1 WBM is chosen in case of a multi-device config
  918. * @HAL_RX_BUF_RBM_WBM_DEV2_IDLE_DESC_LIST: Descriptor returned to WBM idle
  919. * descriptor list, where the device 2 WBM is chosen in case of a multi-device config
  920. * @HAL_RX_BUF_RBM_FW_BM: Buffer returned to FW
  921. * @HAL_RX_BUF_RBM_SW0_BM: For ring 0 -- returned to host
  922. * @HAL_RX_BUF_RBM_SW1_BM: For ring 1 -- returned to host
  923. * @HAL_RX_BUF_RBM_SW2_BM: For ring 2 -- returned to host
  924. * @HAL_RX_BUF_RBM_SW3_BM: For ring 3 -- returned to host
  925. * @HAL_RX_BUF_RBM_SW4_BM: For ring 4 -- returned to host
  926. * @HAL_RX_BUF_RBM_SW5_BM: For ring 5 -- returned to host
  927. * @HAL_RX_BUF_RBM_SW6_BM: For ring 6 -- returned to host
  928. */
  929. enum hal_rx_buf_return_buf_manager {
  930. HAL_RX_BUF_RBM_WBM_IDLE_BUF_LIST,
  931. HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST,
  932. HAL_RX_BUF_RBM_WBM_DEV1_IDLE_DESC_LIST,
  933. HAL_RX_BUF_RBM_WBM_DEV2_IDLE_DESC_LIST,
  934. HAL_RX_BUF_RBM_FW_BM,
  935. HAL_RX_BUF_RBM_SW0_BM,
  936. HAL_RX_BUF_RBM_SW1_BM,
  937. HAL_RX_BUF_RBM_SW2_BM,
  938. HAL_RX_BUF_RBM_SW3_BM,
  939. HAL_RX_BUF_RBM_SW4_BM,
  940. HAL_RX_BUF_RBM_SW5_BM,
  941. HAL_RX_BUF_RBM_SW6_BM,
  942. };
  943. struct ath12k_hal_reo_cmd {
  944. u32 addr_lo;
  945. u32 flag;
  946. u32 upd0;
  947. u32 upd1;
  948. u32 upd2;
  949. u32 pn[4];
  950. u16 rx_queue_num;
  951. u16 min_rel;
  952. u16 min_fwd;
  953. u8 addr_hi;
  954. u8 ac_list;
  955. u8 blocking_idx;
  956. u16 ba_window_size;
  957. u8 pn_size;
  958. };
  959. enum hal_pn_type {
  960. HAL_PN_TYPE_NONE,
  961. HAL_PN_TYPE_WPA,
  962. HAL_PN_TYPE_WAPI_EVEN,
  963. HAL_PN_TYPE_WAPI_UNEVEN,
  964. };
  965. enum hal_ce_desc {
  966. HAL_CE_DESC_SRC,
  967. HAL_CE_DESC_DST,
  968. HAL_CE_DESC_DST_STATUS,
  969. };
  970. #define HAL_HASH_ROUTING_RING_TCL 0
  971. #define HAL_HASH_ROUTING_RING_SW1 1
  972. #define HAL_HASH_ROUTING_RING_SW2 2
  973. #define HAL_HASH_ROUTING_RING_SW3 3
  974. #define HAL_HASH_ROUTING_RING_SW4 4
  975. #define HAL_HASH_ROUTING_RING_REL 5
  976. #define HAL_HASH_ROUTING_RING_FW 6
  977. struct hal_reo_status_header {
  978. u16 cmd_num;
  979. enum hal_reo_cmd_status cmd_status;
  980. u16 cmd_exe_time;
  981. u32 timestamp;
  982. };
  983. struct ath12k_hw_hal_params {
  984. enum hal_rx_buf_return_buf_manager rx_buf_rbm;
  985. u32 wbm2sw_cc_enable;
  986. };
  987. #define ATH12K_HW_REG_UNDEFINED 0xdeadbeaf
  988. struct ath12k_hw_regs {
  989. u32 tcl1_ring_id;
  990. u32 tcl1_ring_misc;
  991. u32 tcl1_ring_tp_addr_lsb;
  992. u32 tcl1_ring_tp_addr_msb;
  993. u32 tcl1_ring_consumer_int_setup_ix0;
  994. u32 tcl1_ring_consumer_int_setup_ix1;
  995. u32 tcl1_ring_msi1_base_lsb;
  996. u32 tcl1_ring_msi1_base_msb;
  997. u32 tcl1_ring_msi1_data;
  998. u32 tcl_ring_base_lsb;
  999. u32 tcl1_ring_base_lsb;
  1000. u32 tcl1_ring_base_msb;
  1001. u32 tcl2_ring_base_lsb;
  1002. u32 tcl_status_ring_base_lsb;
  1003. u32 reo1_qdesc_addr;
  1004. u32 reo1_qdesc_max_peerid;
  1005. u32 wbm_idle_ring_base_lsb;
  1006. u32 wbm_idle_ring_misc_addr;
  1007. u32 wbm_r0_idle_list_cntl_addr;
  1008. u32 wbm_r0_idle_list_size_addr;
  1009. u32 wbm_scattered_ring_base_lsb;
  1010. u32 wbm_scattered_ring_base_msb;
  1011. u32 wbm_scattered_desc_head_info_ix0;
  1012. u32 wbm_scattered_desc_head_info_ix1;
  1013. u32 wbm_scattered_desc_tail_info_ix0;
  1014. u32 wbm_scattered_desc_tail_info_ix1;
  1015. u32 wbm_scattered_desc_ptr_hp_addr;
  1016. u32 wbm_sw_release_ring_base_lsb;
  1017. u32 wbm_sw1_release_ring_base_lsb;
  1018. u32 wbm0_release_ring_base_lsb;
  1019. u32 wbm1_release_ring_base_lsb;
  1020. u32 pcie_qserdes_sysclk_en_sel;
  1021. u32 pcie_pcs_osc_dtct_config_base;
  1022. u32 umac_ce0_src_reg_base;
  1023. u32 umac_ce0_dest_reg_base;
  1024. u32 umac_ce1_src_reg_base;
  1025. u32 umac_ce1_dest_reg_base;
  1026. u32 ppe_rel_ring_base;
  1027. u32 reo2_ring_base;
  1028. u32 reo1_misc_ctrl_addr;
  1029. u32 reo1_sw_cookie_cfg0;
  1030. u32 reo1_sw_cookie_cfg1;
  1031. u32 reo1_qdesc_lut_base0;
  1032. u32 reo1_qdesc_lut_base1;
  1033. u32 reo1_ring_base_lsb;
  1034. u32 reo1_ring_base_msb;
  1035. u32 reo1_ring_id;
  1036. u32 reo1_ring_misc;
  1037. u32 reo1_ring_hp_addr_lsb;
  1038. u32 reo1_ring_hp_addr_msb;
  1039. u32 reo1_ring_producer_int_setup;
  1040. u32 reo1_ring_msi1_base_lsb;
  1041. u32 reo1_ring_msi1_base_msb;
  1042. u32 reo1_ring_msi1_data;
  1043. u32 reo1_aging_thres_ix0;
  1044. u32 reo1_aging_thres_ix1;
  1045. u32 reo1_aging_thres_ix2;
  1046. u32 reo1_aging_thres_ix3;
  1047. u32 reo2_sw0_ring_base;
  1048. u32 sw2reo_ring_base;
  1049. u32 sw2reo1_ring_base;
  1050. u32 reo_cmd_ring_base;
  1051. u32 reo_status_ring_base;
  1052. u32 gcc_gcc_pcie_hot_rst;
  1053. u32 qrtr_node_id;
  1054. };
  1055. /* HAL context to be used to access SRNG APIs (currently used by data path
  1056. * and transport (CE) modules)
  1057. */
  1058. struct ath12k_hal {
  1059. /* HAL internal state for all SRNG rings.
  1060. */
  1061. struct hal_srng srng_list[HAL_SRNG_RING_ID_MAX];
  1062. /* SRNG configuration table */
  1063. struct hal_srng_config *srng_config;
  1064. /* Remote pointer memory for HW/FW updates */
  1065. struct {
  1066. u32 *vaddr;
  1067. dma_addr_t paddr;
  1068. } rdp;
  1069. /* Shared memory for ring pointer updates from host to FW */
  1070. struct {
  1071. u32 *vaddr;
  1072. dma_addr_t paddr;
  1073. } wrp;
  1074. struct device *dev;
  1075. const struct hal_ops *ops;
  1076. const struct ath12k_hw_regs *regs;
  1077. const struct ath12k_hw_hal_params *hal_params;
  1078. /* Available REO blocking resources bitmap */
  1079. u8 avail_blk_resource;
  1080. u8 current_blk_index;
  1081. /* shadow register configuration */
  1082. u32 shadow_reg_addr[HAL_SHADOW_NUM_REGS_MAX];
  1083. int num_shadow_reg_configured;
  1084. u32 hal_desc_sz;
  1085. u32 hal_wbm_release_ring_tx_size;
  1086. const struct ath12k_hal_tcl_to_wbm_rbm_map *tcl_to_wbm_rbm_map;
  1087. };
  1088. /* Maps WBM ring number and Return Buffer Manager Id per TCL ring */
  1089. struct ath12k_hal_tcl_to_wbm_rbm_map {
  1090. u8 wbm_ring_num;
  1091. u8 rbm_id;
  1092. };
  1093. enum hal_wbm_rel_bm_act {
  1094. HAL_WBM_REL_BM_ACT_PUT_IN_IDLE,
  1095. HAL_WBM_REL_BM_ACT_REL_MSDU,
  1096. };
  1097. /* hal_wbm_rel_bm_act
  1098. *
  1099. * put_in_idle_list
  1100. * Put the buffer or descriptor back in the idle list. In case of MSDU or
  1101. * MDPU link descriptor, BM does not need to check to release any
  1102. * individual MSDU buffers.
  1103. *
  1104. * release_msdu_list
  1105. * This BM action can only be used in combination with desc_type being
  1106. * msdu_link_descriptor. Field first_msdu_index points out which MSDU
  1107. * pointer in the MSDU link descriptor is the first of an MPDU that is
  1108. * released. BM shall release all the MSDU buffers linked to this first
  1109. * MSDU buffer pointer. All related MSDU buffer pointer entries shall be
  1110. * set to value 0, which represents the 'NULL' pointer. When all MSDU
  1111. * buffer pointers in the MSDU link descriptor are 'NULL', the MSDU link
  1112. * descriptor itself shall also be released.
  1113. */
  1114. #define RU_INVALID 0
  1115. #define RU_26 1
  1116. #define RU_52 2
  1117. #define RU_106 4
  1118. #define RU_242 9
  1119. #define RU_484 18
  1120. #define RU_996 37
  1121. #define RU_2X996 74
  1122. #define RU_3X996 111
  1123. #define RU_4X996 148
  1124. #define RU_52_26 (RU_52 + RU_26)
  1125. #define RU_106_26 (RU_106 + RU_26)
  1126. #define RU_484_242 (RU_484 + RU_242)
  1127. #define RU_996_484 (RU_996 + RU_484)
  1128. #define RU_996_484_242 (RU_996 + RU_484_242)
  1129. #define RU_2X996_484 (RU_2X996 + RU_484)
  1130. #define RU_3X996_484 (RU_3X996 + RU_484)
  1131. enum ath12k_eht_ru_size {
  1132. ATH12K_EHT_RU_26,
  1133. ATH12K_EHT_RU_52,
  1134. ATH12K_EHT_RU_106,
  1135. ATH12K_EHT_RU_242,
  1136. ATH12K_EHT_RU_484,
  1137. ATH12K_EHT_RU_996,
  1138. ATH12K_EHT_RU_996x2,
  1139. ATH12K_EHT_RU_996x4,
  1140. ATH12K_EHT_RU_52_26,
  1141. ATH12K_EHT_RU_106_26,
  1142. ATH12K_EHT_RU_484_242,
  1143. ATH12K_EHT_RU_996_484,
  1144. ATH12K_EHT_RU_996_484_242,
  1145. ATH12K_EHT_RU_996x2_484,
  1146. ATH12K_EHT_RU_996x3,
  1147. ATH12K_EHT_RU_996x3_484,
  1148. /* Keep last */
  1149. ATH12K_EHT_RU_INVALID,
  1150. };
  1151. #define HAL_RX_RU_ALLOC_TYPE_MAX ATH12K_EHT_RU_INVALID
  1152. static inline
  1153. enum nl80211_he_ru_alloc ath12k_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones)
  1154. {
  1155. enum nl80211_he_ru_alloc ret;
  1156. switch (ru_tones) {
  1157. case RU_52:
  1158. ret = NL80211_RATE_INFO_HE_RU_ALLOC_52;
  1159. break;
  1160. case RU_106:
  1161. ret = NL80211_RATE_INFO_HE_RU_ALLOC_106;
  1162. break;
  1163. case RU_242:
  1164. ret = NL80211_RATE_INFO_HE_RU_ALLOC_242;
  1165. break;
  1166. case RU_484:
  1167. ret = NL80211_RATE_INFO_HE_RU_ALLOC_484;
  1168. break;
  1169. case RU_996:
  1170. ret = NL80211_RATE_INFO_HE_RU_ALLOC_996;
  1171. break;
  1172. case RU_2X996:
  1173. ret = NL80211_RATE_INFO_HE_RU_ALLOC_2x996;
  1174. break;
  1175. case RU_26:
  1176. fallthrough;
  1177. default:
  1178. ret = NL80211_RATE_INFO_HE_RU_ALLOC_26;
  1179. break;
  1180. }
  1181. return ret;
  1182. }
  1183. struct ath12k_hw_version_map {
  1184. const struct hal_ops *hal_ops;
  1185. u32 hal_desc_sz;
  1186. const struct ath12k_hal_tcl_to_wbm_rbm_map *tcl_to_wbm_rbm_map;
  1187. const struct ath12k_hw_hal_params *hal_params;
  1188. const struct ath12k_hw_regs *hw_regs;
  1189. };
  1190. struct hal_ops {
  1191. int (*create_srng_config)(struct ath12k_hal *hal);
  1192. void (*rx_desc_set_msdu_len)(struct hal_rx_desc *desc, u16 len);
  1193. void (*rx_desc_get_dot11_hdr)(struct hal_rx_desc *desc,
  1194. struct ieee80211_hdr *hdr);
  1195. void (*rx_desc_get_crypto_header)(struct hal_rx_desc *desc,
  1196. u8 *crypto_hdr,
  1197. enum hal_encrypt_type enctype);
  1198. void (*rx_desc_copy_end_tlv)(struct hal_rx_desc *fdesc,
  1199. struct hal_rx_desc *ldesc);
  1200. u8 (*rx_desc_get_msdu_src_link_id)(struct hal_rx_desc *desc);
  1201. void (*extract_rx_desc_data)(struct hal_rx_desc_data *rx_desc_data,
  1202. struct hal_rx_desc *rx_desc,
  1203. struct hal_rx_desc *ldesc);
  1204. u32 (*rx_desc_get_mpdu_start_tag)(struct hal_rx_desc *desc);
  1205. u32 (*rx_desc_get_mpdu_ppdu_id)(struct hal_rx_desc *desc);
  1206. u8 (*rx_desc_get_l3_pad_bytes)(struct hal_rx_desc *desc);
  1207. u8 *(*rx_desc_get_msdu_payload)(struct hal_rx_desc *desc);
  1208. void (*ce_dst_setup)(struct ath12k_base *ab,
  1209. struct hal_srng *srng, int ring_num);
  1210. void (*set_umac_srng_ptr_addr)(struct ath12k_base *ab,
  1211. struct hal_srng *srng);
  1212. void (*srng_src_hw_init)(struct ath12k_base *ab, struct hal_srng *srng);
  1213. void (*srng_dst_hw_init)(struct ath12k_base *ab, struct hal_srng *srng);
  1214. int (*srng_update_shadow_config)(struct ath12k_base *ab,
  1215. enum hal_ring_type ring_type,
  1216. int ring_num);
  1217. int (*srng_get_ring_id)(struct ath12k_hal *hal, enum hal_ring_type type,
  1218. int ring_num, int mac_id);
  1219. u32 (*ce_get_desc_size)(enum hal_ce_desc type);
  1220. void (*ce_src_set_desc)(struct hal_ce_srng_src_desc *desc,
  1221. dma_addr_t paddr, u32 len, u32 id,
  1222. u8 byte_swap_data);
  1223. void (*ce_dst_set_desc)(struct hal_ce_srng_dest_desc *desc,
  1224. dma_addr_t paddr);
  1225. u32 (*ce_dst_status_get_length)(struct hal_ce_srng_dst_status_desc *desc);
  1226. void (*set_link_desc_addr)(struct hal_wbm_link_desc *desc, u32 cookie,
  1227. dma_addr_t paddr,
  1228. enum hal_rx_buf_return_buf_manager rbm);
  1229. void (*tx_set_dscp_tid_map)(struct ath12k_base *ab, int id);
  1230. void (*tx_configure_bank_register)(struct ath12k_base *ab,
  1231. u32 bank_config, u8 bank_id);
  1232. void (*reoq_lut_addr_read_enable)(struct ath12k_base *ab);
  1233. void (*reoq_lut_set_max_peerid)(struct ath12k_base *ab);
  1234. void (*write_ml_reoq_lut_addr)(struct ath12k_base *ab,
  1235. dma_addr_t paddr);
  1236. void (*write_reoq_lut_addr)(struct ath12k_base *ab, dma_addr_t paddr);
  1237. void (*setup_link_idle_list)(struct ath12k_base *ab,
  1238. struct hal_wbm_idle_scatter_list *sbuf,
  1239. u32 nsbufs, u32 tot_link_desc,
  1240. u32 end_offset);
  1241. void (*reo_init_cmd_ring)(struct ath12k_base *ab,
  1242. struct hal_srng *srng);
  1243. void (*reo_shared_qaddr_cache_clear)(struct ath12k_base *ab);
  1244. void (*reo_hw_setup)(struct ath12k_base *ab, u32 ring_hash_map);
  1245. void (*rx_buf_addr_info_set)(struct ath12k_buffer_addr *binfo,
  1246. dma_addr_t paddr, u32 cookie, u8 manager);
  1247. void (*rx_buf_addr_info_get)(struct ath12k_buffer_addr *binfo,
  1248. dma_addr_t *paddr, u32 *msdu_cookies,
  1249. u8 *rbm);
  1250. void (*cc_config)(struct ath12k_base *ab);
  1251. enum hal_rx_buf_return_buf_manager
  1252. (*get_idle_link_rbm)(struct ath12k_hal *hal, u8 device_id);
  1253. void (*rx_msdu_list_get)(struct ath12k *ar,
  1254. void *link_desc,
  1255. void *msdu_list,
  1256. u16 *num_msdus);
  1257. void (*rx_reo_ent_buf_paddr_get)(void *rx_desc, dma_addr_t *paddr,
  1258. u32 *sw_cookie,
  1259. struct ath12k_buffer_addr **pp_buf_addr,
  1260. u8 *rbm, u32 *msdu_cnt);
  1261. void *(*reo_cmd_enc_tlv_hdr)(void *tlv, u64 tag, u64 len);
  1262. u16 (*reo_status_dec_tlv_hdr)(void *tlv, void **desc);
  1263. };
  1264. #define HAL_TLV_HDR_TAG GENMASK(9, 1)
  1265. #define HAL_TLV_HDR_LEN GENMASK(25, 10)
  1266. #define HAL_TLV_USR_ID GENMASK(31, 26)
  1267. #define HAL_TLV_ALIGN 4
  1268. struct hal_tlv_hdr {
  1269. __le32 tl;
  1270. u8 value[];
  1271. } __packed;
  1272. #define HAL_TLV_64_HDR_TAG GENMASK(9, 1)
  1273. #define HAL_TLV_64_HDR_LEN GENMASK(21, 10)
  1274. #define HAL_TLV_64_USR_ID GENMASK(31, 26)
  1275. #define HAL_TLV_64_ALIGN 8
  1276. struct hal_tlv_64_hdr {
  1277. __le64 tl;
  1278. u8 value[];
  1279. } __packed;
  1280. #define HAL_SRNG_TLV_HDR_TAG GENMASK(9, 1)
  1281. #define HAL_SRNG_TLV_HDR_LEN GENMASK(25, 10)
  1282. dma_addr_t ath12k_hal_srng_get_tp_addr(struct ath12k_base *ab,
  1283. struct hal_srng *srng);
  1284. dma_addr_t ath12k_hal_srng_get_hp_addr(struct ath12k_base *ab,
  1285. struct hal_srng *srng);
  1286. u32 ath12k_hal_ce_get_desc_size(struct ath12k_hal *hal, enum hal_ce_desc type);
  1287. void ath12k_hal_ce_dst_set_desc(struct ath12k_hal *hal,
  1288. struct hal_ce_srng_dest_desc *desc,
  1289. dma_addr_t paddr);
  1290. void ath12k_hal_ce_src_set_desc(struct ath12k_hal *hal,
  1291. struct hal_ce_srng_src_desc *desc,
  1292. dma_addr_t paddr, u32 len, u32 id,
  1293. u8 byte_swap_data);
  1294. int ath12k_hal_srng_get_entrysize(struct ath12k_base *ab, u32 ring_type);
  1295. int ath12k_hal_srng_get_max_entries(struct ath12k_base *ab, u32 ring_type);
  1296. void ath12k_hal_srng_get_params(struct ath12k_base *ab, struct hal_srng *srng,
  1297. struct hal_srng_params *params);
  1298. void *ath12k_hal_srng_dst_get_next_entry(struct ath12k_base *ab,
  1299. struct hal_srng *srng);
  1300. void *ath12k_hal_srng_src_peek(struct ath12k_base *ab, struct hal_srng *srng);
  1301. void *ath12k_hal_srng_dst_peek(struct ath12k_base *ab, struct hal_srng *srng);
  1302. int ath12k_hal_srng_dst_num_free(struct ath12k_base *ab, struct hal_srng *srng,
  1303. bool sync_hw_ptr);
  1304. void *ath12k_hal_srng_src_get_next_reaped(struct ath12k_base *ab,
  1305. struct hal_srng *srng);
  1306. void *ath12k_hal_srng_src_reap_next(struct ath12k_base *ab,
  1307. struct hal_srng *srng);
  1308. void *ath12k_hal_srng_src_next_peek(struct ath12k_base *ab,
  1309. struct hal_srng *srng);
  1310. void *ath12k_hal_srng_src_get_next_entry(struct ath12k_base *ab,
  1311. struct hal_srng *srng);
  1312. int ath12k_hal_srng_src_num_free(struct ath12k_base *ab, struct hal_srng *srng,
  1313. bool sync_hw_ptr);
  1314. void ath12k_hal_srng_access_begin(struct ath12k_base *ab,
  1315. struct hal_srng *srng);
  1316. void ath12k_hal_srng_access_end(struct ath12k_base *ab, struct hal_srng *srng);
  1317. int ath12k_hal_srng_setup(struct ath12k_base *ab, enum hal_ring_type type,
  1318. int ring_num, int mac_id,
  1319. struct hal_srng_params *params);
  1320. int ath12k_hal_srng_init(struct ath12k_base *ath12k);
  1321. void ath12k_hal_srng_deinit(struct ath12k_base *ath12k);
  1322. void ath12k_hal_dump_srng_stats(struct ath12k_base *ab);
  1323. void ath12k_hal_srng_get_shadow_config(struct ath12k_base *ab,
  1324. u32 **cfg, u32 *len);
  1325. int ath12k_hal_srng_update_shadow_config(struct ath12k_base *ab,
  1326. enum hal_ring_type ring_type,
  1327. int ring_num);
  1328. void ath12k_hal_srng_shadow_config(struct ath12k_base *ab);
  1329. void ath12k_hal_srng_shadow_update_hp_tp(struct ath12k_base *ab,
  1330. struct hal_srng *srng);
  1331. void ath12k_hal_reo_shared_qaddr_cache_clear(struct ath12k_base *ab);
  1332. void ath12k_hal_set_link_desc_addr(struct ath12k_hal *hal,
  1333. struct hal_wbm_link_desc *desc, u32 cookie,
  1334. dma_addr_t paddr, int rbm);
  1335. void ath12k_hal_setup_link_idle_list(struct ath12k_base *ab,
  1336. struct hal_wbm_idle_scatter_list *sbuf,
  1337. u32 nsbufs, u32 tot_link_desc,
  1338. u32 end_offset);
  1339. u32
  1340. ath12k_hal_ce_dst_status_get_length(struct ath12k_hal *hal,
  1341. struct hal_ce_srng_dst_status_desc *desc);
  1342. void ath12k_hal_tx_set_dscp_tid_map(struct ath12k_base *ab, int id);
  1343. void ath12k_hal_tx_configure_bank_register(struct ath12k_base *ab,
  1344. u32 bank_config, u8 bank_id);
  1345. void ath12k_hal_reoq_lut_addr_read_enable(struct ath12k_base *ab);
  1346. void ath12k_hal_reoq_lut_set_max_peerid(struct ath12k_base *ab);
  1347. void ath12k_hal_write_reoq_lut_addr(struct ath12k_base *ab, dma_addr_t paddr);
  1348. void
  1349. ath12k_hal_write_ml_reoq_lut_addr(struct ath12k_base *ab, dma_addr_t paddr);
  1350. void ath12k_hal_reo_init_cmd_ring(struct ath12k_base *ab, struct hal_srng *srng);
  1351. void ath12k_hal_reo_hw_setup(struct ath12k_base *ab, u32 ring_hash_map);
  1352. void ath12k_hal_rx_buf_addr_info_set(struct ath12k_hal *hal,
  1353. struct ath12k_buffer_addr *binfo,
  1354. dma_addr_t paddr, u32 cookie, u8 manager);
  1355. void ath12k_hal_rx_buf_addr_info_get(struct ath12k_hal *hal,
  1356. struct ath12k_buffer_addr *binfo,
  1357. dma_addr_t *paddr, u32 *msdu_cookies,
  1358. u8 *rbm);
  1359. void ath12k_hal_cc_config(struct ath12k_base *ab);
  1360. enum hal_rx_buf_return_buf_manager
  1361. ath12k_hal_get_idle_link_rbm(struct ath12k_hal *hal, u8 device_id);
  1362. void ath12k_hal_rx_msdu_list_get(struct ath12k_hal *hal, struct ath12k *ar,
  1363. void *link_desc, void *msdu_list,
  1364. u16 *num_msdus);
  1365. void ath12k_hal_rx_reo_ent_buf_paddr_get(struct ath12k_hal *hal, void *rx_desc,
  1366. dma_addr_t *paddr, u32 *sw_cookie,
  1367. struct ath12k_buffer_addr **pp_buf_addr,
  1368. u8 *rbm, u32 *msdu_cnt);
  1369. void *ath12k_hal_encode_tlv64_hdr(void *tlv, u64 tag, u64 len);
  1370. void *ath12k_hal_encode_tlv32_hdr(void *tlv, u64 tag, u64 len);
  1371. u16 ath12k_hal_decode_tlv64_hdr(void *tlv, void **desc);
  1372. u16 ath12k_hal_decode_tlv32_hdr(void *tlv, void **desc);
  1373. #endif