reo_destination_ring.h 46 KB

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