sw_monitor_ring.h 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178
  1. /*
  2. * Copyright (c) 2020, The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #ifndef _SW_MONITOR_RING_H_
  17. #define _SW_MONITOR_RING_H_
  18. #if !defined(__ASSEMBLER__)
  19. #endif
  20. #include "rx_mpdu_details.h"
  21. #include "buffer_addr_info.h"
  22. // ################ START SUMMARY #################
  23. //
  24. // Dword Fields
  25. // 0-3 struct rx_mpdu_details reo_level_mpdu_frame_info;
  26. // 4-5 struct buffer_addr_info status_buff_addr_info;
  27. // 6 rxdma_push_reason[1:0], rxdma_error_code[6:2], mpdu_fragment_number[10:7], frameless_bar[11], status_buf_count[15:12], end_of_ppdu[16], reserved_6a[31:17]
  28. // 7 phy_ppdu_id[15:0], reserved_7a[19:16], ring_id[27:20], looping_count[31:28]
  29. //
  30. // ################ END SUMMARY #################
  31. #define NUM_OF_DWORDS_SW_MONITOR_RING 8
  32. struct sw_monitor_ring {
  33. struct rx_mpdu_details reo_level_mpdu_frame_info;
  34. struct buffer_addr_info status_buff_addr_info;
  35. uint32_t rxdma_push_reason : 2, //[1:0]
  36. rxdma_error_code : 5, //[6:2]
  37. mpdu_fragment_number : 4, //[10:7]
  38. frameless_bar : 1, //[11]
  39. status_buf_count : 4, //[15:12]
  40. end_of_ppdu : 1, //[16]
  41. reserved_6a : 15; //[31:17]
  42. uint32_t phy_ppdu_id : 16, //[15:0]
  43. reserved_7a : 4, //[19:16]
  44. ring_id : 8, //[27:20]
  45. looping_count : 4; //[31:28]
  46. };
  47. /*
  48. struct rx_mpdu_details reo_level_mpdu_frame_info
  49. Consumer: SW
  50. Producer: RXDMA
  51. Details related to the MPDU being pushed to SW, valid
  52. only if end_of_ppdu is set to 0
  53. struct buffer_addr_info status_buff_addr_info
  54. Consumer: SW
  55. Producer: RXDMA
  56. Details of the physical address of the first status
  57. buffer used for the PPDU (either the PPDU that included the
  58. MPDU being pushed to SW if end_of_ppdu = 0, or the PPDU
  59. whose end is indicated through end_of_ppdu = 1)
  60. rxdma_push_reason
  61. Indicates why RXDMA pushed the frame to this ring
  62. <enum 0 rxdma_error_detected> RXDMA detected an error an
  63. pushed this frame to this queue
  64. <enum 1 rxdma_routing_instruction> RXDMA pushed the
  65. frame to this queue per received routing instructions. No
  66. error within RXDMA was detected
  67. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  68. result the MSDU link descriptor might not have the
  69. last_msdu_in_mpdu_flag set, but instead WBM might just see a
  70. NULL pointer in the MSDU link descriptor. This is to be
  71. considered a normal condition for this scenario.
  72. <legal 0 - 2>
  73. rxdma_error_code
  74. Field only valid when rxdma_push_reason is set to
  75. 'rxdma_error_detected.'
  76. <enum 0 rxdma_overflow_err>MPDU frame is not complete
  77. due to a FIFO overflow error in RXPCU.
  78. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  79. due to receiving incomplete MPDU from the PHY
  80. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption
  81. error or CRYPTO received an encrypted frame, but did not get
  82. a valid corresponding key id in the peer entry.
  83. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC
  84. error
  85. <enum 5 rxdma_unecrypted_err>CRYPTO reported an
  86. unencrypted frame error when encrypted was expected
  87. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU
  88. length error
  89. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max
  90. number of MSDUs allowed in an MPDU got exceeded
  91. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing
  92. error
  93. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  94. parsing error
  95. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  96. during SA search
  97. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  98. during DA search
  99. <enum 12 rxdma_flow_timeout_err>RX OLE reported a
  100. timeout during flow search
  101. <enum 13 rxdma_flush_request>RXDMA received a flush
  102. request
  103. <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
  104. present as well as a fragmented MPDU. A-MSDU defragmentation
  105. is not supported in Lithium SW so this is treated as an
  106. error.
  107. mpdu_fragment_number
  108. Field only valid when Reo_level_mpdu_frame_info.
  109. Rx_mpdu_desc_info_details.Fragment_flag is set and
  110. end_of_ppdu is set to 0.
  111. The fragment number from the 802.11 header.
  112. Note that the sequence number is embedded in the field:
  113. Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.
  114. Mpdu_sequence_number
  115. <legal all>
  116. frameless_bar
  117. When set, this SW monitor ring struct contains BAR info
  118. from a multi TID BAR frame. The original multi TID BAR frame
  119. itself contained all the REO info for the first TID, but all
  120. the subsequent TID info and their linkage to the REO
  121. descriptors is passed down as 'frameless' BAR info.
  122. The only fields valid in this descriptor when this bit
  123. is within the
  124. Reo_level_mpdu_frame_info:
  125. Within Rx_mpdu_desc_info_details:
  126. Mpdu_Sequence_number
  127. BAR_frame
  128. Peer_meta_data
  129. All other fields shall be set to 0.
  130. <legal all>
  131. status_buf_count
  132. A count of status buffers used so far for the PPDU
  133. (either the PPDU that included the MPDU being pushed to SW
  134. if end_of_ppdu = 0, or the PPDU whose end is indicated
  135. through end_of_ppdu = 1)
  136. end_of_ppdu
  137. Pine RXDMA can be configured to generate a separate
  138. 'SW_MONITOR_RING' descriptor at the end of a PPDU (either
  139. through an 'RX_PPDU_END' TLV or through an 'RX_FLUSH') to
  140. demarcate PPDUs.
  141. For such a descriptor, this bit is set to 1 and fields
  142. Reo_level_mpdu_frame_info, mpdu_fragment_number and
  143. Frameless_bar are all set to 0.
  144. Otherwise this bit is set to 0.
  145. reserved_6a
  146. <legal 0>
  147. phy_ppdu_id
  148. A PPDU counter value that PHY increments for every PPDU
  149. received
  150. The counter value wraps around. Pine RXDMA can be
  151. configured to copy this from the RX_PPDU_START TLV for every
  152. output descriptor.
  153. <legal all>
  154. reserved_7a
  155. <legal 0>
  156. ring_id
  157. Consumer: SW/REO/DEBUG
  158. Producer: SRNG (of RXDMA)
  159. For debugging.
  160. This field is filled in by the SRNG module.
  161. It help to identify the ring that is being looked <legal
  162. all>
  163. looping_count
  164. Consumer: SW/REO/DEBUG
  165. Producer: SRNG (of RXDMA)
  166. For debugging.
  167. This field is filled in by the SRNG module.
  168. A count value that indicates the number of times the
  169. producer of entries into this Ring has looped around the
  170. ring.
  171. At initialization time, this value is set to 0. On the
  172. first loop, this value is set to 1. After the max value is
  173. reached allowed by the number of bits for this field, the
  174. count value continues with 0 again.
  175. In case SW is the consumer of the ring entries, it can
  176. use this field to figure out up to where the producer of
  177. entries has created new entries. This eliminates the need to
  178. check where the head pointer' of the ring is located once
  179. the SW starts processing an interrupt indicating that new
  180. entries have been put into this ring...
  181. Also note that SW if it wants only needs to look at the
  182. LSB bit of this count value.
  183. <legal all>
  184. */
  185. /* EXTERNAL REFERENCE : struct rx_mpdu_details reo_level_mpdu_frame_info */
  186. /* EXTERNAL REFERENCE : struct buffer_addr_info msdu_link_desc_addr_info */
  187. /* Description SW_MONITOR_RING_0_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0
  188. Address (lower 32 bits) of the MSDU buffer OR
  189. MSDU_EXTENSION descriptor OR Link Descriptor
  190. In case of 'NULL' pointer, this field is set to 0
  191. <legal all>
  192. */
  193. #define SW_MONITOR_RING_0_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
  194. #define SW_MONITOR_RING_0_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  195. #define SW_MONITOR_RING_0_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  196. /* Description SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32
  197. Address (upper 8 bits) of the MSDU buffer OR
  198. MSDU_EXTENSION descriptor OR Link Descriptor
  199. In case of 'NULL' pointer, this field is set to 0
  200. <legal all>
  201. */
  202. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
  203. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  204. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  205. /* Description SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER
  206. Consumer: WBM
  207. Producer: SW/FW
  208. In case of 'NULL' pointer, this field is set to 0
  209. Indicates to which buffer manager the buffer OR
  210. MSDU_EXTENSION descriptor OR link descriptor that is being
  211. pointed to shall be returned after the frame has been
  212. processed. It is used by WBM for routing purposes.
  213. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  214. to the WMB buffer idle list
  215. <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
  216. returned to the WMB idle link descriptor idle list
  217. <enum 2 FW_BM> This buffer shall be returned to the FW
  218. <enum 3 SW0_BM> This buffer shall be returned to the SW,
  219. ring 0
  220. <enum 4 SW1_BM> This buffer shall be returned to the SW,
  221. ring 1
  222. <enum 5 SW2_BM> This buffer shall be returned to the SW,
  223. ring 2
  224. <enum 6 SW3_BM> This buffer shall be returned to the SW,
  225. ring 3
  226. <enum 7 SW4_BM> This buffer shall be returned to the SW,
  227. ring 4
  228. <legal all>
  229. */
  230. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
  231. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  232. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700
  233. /* Description SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE
  234. Cookie field exclusively used by SW.
  235. In case of 'NULL' pointer, this field is set to 0
  236. HW ignores the contents, accept that it passes the
  237. programmed value on to other descriptors together with the
  238. physical address
  239. Field can be used by SW to for example associate the
  240. buffers physical address with the virtual address
  241. The bit definitions as used by SW are within SW HLD
  242. specification
  243. NOTE1:
  244. The three most significant bits can have a special
  245. meaning in case this struct is embedded in a TX_MPDU_DETAILS
  246. STRUCT, and field transmit_bw_restriction is set
  247. In case of NON punctured transmission:
  248. Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
  249. Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
  250. Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
  251. Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
  252. In case of punctured transmission:
  253. Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
  254. Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
  255. Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
  256. Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
  257. Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
  258. Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
  259. Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
  260. Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
  261. Note: a punctured transmission is indicated by the
  262. presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
  263. TLV
  264. NOTE 2:The five most significant bits can have a special
  265. meaning in case this struct is embedded in an
  266. RX_MSDU_DETAILS STRUCT, and Maple/Spruce Rx DMA is
  267. configured for passing on the additional info
  268. from 'RX_MPDU_INFO' structure in 'RX_MPDU_START' TLV
  269. (FR56821). This is not supported in HastingsPrime, Pine or
  270. Moselle.
  271. Sw_buffer_cookie[20:17]: Tid: The TID field in the QoS
  272. control field
  273. Sw_buffer_cookie[16]: Mpdu_qos_control_valid: This field
  274. indicates MPDUs with a QoS control field.
  275. <legal all>
  276. */
  277. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
  278. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11
  279. #define SW_MONITOR_RING_1_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800
  280. /* EXTERNAL REFERENCE : struct rx_mpdu_desc_info rx_mpdu_desc_info_details */
  281. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT
  282. Consumer: REO/SW/FW
  283. Producer: RXDMA
  284. The number of MSDUs within the MPDU
  285. <legal all>
  286. */
  287. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x00000008
  288. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0
  289. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff
  290. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER
  291. Consumer: REO/SW/FW
  292. Producer: RXDMA
  293. The field can have two different meanings based on the
  294. setting of field 'BAR_frame':
  295. 'BAR_frame' is NOT set:
  296. The MPDU sequence number of the received frame.
  297. 'BAR_frame' is set.
  298. The MPDU Start sequence number from the BAR frame
  299. <legal all>
  300. */
  301. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_OFFSET 0x00000008
  302. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_LSB 8
  303. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_MASK 0x000fff00
  304. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG
  305. Consumer: REO/SW/FW
  306. Producer: RXDMA
  307. When set, this MPDU is a fragment and REO should forward
  308. this fragment MPDU to the REO destination ring without any
  309. reorder checks, pn checks or bitmap update. This implies
  310. that REO is forwarding the pointer to the MSDU link
  311. descriptor. The destination ring is coming from a
  312. programmable register setting in REO
  313. <legal all>
  314. */
  315. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x00000008
  316. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 20
  317. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00100000
  318. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT
  319. Consumer: REO/SW/FW
  320. Producer: RXDMA
  321. The retry bit setting from the MPDU header of the
  322. received frame
  323. <legal all>
  324. */
  325. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x00000008
  326. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 21
  327. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00200000
  328. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG
  329. Consumer: REO/SW/FW
  330. Producer: RXDMA
  331. When set, the MPDU was received as part of an A-MPDU.
  332. <legal all>
  333. */
  334. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x00000008
  335. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 22
  336. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00400000
  337. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME
  338. Consumer: REO/SW/FW
  339. Producer: RXDMA
  340. When set, the received frame is a BAR frame. After
  341. processing, this frame shall be pushed to SW or deleted.
  342. <legal all>
  343. */
  344. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x00000008
  345. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 23
  346. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00800000
  347. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO
  348. Consumer: REO/SW/FW
  349. Producer: RXDMA
  350. Copied here by RXDMA from RX_MPDU_END
  351. When not set, REO will Not perform a PN sequence number
  352. check
  353. */
  354. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000008
  355. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 24
  356. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x01000000
  357. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID
  358. When set, OLE found a valid SA entry for all MSDUs in
  359. this MPDU
  360. <legal all>
  361. */
  362. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000008
  363. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB 25
  364. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x02000000
  365. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT
  366. When set, at least 1 MSDU within the MPDU has an
  367. unsuccessful MAC source address search due to the expiration
  368. of the search timer.
  369. <legal all>
  370. */
  371. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_OFFSET 0x00000008
  372. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_LSB 26
  373. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_MASK 0x04000000
  374. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID
  375. When set, OLE found a valid DA entry for all MSDUs in
  376. this MPDU
  377. <legal all>
  378. */
  379. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000008
  380. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB 27
  381. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x08000000
  382. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC
  383. Field Only valid if da_is_valid is set
  384. When set, at least one of the DA addresses is a
  385. Multicast or Broadcast address.
  386. <legal all>
  387. */
  388. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000008
  389. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB 28
  390. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK 0x10000000
  391. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT
  392. When set, at least 1 MSDU within the MPDU has an
  393. unsuccessful MAC destination address search due to the
  394. expiration of the search timer.
  395. <legal all>
  396. */
  397. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_OFFSET 0x00000008
  398. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_LSB 29
  399. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_MASK 0x20000000
  400. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU
  401. Field only valid when first_msdu_in_mpdu_flag is set.
  402. When set, the contents in the MSDU buffer contains a
  403. 'RAW' MPDU. This 'RAW' MPDU might be spread out over
  404. multiple MSDU buffers.
  405. <legal all>
  406. */
  407. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000008
  408. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 30
  409. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x40000000
  410. /* Description SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG
  411. The More Fragment bit setting from the MPDU header of
  412. the received frame
  413. <legal all>
  414. */
  415. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x00000008
  416. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 31
  417. #define SW_MONITOR_RING_2_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x80000000
  418. /* Description SW_MONITOR_RING_3_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA
  419. Meta data that SW has programmed in the Peer table entry
  420. of the transmitting STA.
  421. <legal all>
  422. */
  423. #define SW_MONITOR_RING_3_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x0000000c
  424. #define SW_MONITOR_RING_3_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0
  425. #define SW_MONITOR_RING_3_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff
  426. /* EXTERNAL REFERENCE : struct buffer_addr_info status_buff_addr_info */
  427. /* Description SW_MONITOR_RING_4_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0
  428. Address (lower 32 bits) of the MSDU buffer OR
  429. MSDU_EXTENSION descriptor OR Link Descriptor
  430. In case of 'NULL' pointer, this field is set to 0
  431. <legal all>
  432. */
  433. #define SW_MONITOR_RING_4_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000010
  434. #define SW_MONITOR_RING_4_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  435. #define SW_MONITOR_RING_4_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  436. /* Description SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32
  437. Address (upper 8 bits) of the MSDU buffer OR
  438. MSDU_EXTENSION descriptor OR Link Descriptor
  439. In case of 'NULL' pointer, this field is set to 0
  440. <legal all>
  441. */
  442. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000014
  443. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  444. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  445. /* Description SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER
  446. Consumer: WBM
  447. Producer: SW/FW
  448. In case of 'NULL' pointer, this field is set to 0
  449. Indicates to which buffer manager the buffer OR
  450. MSDU_EXTENSION descriptor OR link descriptor that is being
  451. pointed to shall be returned after the frame has been
  452. processed. It is used by WBM for routing purposes.
  453. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  454. to the WMB buffer idle list
  455. <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
  456. returned to the WMB idle link descriptor idle list
  457. <enum 2 FW_BM> This buffer shall be returned to the FW
  458. <enum 3 SW0_BM> This buffer shall be returned to the SW,
  459. ring 0
  460. <enum 4 SW1_BM> This buffer shall be returned to the SW,
  461. ring 1
  462. <enum 5 SW2_BM> This buffer shall be returned to the SW,
  463. ring 2
  464. <enum 6 SW3_BM> This buffer shall be returned to the SW,
  465. ring 3
  466. <enum 7 SW4_BM> This buffer shall be returned to the SW,
  467. ring 4
  468. <legal all>
  469. */
  470. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000014
  471. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  472. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700
  473. /* Description SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE
  474. Cookie field exclusively used by SW.
  475. In case of 'NULL' pointer, this field is set to 0
  476. HW ignores the contents, accept that it passes the
  477. programmed value on to other descriptors together with the
  478. physical address
  479. Field can be used by SW to for example associate the
  480. buffers physical address with the virtual address
  481. The bit definitions as used by SW are within SW HLD
  482. specification
  483. NOTE1:
  484. The three most significant bits can have a special
  485. meaning in case this struct is embedded in a TX_MPDU_DETAILS
  486. STRUCT, and field transmit_bw_restriction is set
  487. In case of NON punctured transmission:
  488. Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
  489. Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
  490. Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
  491. Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
  492. In case of punctured transmission:
  493. Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
  494. Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
  495. Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
  496. Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
  497. Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
  498. Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
  499. Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
  500. Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
  501. Note: a punctured transmission is indicated by the
  502. presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
  503. TLV
  504. NOTE 2:The five most significant bits can have a special
  505. meaning in case this struct is embedded in an
  506. RX_MSDU_DETAILS STRUCT, and Maple/Spruce Rx DMA is
  507. configured for passing on the additional info
  508. from 'RX_MPDU_INFO' structure in 'RX_MPDU_START' TLV
  509. (FR56821). This is not supported in HastingsPrime, Pine or
  510. Moselle.
  511. Sw_buffer_cookie[20:17]: Tid: The TID field in the QoS
  512. control field
  513. Sw_buffer_cookie[16]: Mpdu_qos_control_valid: This field
  514. indicates MPDUs with a QoS control field.
  515. <legal all>
  516. */
  517. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000014
  518. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11
  519. #define SW_MONITOR_RING_5_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800
  520. /* Description SW_MONITOR_RING_6_RXDMA_PUSH_REASON
  521. Indicates why RXDMA pushed the frame to this ring
  522. <enum 0 rxdma_error_detected> RXDMA detected an error an
  523. pushed this frame to this queue
  524. <enum 1 rxdma_routing_instruction> RXDMA pushed the
  525. frame to this queue per received routing instructions. No
  526. error within RXDMA was detected
  527. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  528. result the MSDU link descriptor might not have the
  529. last_msdu_in_mpdu_flag set, but instead WBM might just see a
  530. NULL pointer in the MSDU link descriptor. This is to be
  531. considered a normal condition for this scenario.
  532. <legal 0 - 2>
  533. */
  534. #define SW_MONITOR_RING_6_RXDMA_PUSH_REASON_OFFSET 0x00000018
  535. #define SW_MONITOR_RING_6_RXDMA_PUSH_REASON_LSB 0
  536. #define SW_MONITOR_RING_6_RXDMA_PUSH_REASON_MASK 0x00000003
  537. /* Description SW_MONITOR_RING_6_RXDMA_ERROR_CODE
  538. Field only valid when rxdma_push_reason is set to
  539. 'rxdma_error_detected.'
  540. <enum 0 rxdma_overflow_err>MPDU frame is not complete
  541. due to a FIFO overflow error in RXPCU.
  542. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  543. due to receiving incomplete MPDU from the PHY
  544. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption
  545. error or CRYPTO received an encrypted frame, but did not get
  546. a valid corresponding key id in the peer entry.
  547. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC
  548. error
  549. <enum 5 rxdma_unecrypted_err>CRYPTO reported an
  550. unencrypted frame error when encrypted was expected
  551. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU
  552. length error
  553. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max
  554. number of MSDUs allowed in an MPDU got exceeded
  555. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing
  556. error
  557. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  558. parsing error
  559. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  560. during SA search
  561. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  562. during DA search
  563. <enum 12 rxdma_flow_timeout_err>RX OLE reported a
  564. timeout during flow search
  565. <enum 13 rxdma_flush_request>RXDMA received a flush
  566. request
  567. <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
  568. present as well as a fragmented MPDU. A-MSDU defragmentation
  569. is not supported in Lithium SW so this is treated as an
  570. error.
  571. */
  572. #define SW_MONITOR_RING_6_RXDMA_ERROR_CODE_OFFSET 0x00000018
  573. #define SW_MONITOR_RING_6_RXDMA_ERROR_CODE_LSB 2
  574. #define SW_MONITOR_RING_6_RXDMA_ERROR_CODE_MASK 0x0000007c
  575. /* Description SW_MONITOR_RING_6_MPDU_FRAGMENT_NUMBER
  576. Field only valid when Reo_level_mpdu_frame_info.
  577. Rx_mpdu_desc_info_details.Fragment_flag is set and
  578. end_of_ppdu is set to 0.
  579. The fragment number from the 802.11 header.
  580. Note that the sequence number is embedded in the field:
  581. Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.
  582. Mpdu_sequence_number
  583. <legal all>
  584. */
  585. #define SW_MONITOR_RING_6_MPDU_FRAGMENT_NUMBER_OFFSET 0x00000018
  586. #define SW_MONITOR_RING_6_MPDU_FRAGMENT_NUMBER_LSB 7
  587. #define SW_MONITOR_RING_6_MPDU_FRAGMENT_NUMBER_MASK 0x00000780
  588. /* Description SW_MONITOR_RING_6_FRAMELESS_BAR
  589. When set, this SW monitor ring struct contains BAR info
  590. from a multi TID BAR frame. The original multi TID BAR frame
  591. itself contained all the REO info for the first TID, but all
  592. the subsequent TID info and their linkage to the REO
  593. descriptors is passed down as 'frameless' BAR info.
  594. The only fields valid in this descriptor when this bit
  595. is within the
  596. Reo_level_mpdu_frame_info:
  597. Within Rx_mpdu_desc_info_details:
  598. Mpdu_Sequence_number
  599. BAR_frame
  600. Peer_meta_data
  601. All other fields shall be set to 0.
  602. <legal all>
  603. */
  604. #define SW_MONITOR_RING_6_FRAMELESS_BAR_OFFSET 0x00000018
  605. #define SW_MONITOR_RING_6_FRAMELESS_BAR_LSB 11
  606. #define SW_MONITOR_RING_6_FRAMELESS_BAR_MASK 0x00000800
  607. /* Description SW_MONITOR_RING_6_STATUS_BUF_COUNT
  608. A count of status buffers used so far for the PPDU
  609. (either the PPDU that included the MPDU being pushed to SW
  610. if end_of_ppdu = 0, or the PPDU whose end is indicated
  611. through end_of_ppdu = 1)
  612. */
  613. #define SW_MONITOR_RING_6_STATUS_BUF_COUNT_OFFSET 0x00000018
  614. #define SW_MONITOR_RING_6_STATUS_BUF_COUNT_LSB 12
  615. #define SW_MONITOR_RING_6_STATUS_BUF_COUNT_MASK 0x0000f000
  616. /* Description SW_MONITOR_RING_6_END_OF_PPDU
  617. Pine RXDMA can be configured to generate a separate
  618. 'SW_MONITOR_RING' descriptor at the end of a PPDU (either
  619. through an 'RX_PPDU_END' TLV or through an 'RX_FLUSH') to
  620. demarcate PPDUs.
  621. For such a descriptor, this bit is set to 1 and fields
  622. Reo_level_mpdu_frame_info, mpdu_fragment_number and
  623. Frameless_bar are all set to 0.
  624. Otherwise this bit is set to 0.
  625. */
  626. #define SW_MONITOR_RING_6_END_OF_PPDU_OFFSET 0x00000018
  627. #define SW_MONITOR_RING_6_END_OF_PPDU_LSB 16
  628. #define SW_MONITOR_RING_6_END_OF_PPDU_MASK 0x00010000
  629. /* Description SW_MONITOR_RING_6_RESERVED_6A
  630. <legal 0>
  631. */
  632. #define SW_MONITOR_RING_6_RESERVED_6A_OFFSET 0x00000018
  633. #define SW_MONITOR_RING_6_RESERVED_6A_LSB 17
  634. #define SW_MONITOR_RING_6_RESERVED_6A_MASK 0xfffe0000
  635. /* Description SW_MONITOR_RING_7_PHY_PPDU_ID
  636. A PPDU counter value that PHY increments for every PPDU
  637. received
  638. The counter value wraps around. Pine RXDMA can be
  639. configured to copy this from the RX_PPDU_START TLV for every
  640. output descriptor.
  641. <legal all>
  642. */
  643. #define SW_MONITOR_RING_7_PHY_PPDU_ID_OFFSET 0x0000001c
  644. #define SW_MONITOR_RING_7_PHY_PPDU_ID_LSB 0
  645. #define SW_MONITOR_RING_7_PHY_PPDU_ID_MASK 0x0000ffff
  646. /* Description SW_MONITOR_RING_7_RESERVED_7A
  647. <legal 0>
  648. */
  649. #define SW_MONITOR_RING_7_RESERVED_7A_OFFSET 0x0000001c
  650. #define SW_MONITOR_RING_7_RESERVED_7A_LSB 16
  651. #define SW_MONITOR_RING_7_RESERVED_7A_MASK 0x000f0000
  652. /* Description SW_MONITOR_RING_7_RING_ID
  653. Consumer: SW/REO/DEBUG
  654. Producer: SRNG (of RXDMA)
  655. For debugging.
  656. This field is filled in by the SRNG module.
  657. It help to identify the ring that is being looked <legal
  658. all>
  659. */
  660. #define SW_MONITOR_RING_7_RING_ID_OFFSET 0x0000001c
  661. #define SW_MONITOR_RING_7_RING_ID_LSB 20
  662. #define SW_MONITOR_RING_7_RING_ID_MASK 0x0ff00000
  663. /* Description SW_MONITOR_RING_7_LOOPING_COUNT
  664. Consumer: SW/REO/DEBUG
  665. Producer: SRNG (of RXDMA)
  666. For debugging.
  667. This field is filled in by the SRNG module.
  668. A count value that indicates the number of times the
  669. producer of entries into this Ring has looped around the
  670. ring.
  671. At initialization time, this value is set to 0. On the
  672. first loop, this value is set to 1. After the max value is
  673. reached allowed by the number of bits for this field, the
  674. count value continues with 0 again.
  675. In case SW is the consumer of the ring entries, it can
  676. use this field to figure out up to where the producer of
  677. entries has created new entries. This eliminates the need to
  678. check where the head pointer' of the ring is located once
  679. the SW starts processing an interrupt indicating that new
  680. entries have been put into this ring...
  681. Also note that SW if it wants only needs to look at the
  682. LSB bit of this count value.
  683. <legal all>
  684. */
  685. #define SW_MONITOR_RING_7_LOOPING_COUNT_OFFSET 0x0000001c
  686. #define SW_MONITOR_RING_7_LOOPING_COUNT_LSB 28
  687. #define SW_MONITOR_RING_7_LOOPING_COUNT_MASK 0xf0000000
  688. #endif // _SW_MONITOR_RING_H_