reo_entrance_ring.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787
  1. /*
  2. * Copyright (c) 2018 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. #ifndef _REO_ENTRANCE_RING_H_
  19. #define _REO_ENTRANCE_RING_H_
  20. #if !defined(__ASSEMBLER__)
  21. #endif
  22. #include "rx_mpdu_details.h"
  23. // ################ START SUMMARY #################
  24. //
  25. // Dword Fields
  26. // 0-3 struct rx_mpdu_details reo_level_mpdu_frame_info;
  27. // 4 rx_reo_queue_desc_addr_31_0[31:0]
  28. // 5 rx_reo_queue_desc_addr_39_32[7:0], rounded_mpdu_byte_count[21:8], reo_destination_indication[26:22], frameless_bar[27], reserved_5a[31:28]
  29. // 6 rxdma_push_reason[1:0], rxdma_error_code[6:2], mpdu_fragment_number[10:7], reserved_6a[31:11]
  30. // 7 reserved_7a[19:0], ring_id[27:20], looping_count[31:28]
  31. //
  32. // ################ END SUMMARY #################
  33. #define NUM_OF_DWORDS_REO_ENTRANCE_RING 8
  34. struct reo_entrance_ring {
  35. struct rx_mpdu_details reo_level_mpdu_frame_info;
  36. uint32_t rx_reo_queue_desc_addr_31_0 : 32; //[31:0]
  37. uint32_t rx_reo_queue_desc_addr_39_32 : 8, //[7:0]
  38. rounded_mpdu_byte_count : 14, //[21:8]
  39. reo_destination_indication : 5, //[26:22]
  40. frameless_bar : 1, //[27]
  41. reserved_5a : 4; //[31:28]
  42. uint32_t rxdma_push_reason : 2, //[1:0]
  43. rxdma_error_code : 5, //[6:2]
  44. mpdu_fragment_number : 4, //[10:7]
  45. reserved_6a : 21; //[31:11]
  46. uint32_t reserved_7a : 20, //[19:0]
  47. ring_id : 8, //[27:20]
  48. looping_count : 4; //[31:28]
  49. };
  50. /*
  51. struct rx_mpdu_details reo_level_mpdu_frame_info
  52. Consumer: REO
  53. Producer: RXDMA
  54. Details related to the MPDU being pushed into the REO
  55. rx_reo_queue_desc_addr_31_0
  56. Consumer: REO
  57. Producer: RXDMA
  58. Address (lower 32 bits) of the REO queue descriptor.
  59. <legal all>
  60. rx_reo_queue_desc_addr_39_32
  61. Consumer: REO
  62. Producer: RXDMA
  63. Address (upper 8 bits) of the REO queue descriptor.
  64. <legal all>
  65. rounded_mpdu_byte_count
  66. An approximation of the number of bytes received in this
  67. MPDU.
  68. Used to keeps stats on the amount of data flowing
  69. through a queue.
  70. <legal all>
  71. reo_destination_indication
  72. RXDMA copy the MPDU's first MSDU's destination
  73. indication field here. This is used for REO to be able to
  74. re-route the packet to a different SW destination ring if
  75. the packet is detected as error in REO.
  76. The ID of the REO exit ring where the MSDU frame shall
  77. push after (MPDU level) reordering has finished.
  78. <enum 0 reo_destination_tcl> Reo will push the frame
  79. into the REO2TCL ring
  80. <enum 1 reo_destination_sw1> Reo will push the frame
  81. into the REO2SW1 ring
  82. <enum 2 reo_destination_sw2> Reo will push the frame
  83. into the REO2SW1 ring
  84. <enum 3 reo_destination_sw3> Reo will push the frame
  85. into the REO2SW1 ring
  86. <enum 4 reo_destination_sw4> Reo will push the frame
  87. into the REO2SW1 ring
  88. <enum 5 reo_destination_release> Reo will push the frame
  89. into the REO_release ring
  90. <enum 6 reo_destination_fw> Reo will push the frame into
  91. the REO2FW ring
  92. <enum 7 reo_destination_7> REO remaps this
  93. <enum 8 reo_destination_8> REO remaps this <enum 9
  94. reo_destination_9> REO remaps this <enum 10
  95. reo_destination_10> REO remaps this
  96. <enum 11 reo_destination_11> REO remaps this
  97. <enum 12 reo_destination_12> REO remaps this <enum 13
  98. reo_destination_13> REO remaps this
  99. <enum 14 reo_destination_14> REO remaps this
  100. <enum 15 reo_destination_15> REO remaps this
  101. <enum 16 reo_destination_16> REO remaps this
  102. <enum 17 reo_destination_17> REO remaps this
  103. <enum 18 reo_destination_18> REO remaps this
  104. <enum 19 reo_destination_19> REO remaps this
  105. <enum 20 reo_destination_20> REO remaps this
  106. <enum 21 reo_destination_21> REO remaps this
  107. <enum 22 reo_destination_22> REO remaps this
  108. <enum 23 reo_destination_23> REO remaps this
  109. <enum 24 reo_destination_24> REO remaps this
  110. <enum 25 reo_destination_25> REO remaps this
  111. <enum 26 reo_destination_26> REO remaps this
  112. <enum 27 reo_destination_27> REO remaps this
  113. <enum 28 reo_destination_28> REO remaps this
  114. <enum 29 reo_destination_29> REO remaps this
  115. <enum 30 reo_destination_30> REO remaps this
  116. <enum 31 reo_destination_31> REO remaps this
  117. <legal all>
  118. frameless_bar
  119. When set, this REO entrance ring struct contains BAR
  120. info from a multi TID BAR frame. The original multi TID BAR
  121. frame itself contained all the REO info for the first TID,
  122. but all the subsequent TID info and their linkage to the REO
  123. descriptors is passed down as 'frameless' BAR info.
  124. The only fields valid in this descriptor when this bit
  125. is set are:
  126. Rx_reo_queue_desc_addr_31_0
  127. RX_reo_queue_desc_addr_39_32
  128. And within the
  129. Reo_level_mpdu_frame_info:
  130. Within Rx_mpdu_desc_info_details:
  131. Mpdu_Sequence_number
  132. BAR_frame
  133. Peer_meta_data
  134. All other fields shall be set to 0
  135. <legal all>
  136. reserved_5a
  137. <legal 0>
  138. rxdma_push_reason
  139. Indicates why rxdma pushed the frame to this ring
  140. This field is ignored by REO.
  141. <enum 0 rxdma_error_detected> RXDMA detected an error an
  142. pushed this frame to this queue
  143. <enum 1 rxdma_routing_instruction> RXDMA pushed the
  144. frame to this queue per received routing instructions. No
  145. error within RXDMA was detected
  146. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  147. result the MSDU link descriptor might not have the
  148. last_msdu_in_mpdu_flag set, but instead WBM might just see a
  149. NULL pointer in the MSDU link descriptor. This is to be
  150. considered a normal condition for this scenario.
  151. <legal 0 - 2>
  152. rxdma_error_code
  153. Field only valid when 'rxdma_push_reason' set to
  154. 'rxdma_error_detected'.
  155. This field is ignored by REO.
  156. <enum 0 rxdma_overflow_err>MPDU frame is not complete
  157. due to a FIFO overflow error in RXPCU.
  158. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  159. due to receiving incomplete MPDU from the PHY
  160. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption
  161. error or CRYPTO received an encrypted frame, but did not get
  162. a valid corresponding key id in the peer entry.
  163. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC
  164. error
  165. <enum 5 rxdma_unecrypted_err>CRYPTO reported an
  166. unencrypted frame error when encrypted was expected
  167. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU
  168. length error
  169. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max
  170. number of MSDUs allowed in an MPDU got exceeded
  171. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing
  172. error
  173. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  174. parsing error
  175. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  176. during SA search
  177. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  178. during DA search
  179. <enum 12 rxdma_flow_timeout_err>RX OLE reported a
  180. timeout during flow search
  181. <enum 13 rxdma_flush_request>RXDMA received a flush
  182. request
  183. <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
  184. present as well as a fragmented MPDU. A-MSDU defragmentation
  185. is not supported in Lithium SW so this is treated as an
  186. error.
  187. mpdu_fragment_number
  188. Field only valid when Reo_level_mpdu_frame_info.
  189. Rx_mpdu_desc_info_details.Fragment_flag is set.
  190. The fragment number from the 802.11 header.
  191. Note that the sequence number is embedded in the field:
  192. Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.
  193. Mpdu_sequence_number
  194. <legal all>
  195. reserved_6a
  196. <legal 0>
  197. reserved_7a
  198. <legal 0>
  199. ring_id
  200. Consumer: SW/REO/DEBUG
  201. Producer: SRNG (of RXDMA)
  202. For debugging.
  203. This field is filled in by the SRNG module.
  204. It help to identify the ring that is being looked <legal
  205. all>
  206. looping_count
  207. Consumer: SW/REO/DEBUG
  208. Producer: SRNG (of RXDMA)
  209. For debugging.
  210. This field is filled in by the SRNG module.
  211. A count value that indicates the number of times the
  212. producer of entries into this Ring has looped around the
  213. ring.
  214. At initialization time, this value is set to 0. On the
  215. first loop, this value is set to 1. After the max value is
  216. reached allowed by the number of bits for this field, the
  217. count value continues with 0 again.
  218. In case SW is the consumer of the ring entries, it can
  219. use this field to figure out up to where the producer of
  220. entries has created new entries. This eliminates the need to
  221. check where the head pointer' of the ring is located once
  222. the SW starts processing an interrupt indicating that new
  223. entries have been put into this ring...
  224. Also note that SW if it wants only needs to look at the
  225. LSB bit of this count value.
  226. <legal all>
  227. */
  228. #define REO_ENTRANCE_RING_0_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_OFFSET 0x00000000
  229. #define REO_ENTRANCE_RING_0_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_LSB 28
  230. #define REO_ENTRANCE_RING_0_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_MASK 0xffffffff
  231. #define REO_ENTRANCE_RING_1_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_OFFSET 0x00000004
  232. #define REO_ENTRANCE_RING_1_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_LSB 28
  233. #define REO_ENTRANCE_RING_1_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_MASK 0xffffffff
  234. #define REO_ENTRANCE_RING_2_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_OFFSET 0x00000008
  235. #define REO_ENTRANCE_RING_2_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_LSB 28
  236. #define REO_ENTRANCE_RING_2_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_MASK 0xffffffff
  237. #define REO_ENTRANCE_RING_3_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_OFFSET 0x0000000c
  238. #define REO_ENTRANCE_RING_3_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_LSB 28
  239. #define REO_ENTRANCE_RING_3_RX_MPDU_DETAILS_REO_LEVEL_MPDU_FRAME_INFO_MASK 0xffffffff
  240. /* Description REO_ENTRANCE_RING_4_RX_REO_QUEUE_DESC_ADDR_31_0
  241. Consumer: REO
  242. Producer: RXDMA
  243. Address (lower 32 bits) of the REO queue descriptor.
  244. <legal all>
  245. */
  246. #define REO_ENTRANCE_RING_4_RX_REO_QUEUE_DESC_ADDR_31_0_OFFSET 0x00000010
  247. #define REO_ENTRANCE_RING_4_RX_REO_QUEUE_DESC_ADDR_31_0_LSB 0
  248. #define REO_ENTRANCE_RING_4_RX_REO_QUEUE_DESC_ADDR_31_0_MASK 0xffffffff
  249. /* Description REO_ENTRANCE_RING_5_RX_REO_QUEUE_DESC_ADDR_39_32
  250. Consumer: REO
  251. Producer: RXDMA
  252. Address (upper 8 bits) of the REO queue descriptor.
  253. <legal all>
  254. */
  255. #define REO_ENTRANCE_RING_5_RX_REO_QUEUE_DESC_ADDR_39_32_OFFSET 0x00000014
  256. #define REO_ENTRANCE_RING_5_RX_REO_QUEUE_DESC_ADDR_39_32_LSB 0
  257. #define REO_ENTRANCE_RING_5_RX_REO_QUEUE_DESC_ADDR_39_32_MASK 0x000000ff
  258. /* Description REO_ENTRANCE_RING_5_ROUNDED_MPDU_BYTE_COUNT
  259. An approximation of the number of bytes received in this
  260. MPDU.
  261. Used to keeps stats on the amount of data flowing
  262. through a queue.
  263. <legal all>
  264. */
  265. #define REO_ENTRANCE_RING_5_ROUNDED_MPDU_BYTE_COUNT_OFFSET 0x00000014
  266. #define REO_ENTRANCE_RING_5_ROUNDED_MPDU_BYTE_COUNT_LSB 8
  267. #define REO_ENTRANCE_RING_5_ROUNDED_MPDU_BYTE_COUNT_MASK 0x003fff00
  268. /* Description REO_ENTRANCE_RING_5_REO_DESTINATION_INDICATION
  269. RXDMA copy the MPDU's first MSDU's destination
  270. indication field here. This is used for REO to be able to
  271. re-route the packet to a different SW destination ring if
  272. the packet is detected as error in REO.
  273. The ID of the REO exit ring where the MSDU frame shall
  274. push after (MPDU level) reordering has finished.
  275. <enum 0 reo_destination_tcl> Reo will push the frame
  276. into the REO2TCL ring
  277. <enum 1 reo_destination_sw1> Reo will push the frame
  278. into the REO2SW1 ring
  279. <enum 2 reo_destination_sw2> Reo will push the frame
  280. into the REO2SW1 ring
  281. <enum 3 reo_destination_sw3> Reo will push the frame
  282. into the REO2SW1 ring
  283. <enum 4 reo_destination_sw4> Reo will push the frame
  284. into the REO2SW1 ring
  285. <enum 5 reo_destination_release> Reo will push the frame
  286. into the REO_release ring
  287. <enum 6 reo_destination_fw> Reo will push the frame into
  288. the REO2FW ring
  289. <enum 7 reo_destination_7> REO remaps this
  290. <enum 8 reo_destination_8> REO remaps this <enum 9
  291. reo_destination_9> REO remaps this <enum 10
  292. reo_destination_10> REO remaps this
  293. <enum 11 reo_destination_11> REO remaps this
  294. <enum 12 reo_destination_12> REO remaps this <enum 13
  295. reo_destination_13> REO remaps this
  296. <enum 14 reo_destination_14> REO remaps this
  297. <enum 15 reo_destination_15> REO remaps this
  298. <enum 16 reo_destination_16> REO remaps this
  299. <enum 17 reo_destination_17> REO remaps this
  300. <enum 18 reo_destination_18> REO remaps this
  301. <enum 19 reo_destination_19> REO remaps this
  302. <enum 20 reo_destination_20> REO remaps this
  303. <enum 21 reo_destination_21> REO remaps this
  304. <enum 22 reo_destination_22> REO remaps this
  305. <enum 23 reo_destination_23> REO remaps this
  306. <enum 24 reo_destination_24> REO remaps this
  307. <enum 25 reo_destination_25> REO remaps this
  308. <enum 26 reo_destination_26> REO remaps this
  309. <enum 27 reo_destination_27> REO remaps this
  310. <enum 28 reo_destination_28> REO remaps this
  311. <enum 29 reo_destination_29> REO remaps this
  312. <enum 30 reo_destination_30> REO remaps this
  313. <enum 31 reo_destination_31> REO remaps this
  314. <legal all>
  315. */
  316. #define REO_ENTRANCE_RING_5_REO_DESTINATION_INDICATION_OFFSET 0x00000014
  317. #define REO_ENTRANCE_RING_5_REO_DESTINATION_INDICATION_LSB 22
  318. #define REO_ENTRANCE_RING_5_REO_DESTINATION_INDICATION_MASK 0x07c00000
  319. /* Description REO_ENTRANCE_RING_5_FRAMELESS_BAR
  320. When set, this REO entrance ring struct contains BAR
  321. info from a multi TID BAR frame. The original multi TID BAR
  322. frame itself contained all the REO info for the first TID,
  323. but all the subsequent TID info and their linkage to the REO
  324. descriptors is passed down as 'frameless' BAR info.
  325. The only fields valid in this descriptor when this bit
  326. is set are:
  327. Rx_reo_queue_desc_addr_31_0
  328. RX_reo_queue_desc_addr_39_32
  329. And within the
  330. Reo_level_mpdu_frame_info:
  331. Within Rx_mpdu_desc_info_details:
  332. Mpdu_Sequence_number
  333. BAR_frame
  334. Peer_meta_data
  335. All other fields shall be set to 0
  336. <legal all>
  337. */
  338. #define REO_ENTRANCE_RING_5_FRAMELESS_BAR_OFFSET 0x00000014
  339. #define REO_ENTRANCE_RING_5_FRAMELESS_BAR_LSB 27
  340. #define REO_ENTRANCE_RING_5_FRAMELESS_BAR_MASK 0x08000000
  341. /* Description REO_ENTRANCE_RING_5_RESERVED_5A
  342. <legal 0>
  343. */
  344. #define REO_ENTRANCE_RING_5_RESERVED_5A_OFFSET 0x00000014
  345. #define REO_ENTRANCE_RING_5_RESERVED_5A_LSB 28
  346. #define REO_ENTRANCE_RING_5_RESERVED_5A_MASK 0xf0000000
  347. /* Description REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON
  348. Indicates why rxdma pushed the frame to this ring
  349. This field is ignored by REO.
  350. <enum 0 rxdma_error_detected> RXDMA detected an error an
  351. pushed this frame to this queue
  352. <enum 1 rxdma_routing_instruction> RXDMA pushed the
  353. frame to this queue per received routing instructions. No
  354. error within RXDMA was detected
  355. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  356. result the MSDU link descriptor might not have the
  357. last_msdu_in_mpdu_flag set, but instead WBM might just see a
  358. NULL pointer in the MSDU link descriptor. This is to be
  359. considered a normal condition for this scenario.
  360. <legal 0 - 2>
  361. */
  362. #define REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON_OFFSET 0x00000018
  363. #define REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON_LSB 0
  364. #define REO_ENTRANCE_RING_6_RXDMA_PUSH_REASON_MASK 0x00000003
  365. /* Description REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE
  366. Field only valid when 'rxdma_push_reason' set to
  367. 'rxdma_error_detected'.
  368. This field is ignored by REO.
  369. <enum 0 rxdma_overflow_err>MPDU frame is not complete
  370. due to a FIFO overflow error in RXPCU.
  371. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  372. due to receiving incomplete MPDU from the PHY
  373. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption
  374. error or CRYPTO received an encrypted frame, but did not get
  375. a valid corresponding key id in the peer entry.
  376. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC
  377. error
  378. <enum 5 rxdma_unecrypted_err>CRYPTO reported an
  379. unencrypted frame error when encrypted was expected
  380. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU
  381. length error
  382. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max
  383. number of MSDUs allowed in an MPDU got exceeded
  384. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing
  385. error
  386. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  387. parsing error
  388. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  389. during SA search
  390. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  391. during DA search
  392. <enum 12 rxdma_flow_timeout_err>RX OLE reported a
  393. timeout during flow search
  394. <enum 13 rxdma_flush_request>RXDMA received a flush
  395. request
  396. <enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
  397. present as well as a fragmented MPDU. A-MSDU defragmentation
  398. is not supported in Lithium SW so this is treated as an
  399. error.
  400. */
  401. #define REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE_OFFSET 0x00000018
  402. #define REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE_LSB 2
  403. #define REO_ENTRANCE_RING_6_RXDMA_ERROR_CODE_MASK 0x0000007c
  404. /* Description REO_ENTRANCE_RING_6_MPDU_FRAGMENT_NUMBER
  405. Field only valid when Reo_level_mpdu_frame_info.
  406. Rx_mpdu_desc_info_details.Fragment_flag is set.
  407. The fragment number from the 802.11 header.
  408. Note that the sequence number is embedded in the field:
  409. Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.
  410. Mpdu_sequence_number
  411. <legal all>
  412. */
  413. #define REO_ENTRANCE_RING_6_MPDU_FRAGMENT_NUMBER_OFFSET 0x00000018
  414. #define REO_ENTRANCE_RING_6_MPDU_FRAGMENT_NUMBER_LSB 7
  415. #define REO_ENTRANCE_RING_6_MPDU_FRAGMENT_NUMBER_MASK 0x00000780
  416. /* Description REO_ENTRANCE_RING_6_RESERVED_6A
  417. <legal 0>
  418. */
  419. #define REO_ENTRANCE_RING_6_RESERVED_6A_OFFSET 0x00000018
  420. #define REO_ENTRANCE_RING_6_RESERVED_6A_LSB 11
  421. #define REO_ENTRANCE_RING_6_RESERVED_6A_MASK 0xfffff800
  422. /* Description REO_ENTRANCE_RING_7_RESERVED_7A
  423. <legal 0>
  424. */
  425. #define REO_ENTRANCE_RING_7_RESERVED_7A_OFFSET 0x0000001c
  426. #define REO_ENTRANCE_RING_7_RESERVED_7A_LSB 0
  427. #define REO_ENTRANCE_RING_7_RESERVED_7A_MASK 0x000fffff
  428. /* Description REO_ENTRANCE_RING_7_RING_ID
  429. Consumer: SW/REO/DEBUG
  430. Producer: SRNG (of RXDMA)
  431. For debugging.
  432. This field is filled in by the SRNG module.
  433. It help to identify the ring that is being looked <legal
  434. all>
  435. */
  436. #define REO_ENTRANCE_RING_7_RING_ID_OFFSET 0x0000001c
  437. #define REO_ENTRANCE_RING_7_RING_ID_LSB 20
  438. #define REO_ENTRANCE_RING_7_RING_ID_MASK 0x0ff00000
  439. /* Description REO_ENTRANCE_RING_7_LOOPING_COUNT
  440. Consumer: SW/REO/DEBUG
  441. Producer: SRNG (of RXDMA)
  442. For debugging.
  443. This field is filled in by the SRNG module.
  444. A count value that indicates the number of times the
  445. producer of entries into this Ring has looped around the
  446. ring.
  447. At initialization time, this value is set to 0. On the
  448. first loop, this value is set to 1. After the max value is
  449. reached allowed by the number of bits for this field, the
  450. count value continues with 0 again.
  451. In case SW is the consumer of the ring entries, it can
  452. use this field to figure out up to where the producer of
  453. entries has created new entries. This eliminates the need to
  454. check where the head pointer' of the ring is located once
  455. the SW starts processing an interrupt indicating that new
  456. entries have been put into this ring...
  457. Also note that SW if it wants only needs to look at the
  458. LSB bit of this count value.
  459. <legal all>
  460. */
  461. #define REO_ENTRANCE_RING_7_LOOPING_COUNT_OFFSET 0x0000001c
  462. #define REO_ENTRANCE_RING_7_LOOPING_COUNT_LSB 28
  463. #define REO_ENTRANCE_RING_7_LOOPING_COUNT_MASK 0xf0000000
  464. #endif // _REO_ENTRANCE_RING_H_