reo_entrance_ring.h 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
  2. *
  3. * Permission to use, copy, modify, and/or distribute this software for any
  4. * purpose with or without fee is hereby granted, provided that the above
  5. * copyright notice and this permission notice appear in all copies.
  6. *
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. */
  15. #ifndef _REO_ENTRANCE_RING_H_
  16. #define _REO_ENTRANCE_RING_H_
  17. #if !defined(__ASSEMBLER__)
  18. #endif
  19. #include "rx_mpdu_details.h"
  20. #define NUM_OF_DWORDS_REO_ENTRANCE_RING 8
  21. struct reo_entrance_ring {
  22. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  23. struct rx_mpdu_details reo_level_mpdu_frame_info;
  24. uint32_t rx_reo_queue_desc_addr_31_0 : 32; // [31:0]
  25. uint32_t rx_reo_queue_desc_addr_39_32 : 8, // [7:0]
  26. rounded_mpdu_byte_count : 14, // [21:8]
  27. reo_destination_indication : 5, // [26:22]
  28. frameless_bar : 1, // [27:27]
  29. reserved_5a : 4; // [31:28]
  30. uint32_t rxdma_push_reason : 2, // [1:0]
  31. rxdma_error_code : 5, // [6:2]
  32. mpdu_fragment_number : 4, // [10:7]
  33. sw_exception : 1, // [11:11]
  34. sw_exception_mpdu_delink : 1, // [12:12]
  35. sw_exception_destination_ring_valid : 1, // [13:13]
  36. sw_exception_destination_ring : 5, // [18:14]
  37. mpdu_sequence_number : 12, // [30:19]
  38. reserved_6a : 1; // [31:31]
  39. uint32_t phy_ppdu_id : 16, // [15:0]
  40. src_link_id : 3, // [18:16]
  41. reserved_7a : 1, // [19:19]
  42. ring_id : 8, // [27:20]
  43. looping_count : 4; // [31:28]
  44. #else
  45. struct rx_mpdu_details reo_level_mpdu_frame_info;
  46. uint32_t rx_reo_queue_desc_addr_31_0 : 32; // [31:0]
  47. uint32_t reserved_5a : 4, // [31:28]
  48. frameless_bar : 1, // [27:27]
  49. reo_destination_indication : 5, // [26:22]
  50. rounded_mpdu_byte_count : 14, // [21:8]
  51. rx_reo_queue_desc_addr_39_32 : 8; // [7:0]
  52. uint32_t reserved_6a : 1, // [31:31]
  53. mpdu_sequence_number : 12, // [30:19]
  54. sw_exception_destination_ring : 5, // [18:14]
  55. sw_exception_destination_ring_valid : 1, // [13:13]
  56. sw_exception_mpdu_delink : 1, // [12:12]
  57. sw_exception : 1, // [11:11]
  58. mpdu_fragment_number : 4, // [10:7]
  59. rxdma_error_code : 5, // [6:2]
  60. rxdma_push_reason : 2; // [1:0]
  61. uint32_t looping_count : 4, // [31:28]
  62. ring_id : 8, // [27:20]
  63. reserved_7a : 1, // [19:19]
  64. src_link_id : 3, // [18:16]
  65. phy_ppdu_id : 16; // [15:0]
  66. #endif
  67. };
  68. /* Description REO_LEVEL_MPDU_FRAME_INFO
  69. Consumer: REO
  70. Producer: RXDMA
  71. Details related to the MPDU being pushed into the REO
  72. */
  73. /* Description MSDU_LINK_DESC_ADDR_INFO
  74. Consumer: REO/SW/FW
  75. Producer: RXDMA
  76. Details of the physical address of the MSDU link descriptor
  77. that contains pointers to MSDUs related to this MPDU
  78. */
  79. /* Description BUFFER_ADDR_31_0
  80. Address (lower 32 bits) of the MSDU buffer OR MSDU_EXTENSION
  81. descriptor OR Link Descriptor
  82. In case of 'NULL' pointer, this field is set to 0
  83. <legal all>
  84. */
  85. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
  86. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  87. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MSB 31
  88. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  89. /* Description BUFFER_ADDR_39_32
  90. Address (upper 8 bits) of the MSDU buffer OR MSDU_EXTENSION
  91. descriptor OR Link Descriptor
  92. In case of 'NULL' pointer, this field is set to 0
  93. <legal all>
  94. */
  95. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
  96. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  97. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MSB 7
  98. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  99. /* Description RETURN_BUFFER_MANAGER
  100. Consumer: WBM
  101. Producer: SW/FW
  102. In case of 'NULL' pointer, this field is set to 0
  103. Indicates to which buffer manager the buffer OR MSDU_EXTENSION
  104. descriptor OR link descriptor that is being pointed to
  105. shall be returned after the frame has been processed. It
  106. is used by WBM for routing purposes.
  107. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  108. to the WMB buffer idle list
  109. <enum 1 WBM_CHIP0_IDLE_DESC_LIST> This buffer shall be returned
  110. to the WBM idle link descriptor idle list, where the chip
  111. 0 WBM is chosen in case of a multi-chip config
  112. <enum 2 WBM_CHIP1_IDLE_DESC_LIST> This buffer shall be returned
  113. to the chip 1 WBM idle link descriptor idle list
  114. <enum 3 WBM_CHIP2_IDLE_DESC_LIST> This buffer shall be returned
  115. to the chip 2 WBM idle link descriptor idle list
  116. <enum 12 WBM_CHIP3_IDLE_DESC_LIST> This buffer shall be
  117. returned to chip 3 WBM idle link descriptor idle list
  118. <enum 4 FW_BM> This buffer shall be returned to the FW
  119. <enum 5 SW0_BM> This buffer shall be returned to the SW,
  120. ring 0
  121. <enum 6 SW1_BM> This buffer shall be returned to the SW,
  122. ring 1
  123. <enum 7 SW2_BM> This buffer shall be returned to the SW,
  124. ring 2
  125. <enum 8 SW3_BM> This buffer shall be returned to the SW,
  126. ring 3
  127. <enum 9 SW4_BM> This buffer shall be returned to the SW,
  128. ring 4
  129. <enum 10 SW5_BM> This buffer shall be returned to the SW,
  130. ring 5
  131. <enum 11 SW6_BM> This buffer shall be returned to the SW,
  132. ring 6
  133. <legal 0-12>
  134. */
  135. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
  136. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  137. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB 11
  138. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000f00
  139. /* Description SW_BUFFER_COOKIE
  140. Cookie field exclusively used by SW.
  141. In case of 'NULL' pointer, this field is set to 0
  142. HW ignores the contents, accept that it passes the programmed
  143. value on to other descriptors together with the physical
  144. address
  145. Field can be used by SW to for example associate the buffers
  146. physical address with the virtual address
  147. The bit definitions as used by SW are within SW HLD specification
  148. NOTE1:
  149. The three most significant bits can have a special meaning
  150. in case this struct is embedded in a TX_MPDU_DETAILS STRUCT,
  151. and field transmit_bw_restriction is set
  152. In case of NON punctured transmission:
  153. Sw_buffer_cookie[19:17] = 3'b000: 20 MHz TX only
  154. Sw_buffer_cookie[19:17] = 3'b001: 40 MHz TX only
  155. Sw_buffer_cookie[19:17] = 3'b010: 80 MHz TX only
  156. Sw_buffer_cookie[19:17] = 3'b011: 160 MHz TX only
  157. Sw_buffer_cookie[19:17] = 3'b101: 240 MHz TX only
  158. Sw_buffer_cookie[19:17] = 3'b100: 320 MHz TX only
  159. Sw_buffer_cookie[19:18] = 2'b11: reserved
  160. In case of punctured transmission:
  161. Sw_buffer_cookie[19:16] = 4'b0000: pattern 0 only
  162. Sw_buffer_cookie[19:16] = 4'b0001: pattern 1 only
  163. Sw_buffer_cookie[19:16] = 4'b0010: pattern 2 only
  164. Sw_buffer_cookie[19:16] = 4'b0011: pattern 3 only
  165. Sw_buffer_cookie[19:16] = 4'b0100: pattern 4 only
  166. Sw_buffer_cookie[19:16] = 4'b0101: pattern 5 only
  167. Sw_buffer_cookie[19:16] = 4'b0110: pattern 6 only
  168. Sw_buffer_cookie[19:16] = 4'b0111: pattern 7 only
  169. Sw_buffer_cookie[19:16] = 4'b1000: pattern 8 only
  170. Sw_buffer_cookie[19:16] = 4'b1001: pattern 9 only
  171. Sw_buffer_cookie[19:16] = 4'b1010: pattern 10 only
  172. Sw_buffer_cookie[19:16] = 4'b1011: pattern 11 only
  173. Sw_buffer_cookie[19:18] = 2'b11: reserved
  174. Note: a punctured transmission is indicated by the presence
  175. of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV
  176. <legal all>
  177. */
  178. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
  179. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 12
  180. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MSB 31
  181. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff000
  182. /* Description RX_MPDU_DESC_INFO_DETAILS
  183. Consumer: REO/SW/FW
  184. Producer: RXDMA
  185. General information related to the MPDU that should be passed
  186. on from REO entrance ring to the REO destination ring
  187. */
  188. /* Description MSDU_COUNT
  189. Consumer: REO/SW/FW
  190. Producer: RXDMA
  191. The number of MSDUs within the MPDU
  192. <legal all>
  193. */
  194. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x00000008
  195. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0
  196. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MSB 7
  197. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff
  198. /* Description FRAGMENT_FLAG
  199. Consumer: REO/SW/FW
  200. Producer: RXDMA
  201. When set, this MPDU is a fragment and REO should forward
  202. this fragment MPDU to the REO destination ring without
  203. any reorder checks, pn checks or bitmap update. This implies
  204. that REO is forwarding the pointer to the MSDU link descriptor.
  205. The destination ring is coming from a programmable register
  206. setting in REO
  207. <legal all>
  208. */
  209. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x00000008
  210. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 8
  211. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MSB 8
  212. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00000100
  213. /* Description MPDU_RETRY_BIT
  214. Consumer: REO/SW/FW
  215. Producer: RXDMA
  216. The retry bit setting from the MPDU header of the received
  217. frame
  218. <legal all>
  219. */
  220. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x00000008
  221. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 9
  222. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MSB 9
  223. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00000200
  224. /* Description AMPDU_FLAG
  225. Consumer: REO/SW/FW
  226. Producer: RXDMA
  227. When set, the MPDU was received as part of an A-MPDU.
  228. <legal all>
  229. */
  230. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x00000008
  231. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 10
  232. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MSB 10
  233. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00000400
  234. /* Description BAR_FRAME
  235. Consumer: REO/SW/FW
  236. Producer: RXDMA
  237. When set, the received frame is a BAR frame. After processing,
  238. this frame shall be pushed to SW or deleted.
  239. <legal all>
  240. */
  241. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x00000008
  242. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 11
  243. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MSB 11
  244. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00000800
  245. /* Description PN_FIELDS_CONTAIN_VALID_INFO
  246. Consumer: REO/SW/FW
  247. Producer: RXDMA
  248. Copied here by RXDMA from RX_MPDU_END
  249. When not set, REO will Not perform a PN sequence number
  250. check
  251. */
  252. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000008
  253. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 12
  254. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MSB 12
  255. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x00001000
  256. /* Description RAW_MPDU
  257. Field only valid when first_msdu_in_mpdu_flag is set.
  258. When set, the contents in the MSDU buffer contains a 'RAW'
  259. MPDU. This 'RAW' MPDU might be spread out over multiple
  260. MSDU buffers.
  261. <legal all>
  262. */
  263. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000008
  264. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 13
  265. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MSB 13
  266. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x00002000
  267. /* Description MORE_FRAGMENT_FLAG
  268. The More Fragment bit setting from the MPDU header of the
  269. received frame
  270. <legal all>
  271. */
  272. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x00000008
  273. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 14
  274. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MSB 14
  275. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x00004000
  276. /* Description SRC_INFO
  277. Source (virtual) device/interface info. associated with
  278. this peer
  279. This field gets passed on by REO to PPE in the EDMA descriptor
  280. ('REO_TO_PPE_RING').
  281. Hamilton v1 used this for 'vdev_id' instead.
  282. <legal all>
  283. */
  284. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_OFFSET 0x00000008
  285. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_LSB 15
  286. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MSB 26
  287. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MASK 0x07ff8000
  288. /* Description MPDU_QOS_CONTROL_VALID
  289. When set, the MPDU has a QoS control field.
  290. In case of ndp or phy_err, this field will never be set.
  291. <legal all>
  292. */
  293. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_OFFSET 0x00000008
  294. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_LSB 27
  295. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MSB 27
  296. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MASK 0x08000000
  297. /* Description TID
  298. Field only valid when mpdu_qos_control_valid is set
  299. The TID field in the QoS control field
  300. <legal all>
  301. */
  302. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_OFFSET 0x00000008
  303. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_LSB 28
  304. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_MSB 31
  305. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_MASK 0xf0000000
  306. /* Description PEER_META_DATA
  307. Meta data that SW has programmed in the Peer table entry
  308. of the transmitting STA.
  309. <legal all>
  310. */
  311. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x0000000c
  312. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0
  313. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MSB 31
  314. #define REO_ENTRANCE_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff
  315. /* Description RX_REO_QUEUE_DESC_ADDR_31_0
  316. Consumer: REO
  317. Producer: RXDMA
  318. Address (lower 32 bits) of the REO queue descriptor
  319. Alternatively, as per FR63739, REO internally looks up the
  320. queue descriptor address from 'Sw_peer_id' and 'Tid.' In
  321. this mode, RXDMA fills 'Sw_peer_id' from 'RX_MPDU_START'
  322. in the LSB 16 bits. 'Tid' is available in 'RX_MPDU_DETAILS.'
  323. <legal all>
  324. */
  325. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_31_0_OFFSET 0x00000010
  326. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_31_0_LSB 0
  327. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_31_0_MSB 31
  328. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_31_0_MASK 0xffffffff
  329. /* Description RX_REO_QUEUE_DESC_ADDR_39_32
  330. Consumer: REO
  331. Producer: RXDMA
  332. Address (upper 8 bits) of the REO queue descriptor
  333. Alternatively, as per FR63739, REO internally looks up the
  334. queue descriptor address from 'Sw_peer_id' and 'Tid.' In
  335. this mode, this field is unused.
  336. <legal all>
  337. */
  338. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_39_32_OFFSET 0x00000014
  339. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_39_32_LSB 0
  340. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_39_32_MSB 7
  341. #define REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_39_32_MASK 0x000000ff
  342. /* Description ROUNDED_MPDU_BYTE_COUNT
  343. An approximation of the number of bytes received in this
  344. MPDU.
  345. Used to keeps stats on the amount of data flowing through
  346. a queue.
  347. <legal all>
  348. */
  349. #define REO_ENTRANCE_RING_ROUNDED_MPDU_BYTE_COUNT_OFFSET 0x00000014
  350. #define REO_ENTRANCE_RING_ROUNDED_MPDU_BYTE_COUNT_LSB 8
  351. #define REO_ENTRANCE_RING_ROUNDED_MPDU_BYTE_COUNT_MSB 21
  352. #define REO_ENTRANCE_RING_ROUNDED_MPDU_BYTE_COUNT_MASK 0x003fff00
  353. /* Description REO_DESTINATION_INDICATION
  354. RXDMA copy the MPDU's first MSDU's destination indication
  355. field here. This is used for REO to be able to re-route
  356. the packet to a different SW destination ring if the packet
  357. is detected as error in REO.
  358. The ID of the REO exit ring where the MSDU frame shall push
  359. after (MPDU level) reordering has finished.
  360. <enum 0 reo_destination_sw0> Reo will push the frame into
  361. the REO2SW0 ring
  362. <enum 1 reo_destination_sw1> Reo will push the frame into
  363. the REO2SW1 ring
  364. <enum 2 reo_destination_sw2> Reo will push the frame into
  365. the REO2SW2 ring
  366. <enum 3 reo_destination_sw3> Reo will push the frame into
  367. the REO2SW3 ring
  368. <enum 4 reo_destination_sw4> Reo will push the frame into
  369. the REO2SW4 ring
  370. <enum 5 reo_destination_release> Reo will push the frame
  371. into the REO_release ring
  372. <enum 6 reo_destination_fw> Reo will push the frame into
  373. the REO2FW ring
  374. <enum 7 reo_destination_sw5> Reo will push the frame into
  375. the REO2SW5 ring (REO remaps this in chips without REO2SW5
  376. ring, e.g. Pine)
  377. <enum 8 reo_destination_sw6> Reo will push the frame into
  378. the REO2SW6 ring (REO remaps this in chips without REO2SW6
  379. ring, e.g. Pine)
  380. <enum 9 reo_destination_sw7> Reo will push the frame into
  381. the REO2SW7 ring (REO remaps this in chips without REO2SW7
  382. ring)
  383. <enum 10 reo_destination_sw8> Reo will push the frame into
  384. the REO2SW8 ring (REO remaps this in chips without REO2SW8
  385. ring)
  386. <enum 11 reo_destination_11> REO remaps this
  387. <enum 12 reo_destination_12> REO remaps this <enum 13 reo_destination_13>
  388. REO remaps this
  389. <enum 14 reo_destination_14> REO remaps this
  390. <enum 15 reo_destination_15> REO remaps this
  391. <enum 16 reo_destination_16> REO remaps this
  392. <enum 17 reo_destination_17> REO remaps this
  393. <enum 18 reo_destination_18> REO remaps this
  394. <enum 19 reo_destination_19> REO remaps this
  395. <enum 20 reo_destination_20> REO remaps this
  396. <enum 21 reo_destination_21> REO remaps this
  397. <enum 22 reo_destination_22> REO remaps this
  398. <enum 23 reo_destination_23> REO remaps this
  399. <enum 24 reo_destination_24> REO remaps this
  400. <enum 25 reo_destination_25> REO remaps this
  401. <enum 26 reo_destination_26> REO remaps this
  402. <enum 27 reo_destination_27> REO remaps this
  403. <enum 28 reo_destination_28> REO remaps this
  404. <enum 29 reo_destination_29> REO remaps this
  405. <enum 30 reo_destination_30> REO remaps this
  406. <enum 31 reo_destination_31> REO remaps this
  407. <legal all>
  408. */
  409. #define REO_ENTRANCE_RING_REO_DESTINATION_INDICATION_OFFSET 0x00000014
  410. #define REO_ENTRANCE_RING_REO_DESTINATION_INDICATION_LSB 22
  411. #define REO_ENTRANCE_RING_REO_DESTINATION_INDICATION_MSB 26
  412. #define REO_ENTRANCE_RING_REO_DESTINATION_INDICATION_MASK 0x07c00000
  413. /* Description FRAMELESS_BAR
  414. When set, this REO entrance ring struct contains BAR info
  415. from a multi TID BAR frame. The original multi TID BAR
  416. frame itself contained all the REO info for the first TID,
  417. but all the subsequent TID info and their linkage to the
  418. REO descriptors is passed down as 'frameless' BAR info.
  419. The only fields valid in this descriptor when this bit is
  420. set are:
  421. Rx_reo_queue_desc_addr_31_0
  422. RX_reo_queue_desc_addr_39_32
  423. And within the
  424. Reo_level_mpdu_frame_info:
  425. Within Rx_mpdu_desc_info_details:
  426. Mpdu_Sequence_number
  427. BAR_frame
  428. Peer_meta_data
  429. All other fields shall be set to 0
  430. <legal all>
  431. */
  432. #define REO_ENTRANCE_RING_FRAMELESS_BAR_OFFSET 0x00000014
  433. #define REO_ENTRANCE_RING_FRAMELESS_BAR_LSB 27
  434. #define REO_ENTRANCE_RING_FRAMELESS_BAR_MSB 27
  435. #define REO_ENTRANCE_RING_FRAMELESS_BAR_MASK 0x08000000
  436. /* Description RESERVED_5A
  437. <legal 0>
  438. */
  439. #define REO_ENTRANCE_RING_RESERVED_5A_OFFSET 0x00000014
  440. #define REO_ENTRANCE_RING_RESERVED_5A_LSB 28
  441. #define REO_ENTRANCE_RING_RESERVED_5A_MSB 31
  442. #define REO_ENTRANCE_RING_RESERVED_5A_MASK 0xf0000000
  443. /* Description RXDMA_PUSH_REASON
  444. Indicates why rxdma pushed the frame to this ring
  445. This field is ignored by REO.
  446. <enum 0 rxdma_error_detected> RXDMA detected an error an
  447. pushed this frame to this queue
  448. <enum 1 rxdma_routing_instruction> RXDMA pushed the frame
  449. to this queue per received routing instructions. No error
  450. within RXDMA was detected
  451. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  452. result the MSDU link descriptor might not have the "last_msdu_in_mpdu_flag"
  453. set, but instead WBM might just see a NULL pointer in the
  454. MSDU link descriptor. This is to be considered a normal
  455. condition for this scenario.
  456. <legal 0 - 2>
  457. */
  458. #define REO_ENTRANCE_RING_RXDMA_PUSH_REASON_OFFSET 0x00000018
  459. #define REO_ENTRANCE_RING_RXDMA_PUSH_REASON_LSB 0
  460. #define REO_ENTRANCE_RING_RXDMA_PUSH_REASON_MSB 1
  461. #define REO_ENTRANCE_RING_RXDMA_PUSH_REASON_MASK 0x00000003
  462. /* Description RXDMA_ERROR_CODE
  463. Field only valid when 'rxdma_push_reason' set to 'rxdma_error_detected'.
  464. This field is ignored by REO.
  465. <enum 0 rxdma_overflow_err>MPDU frame is not complete due
  466. to a FIFO overflow error in RXPCU.
  467. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  468. due to receiving incomplete MPDU from the PHY
  469. <enum 2 rxdma_fcs_err>FCS check on the MPDU frame failed
  470. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption error
  471. or CRYPTO received an encrypted frame, but did not get
  472. a valid corresponding key id in the peer entry.
  473. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC error
  474. <enum 5 rxdma_unecrypted_err>CRYPTO reported an unencrypted
  475. frame error when encrypted was expected
  476. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU length
  477. error
  478. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max number
  479. of MSDUs allowed in an MPDU got exceeded
  480. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing error
  481. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  482. parsing error
  483. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  484. during SA search
  485. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  486. during DA search
  487. <enum 12 rxdma_flow_timeout_err>RX OLE reported a timeout
  488. during flow search
  489. <enum 13 rxdma_flush_request>RXDMA received a flush request
  490. <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
  491. present as well as a fragmented MPDU. A-MSDU defragmentation
  492. is not supported in Lithium SW so this is treated as an
  493. error.
  494. <enum 15 rxdma_multicast_echo_err>RX OLE reported a multicast
  495. echo
  496. <enum 16 rxdma_amsdu_addr_mismatch_err>RX OLE reported an
  497. A-MSDU with either 'from DS = 0' with an SA mismatching
  498. TA or 'to DS = 0' with a DA mismatching RA.
  499. <enum 17 rxdma_unauthorized_wds_err>RX PCU reported that
  500. Rx peer entry did not indicate 'authorized_to_send_WDS'
  501. and also indicated 'from DS = to DS = 1.'
  502. <enum 18 rxdma_groupcast_amsdu_or_wds_err>RX PCU reported
  503. a broadcast or multicast RA as well as either A-MSDU present
  504. or 'from DS = to DS = 1.'
  505. */
  506. #define REO_ENTRANCE_RING_RXDMA_ERROR_CODE_OFFSET 0x00000018
  507. #define REO_ENTRANCE_RING_RXDMA_ERROR_CODE_LSB 2
  508. #define REO_ENTRANCE_RING_RXDMA_ERROR_CODE_MSB 6
  509. #define REO_ENTRANCE_RING_RXDMA_ERROR_CODE_MASK 0x0000007c
  510. /* Description MPDU_FRAGMENT_NUMBER
  511. Field only valid when Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.Fragment_flag
  512. is set.
  513. The fragment number from the 802.11 header.
  514. Note that the sequence number is embedded in the field:
  515. Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details. Mpdu_sequence_number
  516. <legal all>
  517. */
  518. #define REO_ENTRANCE_RING_MPDU_FRAGMENT_NUMBER_OFFSET 0x00000018
  519. #define REO_ENTRANCE_RING_MPDU_FRAGMENT_NUMBER_LSB 7
  520. #define REO_ENTRANCE_RING_MPDU_FRAGMENT_NUMBER_MSB 10
  521. #define REO_ENTRANCE_RING_MPDU_FRAGMENT_NUMBER_MASK 0x00000780
  522. /* Description SW_EXCEPTION
  523. When not set, REO is performing all its default MPDU processing
  524. operations,
  525. When set, this REO entrance descriptor is generated by FW,
  526. and should be processed as an exception. This implies:
  527. NO re-order function is needed.
  528. MPDU delinking is determined by the setting of field SW_excection_mpdu_delink
  529. Destination ring selection is based on the setting of the
  530. field SW_exception_destination_ring_valid
  531. In the destination ring descriptor set bit: SW_exception_entry
  532. Feature supported only in HastingsPrime
  533. <legal all>
  534. */
  535. #define REO_ENTRANCE_RING_SW_EXCEPTION_OFFSET 0x00000018
  536. #define REO_ENTRANCE_RING_SW_EXCEPTION_LSB 11
  537. #define REO_ENTRANCE_RING_SW_EXCEPTION_MSB 11
  538. #define REO_ENTRANCE_RING_SW_EXCEPTION_MASK 0x00000800
  539. /* Description SW_EXCEPTION_MPDU_DELINK
  540. Field only valid when SW_exception is set.
  541. 1'b0: REO should NOT delink the MPDU, and thus pass this
  542. MPDU on to the destination ring as is. This implies that
  543. in the REO_DESTINATION_RING struct field Buf_or_link_desc_addr_info
  544. should point to an MSDU link descriptor
  545. 1'b1: REO should perform the normal MPDU delink into MSDU
  546. operations.
  547. Feature supported only in HastingsPrime
  548. <legal all>
  549. */
  550. #define REO_ENTRANCE_RING_SW_EXCEPTION_MPDU_DELINK_OFFSET 0x00000018
  551. #define REO_ENTRANCE_RING_SW_EXCEPTION_MPDU_DELINK_LSB 12
  552. #define REO_ENTRANCE_RING_SW_EXCEPTION_MPDU_DELINK_MSB 12
  553. #define REO_ENTRANCE_RING_SW_EXCEPTION_MPDU_DELINK_MASK 0x00001000
  554. /* Description SW_EXCEPTION_DESTINATION_RING_VALID
  555. Field only valid when SW_exception is set.
  556. 1'b0: REO shall push the MPDU (or delinked MPDU based on
  557. the setting of SW_exception_mpdu_delink) to the destination
  558. ring according to field reo_destination_indication.
  559. 1'b1: REO shall push the MPDU (or delinked MPDU based on
  560. the setting of SW_exception_mpdu_delink) to the destination
  561. ring according to field SW_exception_destination_ring.
  562. Feature supported only in HastingsPrime
  563. <legal all>
  564. */
  565. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_VALID_OFFSET 0x00000018
  566. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_VALID_LSB 13
  567. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_VALID_MSB 13
  568. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_VALID_MASK 0x00002000
  569. /* Description SW_EXCEPTION_DESTINATION_RING
  570. Field only valid when fields SW_exception and SW_exception_destination_ring_valid
  571. are set.
  572. The ID of the ring where REO shall push this frame.
  573. <enum 0 reo_destination_sw0> Reo will push the frame into
  574. the REO2SW0 ring
  575. <enum 1 reo_destination_sw1> Reo will push the frame into
  576. the REO2SW1 ring
  577. <enum 2 reo_destination_sw2> Reo will push the frame into
  578. the REO2SW1 ring
  579. <enum 3 reo_destination_sw3> Reo will push the frame into
  580. the REO2SW1 ring
  581. <enum 4 reo_destination_sw4> Reo will push the frame into
  582. the REO2SW1 ring
  583. <enum 5 reo_destination_release> Reo will push the frame
  584. into the REO_release ring
  585. <enum 6 reo_destination_fw> Reo will push the frame into
  586. the REO2FW ring
  587. <enum 7 reo_destination_sw5> REO remaps this
  588. <enum 8 reo_destination_sw6> REO remaps this
  589. <enum 9 reo_destination_sw7> REO remaps this
  590. <enum 10 reo_destination_sw8> REO remaps this
  591. <enum 11 reo_destination_11> REO remaps this
  592. <enum 12 reo_destination_12> REO remaps this <enum 13 reo_destination_13>
  593. REO remaps this
  594. <enum 14 reo_destination_14> REO remaps this
  595. <enum 15 reo_destination_15> REO remaps this
  596. <enum 16 reo_destination_16> REO remaps this
  597. <enum 17 reo_destination_17> REO remaps this
  598. <enum 18 reo_destination_18> REO remaps this
  599. <enum 19 reo_destination_19> REO remaps this
  600. <enum 20 reo_destination_20> REO remaps this
  601. <enum 21 reo_destination_21> REO remaps this
  602. <enum 22 reo_destination_22> REO remaps this
  603. <enum 23 reo_destination_23> REO remaps this
  604. <enum 24 reo_destination_24> REO remaps this
  605. <enum 25 reo_destination_25> REO remaps this
  606. <enum 26 reo_destination_26> REO remaps this
  607. <enum 27 reo_destination_27> REO remaps this
  608. <enum 28 reo_destination_28> REO remaps this
  609. <enum 29 reo_destination_29> REO remaps this
  610. <enum 30 reo_destination_30> REO remaps this
  611. <enum 31 reo_destination_31> REO remaps this
  612. Feature supported only in HastingsPrime
  613. <legal all>
  614. */
  615. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_OFFSET 0x00000018
  616. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_LSB 14
  617. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_MSB 18
  618. #define REO_ENTRANCE_RING_SW_EXCEPTION_DESTINATION_RING_MASK 0x0007c000
  619. /* Description MPDU_SEQUENCE_NUMBER
  620. Consumer: REO/SW/FW
  621. Producer: RXDMA
  622. The field can have two different meanings based on the setting
  623. of sub-field Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.BAR_frame:
  624. 'BAR_frame' is NOT set:
  625. The MPDU sequence number of the received frame.
  626. 'BAR_frame' is set.
  627. The MPDU Start sequence number from the BAR frame
  628. <legal all>
  629. */
  630. #define REO_ENTRANCE_RING_MPDU_SEQUENCE_NUMBER_OFFSET 0x00000018
  631. #define REO_ENTRANCE_RING_MPDU_SEQUENCE_NUMBER_LSB 19
  632. #define REO_ENTRANCE_RING_MPDU_SEQUENCE_NUMBER_MSB 30
  633. #define REO_ENTRANCE_RING_MPDU_SEQUENCE_NUMBER_MASK 0x7ff80000
  634. /* Description RESERVED_6A
  635. Field only valid when Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.
  636. Mpdu_qos_control_valid is set
  637. This indicates whether the 'Ack policy' field within the
  638. QoS control field of the MPDU indicates 'no-Ack.'
  639. <legal all>
  640. */
  641. #define REO_ENTRANCE_RING_RESERVED_6A_OFFSET 0x00000018
  642. #define REO_ENTRANCE_RING_RESERVED_6A_LSB 31
  643. #define REO_ENTRANCE_RING_RESERVED_6A_MSB 31
  644. #define REO_ENTRANCE_RING_RESERVED_6A_MASK 0x80000000
  645. /* Description PHY_PPDU_ID
  646. A PPDU counter value that PHY increments for every PPDU
  647. received
  648. The counter value wraps around. Pine RXDMA can be configured
  649. to copy this from the RX_PPDU_START TLV for every output
  650. descriptor.
  651. This field is ignored by REO.
  652. Feature supported only in Pine
  653. <legal all>
  654. */
  655. #define REO_ENTRANCE_RING_PHY_PPDU_ID_OFFSET 0x0000001c
  656. #define REO_ENTRANCE_RING_PHY_PPDU_ID_LSB 0
  657. #define REO_ENTRANCE_RING_PHY_PPDU_ID_MSB 15
  658. #define REO_ENTRANCE_RING_PHY_PPDU_ID_MASK 0x0000ffff
  659. /* Description SRC_LINK_ID
  660. Consumer: SW
  661. Producer: RXDMA
  662. Set to the link ID of the PMAC that received the frame
  663. <legal all>
  664. */
  665. #define REO_ENTRANCE_RING_SRC_LINK_ID_OFFSET 0x0000001c
  666. #define REO_ENTRANCE_RING_SRC_LINK_ID_LSB 16
  667. #define REO_ENTRANCE_RING_SRC_LINK_ID_MSB 18
  668. #define REO_ENTRANCE_RING_SRC_LINK_ID_MASK 0x00070000
  669. /* Description RESERVED_7A
  670. Hamilton v1 filled the link ID of the PMAC that received
  671. the frame here.
  672. <legal 0>
  673. */
  674. #define REO_ENTRANCE_RING_RESERVED_7A_OFFSET 0x0000001c
  675. #define REO_ENTRANCE_RING_RESERVED_7A_LSB 19
  676. #define REO_ENTRANCE_RING_RESERVED_7A_MSB 19
  677. #define REO_ENTRANCE_RING_RESERVED_7A_MASK 0x00080000
  678. /* Description RING_ID
  679. Consumer: SW/REO/DEBUG
  680. Producer: SRNG (of RXDMA)
  681. For debugging.
  682. This field is filled in by the SRNG module.
  683. It help to identify the ring that is being looked <legal
  684. all>
  685. */
  686. #define REO_ENTRANCE_RING_RING_ID_OFFSET 0x0000001c
  687. #define REO_ENTRANCE_RING_RING_ID_LSB 20
  688. #define REO_ENTRANCE_RING_RING_ID_MSB 27
  689. #define REO_ENTRANCE_RING_RING_ID_MASK 0x0ff00000
  690. /* Description LOOPING_COUNT
  691. Consumer: SW/REO/DEBUG
  692. Producer: SRNG (of RXDMA)
  693. For debugging.
  694. This field is filled in by the SRNG module.
  695. A count value that indicates the number of times the producer
  696. of entries into this Ring has looped around the ring.
  697. At initialization time, this value is set to 0. On the first
  698. loop, this value is set to 1. After the max value is reached
  699. allowed by the number of bits for this field, the count
  700. value continues with 0 again.
  701. In case SW is the consumer of the ring entries, it can use
  702. this field to figure out up to where the producer of entries
  703. has created new entries. This eliminates the need to check
  704. where the "head pointer' of the ring is located once the
  705. SW starts processing an interrupt indicating that new entries
  706. have been put into this ring...
  707. Also note that SW if it wants only needs to look at the
  708. LSB bit of this count value.
  709. <legal all>
  710. */
  711. #define REO_ENTRANCE_RING_LOOPING_COUNT_OFFSET 0x0000001c
  712. #define REO_ENTRANCE_RING_LOOPING_COUNT_LSB 28
  713. #define REO_ENTRANCE_RING_LOOPING_COUNT_MSB 31
  714. #define REO_ENTRANCE_RING_LOOPING_COUNT_MASK 0xf0000000
  715. #endif // REO_ENTRANCE_RING