dp_htt.h 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546
  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_DP_HTT_H
  7. #define ATH12K_DP_HTT_H
  8. struct ath12k_dp;
  9. /* HTT definitions */
  10. #define HTT_TAG_TCL_METADATA_VERSION 5
  11. #define HTT_TCL_META_DATA_TYPE GENMASK(1, 0)
  12. #define HTT_TCL_META_DATA_VALID_HTT BIT(2)
  13. /* vdev meta data */
  14. #define HTT_TCL_META_DATA_VDEV_ID GENMASK(10, 3)
  15. #define HTT_TCL_META_DATA_PDEV_ID GENMASK(12, 11)
  16. #define HTT_TCL_META_DATA_HOST_INSPECTED_MISSION BIT(13)
  17. /* peer meta data */
  18. #define HTT_TCL_META_DATA_PEER_ID GENMASK(15, 3)
  19. /* Global sequence number */
  20. #define HTT_TCL_META_DATA_TYPE_GLOBAL_SEQ_NUM 3
  21. #define HTT_TCL_META_DATA_GLOBAL_SEQ_HOST_INSPECTED BIT(2)
  22. #define HTT_TCL_META_DATA_GLOBAL_SEQ_NUM GENMASK(14, 3)
  23. #define HTT_TX_MLO_MCAST_HOST_REINJECT_BASE_VDEV_ID 128
  24. /* HTT tx completion is overlaid in wbm_release_ring */
  25. #define HTT_TX_WBM_COMP_INFO0_STATUS GENMASK(16, 13)
  26. #define HTT_TX_WBM_COMP_INFO1_REINJECT_REASON GENMASK(3, 0)
  27. #define HTT_TX_WBM_COMP_INFO1_EXCEPTION_FRAME BIT(4)
  28. #define HTT_TX_WBM_COMP_INFO2_ACK_RSSI GENMASK(31, 24)
  29. #define HTT_TARGET_VERSION_TIMEOUT_HZ (3 * HZ)
  30. struct htt_tx_wbm_completion {
  31. __le32 rsvd0[2];
  32. __le32 info0;
  33. __le32 info1;
  34. __le32 info2;
  35. __le32 info3;
  36. __le32 info4;
  37. __le32 rsvd1;
  38. } __packed;
  39. enum htt_h2t_msg_type {
  40. HTT_H2T_MSG_TYPE_VERSION_REQ = 0,
  41. HTT_H2T_MSG_TYPE_SRING_SETUP = 0xb,
  42. HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG = 0xc,
  43. HTT_H2T_MSG_TYPE_EXT_STATS_CFG = 0x10,
  44. HTT_H2T_MSG_TYPE_PPDU_STATS_CFG = 0x11,
  45. HTT_H2T_MSG_TYPE_VDEV_TXRX_STATS_CFG = 0x1a,
  46. HTT_H2T_MSG_TYPE_TX_MONITOR_CFG = 0x1b,
  47. };
  48. #define HTT_VER_REQ_INFO_MSG_ID GENMASK(7, 0)
  49. #define HTT_OPTION_TCL_METADATA_VER_V1 1
  50. #define HTT_OPTION_TCL_METADATA_VER_V2 2
  51. #define HTT_OPTION_TAG GENMASK(7, 0)
  52. #define HTT_OPTION_LEN GENMASK(15, 8)
  53. #define HTT_OPTION_VALUE GENMASK(31, 16)
  54. #define HTT_TCL_METADATA_VER_SZ 4
  55. struct htt_ver_req_cmd {
  56. __le32 ver_reg_info;
  57. __le32 tcl_metadata_version;
  58. } __packed;
  59. enum htt_srng_ring_type {
  60. HTT_HW_TO_SW_RING,
  61. HTT_SW_TO_HW_RING,
  62. HTT_SW_TO_SW_RING,
  63. };
  64. enum htt_srng_ring_id {
  65. HTT_RXDMA_HOST_BUF_RING,
  66. HTT_RXDMA_MONITOR_STATUS_RING,
  67. HTT_RXDMA_MONITOR_BUF_RING,
  68. HTT_RXDMA_MONITOR_DESC_RING,
  69. HTT_RXDMA_MONITOR_DEST_RING,
  70. HTT_HOST1_TO_FW_RXBUF_RING,
  71. HTT_HOST2_TO_FW_RXBUF_RING,
  72. HTT_RXDMA_NON_MONITOR_DEST_RING,
  73. HTT_RXDMA_HOST_BUF_RING2,
  74. HTT_TX_MON_HOST2MON_BUF_RING,
  75. HTT_TX_MON_MON2HOST_DEST_RING,
  76. HTT_RX_MON_HOST2MON_BUF_RING,
  77. HTT_RX_MON_MON2HOST_DEST_RING,
  78. };
  79. /* host -> target HTT_SRING_SETUP message
  80. *
  81. * After target is booted up, Host can send SRING setup message for
  82. * each host facing LMAC SRING. Target setups up HW registers based
  83. * on setup message and confirms back to Host if response_required is set.
  84. * Host should wait for confirmation message before sending new SRING
  85. * setup message
  86. *
  87. * The message would appear as follows:
  88. *
  89. * |31 24|23 20|19|18 16|15|14 8|7 0|
  90. * |--------------- +-----------------+----------------+------------------|
  91. * | ring_type | ring_id | pdev_id | msg_type |
  92. * |----------------------------------------------------------------------|
  93. * | ring_base_addr_lo |
  94. * |----------------------------------------------------------------------|
  95. * | ring_base_addr_hi |
  96. * |----------------------------------------------------------------------|
  97. * |ring_misc_cfg_flag|ring_entry_size| ring_size |
  98. * |----------------------------------------------------------------------|
  99. * | ring_head_offset32_remote_addr_lo |
  100. * |----------------------------------------------------------------------|
  101. * | ring_head_offset32_remote_addr_hi |
  102. * |----------------------------------------------------------------------|
  103. * | ring_tail_offset32_remote_addr_lo |
  104. * |----------------------------------------------------------------------|
  105. * | ring_tail_offset32_remote_addr_hi |
  106. * |----------------------------------------------------------------------|
  107. * | ring_msi_addr_lo |
  108. * |----------------------------------------------------------------------|
  109. * | ring_msi_addr_hi |
  110. * |----------------------------------------------------------------------|
  111. * | ring_msi_data |
  112. * |----------------------------------------------------------------------|
  113. * | intr_timer_th |IM| intr_batch_counter_th |
  114. * |----------------------------------------------------------------------|
  115. * | reserved |RR|PTCF| intr_low_threshold |
  116. * |----------------------------------------------------------------------|
  117. * Where
  118. * IM = sw_intr_mode
  119. * RR = response_required
  120. * PTCF = prefetch_timer_cfg
  121. *
  122. * The message is interpreted as follows:
  123. * dword0 - b'0:7 - msg_type: This will be set to
  124. * HTT_H2T_MSG_TYPE_SRING_SETUP
  125. * b'8:15 - pdev_id:
  126. * 0 (for rings at SOC/UMAC level),
  127. * 1/2/3 mac id (for rings at LMAC level)
  128. * b'16:23 - ring_id: identify which ring is to setup,
  129. * more details can be got from enum htt_srng_ring_id
  130. * b'24:31 - ring_type: identify type of host rings,
  131. * more details can be got from enum htt_srng_ring_type
  132. * dword1 - b'0:31 - ring_base_addr_lo: Lower 32bits of ring base address
  133. * dword2 - b'0:31 - ring_base_addr_hi: Upper 32bits of ring base address
  134. * dword3 - b'0:15 - ring_size: size of the ring in unit of 4-bytes words
  135. * b'16:23 - ring_entry_size: Size of each entry in 4-byte word units
  136. * b'24:31 - ring_misc_cfg_flag: Valid only for HW_TO_SW_RING and
  137. * SW_TO_HW_RING.
  138. * Refer to HTT_SRING_SETUP_RING_MISC_CFG_RING defs.
  139. * dword4 - b'0:31 - ring_head_off32_remote_addr_lo:
  140. * Lower 32 bits of memory address of the remote variable
  141. * storing the 4-byte word offset that identifies the head
  142. * element within the ring.
  143. * (The head offset variable has type u32.)
  144. * Valid for HW_TO_SW and SW_TO_SW rings.
  145. * dword5 - b'0:31 - ring_head_off32_remote_addr_hi:
  146. * Upper 32 bits of memory address of the remote variable
  147. * storing the 4-byte word offset that identifies the head
  148. * element within the ring.
  149. * (The head offset variable has type u32.)
  150. * Valid for HW_TO_SW and SW_TO_SW rings.
  151. * dword6 - b'0:31 - ring_tail_off32_remote_addr_lo:
  152. * Lower 32 bits of memory address of the remote variable
  153. * storing the 4-byte word offset that identifies the tail
  154. * element within the ring.
  155. * (The tail offset variable has type u32.)
  156. * Valid for HW_TO_SW and SW_TO_SW rings.
  157. * dword7 - b'0:31 - ring_tail_off32_remote_addr_hi:
  158. * Upper 32 bits of memory address of the remote variable
  159. * storing the 4-byte word offset that identifies the tail
  160. * element within the ring.
  161. * (The tail offset variable has type u32.)
  162. * Valid for HW_TO_SW and SW_TO_SW rings.
  163. * dword8 - b'0:31 - ring_msi_addr_lo: Lower 32bits of MSI cfg address
  164. * valid only for HW_TO_SW_RING and SW_TO_HW_RING
  165. * dword9 - b'0:31 - ring_msi_addr_hi: Upper 32bits of MSI cfg address
  166. * valid only for HW_TO_SW_RING and SW_TO_HW_RING
  167. * dword10 - b'0:31 - ring_msi_data: MSI data
  168. * Refer to HTT_SRING_SETUP_RING_MSC_CFG_xxx defs
  169. * valid only for HW_TO_SW_RING and SW_TO_HW_RING
  170. * dword11 - b'0:14 - intr_batch_counter_th:
  171. * batch counter threshold is in units of 4-byte words.
  172. * HW internally maintains and increments batch count.
  173. * (see SRING spec for detail description).
  174. * When batch count reaches threshold value, an interrupt
  175. * is generated by HW.
  176. * b'15 - sw_intr_mode:
  177. * This configuration shall be static.
  178. * Only programmed at power up.
  179. * 0: generate pulse style sw interrupts
  180. * 1: generate level style sw interrupts
  181. * b'16:31 - intr_timer_th:
  182. * The timer init value when timer is idle or is
  183. * initialized to start downcounting.
  184. * In 8us units (to cover a range of 0 to 524 ms)
  185. * dword12 - b'0:15 - intr_low_threshold:
  186. * Used only by Consumer ring to generate ring_sw_int_p.
  187. * Ring entries low threshold water mark, that is used
  188. * in combination with the interrupt timer as well as
  189. * the clearing of the level interrupt.
  190. * b'16:18 - prefetch_timer_cfg:
  191. * Used only by Consumer ring to set timer mode to
  192. * support Application prefetch handling.
  193. * The external tail offset/pointer will be updated
  194. * at following intervals:
  195. * 3'b000: (Prefetch feature disabled; used only for debug)
  196. * 3'b001: 1 usec
  197. * 3'b010: 4 usec
  198. * 3'b011: 8 usec (default)
  199. * 3'b100: 16 usec
  200. * Others: Reserved
  201. * b'19 - response_required:
  202. * Host needs HTT_T2H_MSG_TYPE_SRING_SETUP_DONE as response
  203. * b'20:31 - reserved: reserved for future use
  204. */
  205. #define HTT_SRNG_SETUP_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
  206. #define HTT_SRNG_SETUP_CMD_INFO0_PDEV_ID GENMASK(15, 8)
  207. #define HTT_SRNG_SETUP_CMD_INFO0_RING_ID GENMASK(23, 16)
  208. #define HTT_SRNG_SETUP_CMD_INFO0_RING_TYPE GENMASK(31, 24)
  209. #define HTT_SRNG_SETUP_CMD_INFO1_RING_SIZE GENMASK(15, 0)
  210. #define HTT_SRNG_SETUP_CMD_INFO1_RING_ENTRY_SIZE GENMASK(23, 16)
  211. #define HTT_SRNG_SETUP_CMD_INFO1_RING_LOOP_CNT_DIS BIT(25)
  212. #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_MSI_SWAP BIT(27)
  213. #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_HOST_FW_SWAP BIT(28)
  214. #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_TLV_SWAP BIT(29)
  215. #define HTT_SRNG_SETUP_CMD_INTR_INFO_BATCH_COUNTER_THRESH GENMASK(14, 0)
  216. #define HTT_SRNG_SETUP_CMD_INTR_INFO_SW_INTR_MODE BIT(15)
  217. #define HTT_SRNG_SETUP_CMD_INTR_INFO_INTR_TIMER_THRESH GENMASK(31, 16)
  218. #define HTT_SRNG_SETUP_CMD_INFO2_INTR_LOW_THRESH GENMASK(15, 0)
  219. #define HTT_SRNG_SETUP_CMD_INFO2_PRE_FETCH_TIMER_CFG GENMASK(18, 16)
  220. #define HTT_SRNG_SETUP_CMD_INFO2_RESPONSE_REQUIRED BIT(19)
  221. struct htt_srng_setup_cmd {
  222. __le32 info0;
  223. __le32 ring_base_addr_lo;
  224. __le32 ring_base_addr_hi;
  225. __le32 info1;
  226. __le32 ring_head_off32_remote_addr_lo;
  227. __le32 ring_head_off32_remote_addr_hi;
  228. __le32 ring_tail_off32_remote_addr_lo;
  229. __le32 ring_tail_off32_remote_addr_hi;
  230. __le32 ring_msi_addr_lo;
  231. __le32 ring_msi_addr_hi;
  232. __le32 msi_data;
  233. __le32 intr_info;
  234. __le32 info2;
  235. } __packed;
  236. /* host -> target FW PPDU_STATS config message
  237. *
  238. * @details
  239. * The following field definitions describe the format of the HTT host
  240. * to target FW for PPDU_STATS_CFG msg.
  241. * The message allows the host to configure the PPDU_STATS_IND messages
  242. * produced by the target.
  243. *
  244. * |31 24|23 16|15 8|7 0|
  245. * |-----------------------------------------------------------|
  246. * | REQ bit mask | pdev_mask | msg type |
  247. * |-----------------------------------------------------------|
  248. * Header fields:
  249. * - MSG_TYPE
  250. * Bits 7:0
  251. * Purpose: identifies this is a req to configure ppdu_stats_ind from target
  252. * Value: 0x11
  253. * - PDEV_MASK
  254. * Bits 8:15
  255. * Purpose: identifies which pdevs this PPDU stats configuration applies to
  256. * Value: This is a overloaded field, refer to usage and interpretation of
  257. * PDEV in interface document.
  258. * Bit 8 : Reserved for SOC stats
  259. * Bit 9 - 15 : Indicates PDEV_MASK in DBDC
  260. * Indicates MACID_MASK in DBS
  261. * - REQ_TLV_BIT_MASK
  262. * Bits 16:31
  263. * Purpose: each set bit indicates the corresponding PPDU stats TLV type
  264. * needs to be included in the target's PPDU_STATS_IND messages.
  265. * Value: refer htt_ppdu_stats_tlv_tag_t <<<???
  266. *
  267. */
  268. struct htt_ppdu_stats_cfg_cmd {
  269. __le32 msg;
  270. } __packed;
  271. #define HTT_PPDU_STATS_CFG_MSG_TYPE GENMASK(7, 0)
  272. #define HTT_PPDU_STATS_CFG_SOC_STATS BIT(8)
  273. #define HTT_PPDU_STATS_CFG_PDEV_ID GENMASK(15, 9)
  274. #define HTT_PPDU_STATS_CFG_TLV_TYPE_BITMASK GENMASK(31, 16)
  275. enum htt_ppdu_stats_tag_type {
  276. HTT_PPDU_STATS_TAG_COMMON,
  277. HTT_PPDU_STATS_TAG_USR_COMMON,
  278. HTT_PPDU_STATS_TAG_USR_RATE,
  279. HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64,
  280. HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256,
  281. HTT_PPDU_STATS_TAG_SCH_CMD_STATUS,
  282. HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON,
  283. HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64,
  284. HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256,
  285. HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS,
  286. HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH,
  287. HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY,
  288. HTT_PPDU_STATS_TAG_INFO,
  289. HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD,
  290. /* New TLV's are added above to this line */
  291. HTT_PPDU_STATS_TAG_MAX,
  292. };
  293. #define HTT_PPDU_STATS_TAG_DEFAULT (BIT(HTT_PPDU_STATS_TAG_COMMON) \
  294. | BIT(HTT_PPDU_STATS_TAG_USR_COMMON) \
  295. | BIT(HTT_PPDU_STATS_TAG_USR_RATE) \
  296. | BIT(HTT_PPDU_STATS_TAG_SCH_CMD_STATUS) \
  297. | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON) \
  298. | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS) \
  299. | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH) \
  300. | BIT(HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY))
  301. #define HTT_PPDU_STATS_TAG_PKTLOG (BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64) | \
  302. BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256) | \
  303. BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64) | \
  304. BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256) | \
  305. BIT(HTT_PPDU_STATS_TAG_INFO) | \
  306. BIT(HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD) | \
  307. HTT_PPDU_STATS_TAG_DEFAULT)
  308. enum htt_stats_internal_ppdu_frametype {
  309. HTT_STATS_PPDU_FTYPE_CTRL,
  310. HTT_STATS_PPDU_FTYPE_DATA,
  311. HTT_STATS_PPDU_FTYPE_BAR,
  312. HTT_STATS_PPDU_FTYPE_MAX
  313. };
  314. /* HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG Message
  315. *
  316. * details:
  317. * HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG message is sent by host to
  318. * configure RXDMA rings.
  319. * The configuration is per ring based and includes both packet subtypes
  320. * and PPDU/MPDU TLVs.
  321. *
  322. * The message would appear as follows:
  323. *
  324. * |31 29|28|27|26|25|24|23 16|15 8|7 0|
  325. * |-------+--+--+--+--+--+-----------+----------------+---------------|
  326. * | rsvd1 |ED|DT|OV|PS|SS| ring_id | pdev_id | msg_type |
  327. * |-------------------------------------------------------------------|
  328. * | rsvd2 | ring_buffer_size |
  329. * |-------------------------------------------------------------------|
  330. * | packet_type_enable_flags_0 |
  331. * |-------------------------------------------------------------------|
  332. * | packet_type_enable_flags_1 |
  333. * |-------------------------------------------------------------------|
  334. * | packet_type_enable_flags_2 |
  335. * |-------------------------------------------------------------------|
  336. * | packet_type_enable_flags_3 |
  337. * |-------------------------------------------------------------------|
  338. * | tlv_filter_in_flags |
  339. * |-------------------------------------------------------------------|
  340. * Where:
  341. * PS = pkt_swap
  342. * SS = status_swap
  343. * The message is interpreted as follows:
  344. * dword0 - b'0:7 - msg_type: This will be set to
  345. * HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG
  346. * b'8:15 - pdev_id:
  347. * 0 (for rings at SOC/UMAC level),
  348. * 1/2/3 mac id (for rings at LMAC level)
  349. * b'16:23 - ring_id : Identify the ring to configure.
  350. * More details can be got from enum htt_srng_ring_id
  351. * b'24 - status_swap: 1 is to swap status TLV
  352. * b'25 - pkt_swap: 1 is to swap packet TLV
  353. * b'26 - rx_offset_valid (OV): flag to indicate rx offsets
  354. * configuration fields are valid
  355. * b'27 - drop_thresh_valid (DT): flag to indicate if the
  356. * rx_drop_threshold field is valid
  357. * b'28 - rx_mon_global_en: Enable/Disable global register
  358. * configuration in Rx monitor module.
  359. * b'29:31 - rsvd1: reserved for future use
  360. * dword1 - b'0:16 - ring_buffer_size: size of buffers referenced by rx ring,
  361. * in byte units.
  362. * Valid only for HW_TO_SW_RING and SW_TO_HW_RING
  363. * - b'16:31 - rsvd2: Reserved for future use
  364. * dword2 - b'0:31 - packet_type_enable_flags_0:
  365. * Enable MGMT packet from 0b0000 to 0b1001
  366. * bits from low to high: FP, MD, MO - 3 bits
  367. * FP: Filter_Pass
  368. * MD: Monitor_Direct
  369. * MO: Monitor_Other
  370. * 10 mgmt subtypes * 3 bits -> 30 bits
  371. * Refer to PKT_TYPE_ENABLE_FLAG0_xxx_MGMT_xxx defs
  372. * dword3 - b'0:31 - packet_type_enable_flags_1:
  373. * Enable MGMT packet from 0b1010 to 0b1111
  374. * bits from low to high: FP, MD, MO - 3 bits
  375. * Refer to PKT_TYPE_ENABLE_FLAG1_xxx_MGMT_xxx defs
  376. * dword4 - b'0:31 - packet_type_enable_flags_2:
  377. * Enable CTRL packet from 0b0000 to 0b1001
  378. * bits from low to high: FP, MD, MO - 3 bits
  379. * Refer to PKT_TYPE_ENABLE_FLAG2_xxx_CTRL_xxx defs
  380. * dword5 - b'0:31 - packet_type_enable_flags_3:
  381. * Enable CTRL packet from 0b1010 to 0b1111,
  382. * MCAST_DATA, UCAST_DATA, NULL_DATA
  383. * bits from low to high: FP, MD, MO - 3 bits
  384. * Refer to PKT_TYPE_ENABLE_FLAG3_xxx_CTRL_xxx defs
  385. * dword6 - b'0:31 - tlv_filter_in_flags:
  386. * Filter in Attention/MPDU/PPDU/Header/User tlvs
  387. * Refer to CFG_TLV_FILTER_IN_FLAG defs
  388. */
  389. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
  390. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)
  391. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_RING_ID GENMASK(23, 16)
  392. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_SS BIT(24)
  393. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PS BIT(25)
  394. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_OFFSET_VALID BIT(26)
  395. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_DROP_THRES_VAL BIT(27)
  396. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_EN_RXMON BIT(28)
  397. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_BUF_SIZE GENMASK(15, 0)
  398. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_MGMT GENMASK(18, 16)
  399. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_CTRL GENMASK(21, 19)
  400. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_DATA GENMASK(24, 22)
  401. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_DROP_THRESHOLD GENMASK(9, 0)
  402. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_EN_LOG_MGMT_TYPE BIT(17)
  403. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_EN_CTRL_TYPE BIT(18)
  404. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO2_EN_LOG_DATA_TYPE BIT(19)
  405. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO3_EN_TLV_PKT_OFFSET BIT(0)
  406. #define HTT_RX_RING_SELECTION_CFG_CMD_INFO3_PKT_TLV_OFFSET GENMASK(14, 1)
  407. #define HTT_RX_RING_SELECTION_CFG_RX_PACKET_OFFSET GENMASK(15, 0)
  408. #define HTT_RX_RING_SELECTION_CFG_RX_HEADER_OFFSET GENMASK(31, 16)
  409. #define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_OFFSET GENMASK(15, 0)
  410. #define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_OFFSET GENMASK(31, 16)
  411. #define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_OFFSET GENMASK(15, 0)
  412. #define HTT_RX_RING_SELECTION_CFG_RX_MSDU_START_OFFSET GENMASK(31, 16)
  413. #define HTT_RX_RING_SELECTION_CFG_RX_ATTENTION_OFFSET GENMASK(15, 0)
  414. #define HTT_RX_RING_SELECTION_CFG_WORD_MASK_COMPACT_SET BIT(23)
  415. #define HTT_RX_RING_SELECTION_CFG_RX_MPDU_START_MASK GENMASK(15, 0)
  416. #define HTT_RX_RING_SELECTION_CFG_RX_MPDU_END_MASK GENMASK(18, 16)
  417. #define HTT_RX_RING_SELECTION_CFG_RX_MSDU_END_MASK GENMASK(16, 0)
  418. enum htt_rx_filter_tlv_flags {
  419. HTT_RX_FILTER_TLV_FLAGS_MPDU_START = BIT(0),
  420. HTT_RX_FILTER_TLV_FLAGS_MSDU_START = BIT(1),
  421. HTT_RX_FILTER_TLV_FLAGS_RX_PACKET = BIT(2),
  422. HTT_RX_FILTER_TLV_FLAGS_MSDU_END = BIT(3),
  423. HTT_RX_FILTER_TLV_FLAGS_MPDU_END = BIT(4),
  424. HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER = BIT(5),
  425. HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER = BIT(6),
  426. HTT_RX_FILTER_TLV_FLAGS_ATTENTION = BIT(7),
  427. HTT_RX_FILTER_TLV_FLAGS_PPDU_START = BIT(8),
  428. HTT_RX_FILTER_TLV_FLAGS_PPDU_END = BIT(9),
  429. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS = BIT(10),
  430. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT = BIT(11),
  431. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE = BIT(12),
  432. HTT_RX_FILTER_TLV_FLAGS_PPDU_START_USER_INFO = BIT(13),
  433. };
  434. enum htt_rx_mgmt_pkt_filter_tlv_flags0 {
  435. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(0),
  436. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(1),
  437. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(2),
  438. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(3),
  439. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(4),
  440. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(5),
  441. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(6),
  442. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(7),
  443. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(8),
  444. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(9),
  445. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(10),
  446. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(11),
  447. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(12),
  448. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(13),
  449. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(14),
  450. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(15),
  451. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(16),
  452. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(17),
  453. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(18),
  454. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(19),
  455. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(20),
  456. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(21),
  457. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(22),
  458. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(23),
  459. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(24),
  460. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(25),
  461. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(26),
  462. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(27),
  463. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(28),
  464. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(29),
  465. };
  466. enum htt_rx_mgmt_pkt_filter_tlv_flags1 {
  467. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(0),
  468. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(1),
  469. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(2),
  470. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(3),
  471. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(4),
  472. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(5),
  473. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(6),
  474. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(7),
  475. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(8),
  476. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(9),
  477. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(10),
  478. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(11),
  479. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(12),
  480. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(13),
  481. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(14),
  482. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(15),
  483. HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(16),
  484. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(17),
  485. };
  486. enum htt_rx_ctrl_pkt_filter_tlv_flags2 {
  487. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(0),
  488. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(1),
  489. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(2),
  490. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(3),
  491. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(4),
  492. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(5),
  493. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(6),
  494. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(7),
  495. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(8),
  496. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(9),
  497. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(10),
  498. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(11),
  499. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(12),
  500. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(13),
  501. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(14),
  502. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(15),
  503. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(16),
  504. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(17),
  505. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(18),
  506. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(19),
  507. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(20),
  508. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(21),
  509. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(22),
  510. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(23),
  511. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(24),
  512. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(25),
  513. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(26),
  514. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(27),
  515. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(28),
  516. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(29),
  517. };
  518. enum htt_rx_ctrl_pkt_filter_tlv_flags3 {
  519. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(0),
  520. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(1),
  521. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(2),
  522. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(3),
  523. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(4),
  524. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(5),
  525. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(6),
  526. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(7),
  527. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(8),
  528. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(9),
  529. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(10),
  530. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(11),
  531. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(12),
  532. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(13),
  533. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(14),
  534. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(15),
  535. HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(16),
  536. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(17),
  537. };
  538. enum htt_rx_data_pkt_filter_tlv_flasg3 {
  539. HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(18),
  540. HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(19),
  541. HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(20),
  542. HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(21),
  543. HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(22),
  544. HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(23),
  545. HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(24),
  546. HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(25),
  547. HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(26),
  548. };
  549. #define HTT_RX_FP_MGMT_FILTER_FLAGS0 \
  550. (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \
  551. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \
  552. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \
  553. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \
  554. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \
  555. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \
  556. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \
  557. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \
  558. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)
  559. #define HTT_RX_MD_MGMT_FILTER_FLAGS0 \
  560. (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \
  561. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \
  562. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \
  563. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \
  564. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \
  565. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \
  566. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \
  567. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \
  568. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)
  569. #define HTT_RX_MO_MGMT_FILTER_FLAGS0 \
  570. (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \
  571. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \
  572. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \
  573. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \
  574. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \
  575. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \
  576. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \
  577. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \
  578. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM)
  579. #define HTT_RX_FP_MGMT_FILTER_FLAGS1 (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \
  580. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \
  581. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \
  582. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \
  583. | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)
  584. #define HTT_RX_MD_MGMT_FILTER_FLAGS1 (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \
  585. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \
  586. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \
  587. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \
  588. | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)
  589. #define HTT_RX_MO_MGMT_FILTER_FLAGS1 (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \
  590. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \
  591. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \
  592. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \
  593. | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK)
  594. #define HTT_RX_FP_CTRL_FILTER_FLASG2 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \
  595. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \
  596. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA)
  597. #define HTT_RX_MD_CTRL_FILTER_FLASG2 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \
  598. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \
  599. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA)
  600. #define HTT_RX_MO_CTRL_FILTER_FLASG2 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \
  601. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \
  602. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA)
  603. #define HTT_RX_FP_CTRL_FILTER_FLASG3 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \
  604. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \
  605. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \
  606. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \
  607. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \
  608. | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)
  609. #define HTT_RX_MD_CTRL_FILTER_FLASG3 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \
  610. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \
  611. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \
  612. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \
  613. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \
  614. | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)
  615. #define HTT_RX_MO_CTRL_FILTER_FLASG3 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \
  616. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \
  617. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \
  618. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \
  619. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \
  620. | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK)
  621. #define HTT_RX_FP_DATA_FILTER_FLASG3 (HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST \
  622. | HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST \
  623. | HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)
  624. #define HTT_RX_MD_DATA_FILTER_FLASG3 (HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST \
  625. | HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST \
  626. | HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)
  627. #define HTT_RX_MO_DATA_FILTER_FLASG3 (HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST \
  628. | HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST \
  629. | HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA)
  630. #define HTT_RX_MON_FP_MGMT_FILTER_FLAGS0 \
  631. (HTT_RX_FP_MGMT_FILTER_FLAGS0 | \
  632. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7)
  633. #define HTT_RX_MON_MO_MGMT_FILTER_FLAGS0 \
  634. (HTT_RX_MO_MGMT_FILTER_FLAGS0 | \
  635. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7)
  636. #define HTT_RX_MON_FP_MGMT_FILTER_FLAGS1 \
  637. (HTT_RX_FP_MGMT_FILTER_FLAGS1 | \
  638. HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15)
  639. #define HTT_RX_MON_MO_MGMT_FILTER_FLAGS1 \
  640. (HTT_RX_MO_MGMT_FILTER_FLAGS1 | \
  641. HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15)
  642. #define HTT_RX_MON_FP_CTRL_FILTER_FLASG2 \
  643. (HTT_RX_FP_CTRL_FILTER_FLASG2 | \
  644. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \
  645. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \
  646. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \
  647. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \
  648. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \
  649. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \
  650. HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT)
  651. #define HTT_RX_MON_MO_CTRL_FILTER_FLASG2 \
  652. (HTT_RX_MO_CTRL_FILTER_FLASG2 | \
  653. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \
  654. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \
  655. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \
  656. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \
  657. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \
  658. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \
  659. HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT)
  660. #define HTT_RX_MON_FP_CTRL_FILTER_FLASG3 HTT_RX_FP_CTRL_FILTER_FLASG3
  661. #define HTT_RX_MON_MO_CTRL_FILTER_FLASG3 HTT_RX_MO_CTRL_FILTER_FLASG3
  662. #define HTT_RX_MON_FP_DATA_FILTER_FLASG3 HTT_RX_FP_DATA_FILTER_FLASG3
  663. #define HTT_RX_MON_MO_DATA_FILTER_FLASG3 HTT_RX_MO_DATA_FILTER_FLASG3
  664. #define HTT_RX_MON_FILTER_TLV_FLAGS \
  665. (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
  666. HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \
  667. HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \
  668. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \
  669. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \
  670. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE)
  671. #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_STATUS_RING \
  672. (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
  673. HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \
  674. HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \
  675. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \
  676. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \
  677. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE)
  678. #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_BUF_RING \
  679. (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
  680. HTT_RX_FILTER_TLV_FLAGS_MSDU_START | \
  681. HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \
  682. HTT_RX_FILTER_TLV_FLAGS_MSDU_END | \
  683. HTT_RX_FILTER_TLV_FLAGS_MPDU_END | \
  684. HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | \
  685. HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER | \
  686. HTT_RX_FILTER_TLV_FLAGS_ATTENTION)
  687. #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_DEST_RING \
  688. (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
  689. HTT_RX_FILTER_TLV_FLAGS_MSDU_START | \
  690. HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \
  691. HTT_RX_FILTER_TLV_FLAGS_MSDU_END | \
  692. HTT_RX_FILTER_TLV_FLAGS_MPDU_END | \
  693. HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | \
  694. HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER | \
  695. HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \
  696. HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \
  697. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \
  698. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \
  699. HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE | \
  700. HTT_RX_FILTER_TLV_FLAGS_PPDU_START_USER_INFO)
  701. /* msdu start. mpdu end, attention, rx hdr tlv's are not subscribed */
  702. #define HTT_RX_TLV_FLAGS_RXDMA_RING \
  703. (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \
  704. HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \
  705. HTT_RX_FILTER_TLV_FLAGS_MSDU_END)
  706. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
  707. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)
  708. struct htt_rx_ring_selection_cfg_cmd {
  709. __le32 info0;
  710. __le32 info1;
  711. __le32 pkt_type_en_flags0;
  712. __le32 pkt_type_en_flags1;
  713. __le32 pkt_type_en_flags2;
  714. __le32 pkt_type_en_flags3;
  715. __le32 rx_filter_tlv;
  716. __le32 rx_packet_offset;
  717. __le32 rx_mpdu_offset;
  718. __le32 rx_msdu_offset;
  719. __le32 rx_attn_offset;
  720. __le32 info2;
  721. __le32 reserved[2];
  722. __le32 rx_mpdu_start_end_mask;
  723. __le32 rx_msdu_end_word_mask;
  724. __le32 info3;
  725. } __packed;
  726. #define HTT_RX_RING_TLV_DROP_THRESHOLD_VALUE 32
  727. #define HTT_RX_RING_DEFAULT_DMA_LENGTH 0x7
  728. #define HTT_RX_RING_PKT_TLV_OFFSET 0x1
  729. struct htt_rx_ring_tlv_filter {
  730. u32 rx_filter; /* see htt_rx_filter_tlv_flags */
  731. u32 pkt_filter_flags0; /* MGMT */
  732. u32 pkt_filter_flags1; /* MGMT */
  733. u32 pkt_filter_flags2; /* CTRL */
  734. u32 pkt_filter_flags3; /* DATA */
  735. bool offset_valid;
  736. u16 rx_packet_offset;
  737. u16 rx_header_offset;
  738. u16 rx_mpdu_end_offset;
  739. u16 rx_mpdu_start_offset;
  740. u16 rx_msdu_end_offset;
  741. u16 rx_msdu_start_offset;
  742. u16 rx_attn_offset;
  743. u16 rx_mpdu_start_wmask;
  744. u16 rx_mpdu_end_wmask;
  745. u32 rx_msdu_end_wmask;
  746. u32 conf_len_ctrl;
  747. u32 conf_len_mgmt;
  748. u32 conf_len_data;
  749. u16 rx_drop_threshold;
  750. bool enable_log_mgmt_type;
  751. bool enable_log_ctrl_type;
  752. bool enable_log_data_type;
  753. bool enable_rx_tlv_offset;
  754. u16 rx_tlv_offset;
  755. bool drop_threshold_valid;
  756. bool rxmon_disable;
  757. };
  758. #define HTT_STATS_FRAME_CTRL_TYPE_MGMT 0x0
  759. #define HTT_STATS_FRAME_CTRL_TYPE_CTRL 0x1
  760. #define HTT_STATS_FRAME_CTRL_TYPE_DATA 0x2
  761. #define HTT_STATS_FRAME_CTRL_TYPE_RESV 0x3
  762. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0)
  763. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8)
  764. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_RING_ID GENMASK(23, 16)
  765. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_SS BIT(24)
  766. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO0_PS BIT(25)
  767. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_RING_BUFF_SIZE GENMASK(15, 0)
  768. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_PKT_TYPE GENMASK(18, 16)
  769. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_MGMT GENMASK(21, 19)
  770. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_CTRL GENMASK(24, 22)
  771. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO1_CONF_LEN_DATA GENMASK(27, 25)
  772. #define HTT_TX_RING_SELECTION_CFG_CMD_INFO2_PKT_TYPE_EN_FLAG GENMASK(2, 0)
  773. struct htt_tx_ring_selection_cfg_cmd {
  774. __le32 info0;
  775. __le32 info1;
  776. __le32 info2;
  777. __le32 tlv_filter_mask_in0;
  778. __le32 tlv_filter_mask_in1;
  779. __le32 tlv_filter_mask_in2;
  780. __le32 tlv_filter_mask_in3;
  781. __le32 reserved[3];
  782. } __packed;
  783. #define HTT_TX_RING_TLV_FILTER_MGMT_DMA_LEN GENMASK(3, 0)
  784. #define HTT_TX_RING_TLV_FILTER_CTRL_DMA_LEN GENMASK(7, 4)
  785. #define HTT_TX_RING_TLV_FILTER_DATA_DMA_LEN GENMASK(11, 8)
  786. #define HTT_TX_MON_FILTER_HYBRID_MODE \
  787. (HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_START_STATUS | \
  788. HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_END_STATUS | \
  789. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START | \
  790. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_END | \
  791. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PPDU | \
  792. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_PPDU | \
  793. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_ACK_OR_BA | \
  794. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_1K_BA | \
  795. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PROT | \
  796. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_PROT | \
  797. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_RESPONSE | \
  798. HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO | \
  799. HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO_PART2)
  800. struct htt_tx_ring_tlv_filter {
  801. u32 tx_mon_downstream_tlv_flags;
  802. u32 tx_mon_upstream_tlv_flags0;
  803. u32 tx_mon_upstream_tlv_flags1;
  804. u32 tx_mon_upstream_tlv_flags2;
  805. bool tx_mon_mgmt_filter;
  806. bool tx_mon_data_filter;
  807. bool tx_mon_ctrl_filter;
  808. u16 tx_mon_pkt_dma_len;
  809. } __packed;
  810. enum htt_tx_mon_upstream_tlv_flags0 {
  811. HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_START_STATUS = BIT(1),
  812. HTT_TX_FILTER_TLV_FLAGS0_RESPONSE_END_STATUS = BIT(2),
  813. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START = BIT(3),
  814. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_END = BIT(4),
  815. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PPDU = BIT(5),
  816. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_PPDU = BIT(6),
  817. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_ACK_OR_BA = BIT(7),
  818. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_1K_BA = BIT(8),
  819. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_START_PROT = BIT(9),
  820. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_PROT = BIT(10),
  821. HTT_TX_FILTER_TLV_FLAGS0_TX_FES_STATUS_USER_RESPONSE = BIT(11),
  822. HTT_TX_FILTER_TLV_FLAGS0_RX_FRAME_BITMAP_ACK = BIT(12),
  823. HTT_TX_FILTER_TLV_FLAGS0_RX_FRAME_1K_BITMAP_ACK = BIT(13),
  824. HTT_TX_FILTER_TLV_FLAGS0_COEX_TX_STATUS = BIT(14),
  825. HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO = BIT(15),
  826. HTT_TX_FILTER_TLV_FLAGS0_RECEIVED_RESPONSE_INFO_PART2 = BIT(16),
  827. };
  828. #define HTT_TX_FILTER_TLV_FLAGS2_TXPCU_PHYTX_OTHER_TRANSMIT_INFO32 BIT(11)
  829. /* HTT message target->host */
  830. enum htt_t2h_msg_type {
  831. HTT_T2H_MSG_TYPE_VERSION_CONF,
  832. HTT_T2H_MSG_TYPE_PEER_MAP = 0x3,
  833. HTT_T2H_MSG_TYPE_PEER_UNMAP = 0x4,
  834. HTT_T2H_MSG_TYPE_RX_ADDBA = 0x5,
  835. HTT_T2H_MSG_TYPE_PKTLOG = 0x8,
  836. HTT_T2H_MSG_TYPE_SEC_IND = 0xb,
  837. HTT_T2H_MSG_TYPE_PEER_MAP2 = 0x1e,
  838. HTT_T2H_MSG_TYPE_PEER_UNMAP2 = 0x1f,
  839. HTT_T2H_MSG_TYPE_PPDU_STATS_IND = 0x1d,
  840. HTT_T2H_MSG_TYPE_EXT_STATS_CONF = 0x1c,
  841. HTT_T2H_MSG_TYPE_BKPRESSURE_EVENT_IND = 0x24,
  842. HTT_T2H_MSG_TYPE_MLO_TIMESTAMP_OFFSET_IND = 0x28,
  843. HTT_T2H_MSG_TYPE_PEER_MAP3 = 0x2b,
  844. HTT_T2H_MSG_TYPE_VDEV_TXRX_STATS_PERIODIC_IND = 0x2c,
  845. };
  846. #define HTT_TARGET_VERSION_MAJOR 3
  847. #define HTT_T2H_MSG_TYPE GENMASK(7, 0)
  848. #define HTT_T2H_VERSION_CONF_MINOR GENMASK(15, 8)
  849. #define HTT_T2H_VERSION_CONF_MAJOR GENMASK(23, 16)
  850. struct htt_t2h_version_conf_msg {
  851. __le32 version;
  852. } __packed;
  853. #define HTT_T2H_PEER_MAP_INFO_VDEV_ID GENMASK(15, 8)
  854. #define HTT_T2H_PEER_MAP_INFO_PEER_ID GENMASK(31, 16)
  855. #define HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16 GENMASK(15, 0)
  856. #define HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID GENMASK(31, 16)
  857. #define HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL GENMASK(15, 0)
  858. #define HTT_T2H_PEER_MAP3_INFO2_HW_PEER_ID GENMASK(15, 0)
  859. #define HTT_T2H_PEER_MAP3_INFO2_AST_HASH_VAL GENMASK(31, 16)
  860. #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M BIT(16)
  861. #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S 16
  862. struct htt_t2h_peer_map_event {
  863. __le32 info;
  864. __le32 mac_addr_l32;
  865. __le32 info1;
  866. __le32 info2;
  867. } __packed;
  868. #define HTT_T2H_PEER_UNMAP_INFO_VDEV_ID HTT_T2H_PEER_MAP_INFO_VDEV_ID
  869. #define HTT_T2H_PEER_UNMAP_INFO_PEER_ID HTT_T2H_PEER_MAP_INFO_PEER_ID
  870. #define HTT_T2H_PEER_UNMAP_INFO1_MAC_ADDR_H16 \
  871. HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16
  872. #define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_M HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M
  873. #define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_S HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S
  874. struct htt_t2h_peer_unmap_event {
  875. __le32 info;
  876. __le32 mac_addr_l32;
  877. __le32 info1;
  878. } __packed;
  879. struct htt_resp_msg {
  880. union {
  881. struct htt_t2h_version_conf_msg version_msg;
  882. struct htt_t2h_peer_map_event peer_map_ev;
  883. struct htt_t2h_peer_unmap_event peer_unmap_ev;
  884. };
  885. } __packed;
  886. #define HTT_VDEV_GET_STATS_U64(msg_l32, msg_u32)\
  887. (((u64)__le32_to_cpu(msg_u32) << 32) | (__le32_to_cpu(msg_l32)))
  888. #define HTT_T2H_VDEV_STATS_PERIODIC_MSG_TYPE GENMASK(7, 0)
  889. #define HTT_T2H_VDEV_STATS_PERIODIC_PDEV_ID GENMASK(15, 8)
  890. #define HTT_T2H_VDEV_STATS_PERIODIC_NUM_VDEV GENMASK(23, 16)
  891. #define HTT_T2H_VDEV_STATS_PERIODIC_PAYLOAD_BYTES GENMASK(15, 0)
  892. #define HTT_VDEV_TXRX_STATS_COMMON_TLV 0
  893. #define HTT_VDEV_TXRX_STATS_HW_STATS_TLV 1
  894. struct htt_t2h_vdev_txrx_stats_ind {
  895. __le32 vdev_id;
  896. __le32 rx_msdu_byte_cnt_lo;
  897. __le32 rx_msdu_byte_cnt_hi;
  898. __le32 rx_msdu_cnt_lo;
  899. __le32 rx_msdu_cnt_hi;
  900. __le32 tx_msdu_byte_cnt_lo;
  901. __le32 tx_msdu_byte_cnt_hi;
  902. __le32 tx_msdu_cnt_lo;
  903. __le32 tx_msdu_cnt_hi;
  904. __le32 tx_retry_cnt_lo;
  905. __le32 tx_retry_cnt_hi;
  906. __le32 tx_retry_byte_cnt_lo;
  907. __le32 tx_retry_byte_cnt_hi;
  908. __le32 tx_drop_cnt_lo;
  909. __le32 tx_drop_cnt_hi;
  910. __le32 tx_drop_byte_cnt_lo;
  911. __le32 tx_drop_byte_cnt_hi;
  912. __le32 msdu_ttl_cnt_lo;
  913. __le32 msdu_ttl_cnt_hi;
  914. __le32 msdu_ttl_byte_cnt_lo;
  915. __le32 msdu_ttl_byte_cnt_hi;
  916. } __packed;
  917. struct htt_t2h_vdev_common_stats_tlv {
  918. __le32 soc_drop_count_lo;
  919. __le32 soc_drop_count_hi;
  920. } __packed;
  921. /* ppdu stats
  922. *
  923. * @details
  924. * The following field definitions describe the format of the HTT target
  925. * to host ppdu stats indication message.
  926. *
  927. *
  928. * |31 16|15 12|11 10|9 8|7 0 |
  929. * |----------------------------------------------------------------------|
  930. * | payload_size | rsvd |pdev_id|mac_id | msg type |
  931. * |----------------------------------------------------------------------|
  932. * | ppdu_id |
  933. * |----------------------------------------------------------------------|
  934. * | Timestamp in us |
  935. * |----------------------------------------------------------------------|
  936. * | reserved |
  937. * |----------------------------------------------------------------------|
  938. * | type-specific stats info |
  939. * | (see htt_ppdu_stats.h) |
  940. * |----------------------------------------------------------------------|
  941. * Header fields:
  942. * - MSG_TYPE
  943. * Bits 7:0
  944. * Purpose: Identifies this is a PPDU STATS indication
  945. * message.
  946. * Value: 0x1d
  947. * - mac_id
  948. * Bits 9:8
  949. * Purpose: mac_id of this ppdu_id
  950. * Value: 0-3
  951. * - pdev_id
  952. * Bits 11:10
  953. * Purpose: pdev_id of this ppdu_id
  954. * Value: 0-3
  955. * 0 (for rings at SOC level),
  956. * 1/2/3 PDEV -> 0/1/2
  957. * - payload_size
  958. * Bits 31:16
  959. * Purpose: total tlv size
  960. * Value: payload_size in bytes
  961. */
  962. #define HTT_T2H_PPDU_STATS_INFO_PDEV_ID GENMASK(11, 10)
  963. #define HTT_T2H_PPDU_STATS_INFO_PAYLOAD_SIZE GENMASK(31, 16)
  964. struct ath12k_htt_ppdu_stats_msg {
  965. __le32 info;
  966. __le32 ppdu_id;
  967. __le32 timestamp;
  968. __le32 rsvd;
  969. u8 data[];
  970. } __packed;
  971. struct htt_tlv {
  972. __le32 header;
  973. u8 value[];
  974. } __packed;
  975. #define HTT_TLV_TAG GENMASK(11, 0)
  976. #define HTT_TLV_LEN GENMASK(23, 12)
  977. enum HTT_PPDU_STATS_BW {
  978. HTT_PPDU_STATS_BANDWIDTH_5MHZ = 0,
  979. HTT_PPDU_STATS_BANDWIDTH_10MHZ = 1,
  980. HTT_PPDU_STATS_BANDWIDTH_20MHZ = 2,
  981. HTT_PPDU_STATS_BANDWIDTH_40MHZ = 3,
  982. HTT_PPDU_STATS_BANDWIDTH_80MHZ = 4,
  983. HTT_PPDU_STATS_BANDWIDTH_160MHZ = 5, /* includes 80+80 */
  984. HTT_PPDU_STATS_BANDWIDTH_DYN = 6,
  985. };
  986. #define HTT_PPDU_STATS_CMN_FLAGS_FRAME_TYPE_M GENMASK(7, 0)
  987. #define HTT_PPDU_STATS_CMN_FLAGS_QUEUE_TYPE_M GENMASK(15, 8)
  988. /* bw - HTT_PPDU_STATS_BW */
  989. #define HTT_PPDU_STATS_CMN_FLAGS_BW_M GENMASK(19, 16)
  990. struct htt_ppdu_stats_common {
  991. __le32 ppdu_id;
  992. __le16 sched_cmdid;
  993. u8 ring_id;
  994. u8 num_users;
  995. __le32 flags; /* %HTT_PPDU_STATS_COMMON_FLAGS_*/
  996. __le32 chain_mask;
  997. __le32 fes_duration_us; /* frame exchange sequence */
  998. __le32 ppdu_sch_eval_start_tstmp_us;
  999. __le32 ppdu_sch_end_tstmp_us;
  1000. __le32 ppdu_start_tstmp_us;
  1001. /* BIT [15 : 0] - phy mode (WLAN_PHY_MODE) with which ppdu was transmitted
  1002. * BIT [31 : 16] - bandwidth (in MHz) with which ppdu was transmitted
  1003. */
  1004. __le16 phy_mode;
  1005. __le16 bw_mhz;
  1006. } __packed;
  1007. enum htt_ppdu_stats_gi {
  1008. HTT_PPDU_STATS_SGI_0_8_US,
  1009. HTT_PPDU_STATS_SGI_0_4_US,
  1010. HTT_PPDU_STATS_SGI_1_6_US,
  1011. HTT_PPDU_STATS_SGI_3_2_US,
  1012. };
  1013. #define HTT_PPDU_STATS_USER_RATE_INFO0_USER_POS_M GENMASK(3, 0)
  1014. #define HTT_PPDU_STATS_USER_RATE_INFO0_MU_GROUP_ID_M GENMASK(11, 4)
  1015. enum HTT_PPDU_STATS_PPDU_TYPE {
  1016. HTT_PPDU_STATS_PPDU_TYPE_SU,
  1017. HTT_PPDU_STATS_PPDU_TYPE_MU_MIMO,
  1018. HTT_PPDU_STATS_PPDU_TYPE_MU_OFDMA,
  1019. HTT_PPDU_STATS_PPDU_TYPE_MU_MIMO_OFDMA,
  1020. HTT_PPDU_STATS_PPDU_TYPE_UL_TRIG,
  1021. HTT_PPDU_STATS_PPDU_TYPE_BURST_BCN,
  1022. HTT_PPDU_STATS_PPDU_TYPE_UL_BSR_RESP,
  1023. HTT_PPDU_STATS_PPDU_TYPE_UL_BSR_TRIG,
  1024. HTT_PPDU_STATS_PPDU_TYPE_UL_RESP,
  1025. HTT_PPDU_STATS_PPDU_TYPE_MAX
  1026. };
  1027. #define HTT_PPDU_STATS_USER_RATE_INFO1_RESP_TYPE_VALD_M BIT(0)
  1028. #define HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M GENMASK(5, 1)
  1029. #define HTT_PPDU_STATS_USER_RATE_FLAGS_LTF_SIZE_M GENMASK(1, 0)
  1030. #define HTT_PPDU_STATS_USER_RATE_FLAGS_STBC_M BIT(2)
  1031. #define HTT_PPDU_STATS_USER_RATE_FLAGS_HE_RE_M BIT(3)
  1032. #define HTT_PPDU_STATS_USER_RATE_FLAGS_TXBF_M GENMASK(7, 4)
  1033. #define HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M GENMASK(11, 8)
  1034. #define HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M GENMASK(15, 12)
  1035. #define HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M GENMASK(19, 16)
  1036. #define HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M GENMASK(23, 20)
  1037. #define HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M GENMASK(27, 24)
  1038. #define HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M BIT(28)
  1039. #define HTT_PPDU_STATS_USER_RATE_FLAGS_LDPC_M BIT(29)
  1040. #define HTT_USR_RATE_PPDU_TYPE(_val) \
  1041. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M)
  1042. #define HTT_USR_RATE_PREAMBLE(_val) \
  1043. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M)
  1044. #define HTT_USR_RATE_BW(_val) \
  1045. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M)
  1046. #define HTT_USR_RATE_NSS(_val) \
  1047. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M)
  1048. #define HTT_USR_RATE_MCS(_val) \
  1049. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M)
  1050. #define HTT_USR_RATE_GI(_val) \
  1051. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M)
  1052. #define HTT_USR_RATE_DCM(_val) \
  1053. le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M)
  1054. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LTF_SIZE_M GENMASK(1, 0)
  1055. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_STBC_M BIT(2)
  1056. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_HE_RE_M BIT(3)
  1057. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_TXBF_M GENMASK(7, 4)
  1058. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_BW_M GENMASK(11, 8)
  1059. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_NSS_M GENMASK(15, 12)
  1060. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_MCS_M GENMASK(19, 16)
  1061. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_PREAMBLE_M GENMASK(23, 20)
  1062. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_GI_M GENMASK(27, 24)
  1063. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_DCM_M BIT(28)
  1064. #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LDPC_M BIT(29)
  1065. struct htt_ppdu_stats_user_rate {
  1066. u8 tid_num;
  1067. u8 reserved0;
  1068. __le16 sw_peer_id;
  1069. __le32 info0; /* %HTT_PPDU_STATS_USER_RATE_INFO0_*/
  1070. __le16 ru_end;
  1071. __le16 ru_start;
  1072. __le16 resp_ru_end;
  1073. __le16 resp_ru_start;
  1074. __le32 info1; /* %HTT_PPDU_STATS_USER_RATE_INFO1_ */
  1075. __le32 rate_flags; /* %HTT_PPDU_STATS_USER_RATE_FLAGS_ */
  1076. /* Note: resp_rate_info is only valid for if resp_type is UL */
  1077. __le32 resp_rate_flags; /* %HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_ */
  1078. } __packed;
  1079. #define HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M GENMASK(7, 0)
  1080. #define HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M BIT(8)
  1081. #define HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M GENMASK(10, 9)
  1082. #define HTT_PPDU_STATS_TX_INFO_FLAGS_BW_M GENMASK(13, 11)
  1083. #define HTT_PPDU_STATS_TX_INFO_FLAGS_SGI_M BIT(14)
  1084. #define HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M GENMASK(31, 16)
  1085. #define HTT_TX_INFO_IS_AMSDU(_flags) \
  1086. u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M)
  1087. #define HTT_TX_INFO_BA_ACK_FAILED(_flags) \
  1088. u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M)
  1089. #define HTT_TX_INFO_RATECODE(_flags) \
  1090. u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M)
  1091. #define HTT_TX_INFO_PEERID(_flags) \
  1092. u32_get_bits(_flags, HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M)
  1093. enum htt_ppdu_stats_usr_compln_status {
  1094. HTT_PPDU_STATS_USER_STATUS_OK,
  1095. HTT_PPDU_STATS_USER_STATUS_FILTERED,
  1096. HTT_PPDU_STATS_USER_STATUS_RESP_TIMEOUT,
  1097. HTT_PPDU_STATS_USER_STATUS_RESP_MISMATCH,
  1098. HTT_PPDU_STATS_USER_STATUS_ABORT,
  1099. };
  1100. #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M GENMASK(3, 0)
  1101. #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M GENMASK(7, 4)
  1102. #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M BIT(8)
  1103. #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_RESP_TYPE_M GENMASK(12, 9)
  1104. #define HTT_USR_CMPLTN_IS_AMPDU(_val) \
  1105. le32_get_bits(_val, HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M)
  1106. #define HTT_USR_CMPLTN_LONG_RETRY(_val) \
  1107. le32_get_bits(_val, HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M)
  1108. #define HTT_USR_CMPLTN_SHORT_RETRY(_val) \
  1109. le32_get_bits(_val, HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M)
  1110. struct htt_ppdu_stats_usr_cmpltn_cmn {
  1111. u8 status;
  1112. u8 tid_num;
  1113. __le16 sw_peer_id;
  1114. /* RSSI value of last ack packet (units = dB above noise floor) */
  1115. __le32 ack_rssi;
  1116. __le16 mpdu_tried;
  1117. __le16 mpdu_success;
  1118. __le32 flags; /* %HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRIES*/
  1119. } __packed;
  1120. #define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MPDU_M GENMASK(8, 0)
  1121. #define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MSDU_M GENMASK(24, 9)
  1122. #define HTT_PPDU_STATS_ACK_BA_INFO_TID_NUM GENMASK(31, 25)
  1123. #define HTT_PPDU_STATS_NON_QOS_TID 16
  1124. struct htt_ppdu_stats_usr_cmpltn_ack_ba_status {
  1125. __le32 ppdu_id;
  1126. __le16 sw_peer_id;
  1127. __le16 reserved0;
  1128. __le32 info; /* %HTT_PPDU_STATS_USR_CMPLTN_CMN_INFO_ */
  1129. __le16 current_seq;
  1130. __le16 start_seq;
  1131. __le32 success_bytes;
  1132. } __packed;
  1133. struct htt_ppdu_user_stats {
  1134. u16 peer_id;
  1135. u16 delay_ba;
  1136. u32 tlv_flags;
  1137. bool is_valid_peer_id;
  1138. struct htt_ppdu_stats_user_rate rate;
  1139. struct htt_ppdu_stats_usr_cmpltn_cmn cmpltn_cmn;
  1140. struct htt_ppdu_stats_usr_cmpltn_ack_ba_status ack_ba;
  1141. };
  1142. #define HTT_PPDU_STATS_MAX_USERS 8
  1143. #define HTT_PPDU_DESC_MAX_DEPTH 16
  1144. struct htt_ppdu_stats {
  1145. struct htt_ppdu_stats_common common;
  1146. struct htt_ppdu_user_stats user_stats[HTT_PPDU_STATS_MAX_USERS];
  1147. };
  1148. struct htt_ppdu_stats_info {
  1149. u32 tlv_bitmap;
  1150. u32 ppdu_id;
  1151. u32 frame_type;
  1152. u32 frame_ctrl;
  1153. u32 delay_ba;
  1154. u32 bar_num_users;
  1155. struct htt_ppdu_stats ppdu_stats;
  1156. struct list_head list;
  1157. };
  1158. /* @brief target -> host MLO offset indiciation message
  1159. *
  1160. * @details
  1161. * The following field definitions describe the format of the HTT target
  1162. * to host mlo offset indication message.
  1163. *
  1164. *
  1165. * |31 29|28 |26|25 22|21 16|15 13|12 10 |9 8|7 0|
  1166. * |---------------------------------------------------------------------|
  1167. * | rsvd1 | mac_freq |chip_id |pdev_id|msgtype|
  1168. * |---------------------------------------------------------------------|
  1169. * | sync_timestamp_lo_us |
  1170. * |---------------------------------------------------------------------|
  1171. * | sync_timestamp_hi_us |
  1172. * |---------------------------------------------------------------------|
  1173. * | mlo_offset_lo |
  1174. * |---------------------------------------------------------------------|
  1175. * | mlo_offset_hi |
  1176. * |---------------------------------------------------------------------|
  1177. * | mlo_offset_clcks |
  1178. * |---------------------------------------------------------------------|
  1179. * | rsvd2 | mlo_comp_clks |mlo_comp_us |
  1180. * |---------------------------------------------------------------------|
  1181. * | rsvd3 |mlo_comp_timer |
  1182. * |---------------------------------------------------------------------|
  1183. * Header fields
  1184. * - MSG_TYPE
  1185. * Bits 7:0
  1186. * Purpose: Identifies this is a MLO offset indication msg
  1187. * - PDEV_ID
  1188. * Bits 9:8
  1189. * Purpose: Pdev of this MLO offset
  1190. * - CHIP_ID
  1191. * Bits 12:10
  1192. * Purpose: chip_id of this MLO offset
  1193. * - MAC_FREQ
  1194. * Bits 28:13
  1195. * - SYNC_TIMESTAMP_LO_US
  1196. * Purpose: clock frequency of the mac HW block in MHz
  1197. * Bits: 31:0
  1198. * Purpose: lower 32 bits of the WLAN global time stamp at which
  1199. * last sync interrupt was received
  1200. * - SYNC_TIMESTAMP_HI_US
  1201. * Bits: 31:0
  1202. * Purpose: upper 32 bits of WLAN global time stamp at which
  1203. * last sync interrupt was received
  1204. * - MLO_OFFSET_LO
  1205. * Bits: 31:0
  1206. * Purpose: lower 32 bits of the MLO offset in us
  1207. * - MLO_OFFSET_HI
  1208. * Bits: 31:0
  1209. * Purpose: upper 32 bits of the MLO offset in us
  1210. * - MLO_COMP_US
  1211. * Bits: 15:0
  1212. * Purpose: MLO time stamp compensation applied in us
  1213. * - MLO_COMP_CLCKS
  1214. * Bits: 25:16
  1215. * Purpose: MLO time stamp compensation applied in clock ticks
  1216. * - MLO_COMP_TIMER
  1217. * Bits: 21:0
  1218. * Purpose: Periodic timer at which compensation is applied
  1219. */
  1220. #define HTT_T2H_MLO_OFFSET_INFO_MSG_TYPE GENMASK(7, 0)
  1221. #define HTT_T2H_MLO_OFFSET_INFO_PDEV_ID GENMASK(9, 8)
  1222. struct ath12k_htt_mlo_offset_msg {
  1223. __le32 info;
  1224. __le32 sync_timestamp_lo_us;
  1225. __le32 sync_timestamp_hi_us;
  1226. __le32 mlo_offset_hi;
  1227. __le32 mlo_offset_lo;
  1228. __le32 mlo_offset_clks;
  1229. __le32 mlo_comp_clks;
  1230. __le32 mlo_comp_timer;
  1231. } __packed;
  1232. /* @brief host -> target FW extended statistics retrieve
  1233. *
  1234. * @details
  1235. * The following field definitions describe the format of the HTT host
  1236. * to target FW extended stats retrieve message.
  1237. * The message specifies the type of stats the host wants to retrieve.
  1238. *
  1239. * |31 24|23 16|15 8|7 0|
  1240. * |-----------------------------------------------------------|
  1241. * | reserved | stats type | pdev_mask | msg type |
  1242. * |-----------------------------------------------------------|
  1243. * | config param [0] |
  1244. * |-----------------------------------------------------------|
  1245. * | config param [1] |
  1246. * |-----------------------------------------------------------|
  1247. * | config param [2] |
  1248. * |-----------------------------------------------------------|
  1249. * | config param [3] |
  1250. * |-----------------------------------------------------------|
  1251. * | reserved |
  1252. * |-----------------------------------------------------------|
  1253. * | cookie LSBs |
  1254. * |-----------------------------------------------------------|
  1255. * | cookie MSBs |
  1256. * |-----------------------------------------------------------|
  1257. * Header fields:
  1258. * - MSG_TYPE
  1259. * Bits 7:0
  1260. * Purpose: identifies this is a extended stats upload request message
  1261. * Value: 0x10
  1262. * - PDEV_MASK
  1263. * Bits 8:15
  1264. * Purpose: identifies the mask of PDEVs to retrieve stats from
  1265. * Value: This is a overloaded field, refer to usage and interpretation of
  1266. * PDEV in interface document.
  1267. * Bit 8 : Reserved for SOC stats
  1268. * Bit 9 - 15 : Indicates PDEV_MASK in DBDC
  1269. * Indicates MACID_MASK in DBS
  1270. * - STATS_TYPE
  1271. * Bits 23:16
  1272. * Purpose: identifies which FW statistics to upload
  1273. * Value: Defined by htt_dbg_ext_stats_type (see htt_stats.h)
  1274. * - Reserved
  1275. * Bits 31:24
  1276. * - CONFIG_PARAM [0]
  1277. * Bits 31:0
  1278. * Purpose: give an opaque configuration value to the specified stats type
  1279. * Value: stats-type specific configuration value
  1280. * Refer to htt_stats.h for interpretation for each stats sub_type
  1281. * - CONFIG_PARAM [1]
  1282. * Bits 31:0
  1283. * Purpose: give an opaque configuration value to the specified stats type
  1284. * Value: stats-type specific configuration value
  1285. * Refer to htt_stats.h for interpretation for each stats sub_type
  1286. * - CONFIG_PARAM [2]
  1287. * Bits 31:0
  1288. * Purpose: give an opaque configuration value to the specified stats type
  1289. * Value: stats-type specific configuration value
  1290. * Refer to htt_stats.h for interpretation for each stats sub_type
  1291. * - CONFIG_PARAM [3]
  1292. * Bits 31:0
  1293. * Purpose: give an opaque configuration value to the specified stats type
  1294. * Value: stats-type specific configuration value
  1295. * Refer to htt_stats.h for interpretation for each stats sub_type
  1296. * - Reserved [31:0] for future use.
  1297. * - COOKIE_LSBS
  1298. * Bits 31:0
  1299. * Purpose: Provide a mechanism to match a target->host stats confirmation
  1300. * message with its preceding host->target stats request message.
  1301. * Value: LSBs of the opaque cookie specified by the host-side requestor
  1302. * - COOKIE_MSBS
  1303. * Bits 31:0
  1304. * Purpose: Provide a mechanism to match a target->host stats confirmation
  1305. * message with its preceding host->target stats request message.
  1306. * Value: MSBs of the opaque cookie specified by the host-side requestor
  1307. */
  1308. struct htt_ext_stats_cfg_hdr {
  1309. u8 msg_type;
  1310. u8 pdev_mask;
  1311. u8 stats_type;
  1312. u8 reserved;
  1313. } __packed;
  1314. struct htt_ext_stats_cfg_cmd {
  1315. struct htt_ext_stats_cfg_hdr hdr;
  1316. __le32 cfg_param0;
  1317. __le32 cfg_param1;
  1318. __le32 cfg_param2;
  1319. __le32 cfg_param3;
  1320. __le32 reserved;
  1321. __le32 cookie_lsb;
  1322. __le32 cookie_msb;
  1323. } __packed;
  1324. /* htt stats config default params */
  1325. #define HTT_STAT_DEFAULT_RESET_START_OFFSET 0
  1326. #define HTT_STAT_DEFAULT_CFG0_ALL_HWQS 0xffffffff
  1327. #define HTT_STAT_DEFAULT_CFG0_ALL_TXQS 0xffffffff
  1328. #define HTT_STAT_DEFAULT_CFG0_ALL_CMDQS 0xffff
  1329. #define HTT_STAT_DEFAULT_CFG0_ALL_RINGS 0xffff
  1330. #define HTT_STAT_DEFAULT_CFG0_ACTIVE_PEERS 0xff
  1331. #define HTT_STAT_DEFAULT_CFG0_CCA_CUMULATIVE 0x00
  1332. #define HTT_STAT_DEFAULT_CFG0_ACTIVE_VDEVS 0x00
  1333. /* HTT_DBG_EXT_STATS_PEER_INFO
  1334. * PARAMS:
  1335. * @config_param0:
  1336. * [Bit0] - [0] for sw_peer_id, [1] for mac_addr based request
  1337. * [Bit15 : Bit 1] htt_peer_stats_req_mode_t
  1338. * [Bit31 : Bit16] sw_peer_id
  1339. * @config_param1:
  1340. * peer_stats_req_type_mask:32 (enum htt_peer_stats_tlv_enum)
  1341. * 0 bit htt_peer_stats_cmn_tlv
  1342. * 1 bit htt_peer_details_tlv
  1343. * 2 bit htt_tx_peer_rate_stats_tlv
  1344. * 3 bit htt_rx_peer_rate_stats_tlv
  1345. * 4 bit htt_tx_tid_stats_tlv/htt_tx_tid_stats_v1_tlv
  1346. * 5 bit htt_rx_tid_stats_tlv
  1347. * 6 bit htt_msdu_flow_stats_tlv
  1348. * @config_param2: [Bit31 : Bit0] mac_addr31to0
  1349. * @config_param3: [Bit15 : Bit0] mac_addr47to32
  1350. * [Bit31 : Bit16] reserved
  1351. */
  1352. #define HTT_STAT_PEER_INFO_MAC_ADDR BIT(0)
  1353. #define HTT_STAT_DEFAULT_PEER_REQ_TYPE 0x7f
  1354. /* Used to set different configs to the specified stats type.*/
  1355. struct htt_ext_stats_cfg_params {
  1356. u32 cfg0;
  1357. u32 cfg1;
  1358. u32 cfg2;
  1359. u32 cfg3;
  1360. };
  1361. enum vdev_stats_offload_timer_duration {
  1362. ATH12K_STATS_TIMER_DUR_500MS = 1,
  1363. ATH12K_STATS_TIMER_DUR_1SEC = 2,
  1364. ATH12K_STATS_TIMER_DUR_2SEC = 3,
  1365. };
  1366. #define ATH12K_HTT_MAC_ADDR_L32_0 GENMASK(7, 0)
  1367. #define ATH12K_HTT_MAC_ADDR_L32_1 GENMASK(15, 8)
  1368. #define ATH12K_HTT_MAC_ADDR_L32_2 GENMASK(23, 16)
  1369. #define ATH12K_HTT_MAC_ADDR_L32_3 GENMASK(31, 24)
  1370. #define ATH12K_HTT_MAC_ADDR_H16_0 GENMASK(7, 0)
  1371. #define ATH12K_HTT_MAC_ADDR_H16_1 GENMASK(15, 8)
  1372. struct htt_mac_addr {
  1373. __le32 mac_addr_l32;
  1374. __le32 mac_addr_h16;
  1375. } __packed;
  1376. int ath12k_dp_htt_connect(struct ath12k_dp *dp);
  1377. int ath12k_dp_tx_htt_srng_setup(struct ath12k_base *ab, u32 ring_id,
  1378. int mac_id, enum hal_ring_type ring_type);
  1379. void ath12k_dp_htt_htc_t2h_msg_handler(struct ath12k_base *ab,
  1380. struct sk_buff *skb);
  1381. int ath12k_dp_htt_tlv_iter(struct ath12k_base *ab, const void *ptr, size_t len,
  1382. int (*iter)(struct ath12k_base *ar, u16 tag, u16 len,
  1383. const void *ptr, void *data),
  1384. void *data);
  1385. int ath12k_dp_tx_htt_h2t_ver_req_msg(struct ath12k_base *ab);
  1386. int ath12k_dp_tx_htt_h2t_ppdu_stats_req(struct ath12k *ar, u32 mask);
  1387. int
  1388. ath12k_dp_tx_htt_h2t_ext_stats_req(struct ath12k *ar, u8 type,
  1389. struct htt_ext_stats_cfg_params *cfg_params,
  1390. u64 cookie);
  1391. int ath12k_dp_tx_htt_rx_monitor_mode_ring_config(struct ath12k *ar, bool reset);
  1392. int ath12k_dp_tx_htt_rx_filter_setup(struct ath12k_base *ab, u32 ring_id,
  1393. int mac_id, enum hal_ring_type ring_type,
  1394. int rx_buf_size,
  1395. struct htt_rx_ring_tlv_filter *tlv_filter);
  1396. int ath12k_dp_tx_htt_tx_filter_setup(struct ath12k_base *ab, u32 ring_id,
  1397. int mac_id, enum hal_ring_type ring_type,
  1398. int tx_buf_size,
  1399. struct htt_tx_ring_tlv_filter *htt_tlv_filter);
  1400. int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset);
  1401. #endif