reo_destination_ring.h 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688
  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 _REO_DESTINATION_RING_H_
  17. #define _REO_DESTINATION_RING_H_
  18. #if !defined(__ASSEMBLER__)
  19. #endif
  20. #include "buffer_addr_info.h"
  21. #include "rx_mpdu_desc_info.h"
  22. #include "rx_msdu_desc_info.h"
  23. // ################ START SUMMARY #################
  24. //
  25. // Dword Fields
  26. // 0-1 struct buffer_addr_info buf_or_link_desc_addr_info;
  27. // 2-3 struct rx_mpdu_desc_info rx_mpdu_desc_info_details;
  28. // 4-5 struct rx_msdu_desc_info rx_msdu_desc_info_details;
  29. // 6 rx_reo_queue_desc_addr_31_0[31:0]
  30. // 7 rx_reo_queue_desc_addr_39_32[7:0], reo_dest_buffer_type[8], reo_push_reason[10:9], reo_error_code[15:11], receive_queue_number[31:16]
  31. // 8 soft_reorder_info_valid[0], reorder_opcode[4:1], reorder_slot_index[12:5], mpdu_fragment_number[16:13], captured_msdu_data_size[20:17], sw_exception[21], reserved_8a[31:22]
  32. // 9 reo_destination_struct_signature[31:0]
  33. // 10 reserved_10a[31:0]
  34. // 11 reserved_11a[31:0]
  35. // 12 reserved_12a[31:0]
  36. // 13 reserved_13a[31:0]
  37. // 14 reserved_14a[31:0]
  38. // 15 reserved_15[19:0], ring_id[27:20], looping_count[31:28]
  39. //
  40. // ################ END SUMMARY #################
  41. #define NUM_OF_DWORDS_REO_DESTINATION_RING 16
  42. struct reo_destination_ring {
  43. struct buffer_addr_info buf_or_link_desc_addr_info;
  44. struct rx_mpdu_desc_info rx_mpdu_desc_info_details;
  45. struct rx_msdu_desc_info rx_msdu_desc_info_details;
  46. uint32_t rx_reo_queue_desc_addr_31_0 : 32; //[31:0]
  47. uint32_t rx_reo_queue_desc_addr_39_32 : 8, //[7:0]
  48. reo_dest_buffer_type : 1, //[8]
  49. reo_push_reason : 2, //[10:9]
  50. reo_error_code : 5, //[15:11]
  51. receive_queue_number : 16; //[31:16]
  52. uint32_t soft_reorder_info_valid : 1, //[0]
  53. reorder_opcode : 4, //[4:1]
  54. reorder_slot_index : 8, //[12:5]
  55. mpdu_fragment_number : 4, //[16:13]
  56. captured_msdu_data_size : 4, //[20:17]
  57. sw_exception : 1, //[21]
  58. reserved_8a : 10; //[31:22]
  59. uint32_t reo_destination_struct_signature: 32; //[31:0]
  60. uint32_t reserved_10a : 32; //[31:0]
  61. uint32_t reserved_11a : 32; //[31:0]
  62. uint32_t reserved_12a : 32; //[31:0]
  63. uint32_t reserved_13a : 32; //[31:0]
  64. uint32_t reserved_14a : 32; //[31:0]
  65. uint32_t reserved_15 : 20, //[19:0]
  66. ring_id : 8, //[27:20]
  67. looping_count : 4; //[31:28]
  68. };
  69. /*
  70. struct buffer_addr_info buf_or_link_desc_addr_info
  71. Consumer: REO/SW/FW
  72. Producer: RXDMA
  73. Details of the physical address of the a buffer or MSDU
  74. link descriptor
  75. struct rx_mpdu_desc_info rx_mpdu_desc_info_details
  76. Consumer: REO/SW/FW
  77. Producer: RXDMA
  78. General information related to the MPDU that is passed
  79. on from REO entrance ring to the REO destination ring
  80. struct rx_msdu_desc_info rx_msdu_desc_info_details
  81. General information related to the MSDU that is passed
  82. on from RXDMA all the way to to the REO destination ring.
  83. rx_reo_queue_desc_addr_31_0
  84. Consumer: REO
  85. Producer: RXDMA
  86. Address (lower 32 bits) of the REO queue descriptor.
  87. <legal all>
  88. rx_reo_queue_desc_addr_39_32
  89. Consumer: REO
  90. Producer: RXDMA
  91. Address (upper 8 bits) of the REO queue descriptor.
  92. <legal all>
  93. reo_dest_buffer_type
  94. Indicates the type of address provided in the
  95. 'Buf_or_link_desc_addr_info'
  96. <enum 0 MSDU_buf_address> The address of an MSDU buffer
  97. <enum 1 MSDU_link_desc_address> The address of the MSDU
  98. link descriptor.
  99. <legal all>
  100. reo_push_reason
  101. Indicates why REO pushed the frame to this exit ring
  102. <enum 0 reo_error_detected> Reo detected an error an
  103. pushed this frame to this queue
  104. <enum 1 reo_routing_instruction> Reo pushed the frame to
  105. this queue per received routing instructions. No error
  106. within REO was detected
  107. <legal 0 - 1>
  108. reo_error_code
  109. Field only valid when 'Reo_push_reason' set to
  110. 'reo_error_detected'.
  111. <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor
  112. provided in the REO_ENTRANCE ring is set to 0
  113. <enum 1 reo_queue_desc_not_valid> Reo queue descriptor
  114. valid bit is NOT set
  115. <enum 2 ampdu_in_non_ba> AMPDU frame received without BA
  116. session having been setup.
  117. <enum 3 non_ba_duplicate> Non-BA session, SN equal to
  118. SSN, Retry bit set: duplicate frame
  119. <enum 4 ba_duplicate> BA session, duplicate frame
  120. <enum 5 regular_frame_2k_jump> A normal (management/data
  121. frame) received with 2K jump in SN
  122. <enum 6 bar_frame_2k_jump> A bar received with 2K jump
  123. in SSN
  124. <enum 7 regular_frame_OOR> A normal (management/data
  125. frame) received with SN falling within the OOR window
  126. <enum 8 bar_frame_OOR> A bar received with SSN falling
  127. within the OOR window
  128. <enum 9 bar_frame_no_ba_session> A bar received without
  129. a BA session
  130. <enum 10 bar_frame_sn_equals_ssn> A bar received with
  131. SSN equal to SN
  132. <enum 11 pn_check_failed> PN Check Failed packet.
  133. <enum 12 2k_error_handling_flag_set> Frame is forwarded
  134. as a result of the 'Seq_2k_error_detected_flag' been set in
  135. the REO Queue descriptor
  136. <enum 13 pn_error_handling_flag_set> Frame is forwarded
  137. as a result of the 'pn_error_detected_flag' been set in the
  138. REO Queue descriptor
  139. <enum 14 queue_descriptor_blocked_set> Frame is
  140. forwarded as a result of the queue descriptor(address) being
  141. blocked as SW/FW seems to be currently in the process of
  142. making updates to this descriptor...
  143. <legal 0-14>
  144. receive_queue_number
  145. This field in NOT valid (should be set to 0), when
  146. SW_exception is set.
  147. This field indicates the REO MPDU reorder queue ID from
  148. which this frame originated. This field is populated from a
  149. field with the same name in the RX_REO_QUEUE descriptor.
  150. <legal all>
  151. soft_reorder_info_valid
  152. This field in NOT valid (should be set to 0), when
  153. SW_exception is set.
  154. When set, REO has been instructed to not perform the
  155. actual re-ordering of frames for this queue, but just to
  156. insert the reorder opcodes
  157. <legal all>
  158. reorder_opcode
  159. Field is valid when 'Soft_reorder_info_valid' is set.
  160. This field is always valid for debug purpose as well.
  161. Details are in the MLD.
  162. <enum 0 invalid>
  163. <enum 1 fwdcur_fwdbuf>
  164. <enum 2 fwdbuf_fwdcur>
  165. <enum 3 qcur>
  166. <enum 4 fwdbuf_qcur>
  167. <enum 5 fwdbuf_drop>
  168. <enum 6 fwdall_drop>
  169. <enum 7 fwdall_qcur>
  170. <enum 8 reserved_reo_opcode_1>
  171. <enum 9 dropcur> the error reason code is in
  172. reo_error_code field.
  173. <enum 10 reserved_reo_opcode_2>
  174. <enum 11 reserved_reo_opcode_3>
  175. <enum 12 reserved_reo_opcode_4>
  176. <enum 13 reserved_reo_opcode_5>
  177. <enum 14 reserved_reo_opcode_6>
  178. <enum 15 reserved_reo_opcode_7>
  179. <legal all>
  180. reorder_slot_index
  181. Field only valid when 'Soft_reorder_info_valid' is set.
  182. TODO: add description
  183. <legal all>
  184. mpdu_fragment_number
  185. Field only valid when Rx_mpdu_desc_info_details.
  186. Fragment_flag is set.
  187. The fragment number from the 802.11 header.
  188. Note that the sequence number is embedded in the field:
  189. Rx_mpdu_desc_info_details. Mpdu_sequence_number
  190. <legal all>
  191. captured_msdu_data_size
  192. The number of following REO_DESTINATION STRUCTs that
  193. have been replaced with msdu_data extracted from the
  194. msdu_buffer and copied into the ring for easy FW/SW access.
  195. Note that it is possible that these STRUCTs wrap around
  196. the end of the ring.
  197. Feature supported only in HastingsPrime
  198. <legal 0-4>
  199. sw_exception
  200. This field has the same setting as the SW_exception
  201. field in the corresponding REO_entrance_ring descriptor.
  202. When set, the REO entrance descriptor is generated by
  203. FW, and the MPDU was processed in the following way:
  204. - NO re-order function is needed.
  205. - MPDU delinking is determined by the setting of
  206. Entrance ring field: SW_excection_mpdu_delink
  207. - Destination ring selection is based on the setting of
  208. Feature supported only in HastingsPrime
  209. <legal all>
  210. reserved_8a
  211. <legal 0>
  212. reo_destination_struct_signature
  213. Set to value 0x8888_88888 when msdu capture mode is
  214. enabled for this ring (supported only in HastingsPrime)
  215. <legal 0, 2290649224 >
  216. reserved_10a
  217. <legal 0>
  218. reserved_11a
  219. <legal 0>
  220. reserved_12a
  221. <legal 0>
  222. reserved_13a
  223. <legal 0>
  224. reserved_14a
  225. <legal 0>
  226. reserved_15
  227. <legal 0>
  228. ring_id
  229. The buffer pointer ring ID.
  230. 0 refers to the IDLE ring
  231. 1 - N refers to other rings
  232. Helps with debugging when dumping ring contents.
  233. <legal all>
  234. looping_count
  235. A count value that indicates the number of times the
  236. producer of entries into this Ring has looped around the
  237. ring.
  238. At initialization time, this value is set to 0. On the
  239. first loop, this value is set to 1. After the max value is
  240. reached allowed by the number of bits for this field, the
  241. count value continues with 0 again.
  242. In case SW is the consumer of the ring entries, it can
  243. use this field to figure out up to where the producer of
  244. entries has created new entries. This eliminates the need to
  245. check where the head pointer' of the ring is located once
  246. the SW starts processing an interrupt indicating that new
  247. entries have been put into this ring...
  248. Also note that SW if it wants only needs to look at the
  249. LSB bit of this count value.
  250. <legal all>
  251. */
  252. /* EXTERNAL REFERENCE : struct buffer_addr_info buf_or_link_desc_addr_info */
  253. /* Description REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0
  254. Address (lower 32 bits) of the MSDU buffer OR
  255. MSDU_EXTENSION descriptor OR Link Descriptor
  256. In case of 'NULL' pointer, this field is set to 0
  257. <legal all>
  258. */
  259. #define REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
  260. #define REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  261. #define REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  262. /* Description REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32
  263. Address (upper 8 bits) of the MSDU buffer OR
  264. MSDU_EXTENSION descriptor OR Link Descriptor
  265. In case of 'NULL' pointer, this field is set to 0
  266. <legal all>
  267. */
  268. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
  269. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  270. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  271. /* Description REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER
  272. Consumer: WBM
  273. Producer: SW/FW
  274. In case of 'NULL' pointer, this field is set to 0
  275. Indicates to which buffer manager the buffer OR
  276. MSDU_EXTENSION descriptor OR link descriptor that is being
  277. pointed to shall be returned after the frame has been
  278. processed. It is used by WBM for routing purposes.
  279. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  280. to the WMB buffer idle list
  281. <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
  282. returned to the WMB idle link descriptor idle list
  283. <enum 2 FW_BM> This buffer shall be returned to the FW
  284. <enum 3 SW0_BM> This buffer shall be returned to the SW,
  285. ring 0
  286. <enum 4 SW1_BM> This buffer shall be returned to the SW,
  287. ring 1
  288. <enum 5 SW2_BM> This buffer shall be returned to the SW,
  289. ring 2
  290. <enum 6 SW3_BM> This buffer shall be returned to the SW,
  291. ring 3
  292. <enum 7 SW4_BM> This buffer shall be returned to the SW,
  293. ring 4
  294. <legal all>
  295. */
  296. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
  297. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  298. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700
  299. /* Description REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE
  300. Cookie field exclusively used by SW.
  301. In case of 'NULL' pointer, this field is set to 0
  302. HW ignores the contents, accept that it passes the
  303. programmed value on to other descriptors together with the
  304. physical address
  305. Field can be used by SW to for example associate the
  306. buffers physical address with the virtual address
  307. The bit definitions as used by SW are within SW HLD
  308. specification
  309. NOTE1:
  310. The three most significant bits can have a special
  311. meaning in case this struct is embedded in a TX_MPDU_DETAILS
  312. STRUCT, and field transmit_bw_restriction is set
  313. In case of NON punctured transmission:
  314. Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
  315. Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
  316. Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
  317. Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
  318. In case of punctured transmission:
  319. Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
  320. Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
  321. Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
  322. Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
  323. Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
  324. Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
  325. Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
  326. Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
  327. Note: a punctured transmission is indicated by the
  328. presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
  329. TLV
  330. NOTE 2:The five most significant bits can have a special
  331. meaning in case this struct is embedded in an
  332. RX_MSDU_DETAILS STRUCT, and Maple/Spruce Rx DMA is
  333. configured for passing on the additional info
  334. from 'RX_MPDU_INFO' structure in 'RX_MPDU_START' TLV
  335. (FR56821). This is not supported in HastingsPrime, Pine or
  336. Moselle.
  337. Sw_buffer_cookie[20:17]: Tid: The TID field in the QoS
  338. control field
  339. Sw_buffer_cookie[16]: Mpdu_qos_control_valid: This field
  340. indicates MPDUs with a QoS control field.
  341. <legal all>
  342. */
  343. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
  344. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11
  345. #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800
  346. /* EXTERNAL REFERENCE : struct rx_mpdu_desc_info rx_mpdu_desc_info_details */
  347. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT
  348. Consumer: REO/SW/FW
  349. Producer: RXDMA
  350. The number of MSDUs within the MPDU
  351. <legal all>
  352. */
  353. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x00000008
  354. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0
  355. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff
  356. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER
  357. Consumer: REO/SW/FW
  358. Producer: RXDMA
  359. The field can have two different meanings based on the
  360. setting of field 'BAR_frame':
  361. 'BAR_frame' is NOT set:
  362. The MPDU sequence number of the received frame.
  363. 'BAR_frame' is set.
  364. The MPDU Start sequence number from the BAR frame
  365. <legal all>
  366. */
  367. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_OFFSET 0x00000008
  368. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_LSB 8
  369. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_MASK 0x000fff00
  370. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG
  371. Consumer: REO/SW/FW
  372. Producer: RXDMA
  373. When set, this MPDU is a fragment and REO should forward
  374. this fragment MPDU to the REO destination ring without any
  375. reorder checks, pn checks or bitmap update. This implies
  376. that REO is forwarding the pointer to the MSDU link
  377. descriptor. The destination ring is coming from a
  378. programmable register setting in REO
  379. <legal all>
  380. */
  381. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x00000008
  382. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 20
  383. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00100000
  384. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT
  385. Consumer: REO/SW/FW
  386. Producer: RXDMA
  387. The retry bit setting from the MPDU header of the
  388. received frame
  389. <legal all>
  390. */
  391. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x00000008
  392. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 21
  393. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00200000
  394. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG
  395. Consumer: REO/SW/FW
  396. Producer: RXDMA
  397. When set, the MPDU was received as part of an A-MPDU.
  398. <legal all>
  399. */
  400. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x00000008
  401. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 22
  402. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00400000
  403. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME
  404. Consumer: REO/SW/FW
  405. Producer: RXDMA
  406. When set, the received frame is a BAR frame. After
  407. processing, this frame shall be pushed to SW or deleted.
  408. <legal all>
  409. */
  410. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x00000008
  411. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 23
  412. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00800000
  413. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO
  414. Consumer: REO/SW/FW
  415. Producer: RXDMA
  416. Copied here by RXDMA from RX_MPDU_END
  417. When not set, REO will Not perform a PN sequence number
  418. check
  419. */
  420. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000008
  421. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 24
  422. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x01000000
  423. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID
  424. When set, OLE found a valid SA entry for all MSDUs in
  425. this MPDU
  426. <legal all>
  427. */
  428. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000008
  429. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB 25
  430. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x02000000
  431. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT
  432. When set, at least 1 MSDU within the MPDU has an
  433. unsuccessful MAC source address search due to the expiration
  434. of the search timer.
  435. <legal all>
  436. */
  437. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_OFFSET 0x00000008
  438. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_LSB 26
  439. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_MASK 0x04000000
  440. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID
  441. When set, OLE found a valid DA entry for all MSDUs in
  442. this MPDU
  443. <legal all>
  444. */
  445. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000008
  446. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB 27
  447. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x08000000
  448. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC
  449. Field Only valid if da_is_valid is set
  450. When set, at least one of the DA addresses is a
  451. Multicast or Broadcast address.
  452. <legal all>
  453. */
  454. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000008
  455. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB 28
  456. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK 0x10000000
  457. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT
  458. When set, at least 1 MSDU within the MPDU has an
  459. unsuccessful MAC destination address search due to the
  460. expiration of the search timer.
  461. <legal all>
  462. */
  463. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_OFFSET 0x00000008
  464. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_LSB 29
  465. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_MASK 0x20000000
  466. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU
  467. Field only valid when first_msdu_in_mpdu_flag is set.
  468. When set, the contents in the MSDU buffer contains a
  469. 'RAW' MPDU. This 'RAW' MPDU might be spread out over
  470. multiple MSDU buffers.
  471. <legal all>
  472. */
  473. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000008
  474. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 30
  475. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x40000000
  476. /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG
  477. The More Fragment bit setting from the MPDU header of
  478. the received frame
  479. <legal all>
  480. */
  481. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x00000008
  482. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 31
  483. #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x80000000
  484. /* Description REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA
  485. Meta data that SW has programmed in the Peer table entry
  486. of the transmitting STA.
  487. <legal all>
  488. */
  489. #define REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x0000000c
  490. #define REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0
  491. #define REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff
  492. /* EXTERNAL REFERENCE : struct rx_msdu_desc_info rx_msdu_desc_info_details */
  493. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG
  494. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  495. over multiple buffers, this field will be valid in the Last
  496. buffer used by the MSDU
  497. <enum 0 Not_first_msdu> This is not the first MSDU in
  498. the MPDU.
  499. <enum 1 first_msdu> This MSDU is the first one in the
  500. MPDU.
  501. <legal all>
  502. */
  503. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000010
  504. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_LSB 0
  505. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_MASK 0x00000001
  506. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG
  507. Consumer: WBM/REO/SW/FW
  508. Producer: RXDMA
  509. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  510. over multiple buffers, this field will be valid in the Last
  511. buffer used by the MSDU
  512. <enum 0 Not_last_msdu> There are more MSDUs linked to
  513. this MSDU that belongs to this MPDU
  514. <enum 1 Last_msdu> this MSDU is the last one in the
  515. MPDU. This setting is only allowed in combination with
  516. 'Msdu_continuation' set to 0. This implies that when an msdu
  517. is spread out over multiple buffers and thus
  518. msdu_continuation is set, only for the very last buffer of
  519. the msdu, can the 'last_msdu_in_mpdu_flag' be set.
  520. When both first_msdu_in_mpdu_flag and
  521. last_msdu_in_mpdu_flag are set, the MPDU that this MSDU
  522. belongs to only contains a single MSDU.
  523. <legal all>
  524. */
  525. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000010
  526. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_LSB 1
  527. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_MASK 0x00000002
  528. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION
  529. When set, this MSDU buffer was not able to hold the
  530. entire MSDU. The next buffer will therefor contain
  531. additional information related to this MSDU.
  532. <legal all>
  533. */
  534. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_OFFSET 0x00000010
  535. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_LSB 2
  536. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_MASK 0x00000004
  537. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH
  538. Parsed from RX_MSDU_START TLV . In the case MSDU spans
  539. over multiple buffers, this field will be valid in the First
  540. buffer used by MSDU.
  541. Full MSDU length in bytes after decapsulation.
  542. This field is still valid for MPDU frames without
  543. A-MSDU. It still represents MSDU length after decapsulation
  544. Or in case of RAW MPDUs, it indicates the length of the
  545. entire MPDU (without FCS field)
  546. <legal all>
  547. */
  548. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_OFFSET 0x00000010
  549. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_LSB 3
  550. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_MASK 0x0001fff8
  551. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION
  552. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  553. over multiple buffers, this field will be valid in the Last
  554. buffer used by the MSDU
  555. The ID of the REO exit ring where the MSDU frame shall
  556. push after (MPDU level) reordering has finished.
  557. <enum 0 reo_destination_tcl> Reo will push the frame
  558. into the REO2TCL ring
  559. <enum 1 reo_destination_sw1> Reo will push the frame
  560. into the REO2SW1 ring
  561. <enum 2 reo_destination_sw2> Reo will push the frame
  562. into the REO2SW2 ring
  563. <enum 3 reo_destination_sw3> Reo will push the frame
  564. into the REO2SW3 ring
  565. <enum 4 reo_destination_sw4> Reo will push the frame
  566. into the REO2SW4 ring
  567. <enum 5 reo_destination_release> Reo will push the frame
  568. into the REO_release ring
  569. <enum 6 reo_destination_fw> Reo will push the frame into
  570. the REO2FW ring
  571. <enum 7 reo_destination_sw5> Reo will push the frame
  572. into the REO2SW5 ring (REO remaps this in chips without
  573. REO2SW5 ring, e.g. Pine)
  574. <enum 8 reo_destination_sw6> Reo will push the frame
  575. into the REO2SW6 ring (REO remaps this in chips without
  576. REO2SW6 ring, e.g. Pine)
  577. <enum 9 reo_destination_9> REO remaps this <enum 10
  578. reo_destination_10> REO remaps this
  579. <enum 11 reo_destination_11> REO remaps this
  580. <enum 12 reo_destination_12> REO remaps this <enum 13
  581. reo_destination_13> REO remaps this
  582. <enum 14 reo_destination_14> REO remaps this
  583. <enum 15 reo_destination_15> REO remaps this
  584. <enum 16 reo_destination_16> REO remaps this
  585. <enum 17 reo_destination_17> REO remaps this
  586. <enum 18 reo_destination_18> REO remaps this
  587. <enum 19 reo_destination_19> REO remaps this
  588. <enum 20 reo_destination_20> REO remaps this
  589. <enum 21 reo_destination_21> REO remaps this
  590. <enum 22 reo_destination_22> REO remaps this
  591. <enum 23 reo_destination_23> REO remaps this
  592. <enum 24 reo_destination_24> REO remaps this
  593. <enum 25 reo_destination_25> REO remaps this
  594. <enum 26 reo_destination_26> REO remaps this
  595. <enum 27 reo_destination_27> REO remaps this
  596. <enum 28 reo_destination_28> REO remaps this
  597. <enum 29 reo_destination_29> REO remaps this
  598. <enum 30 reo_destination_30> REO remaps this
  599. <enum 31 reo_destination_31> REO remaps this
  600. <legal all>
  601. */
  602. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_OFFSET 0x00000010
  603. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_LSB 17
  604. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_MASK 0x003e0000
  605. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP
  606. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  607. over multiple buffers, this field will be valid in the Last
  608. buffer used by the MSDU
  609. When set, REO shall drop this MSDU and not forward it to
  610. any other ring...
  611. <legal all>
  612. */
  613. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_OFFSET 0x00000010
  614. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_LSB 22
  615. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_MASK 0x00400000
  616. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID
  617. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  618. over multiple buffers, this field will be valid in the Last
  619. buffer used by the MSDU
  620. Indicates that OLE found a valid SA entry for this MSDU
  621. <legal all>
  622. */
  623. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000010
  624. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB 23
  625. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x00800000
  626. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT
  627. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  628. over multiple buffers, this field will be valid in the Last
  629. buffer used by the MSDU
  630. Indicates an unsuccessful MAC source address search due
  631. to the expiring of the search timer for this MSDU
  632. <legal all>
  633. */
  634. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_OFFSET 0x00000010
  635. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_LSB 24
  636. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_MASK 0x01000000
  637. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID
  638. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  639. over multiple buffers, this field will be valid in the Last
  640. buffer used by the MSDU
  641. Indicates that OLE found a valid DA entry for this MSDU
  642. <legal all>
  643. */
  644. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000010
  645. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB 25
  646. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x02000000
  647. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC
  648. Field Only valid if da_is_valid is set
  649. Indicates the DA address was a Multicast of Broadcast
  650. address for this MSDU
  651. <legal all>
  652. */
  653. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000010
  654. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB 26
  655. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK 0x04000000
  656. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT
  657. Parsed from RX_MSDU_END TLV . In the case MSDU spans
  658. over multiple buffers, this field will be valid in the Last
  659. buffer used by the MSDU
  660. Indicates an unsuccessful MAC destination address search
  661. due to the expiring of the search timer for this MSDU
  662. <legal all>
  663. */
  664. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_OFFSET 0x00000010
  665. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_LSB 27
  666. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_MASK 0x08000000
  667. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB
  668. Passed on from 'RX_MSDU_END' TLV (only the MSB is
  669. reported as the LSB is always zero)
  670. Number of bytes padded to make sure that the L3 header
  671. will always start of a Dword boundary
  672. <legal all>
  673. */
  674. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_OFFSET 0x00000010
  675. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_LSB 28
  676. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_L3_HEADER_PADDING_MSB_MASK 0x10000000
  677. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL
  678. Passed on from 'RX_ATTENTION' TLV
  679. Indicates that the computed checksum did not match the
  680. checksum in the TCP/UDP header.
  681. <legal all>
  682. */
  683. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_OFFSET 0x00000010
  684. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_LSB 29
  685. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_TCP_UDP_CHKSUM_FAIL_MASK 0x20000000
  686. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL
  687. Passed on from 'RX_ATTENTION' TLV
  688. Indicates that the computed checksum did not match the
  689. checksum in the IP header.
  690. <legal all>
  691. */
  692. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_OFFSET 0x00000010
  693. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_LSB 30
  694. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_IP_CHKSUM_FAIL_MASK 0x40000000
  695. /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RAW_MPDU
  696. Passed on from 'RX_MPDU_INFO' structure in
  697. 'RX_MPDU_START' TLV
  698. Set to 1 by RXOLE when it has not performed any 802.11
  699. to Ethernet/Natvie WiFi header conversion on this MPDU.
  700. <legal all>
  701. */
  702. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000010
  703. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 31
  704. #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x80000000
  705. /* Description REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_OR_SW_PEER_ID_14_0
  706. Passed on from 'RX_MSDU_END' TLV (one MSB is omitted)
  707. Based on a register configuration in RXDMA, this field
  708. will contain:
  709. The offset in the address search table which matches the
  710. MAC source address
  711. OR
  712. 'sw_peer_id' from the address search entry corresponding
  713. to the source address of the MSDU
  714. <legal all>
  715. */
  716. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_OR_SW_PEER_ID_14_0_OFFSET 0x00000014
  717. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_OR_SW_PEER_ID_14_0_LSB 0
  718. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_OR_SW_PEER_ID_14_0_MASK 0x00007fff
  719. /* Description REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_MPDU_AST_IDX_OR_SW_PEER_ID_14_0
  720. Passed on from 'RX_MPDU_INFO' structure in
  721. 'RX_MPDU_START' TLV (one MSB is omitted)
  722. Based on a register configuration in RXDMA, this field
  723. will contain:
  724. The index of the address search entry corresponding to
  725. this MPDU (a value of 0xFFFF indicates an invalid AST index,
  726. meaning that no AST entry was found or no AST search was
  727. performed)
  728. OR:
  729. 'sw_peer_id' from the address search entry corresponding
  730. to this MPDU (in case of ndp or phy_err or
  731. AST_based_lookup_valid == 0, this field will be set to 0)
  732. <legal all>
  733. */
  734. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_MPDU_AST_IDX_OR_SW_PEER_ID_14_0_OFFSET 0x00000014
  735. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_MPDU_AST_IDX_OR_SW_PEER_ID_14_0_LSB 15
  736. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_MPDU_AST_IDX_OR_SW_PEER_ID_14_0_MASK 0x3fff8000
  737. /* Description REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_FR_DS
  738. Passed on from 'RX_MPDU_INFO' structure in
  739. 'RX_MPDU_START' TLV
  740. Set if the 'from DS' bit is set in the frame control.
  741. <legal all>
  742. */
  743. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_FR_DS_OFFSET 0x00000014
  744. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_FR_DS_LSB 30
  745. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_FR_DS_MASK 0x40000000
  746. /* Description REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_TO_DS
  747. Passed on from 'RX_MPDU_INFO' structure in
  748. 'RX_MPDU_START' TLV
  749. Set if the 'to DS' bit is set in the frame control.
  750. <legal all>
  751. */
  752. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_TO_DS_OFFSET 0x00000014
  753. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_TO_DS_LSB 31
  754. #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_TO_DS_MASK 0x80000000
  755. /* Description REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0
  756. Consumer: REO
  757. Producer: RXDMA
  758. Address (lower 32 bits) of the REO queue descriptor.
  759. <legal all>
  760. */
  761. #define REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0_OFFSET 0x00000018
  762. #define REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0_LSB 0
  763. #define REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0_MASK 0xffffffff
  764. /* Description REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32
  765. Consumer: REO
  766. Producer: RXDMA
  767. Address (upper 8 bits) of the REO queue descriptor.
  768. <legal all>
  769. */
  770. #define REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32_OFFSET 0x0000001c
  771. #define REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32_LSB 0
  772. #define REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32_MASK 0x000000ff
  773. /* Description REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE
  774. Indicates the type of address provided in the
  775. 'Buf_or_link_desc_addr_info'
  776. <enum 0 MSDU_buf_address> The address of an MSDU buffer
  777. <enum 1 MSDU_link_desc_address> The address of the MSDU
  778. link descriptor.
  779. <legal all>
  780. */
  781. #define REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE_OFFSET 0x0000001c
  782. #define REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE_LSB 8
  783. #define REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE_MASK 0x00000100
  784. /* Description REO_DESTINATION_RING_7_REO_PUSH_REASON
  785. Indicates why REO pushed the frame to this exit ring
  786. <enum 0 reo_error_detected> Reo detected an error an
  787. pushed this frame to this queue
  788. <enum 1 reo_routing_instruction> Reo pushed the frame to
  789. this queue per received routing instructions. No error
  790. within REO was detected
  791. <legal 0 - 1>
  792. */
  793. #define REO_DESTINATION_RING_7_REO_PUSH_REASON_OFFSET 0x0000001c
  794. #define REO_DESTINATION_RING_7_REO_PUSH_REASON_LSB 9
  795. #define REO_DESTINATION_RING_7_REO_PUSH_REASON_MASK 0x00000600
  796. /* Description REO_DESTINATION_RING_7_REO_ERROR_CODE
  797. Field only valid when 'Reo_push_reason' set to
  798. 'reo_error_detected'.
  799. <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor
  800. provided in the REO_ENTRANCE ring is set to 0
  801. <enum 1 reo_queue_desc_not_valid> Reo queue descriptor
  802. valid bit is NOT set
  803. <enum 2 ampdu_in_non_ba> AMPDU frame received without BA
  804. session having been setup.
  805. <enum 3 non_ba_duplicate> Non-BA session, SN equal to
  806. SSN, Retry bit set: duplicate frame
  807. <enum 4 ba_duplicate> BA session, duplicate frame
  808. <enum 5 regular_frame_2k_jump> A normal (management/data
  809. frame) received with 2K jump in SN
  810. <enum 6 bar_frame_2k_jump> A bar received with 2K jump
  811. in SSN
  812. <enum 7 regular_frame_OOR> A normal (management/data
  813. frame) received with SN falling within the OOR window
  814. <enum 8 bar_frame_OOR> A bar received with SSN falling
  815. within the OOR window
  816. <enum 9 bar_frame_no_ba_session> A bar received without
  817. a BA session
  818. <enum 10 bar_frame_sn_equals_ssn> A bar received with
  819. SSN equal to SN
  820. <enum 11 pn_check_failed> PN Check Failed packet.
  821. <enum 12 2k_error_handling_flag_set> Frame is forwarded
  822. as a result of the 'Seq_2k_error_detected_flag' been set in
  823. the REO Queue descriptor
  824. <enum 13 pn_error_handling_flag_set> Frame is forwarded
  825. as a result of the 'pn_error_detected_flag' been set in the
  826. REO Queue descriptor
  827. <enum 14 queue_descriptor_blocked_set> Frame is
  828. forwarded as a result of the queue descriptor(address) being
  829. blocked as SW/FW seems to be currently in the process of
  830. making updates to this descriptor...
  831. <legal 0-14>
  832. */
  833. #define REO_DESTINATION_RING_7_REO_ERROR_CODE_OFFSET 0x0000001c
  834. #define REO_DESTINATION_RING_7_REO_ERROR_CODE_LSB 11
  835. #define REO_DESTINATION_RING_7_REO_ERROR_CODE_MASK 0x0000f800
  836. /* Description REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER
  837. This field in NOT valid (should be set to 0), when
  838. SW_exception is set.
  839. This field indicates the REO MPDU reorder queue ID from
  840. which this frame originated. This field is populated from a
  841. field with the same name in the RX_REO_QUEUE descriptor.
  842. <legal all>
  843. */
  844. #define REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER_OFFSET 0x0000001c
  845. #define REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER_LSB 16
  846. #define REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER_MASK 0xffff0000
  847. /* Description REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID
  848. This field in NOT valid (should be set to 0), when
  849. SW_exception is set.
  850. When set, REO has been instructed to not perform the
  851. actual re-ordering of frames for this queue, but just to
  852. insert the reorder opcodes
  853. <legal all>
  854. */
  855. #define REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID_OFFSET 0x00000020
  856. #define REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID_LSB 0
  857. #define REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID_MASK 0x00000001
  858. /* Description REO_DESTINATION_RING_8_REORDER_OPCODE
  859. Field is valid when 'Soft_reorder_info_valid' is set.
  860. This field is always valid for debug purpose as well.
  861. Details are in the MLD.
  862. <enum 0 invalid>
  863. <enum 1 fwdcur_fwdbuf>
  864. <enum 2 fwdbuf_fwdcur>
  865. <enum 3 qcur>
  866. <enum 4 fwdbuf_qcur>
  867. <enum 5 fwdbuf_drop>
  868. <enum 6 fwdall_drop>
  869. <enum 7 fwdall_qcur>
  870. <enum 8 reserved_reo_opcode_1>
  871. <enum 9 dropcur> the error reason code is in
  872. reo_error_code field.
  873. <enum 10 reserved_reo_opcode_2>
  874. <enum 11 reserved_reo_opcode_3>
  875. <enum 12 reserved_reo_opcode_4>
  876. <enum 13 reserved_reo_opcode_5>
  877. <enum 14 reserved_reo_opcode_6>
  878. <enum 15 reserved_reo_opcode_7>
  879. <legal all>
  880. */
  881. #define REO_DESTINATION_RING_8_REORDER_OPCODE_OFFSET 0x00000020
  882. #define REO_DESTINATION_RING_8_REORDER_OPCODE_LSB 1
  883. #define REO_DESTINATION_RING_8_REORDER_OPCODE_MASK 0x0000001e
  884. /* Description REO_DESTINATION_RING_8_REORDER_SLOT_INDEX
  885. Field only valid when 'Soft_reorder_info_valid' is set.
  886. TODO: add description
  887. <legal all>
  888. */
  889. #define REO_DESTINATION_RING_8_REORDER_SLOT_INDEX_OFFSET 0x00000020
  890. #define REO_DESTINATION_RING_8_REORDER_SLOT_INDEX_LSB 5
  891. #define REO_DESTINATION_RING_8_REORDER_SLOT_INDEX_MASK 0x00001fe0
  892. /* Description REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER
  893. Field only valid when Rx_mpdu_desc_info_details.
  894. Fragment_flag is set.
  895. The fragment number from the 802.11 header.
  896. Note that the sequence number is embedded in the field:
  897. Rx_mpdu_desc_info_details. Mpdu_sequence_number
  898. <legal all>
  899. */
  900. #define REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER_OFFSET 0x00000020
  901. #define REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER_LSB 13
  902. #define REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER_MASK 0x0001e000
  903. /* Description REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE
  904. The number of following REO_DESTINATION STRUCTs that
  905. have been replaced with msdu_data extracted from the
  906. msdu_buffer and copied into the ring for easy FW/SW access.
  907. Note that it is possible that these STRUCTs wrap around
  908. the end of the ring.
  909. Feature supported only in HastingsPrime
  910. <legal 0-4>
  911. */
  912. #define REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE_OFFSET 0x00000020
  913. #define REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE_LSB 17
  914. #define REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE_MASK 0x001e0000
  915. /* Description REO_DESTINATION_RING_8_SW_EXCEPTION
  916. This field has the same setting as the SW_exception
  917. field in the corresponding REO_entrance_ring descriptor.
  918. When set, the REO entrance descriptor is generated by
  919. FW, and the MPDU was processed in the following way:
  920. - NO re-order function is needed.
  921. - MPDU delinking is determined by the setting of
  922. Entrance ring field: SW_excection_mpdu_delink
  923. - Destination ring selection is based on the setting of
  924. Feature supported only in HastingsPrime
  925. <legal all>
  926. */
  927. #define REO_DESTINATION_RING_8_SW_EXCEPTION_OFFSET 0x00000020
  928. #define REO_DESTINATION_RING_8_SW_EXCEPTION_LSB 21
  929. #define REO_DESTINATION_RING_8_SW_EXCEPTION_MASK 0x00200000
  930. /* Description REO_DESTINATION_RING_8_RESERVED_8A
  931. <legal 0>
  932. */
  933. #define REO_DESTINATION_RING_8_RESERVED_8A_OFFSET 0x00000020
  934. #define REO_DESTINATION_RING_8_RESERVED_8A_LSB 22
  935. #define REO_DESTINATION_RING_8_RESERVED_8A_MASK 0xffc00000
  936. /* Description REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE
  937. Set to value 0x8888_88888 when msdu capture mode is
  938. enabled for this ring (supported only in HastingsPrime)
  939. <legal 0, 2290649224 >
  940. */
  941. #define REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE_OFFSET 0x00000024
  942. #define REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE_LSB 0
  943. #define REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE_MASK 0xffffffff
  944. /* Description REO_DESTINATION_RING_10_RESERVED_10A
  945. <legal 0>
  946. */
  947. #define REO_DESTINATION_RING_10_RESERVED_10A_OFFSET 0x00000028
  948. #define REO_DESTINATION_RING_10_RESERVED_10A_LSB 0
  949. #define REO_DESTINATION_RING_10_RESERVED_10A_MASK 0xffffffff
  950. /* Description REO_DESTINATION_RING_11_RESERVED_11A
  951. <legal 0>
  952. */
  953. #define REO_DESTINATION_RING_11_RESERVED_11A_OFFSET 0x0000002c
  954. #define REO_DESTINATION_RING_11_RESERVED_11A_LSB 0
  955. #define REO_DESTINATION_RING_11_RESERVED_11A_MASK 0xffffffff
  956. /* Description REO_DESTINATION_RING_12_RESERVED_12A
  957. <legal 0>
  958. */
  959. #define REO_DESTINATION_RING_12_RESERVED_12A_OFFSET 0x00000030
  960. #define REO_DESTINATION_RING_12_RESERVED_12A_LSB 0
  961. #define REO_DESTINATION_RING_12_RESERVED_12A_MASK 0xffffffff
  962. /* Description REO_DESTINATION_RING_13_RESERVED_13A
  963. <legal 0>
  964. */
  965. #define REO_DESTINATION_RING_13_RESERVED_13A_OFFSET 0x00000034
  966. #define REO_DESTINATION_RING_13_RESERVED_13A_LSB 0
  967. #define REO_DESTINATION_RING_13_RESERVED_13A_MASK 0xffffffff
  968. /* Description REO_DESTINATION_RING_14_RESERVED_14A
  969. <legal 0>
  970. */
  971. #define REO_DESTINATION_RING_14_RESERVED_14A_OFFSET 0x00000038
  972. #define REO_DESTINATION_RING_14_RESERVED_14A_LSB 0
  973. #define REO_DESTINATION_RING_14_RESERVED_14A_MASK 0xffffffff
  974. /* Description REO_DESTINATION_RING_15_RESERVED_15
  975. <legal 0>
  976. */
  977. #define REO_DESTINATION_RING_15_RESERVED_15_OFFSET 0x0000003c
  978. #define REO_DESTINATION_RING_15_RESERVED_15_LSB 0
  979. #define REO_DESTINATION_RING_15_RESERVED_15_MASK 0x000fffff
  980. /* Description REO_DESTINATION_RING_15_RING_ID
  981. The buffer pointer ring ID.
  982. 0 refers to the IDLE ring
  983. 1 - N refers to other rings
  984. Helps with debugging when dumping ring contents.
  985. <legal all>
  986. */
  987. #define REO_DESTINATION_RING_15_RING_ID_OFFSET 0x0000003c
  988. #define REO_DESTINATION_RING_15_RING_ID_LSB 20
  989. #define REO_DESTINATION_RING_15_RING_ID_MASK 0x0ff00000
  990. /* Description REO_DESTINATION_RING_15_LOOPING_COUNT
  991. A count value that indicates the number of times the
  992. producer of entries into this Ring has looped around the
  993. ring.
  994. At initialization time, this value is set to 0. On the
  995. first loop, this value is set to 1. After the max value is
  996. reached allowed by the number of bits for this field, the
  997. count value continues with 0 again.
  998. In case SW is the consumer of the ring entries, it can
  999. use this field to figure out up to where the producer of
  1000. entries has created new entries. This eliminates the need to
  1001. check where the head pointer' of the ring is located once
  1002. the SW starts processing an interrupt indicating that new
  1003. entries have been put into this ring...
  1004. Also note that SW if it wants only needs to look at the
  1005. LSB bit of this count value.
  1006. <legal all>
  1007. */
  1008. #define REO_DESTINATION_RING_15_LOOPING_COUNT_OFFSET 0x0000003c
  1009. #define REO_DESTINATION_RING_15_LOOPING_COUNT_LSB 28
  1010. #define REO_DESTINATION_RING_15_LOOPING_COUNT_MASK 0xf0000000
  1011. #endif // _REO_DESTINATION_RING_H_