wbm_release_ring_rx.h 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157
  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 _WBM_RELEASE_RING_RX_H_
  16. #define _WBM_RELEASE_RING_RX_H_
  17. #if !defined(__ASSEMBLER__)
  18. #endif
  19. #include "rx_msdu_desc_info.h"
  20. #include "rx_mpdu_desc_info.h"
  21. #include "buffer_addr_info.h"
  22. #define NUM_OF_DWORDS_WBM_RELEASE_RING_RX 8
  23. struct wbm_release_ring_rx {
  24. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  25. struct buffer_addr_info released_buff_or_desc_addr_info;
  26. uint32_t release_source_module : 3, // [2:0]
  27. bm_action : 3, // [5:3]
  28. buffer_or_desc_type : 3, // [8:6]
  29. first_msdu_index : 4, // [12:9]
  30. reserved_2a : 2, // [14:13]
  31. cache_id : 1, // [15:15]
  32. cookie_conversion_status : 1, // [16:16]
  33. rxdma_push_reason : 2, // [18:17]
  34. rxdma_error_code : 5, // [23:19]
  35. reo_push_reason : 2, // [25:24]
  36. reo_error_code : 5, // [30:26]
  37. wbm_internal_error : 1; // [31:31]
  38. struct rx_mpdu_desc_info rx_mpdu_desc_info_details;
  39. struct rx_msdu_desc_info rx_msdu_desc_info_details;
  40. uint32_t reserved_6a : 32; // [31:0]
  41. uint32_t reserved_7a : 20, // [19:0]
  42. ring_id : 8, // [27:20]
  43. looping_count : 4; // [31:28]
  44. #else
  45. struct buffer_addr_info released_buff_or_desc_addr_info;
  46. uint32_t wbm_internal_error : 1, // [31:31]
  47. reo_error_code : 5, // [30:26]
  48. reo_push_reason : 2, // [25:24]
  49. rxdma_error_code : 5, // [23:19]
  50. rxdma_push_reason : 2, // [18:17]
  51. cookie_conversion_status : 1, // [16:16]
  52. cache_id : 1, // [15:15]
  53. reserved_2a : 2, // [14:13]
  54. first_msdu_index : 4, // [12:9]
  55. buffer_or_desc_type : 3, // [8:6]
  56. bm_action : 3, // [5:3]
  57. release_source_module : 3; // [2:0]
  58. struct rx_mpdu_desc_info rx_mpdu_desc_info_details;
  59. struct rx_msdu_desc_info rx_msdu_desc_info_details;
  60. uint32_t reserved_6a : 32; // [31:0]
  61. uint32_t looping_count : 4, // [31:28]
  62. ring_id : 8, // [27:20]
  63. reserved_7a : 20; // [19:0]
  64. #endif
  65. };
  66. /* Description RELEASED_BUFF_OR_DESC_ADDR_INFO
  67. Consumer: WBM/SW/FW
  68. Producer: SW/TQM/RXDMA/REO/SWITCH
  69. Details of the physical address of the buffer or link descriptor
  70. that is being released. Note that within this descriptor,
  71. WBM will look at the 'owner' of the released buffer/descriptor
  72. and forward it to SW/FW is WBM is not the owner.
  73. */
  74. /* Description BUFFER_ADDR_31_0
  75. Address (lower 32 bits) of the MSDU buffer OR MSDU_EXTENSION
  76. descriptor OR Link Descriptor
  77. In case of 'NULL' pointer, this field is set to 0
  78. <legal all>
  79. */
  80. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
  81. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  82. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MSB 31
  83. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  84. /* Description BUFFER_ADDR_39_32
  85. Address (upper 8 bits) of the MSDU buffer OR MSDU_EXTENSION
  86. descriptor OR Link Descriptor
  87. In case of 'NULL' pointer, this field is set to 0
  88. <legal all>
  89. */
  90. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
  91. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  92. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MSB 7
  93. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  94. /* Description RETURN_BUFFER_MANAGER
  95. Consumer: WBM
  96. Producer: SW/FW
  97. In case of 'NULL' pointer, this field is set to 0
  98. Indicates to which buffer manager the buffer OR MSDU_EXTENSION
  99. descriptor OR link descriptor that is being pointed to
  100. shall be returned after the frame has been processed. It
  101. is used by WBM for routing purposes.
  102. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  103. to the WMB buffer idle list
  104. <enum 1 WBM_CHIP0_IDLE_DESC_LIST> This buffer shall be returned
  105. to the WBM idle link descriptor idle list, where the chip
  106. 0 WBM is chosen in case of a multi-chip config
  107. <enum 2 WBM_CHIP1_IDLE_DESC_LIST> This buffer shall be returned
  108. to the chip 1 WBM idle link descriptor idle list
  109. <enum 3 WBM_CHIP2_IDLE_DESC_LIST> This buffer shall be returned
  110. to the chip 2 WBM idle link descriptor idle list
  111. <enum 12 WBM_CHIP3_IDLE_DESC_LIST> This buffer shall be
  112. returned to chip 3 WBM idle link descriptor idle list
  113. <enum 4 FW_BM> This buffer shall be returned to the FW
  114. <enum 5 SW0_BM> This buffer shall be returned to the SW,
  115. ring 0
  116. <enum 6 SW1_BM> This buffer shall be returned to the SW,
  117. ring 1
  118. <enum 7 SW2_BM> This buffer shall be returned to the SW,
  119. ring 2
  120. <enum 8 SW3_BM> This buffer shall be returned to the SW,
  121. ring 3
  122. <enum 9 SW4_BM> This buffer shall be returned to the SW,
  123. ring 4
  124. <enum 10 SW5_BM> This buffer shall be returned to the SW,
  125. ring 5
  126. <enum 11 SW6_BM> This buffer shall be returned to the SW,
  127. ring 6
  128. <legal 0-12>
  129. */
  130. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
  131. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  132. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB 11
  133. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000f00
  134. /* Description SW_BUFFER_COOKIE
  135. Cookie field exclusively used by SW.
  136. In case of 'NULL' pointer, this field is set to 0
  137. HW ignores the contents, accept that it passes the programmed
  138. value on to other descriptors together with the physical
  139. address
  140. Field can be used by SW to for example associate the buffers
  141. physical address with the virtual address
  142. The bit definitions as used by SW are within SW HLD specification
  143. NOTE1:
  144. The three most significant bits can have a special meaning
  145. in case this struct is embedded in a TX_MPDU_DETAILS STRUCT,
  146. and field transmit_bw_restriction is set
  147. In case of NON punctured transmission:
  148. Sw_buffer_cookie[19:17] = 3'b000: 20 MHz TX only
  149. Sw_buffer_cookie[19:17] = 3'b001: 40 MHz TX only
  150. Sw_buffer_cookie[19:17] = 3'b010: 80 MHz TX only
  151. Sw_buffer_cookie[19:17] = 3'b011: 160 MHz TX only
  152. Sw_buffer_cookie[19:17] = 3'b101: 240 MHz TX only
  153. Sw_buffer_cookie[19:17] = 3'b100: 320 MHz TX only
  154. Sw_buffer_cookie[19:18] = 2'b11: reserved
  155. In case of punctured transmission:
  156. Sw_buffer_cookie[19:16] = 4'b0000: pattern 0 only
  157. Sw_buffer_cookie[19:16] = 4'b0001: pattern 1 only
  158. Sw_buffer_cookie[19:16] = 4'b0010: pattern 2 only
  159. Sw_buffer_cookie[19:16] = 4'b0011: pattern 3 only
  160. Sw_buffer_cookie[19:16] = 4'b0100: pattern 4 only
  161. Sw_buffer_cookie[19:16] = 4'b0101: pattern 5 only
  162. Sw_buffer_cookie[19:16] = 4'b0110: pattern 6 only
  163. Sw_buffer_cookie[19:16] = 4'b0111: pattern 7 only
  164. Sw_buffer_cookie[19:16] = 4'b1000: pattern 8 only
  165. Sw_buffer_cookie[19:16] = 4'b1001: pattern 9 only
  166. Sw_buffer_cookie[19:16] = 4'b1010: pattern 10 only
  167. Sw_buffer_cookie[19:16] = 4'b1011: pattern 11 only
  168. Sw_buffer_cookie[19:18] = 2'b11: reserved
  169. Note: a punctured transmission is indicated by the presence
  170. of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV
  171. <legal all>
  172. */
  173. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
  174. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 12
  175. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MSB 31
  176. #define WBM_RELEASE_RING_RX_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff000
  177. /* Description RELEASE_SOURCE_MODULE
  178. Indicates which module initiated the release of this buffer
  179. or descriptor
  180. <enum 1 release_source_RXDMA> RXDMA released this buffer
  181. or descriptor
  182. <enum 2 release_source_REO> REO released this buffer or
  183. descriptor
  184. <enum 5 release_source_FW_RX> FW released this buffer or
  185. descriptor
  186. <enum 4 release_source_SW_RX> SW released this buffer or
  187. descriptor
  188. <enum 0 release_source_TQM> DO NOT USE
  189. <enum 3 release_source_FW_TX> DO NOT USE
  190. <enum 6 release_source_SW_TX> DO NOT USE
  191. <legal 0-6>
  192. */
  193. #define WBM_RELEASE_RING_RX_RELEASE_SOURCE_MODULE_OFFSET 0x00000008
  194. #define WBM_RELEASE_RING_RX_RELEASE_SOURCE_MODULE_LSB 0
  195. #define WBM_RELEASE_RING_RX_RELEASE_SOURCE_MODULE_MSB 2
  196. #define WBM_RELEASE_RING_RX_RELEASE_SOURCE_MODULE_MASK 0x00000007
  197. /* Description BM_ACTION
  198. Consumer: WBM/SW/FW
  199. Producer: SW/TQM/RXDMA/REO/SWITCH
  200. Field only valid when the field return_buffer_manager in
  201. the Released_buff_or_desc_addr_info indicates:
  202. WBM_IDLE_BUF_LIST or
  203. WBM_IDLE_DESC_LIST
  204. An MSDU extension descriptor shall never be marked as WBM
  205. being the 'owner', and thus WBM will forward it to FW/SW
  206. <enum 0 Put_in_idle_list> Put the buffer or descriptor back
  207. in the idle list. In case of MSDU or MDPU link descriptor,
  208. BM does not need to check to release any individual MSDU
  209. buffers
  210. <enum 1 release_msdu_list > This BM action can only be used
  211. in combination with buffer_or_desc_type being msdu_link_descriptor.
  212. Field first_msdu_index points out which MSDU pointer in
  213. the MSDU link descriptor is the first of an MPDU that is
  214. released.
  215. BM shall release all the MSDU buffers linked to this first
  216. MSDU buffer pointer. All related MSDU buffer pointer entries
  217. shall be set to value 0, which represents the 'NULL" pointer.
  218. When all MSDU buffer pointers in the MSDU link descriptor
  219. are 'NULL', the MSDU link descriptor itself shall also
  220. be released.
  221. <enum 2 Put_in_idle_list_expanded> CURRENTLY NOT IMPLEMENTED....
  222. Put the buffer or descriptor back in the idle list. Only
  223. valid in combination with buffer_or_desc_type indicating
  224. MDPU_link_descriptor.
  225. BM shall release the MPDU link descriptor as well as all
  226. MSDUs that are linked to the MPDUs in this descriptor.
  227. TODO: Any restrictions?
  228. <legal 0-2>
  229. */
  230. #define WBM_RELEASE_RING_RX_BM_ACTION_OFFSET 0x00000008
  231. #define WBM_RELEASE_RING_RX_BM_ACTION_LSB 3
  232. #define WBM_RELEASE_RING_RX_BM_ACTION_MSB 5
  233. #define WBM_RELEASE_RING_RX_BM_ACTION_MASK 0x00000038
  234. /* Description BUFFER_OR_DESC_TYPE
  235. Consumer: WBM/SW/FW
  236. Producer: SW/TQM/RXDMA/REO/SWITCH
  237. Field only valid when WBM is marked as the return_buffer_manager
  238. in the Released_Buffer_address_info
  239. Indicates that type of buffer or descriptor is being released
  240. <enum 0 MSDU_rel_buffer> The address points to an MSDU buffer
  241. <enum 1 msdu_link_descriptor> The address points to an TX
  242. MSDU link descriptor
  243. <enum 2 mpdu_link_descriptor> The address points to an MPDU
  244. link descriptor
  245. <enum 3 msdu_ext_descriptor > The address points to an MSDU
  246. extension descriptor.
  247. In case BM finds this one in a release ring, it passes it
  248. on to FW...
  249. <enum 4 queue_ext_descriptor> The address points to an TQM
  250. queue extension descriptor. WBM should treat this is the
  251. same way as a link descriptor. That is, put the 128 byte
  252. buffer back in the link buffer idle list.
  253. TODO: Any restrictions?
  254. <legal 0-4>
  255. */
  256. #define WBM_RELEASE_RING_RX_BUFFER_OR_DESC_TYPE_OFFSET 0x00000008
  257. #define WBM_RELEASE_RING_RX_BUFFER_OR_DESC_TYPE_LSB 6
  258. #define WBM_RELEASE_RING_RX_BUFFER_OR_DESC_TYPE_MSB 8
  259. #define WBM_RELEASE_RING_RX_BUFFER_OR_DESC_TYPE_MASK 0x000001c0
  260. /* Description FIRST_MSDU_INDEX
  261. Consumer: WBM/SW/FW
  262. Producer: SW/TQM/RXDMA/REO/SWITCH
  263. Field only valid for the bm_action release_msdu_list.
  264. The index of the first MSDU in an MSDU link descriptor all
  265. belonging to the same MPDU.
  266. TODO: Any restrictions?
  267. <legal 0-6>
  268. */
  269. #define WBM_RELEASE_RING_RX_FIRST_MSDU_INDEX_OFFSET 0x00000008
  270. #define WBM_RELEASE_RING_RX_FIRST_MSDU_INDEX_LSB 9
  271. #define WBM_RELEASE_RING_RX_FIRST_MSDU_INDEX_MSB 12
  272. #define WBM_RELEASE_RING_RX_FIRST_MSDU_INDEX_MASK 0x00001e00
  273. /* Description RESERVED_2A
  274. <legal 0>
  275. */
  276. #define WBM_RELEASE_RING_RX_RESERVED_2A_OFFSET 0x00000008
  277. #define WBM_RELEASE_RING_RX_RESERVED_2A_LSB 13
  278. #define WBM_RELEASE_RING_RX_RESERVED_2A_MSB 14
  279. #define WBM_RELEASE_RING_RX_RESERVED_2A_MASK 0x00006000
  280. /* Description CACHE_ID
  281. Indicates the WBM cache the MSDU was released from
  282. <legal all>
  283. */
  284. #define WBM_RELEASE_RING_RX_CACHE_ID_OFFSET 0x00000008
  285. #define WBM_RELEASE_RING_RX_CACHE_ID_LSB 15
  286. #define WBM_RELEASE_RING_RX_CACHE_ID_MSB 15
  287. #define WBM_RELEASE_RING_RX_CACHE_ID_MASK 0x00008000
  288. /* Description COOKIE_CONVERSION_STATUS
  289. 0: 'Sw_buffer_cookie' not converted to 'Buffer_virt_addr'
  290. 1: 'Sw_buffer_cookie' coverted to 'Buffer_virt_addr'
  291. <legal 0>
  292. */
  293. #define WBM_RELEASE_RING_RX_COOKIE_CONVERSION_STATUS_OFFSET 0x00000008
  294. #define WBM_RELEASE_RING_RX_COOKIE_CONVERSION_STATUS_LSB 16
  295. #define WBM_RELEASE_RING_RX_COOKIE_CONVERSION_STATUS_MSB 16
  296. #define WBM_RELEASE_RING_RX_COOKIE_CONVERSION_STATUS_MASK 0x00010000
  297. /* Description RXDMA_PUSH_REASON
  298. Field only valid when Release_source_module is set to release_source_RXDMA
  299. Indicates why rxdma pushed the frame to this ring
  300. <enum 0 rxdma_error_detected> RXDMA detected an error an
  301. pushed this frame to this queue
  302. <enum 1 rxdma_routing_instruction> RXDMA pushed the frame
  303. to this queue per received routing instructions. No error
  304. within RXDMA was detected
  305. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  306. result the MSDU link descriptor might not have the "last_msdu_in_mpdu_flag"
  307. set, but instead WBM might just see a NULL pointer in the
  308. MSDU link descriptor. This is to be considered a normal
  309. condition for this scenario.
  310. <legal 0 - 2>
  311. */
  312. #define WBM_RELEASE_RING_RX_RXDMA_PUSH_REASON_OFFSET 0x00000008
  313. #define WBM_RELEASE_RING_RX_RXDMA_PUSH_REASON_LSB 17
  314. #define WBM_RELEASE_RING_RX_RXDMA_PUSH_REASON_MSB 18
  315. #define WBM_RELEASE_RING_RX_RXDMA_PUSH_REASON_MASK 0x00060000
  316. /* Description RXDMA_ERROR_CODE
  317. Field only valid when 'rxdma_push_reason' set to 'rxdma_error_detected'.
  318. <enum 0 rxdma_overflow_err>MPDU frame is not complete due
  319. to a FIFO overflow error in RXPCU.
  320. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  321. due to receiving incomplete MPDU from the PHY
  322. <enum 2 rxdma_fcs_err>FCS check on the MPDU frame failed
  323. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption error
  324. or CRYPTO received an encrypted frame, but did not get
  325. a valid corresponding key id in the peer entry.
  326. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC error
  327. <enum 5 rxdma_unecrypted_err>CRYPTO reported an unencrypted
  328. frame error when encrypted was expected
  329. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU length
  330. error
  331. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max number
  332. of MSDUs allowed in an MPDU got exceeded
  333. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing error
  334. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  335. parsing error
  336. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  337. during SA search
  338. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  339. during DA search
  340. <enum 12 rxdma_flow_timeout_err>RX OLE reported a timeout
  341. during flow search
  342. <enum 13 rxdma_flush_request>RXDMA received a flush request
  343. <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
  344. present as well as a fragmented MPDU. A-MSDU defragmentation
  345. is not supported in Lithium SW so this is treated as an
  346. error.
  347. <enum 15 rxdma_multicast_echo_err>RX OLE reported a multicast
  348. echo
  349. <enum 16 rxdma_amsdu_addr_mismatch_err>RX OLE reported an
  350. A-MSDU with either 'from DS = 0' with an SA mismatching
  351. TA or 'to DS = 0' with a DA mismatching RA.
  352. <enum 17 rxdma_unauthorized_wds_err>RX PCU reported that
  353. Rx peer entry did not indicate 'authorized_to_send_WDS'
  354. and also indicated 'from DS = to DS = 1.'
  355. <enum 18 rxdma_groupcast_amsdu_or_wds_err>RX PCU reported
  356. a broadcast or multicast RA as well as either A-MSDU present
  357. or 'from DS = to DS = 1.'
  358. */
  359. #define WBM_RELEASE_RING_RX_RXDMA_ERROR_CODE_OFFSET 0x00000008
  360. #define WBM_RELEASE_RING_RX_RXDMA_ERROR_CODE_LSB 19
  361. #define WBM_RELEASE_RING_RX_RXDMA_ERROR_CODE_MSB 23
  362. #define WBM_RELEASE_RING_RX_RXDMA_ERROR_CODE_MASK 0x00f80000
  363. /* Description REO_PUSH_REASON
  364. Field only valid when Release_source_module is set to release_source_REO
  365. Indicates why REO pushed the frame to this release ring
  366. <enum 0 reo_error_detected> Reo detected an error an pushed
  367. this frame to this queue
  368. <enum 1 reo_routing_instruction> Reo pushed the frame to
  369. this queue per received routing instructions. No error
  370. within REO was detected
  371. <legal 0 - 1>
  372. */
  373. #define WBM_RELEASE_RING_RX_REO_PUSH_REASON_OFFSET 0x00000008
  374. #define WBM_RELEASE_RING_RX_REO_PUSH_REASON_LSB 24
  375. #define WBM_RELEASE_RING_RX_REO_PUSH_REASON_MSB 25
  376. #define WBM_RELEASE_RING_RX_REO_PUSH_REASON_MASK 0x03000000
  377. /* Description REO_ERROR_CODE
  378. Field only valid when 'Reo_push_reason' set to 'reo_error_detected'.
  379. <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor provided
  380. in the REO_ENTRANCE ring is set to 0
  381. <enum 1 reo_queue_desc_not_valid> Reo queue descriptor valid
  382. bit is NOT set
  383. <enum 2 ampdu_in_non_ba> AMPDU frame received without BA
  384. session having been setup.
  385. <enum 3 non_ba_duplicate> Non-BA session, SN equal to SSN,
  386. Retry bit set: duplicate frame
  387. <enum 4 ba_duplicate> BA session, duplicate frame
  388. <enum 5 regular_frame_2k_jump> A normal (management/data
  389. frame) received with 2K jump in SN
  390. <enum 6 bar_frame_2k_jump> A bar received with 2K jump in
  391. SSN
  392. <enum 7 regular_frame_OOR> A normal (management/data frame)
  393. received with SN falling within the OOR window
  394. <enum 8 bar_frame_OOR> A bar received with SSN falling within
  395. the OOR window
  396. <enum 9 bar_frame_no_ba_session> A bar received without
  397. a BA session
  398. <enum 10 bar_frame_sn_equals_ssn> A bar received with SSN
  399. equal to SN
  400. <enum 11 pn_check_failed> PN Check Failed packet.
  401. <enum 12 2k_error_handling_flag_set> Frame is forwarded
  402. as a result of the 'Seq_2k_error_detected_flag' been set
  403. in the REO Queue descriptor
  404. <enum 13 pn_error_handling_flag_set> Frame is forwarded
  405. as a result of the 'pn_error_detected_flag' been set in
  406. the REO Queue descriptor
  407. <enum 14 queue_descriptor_blocked_set> Frame is forwarded
  408. as a result of the queue descriptor(address) being blocked
  409. as SW/FW seems to be currently in the process of making
  410. updates to this descriptor...
  411. <legal 0-14>
  412. */
  413. #define WBM_RELEASE_RING_RX_REO_ERROR_CODE_OFFSET 0x00000008
  414. #define WBM_RELEASE_RING_RX_REO_ERROR_CODE_LSB 26
  415. #define WBM_RELEASE_RING_RX_REO_ERROR_CODE_MSB 30
  416. #define WBM_RELEASE_RING_RX_REO_ERROR_CODE_MASK 0x7c000000
  417. /* Description WBM_INTERNAL_ERROR
  418. Can only be set by WBM.
  419. Is set when WBM got a buffer pointer but the action was
  420. to push it to the idle link descriptor ring or do link related
  421. activity
  422. OR
  423. Is set when WBM got a link buffer pointer but the action
  424. was to push it to the buffer descriptor ring
  425. <legal all>
  426. */
  427. #define WBM_RELEASE_RING_RX_WBM_INTERNAL_ERROR_OFFSET 0x00000008
  428. #define WBM_RELEASE_RING_RX_WBM_INTERNAL_ERROR_LSB 31
  429. #define WBM_RELEASE_RING_RX_WBM_INTERNAL_ERROR_MSB 31
  430. #define WBM_RELEASE_RING_RX_WBM_INTERNAL_ERROR_MASK 0x80000000
  431. /* Description RX_MPDU_DESC_INFO_DETAILS
  432. Consumer: REO/SW/FW
  433. Producer: RXDMA
  434. General information related to the MPDU whose link descriptors
  435. are being released from Rx DMA or REO
  436. When enabled in REO, REO will overwrite this structure to
  437. have only the 'Msdu_count' field and 56 bits of the previous
  438. PN from 'RX_REO_QUEUE' (Hamilton FR62456)
  439. */
  440. /* Description MSDU_COUNT
  441. Consumer: REO/SW/FW
  442. Producer: RXDMA
  443. The number of MSDUs within the MPDU
  444. <legal all>
  445. */
  446. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x0000000c
  447. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0
  448. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MSB 7
  449. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff
  450. /* Description FRAGMENT_FLAG
  451. Consumer: REO/SW/FW
  452. Producer: RXDMA
  453. When set, this MPDU is a fragment and REO should forward
  454. this fragment MPDU to the REO destination ring without
  455. any reorder checks, pn checks or bitmap update. This implies
  456. that REO is forwarding the pointer to the MSDU link descriptor.
  457. The destination ring is coming from a programmable register
  458. setting in REO
  459. <legal all>
  460. */
  461. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x0000000c
  462. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 8
  463. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MSB 8
  464. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00000100
  465. /* Description MPDU_RETRY_BIT
  466. Consumer: REO/SW/FW
  467. Producer: RXDMA
  468. The retry bit setting from the MPDU header of the received
  469. frame
  470. <legal all>
  471. */
  472. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x0000000c
  473. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 9
  474. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MSB 9
  475. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00000200
  476. /* Description AMPDU_FLAG
  477. Consumer: REO/SW/FW
  478. Producer: RXDMA
  479. When set, the MPDU was received as part of an A-MPDU.
  480. <legal all>
  481. */
  482. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x0000000c
  483. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 10
  484. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MSB 10
  485. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00000400
  486. /* Description BAR_FRAME
  487. Consumer: REO/SW/FW
  488. Producer: RXDMA
  489. When set, the received frame is a BAR frame. After processing,
  490. this frame shall be pushed to SW or deleted.
  491. <legal all>
  492. */
  493. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x0000000c
  494. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 11
  495. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MSB 11
  496. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00000800
  497. /* Description PN_FIELDS_CONTAIN_VALID_INFO
  498. Consumer: REO/SW/FW
  499. Producer: RXDMA
  500. Copied here by RXDMA from RX_MPDU_END
  501. When not set, REO will Not perform a PN sequence number
  502. check
  503. */
  504. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x0000000c
  505. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 12
  506. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MSB 12
  507. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x00001000
  508. /* Description RAW_MPDU
  509. Field only valid when first_msdu_in_mpdu_flag is set.
  510. When set, the contents in the MSDU buffer contains a 'RAW'
  511. MPDU. This 'RAW' MPDU might be spread out over multiple
  512. MSDU buffers.
  513. <legal all>
  514. */
  515. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x0000000c
  516. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 13
  517. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MSB 13
  518. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x00002000
  519. /* Description MORE_FRAGMENT_FLAG
  520. The More Fragment bit setting from the MPDU header of the
  521. received frame
  522. <legal all>
  523. */
  524. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x0000000c
  525. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 14
  526. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MSB 14
  527. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x00004000
  528. /* Description SRC_INFO
  529. Source (virtual) device/interface info. associated with
  530. this peer
  531. This field gets passed on by REO to PPE in the EDMA descriptor
  532. ('REO_TO_PPE_RING').
  533. Hamilton v1 used this for 'vdev_id' instead.
  534. <legal all>
  535. */
  536. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_OFFSET 0x0000000c
  537. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_LSB 15
  538. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MSB 26
  539. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MASK 0x07ff8000
  540. /* Description MPDU_QOS_CONTROL_VALID
  541. When set, the MPDU has a QoS control field.
  542. In case of ndp or phy_err, this field will never be set.
  543. <legal all>
  544. */
  545. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_OFFSET 0x0000000c
  546. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_LSB 27
  547. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MSB 27
  548. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MASK 0x08000000
  549. /* Description TID
  550. Field only valid when mpdu_qos_control_valid is set
  551. The TID field in the QoS control field
  552. <legal all>
  553. */
  554. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_TID_OFFSET 0x0000000c
  555. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_TID_LSB 28
  556. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_TID_MSB 31
  557. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_TID_MASK 0xf0000000
  558. /* Description PEER_META_DATA
  559. Meta data that SW has programmed in the Peer table entry
  560. of the transmitting STA.
  561. <legal all>
  562. */
  563. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x00000010
  564. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0
  565. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MSB 31
  566. #define WBM_RELEASE_RING_RX_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff
  567. /* Description RX_MSDU_DESC_INFO_DETAILS
  568. Consumer: TQM/SW
  569. Producer: SW/SCH(from TXPCU, PDG) /WBM (from RXDMA)
  570. In case of RXDMA or REO releasing Rx MSDU link descriptors,'
  571. WBM fills this field with Rx_msdu_desc_info_details when
  572. releasing the MSDUs to SW (Maple/Spruce FR59859).
  573. */
  574. /* Description FIRST_MSDU_IN_MPDU_FLAG
  575. Parsed from RX_MSDU_END TLV . In the case MSDU spans over
  576. multiple buffers, this field will be valid in the Last
  577. buffer used by the MSDU
  578. <enum 0 Not_first_msdu> This is not the first MSDU in the
  579. MPDU.
  580. <enum 1 first_msdu> This MSDU is the first one in the MPDU.
  581. <legal all>
  582. */
  583. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000014
  584. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_LSB 0
  585. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_MSB 0
  586. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_MASK 0x00000001
  587. /* Description LAST_MSDU_IN_MPDU_FLAG
  588. Consumer: WBM/REO/SW/FW
  589. Producer: RXDMA
  590. Parsed from RX_MSDU_END TLV . In the case MSDU spans over
  591. multiple buffers, this field will be valid in the Last
  592. buffer used by the MSDU
  593. <enum 0 Not_last_msdu> There are more MSDUs linked to this
  594. MSDU that belongs to this MPDU
  595. <enum 1 Last_msdu> this MSDU is the last one in the MPDU.
  596. This setting is only allowed in combination with 'Msdu_continuation'
  597. set to 0. This implies that when an msdu is spread out over
  598. multiple buffers and thus msdu_continuation is set, only
  599. for the very last buffer of the msdu, can the 'last_msdu_in_mpdu_flag'
  600. be set.
  601. When both first_msdu_in_mpdu_flag and last_msdu_in_mpdu_flag
  602. are set, the MPDU that this MSDU belongs to only contains
  603. a single MSDU.
  604. <legal all>
  605. */
  606. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000014
  607. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_LSB 1
  608. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_MSB 1
  609. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_MASK 0x00000002
  610. /* Description MSDU_CONTINUATION
  611. When set, this MSDU buffer was not able to hold the entire
  612. MSDU. The next buffer will therefor contain additional
  613. information related to this MSDU.
  614. <legal all>
  615. */
  616. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_OFFSET 0x00000014
  617. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_LSB 2
  618. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_MSB 2
  619. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_MASK 0x00000004
  620. /* Description MSDU_LENGTH
  621. Parsed from RX_MSDU_START TLV . In the case MSDU spans over
  622. multiple buffers, this field will be valid in the First
  623. buffer used by MSDU.
  624. Full MSDU length in bytes after decapsulation.
  625. This field is still valid for MPDU frames without A-MSDU.
  626. It still represents MSDU length after decapsulation
  627. Or in case of RAW MPDUs, it indicates the length of the
  628. entire MPDU (without FCS field)
  629. <legal all>
  630. */
  631. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_OFFSET 0x00000014
  632. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_LSB 3
  633. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_MSB 16
  634. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_MASK 0x0001fff8
  635. /* Description MSDU_DROP
  636. Parsed from RX_MSDU_END TLV . In the case MSDU spans over
  637. multiple buffers, this field will be valid in the Last
  638. buffer used by the MSDU
  639. When set, REO shall drop this MSDU and not forward it to
  640. any other ring...
  641. <legal all>
  642. */
  643. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_OFFSET 0x00000014
  644. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_LSB 17
  645. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_MSB 17
  646. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_MASK 0x00020000
  647. /* Description SA_IS_VALID
  648. Parsed from RX_MSDU_END TLV . In the case MSDU spans over
  649. multiple buffers, this field will be valid in the Last
  650. buffer used by the MSDU
  651. Indicates that OLE found a valid SA entry for this MSDU
  652. <legal all>
  653. */
  654. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000014
  655. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB 18
  656. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_MSB 18
  657. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x00040000
  658. /* Description DA_IS_VALID
  659. Parsed from RX_MSDU_END TLV . In the case MSDU spans over
  660. multiple buffers, this field will be valid in the Last
  661. buffer used by the MSDU
  662. Indicates that OLE found a valid DA entry for this MSDU
  663. <legal all>
  664. */
  665. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000014
  666. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB 19
  667. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_MSB 19
  668. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x00080000
  669. /* Description DA_IS_MCBC
  670. Field Only valid if "da_is_valid" is set
  671. Indicates the DA address was a Multicast of Broadcast address
  672. for this MSDU
  673. <legal all>
  674. */
  675. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000014
  676. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB 20
  677. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_MSB 20
  678. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK 0x00100000
  679. /* Description L3_HEADER_PADDING_MSB
  680. Passed on from 'RX_MSDU_END' TLV (only the MSB is reported
  681. as the LSB is always zero)
  682. Number of bytes padded to make sure that the L3 header will
  683. always start of a Dword boundary
  684. <legal all>
  685. */
  686. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_OFFSET 0x00000014
  687. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_LSB 21
  688. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_MSB 21
  689. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_MASK 0x00200000
  690. /* Description TCP_UDP_CHKSUM_FAIL
  691. Passed on from 'RX_ATTENTION' TLV
  692. Indicates that the computed checksum did not match the checksum
  693. in the TCP/UDP header.
  694. <legal all>
  695. */
  696. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_OFFSET 0x00000014
  697. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_LSB 22
  698. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_MSB 22
  699. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_MASK 0x00400000
  700. /* Description IP_CHKSUM_FAIL
  701. Passed on from 'RX_ATTENTION' TLV
  702. Indicates that the computed checksum did not match the checksum
  703. in the IP header.
  704. <legal all>
  705. */
  706. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_OFFSET 0x00000014
  707. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_LSB 23
  708. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_MSB 23
  709. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_MASK 0x00800000
  710. /* Description FR_DS
  711. Passed on from 'RX_MPDU_INFO' structure in 'RX_MPDU_START'
  712. TLV
  713. Set if the 'from DS' bit is set in the frame control.
  714. <legal all>
  715. */
  716. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FR_DS_OFFSET 0x00000014
  717. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FR_DS_LSB 24
  718. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FR_DS_MSB 24
  719. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_FR_DS_MASK 0x01000000
  720. /* Description TO_DS
  721. Passed on from 'RX_MPDU_INFO' structure in 'RX_MPDU_START'
  722. TLV
  723. Set if the 'to DS' bit is set in the frame control.
  724. <legal all>
  725. */
  726. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TO_DS_OFFSET 0x00000014
  727. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TO_DS_LSB 25
  728. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TO_DS_MSB 25
  729. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_TO_DS_MASK 0x02000000
  730. /* Description INTRA_BSS
  731. This packet needs intra-BSS routing by SW as the 'vdev_id'
  732. for the destination is the same as the 'vdev_id' (from 'RX_MPDU_PCU_START')
  733. that this MSDU was got in.
  734. <legal all>
  735. */
  736. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_INTRA_BSS_OFFSET 0x00000014
  737. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_INTRA_BSS_LSB 26
  738. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_INTRA_BSS_MSB 26
  739. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_INTRA_BSS_MASK 0x04000000
  740. /* Description DEST_CHIP_ID
  741. If intra_bss is set, copied by RXOLE/RXDMA from 'ADDR_SEARCH_ENTRY'
  742. to support intra-BSS routing with multi-chip multi-link
  743. operation.
  744. This indicates into which chip's TCL the packet should be
  745. queued.
  746. <legal all>
  747. */
  748. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_ID_OFFSET 0x00000014
  749. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_ID_LSB 27
  750. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_ID_MSB 28
  751. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_ID_MASK 0x18000000
  752. /* Description DECAP_FORMAT
  753. Indicates the format after decapsulation:
  754. <enum 0 RAW> No encapsulation
  755. <enum 1 Native_WiFi>
  756. <enum 2 Ethernet> Ethernet 2 (DIX) or 802.3 (uses SNAP/LLC)
  757. <enum 3 802_3> Indicate Ethernet
  758. <legal all>
  759. */
  760. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DECAP_FORMAT_OFFSET 0x00000014
  761. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DECAP_FORMAT_LSB 29
  762. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DECAP_FORMAT_MSB 30
  763. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DECAP_FORMAT_MASK 0x60000000
  764. /* Description DEST_CHIP_PMAC_ID
  765. If intra_bss is set, copied by RXOLE/RXDMA from 'ADDR_SEARCH_ENTRY'
  766. to support intra-BSS routing with multi-chip multi-link
  767. operation.
  768. This indicates into which link/'vdev' the packet should
  769. be queued in TCL.
  770. <legal all>
  771. */
  772. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_PMAC_ID_OFFSET 0x00000014
  773. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_PMAC_ID_LSB 31
  774. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_PMAC_ID_MSB 31
  775. #define WBM_RELEASE_RING_RX_RX_MSDU_DESC_INFO_DETAILS_DEST_CHIP_PMAC_ID_MASK 0x80000000
  776. /* Description RESERVED_6A
  777. <legal 0>
  778. */
  779. #define WBM_RELEASE_RING_RX_RESERVED_6A_OFFSET 0x00000018
  780. #define WBM_RELEASE_RING_RX_RESERVED_6A_LSB 0
  781. #define WBM_RELEASE_RING_RX_RESERVED_6A_MSB 31
  782. #define WBM_RELEASE_RING_RX_RESERVED_6A_MASK 0xffffffff
  783. /* Description RESERVED_7A
  784. <legal 0>
  785. */
  786. #define WBM_RELEASE_RING_RX_RESERVED_7A_OFFSET 0x0000001c
  787. #define WBM_RELEASE_RING_RX_RESERVED_7A_LSB 0
  788. #define WBM_RELEASE_RING_RX_RESERVED_7A_MSB 19
  789. #define WBM_RELEASE_RING_RX_RESERVED_7A_MASK 0x000fffff
  790. /* Description RING_ID
  791. Consumer: TQM/REO/RXDMA/SW
  792. Producer: SRNG (of RXDMA)
  793. For debugging.
  794. This field is filled in by the SRNG module.
  795. It help to identify the ring that is being looked <legal
  796. all>
  797. */
  798. #define WBM_RELEASE_RING_RX_RING_ID_OFFSET 0x0000001c
  799. #define WBM_RELEASE_RING_RX_RING_ID_LSB 20
  800. #define WBM_RELEASE_RING_RX_RING_ID_MSB 27
  801. #define WBM_RELEASE_RING_RX_RING_ID_MASK 0x0ff00000
  802. /* Description LOOPING_COUNT
  803. Consumer: WBM/SW/FW
  804. Producer: SW/TQM/RXDMA/REO/SWITCH
  805. If WBM_internal_error is set, this descriptor is sent to
  806. the dedicated 'WBM_ERROR_RELEASE' ring and Looping_count
  807. is used to indicate an error code.
  808. The values reported are documented further in the WBM MLD
  809. doc.
  810. If WBM_internal_error is not set, the following holds.
  811. A count value that indicates the number of times the producer
  812. of entries into the Buffer Manager Ring has looped around
  813. the ring.
  814. At initialization time, this value is set to 0. On the first
  815. loop, this value is set to 1. After the max value is reached
  816. allowed by the number of bits for this field, the count
  817. value continues with 0 again.
  818. In case SW is the consumer of the ring entries, it can use
  819. this field to figure out up to where the producer of entries
  820. has created new entries. This eliminates the need to check
  821. where the "head pointer' of the ring is located once the
  822. SW starts processing an interrupt indicating that new entries
  823. have been put into this ring...
  824. Also note that SW if it wants only needs to look at the
  825. LSB bit of this count value.
  826. <legal all>
  827. */
  828. #define WBM_RELEASE_RING_RX_LOOPING_COUNT_OFFSET 0x0000001c
  829. #define WBM_RELEASE_RING_RX_LOOPING_COUNT_LSB 28
  830. #define WBM_RELEASE_RING_RX_LOOPING_COUNT_MSB 31
  831. #define WBM_RELEASE_RING_RX_LOOPING_COUNT_MASK 0xf0000000
  832. #endif // WBM_RELEASE_RING_RX