rx_mpdu_desc_info.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. /*
  2. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. 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 _RX_MPDU_DESC_INFO_H_
  17. #define _RX_MPDU_DESC_INFO_H_
  18. #if !defined(__ASSEMBLER__)
  19. #endif
  20. #define NUM_OF_DWORDS_RX_MPDU_DESC_INFO 2
  21. struct rx_mpdu_desc_info {
  22. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  23. uint32_t msdu_count : 8, // [7:0]
  24. fragment_flag : 1, // [8:8]
  25. mpdu_retry_bit : 1, // [9:9]
  26. ampdu_flag : 1, // [10:10]
  27. bar_frame : 1, // [11:11]
  28. pn_fields_contain_valid_info : 1, // [12:12]
  29. raw_mpdu : 1, // [13:13]
  30. more_fragment_flag : 1, // [14:14]
  31. src_info : 12, // [26:15]
  32. mpdu_qos_control_valid : 1, // [27:27]
  33. tid : 4; // [31:28]
  34. uint32_t peer_meta_data : 32; // [31:0]
  35. #else
  36. uint32_t tid : 4, // [31:28]
  37. mpdu_qos_control_valid : 1, // [27:27]
  38. src_info : 12, // [26:15]
  39. more_fragment_flag : 1, // [14:14]
  40. raw_mpdu : 1, // [13:13]
  41. pn_fields_contain_valid_info : 1, // [12:12]
  42. bar_frame : 1, // [11:11]
  43. ampdu_flag : 1, // [10:10]
  44. mpdu_retry_bit : 1, // [9:9]
  45. fragment_flag : 1, // [8:8]
  46. msdu_count : 8; // [7:0]
  47. uint32_t peer_meta_data : 32; // [31:0]
  48. #endif
  49. };
  50. /* Description MSDU_COUNT
  51. Consumer: REO/SW/FW
  52. Producer: RXDMA
  53. The number of MSDUs within the MPDU
  54. <legal all>
  55. */
  56. #define RX_MPDU_DESC_INFO_MSDU_COUNT_OFFSET 0x00000000
  57. #define RX_MPDU_DESC_INFO_MSDU_COUNT_LSB 0
  58. #define RX_MPDU_DESC_INFO_MSDU_COUNT_MSB 7
  59. #define RX_MPDU_DESC_INFO_MSDU_COUNT_MASK 0x000000ff
  60. /* Description FRAGMENT_FLAG
  61. Consumer: REO/SW/FW
  62. Producer: RXDMA
  63. When set, this MPDU is a fragment and REO should forward
  64. this fragment MPDU to the REO destination ring without
  65. any reorder checks, pn checks or bitmap update. This implies
  66. that REO is forwarding the pointer to the MSDU link descriptor.
  67. The destination ring is coming from a programmable register
  68. setting in REO
  69. <legal all>
  70. */
  71. #define RX_MPDU_DESC_INFO_FRAGMENT_FLAG_OFFSET 0x00000000
  72. #define RX_MPDU_DESC_INFO_FRAGMENT_FLAG_LSB 8
  73. #define RX_MPDU_DESC_INFO_FRAGMENT_FLAG_MSB 8
  74. #define RX_MPDU_DESC_INFO_FRAGMENT_FLAG_MASK 0x00000100
  75. /* Description MPDU_RETRY_BIT
  76. Consumer: REO/SW/FW
  77. Producer: RXDMA
  78. The retry bit setting from the MPDU header of the received
  79. frame
  80. <legal all>
  81. */
  82. #define RX_MPDU_DESC_INFO_MPDU_RETRY_BIT_OFFSET 0x00000000
  83. #define RX_MPDU_DESC_INFO_MPDU_RETRY_BIT_LSB 9
  84. #define RX_MPDU_DESC_INFO_MPDU_RETRY_BIT_MSB 9
  85. #define RX_MPDU_DESC_INFO_MPDU_RETRY_BIT_MASK 0x00000200
  86. /* Description AMPDU_FLAG
  87. Consumer: REO/SW/FW
  88. Producer: RXDMA
  89. When set, the MPDU was received as part of an A-MPDU.
  90. <legal all>
  91. */
  92. #define RX_MPDU_DESC_INFO_AMPDU_FLAG_OFFSET 0x00000000
  93. #define RX_MPDU_DESC_INFO_AMPDU_FLAG_LSB 10
  94. #define RX_MPDU_DESC_INFO_AMPDU_FLAG_MSB 10
  95. #define RX_MPDU_DESC_INFO_AMPDU_FLAG_MASK 0x00000400
  96. /* Description BAR_FRAME
  97. Consumer: REO/SW/FW
  98. Producer: RXDMA
  99. When set, the received frame is a BAR frame. After processing,
  100. this frame shall be pushed to SW or deleted.
  101. <legal all>
  102. */
  103. #define RX_MPDU_DESC_INFO_BAR_FRAME_OFFSET 0x00000000
  104. #define RX_MPDU_DESC_INFO_BAR_FRAME_LSB 11
  105. #define RX_MPDU_DESC_INFO_BAR_FRAME_MSB 11
  106. #define RX_MPDU_DESC_INFO_BAR_FRAME_MASK 0x00000800
  107. /* Description PN_FIELDS_CONTAIN_VALID_INFO
  108. Consumer: REO/SW/FW
  109. Producer: RXDMA
  110. Copied here by RXDMA from RX_MPDU_END
  111. When not set, REO will Not perform a PN sequence number
  112. check
  113. */
  114. #define RX_MPDU_DESC_INFO_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000000
  115. #define RX_MPDU_DESC_INFO_PN_FIELDS_CONTAIN_VALID_INFO_LSB 12
  116. #define RX_MPDU_DESC_INFO_PN_FIELDS_CONTAIN_VALID_INFO_MSB 12
  117. #define RX_MPDU_DESC_INFO_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x00001000
  118. /* Description RAW_MPDU
  119. Field only valid when first_msdu_in_mpdu_flag is set.
  120. When set, the contents in the MSDU buffer contains a 'RAW'
  121. MPDU. This 'RAW' MPDU might be spread out over multiple
  122. MSDU buffers.
  123. <legal all>
  124. */
  125. #define RX_MPDU_DESC_INFO_RAW_MPDU_OFFSET 0x00000000
  126. #define RX_MPDU_DESC_INFO_RAW_MPDU_LSB 13
  127. #define RX_MPDU_DESC_INFO_RAW_MPDU_MSB 13
  128. #define RX_MPDU_DESC_INFO_RAW_MPDU_MASK 0x00002000
  129. /* Description MORE_FRAGMENT_FLAG
  130. The More Fragment bit setting from the MPDU header of the
  131. received frame
  132. <legal all>
  133. */
  134. #define RX_MPDU_DESC_INFO_MORE_FRAGMENT_FLAG_OFFSET 0x00000000
  135. #define RX_MPDU_DESC_INFO_MORE_FRAGMENT_FLAG_LSB 14
  136. #define RX_MPDU_DESC_INFO_MORE_FRAGMENT_FLAG_MSB 14
  137. #define RX_MPDU_DESC_INFO_MORE_FRAGMENT_FLAG_MASK 0x00004000
  138. /* Description SRC_INFO
  139. Source (virtual) device/interface info. associated with
  140. this peer
  141. This field gets passed on by REO to PPE in the EDMA descriptor
  142. ('REO_TO_PPE_RING').
  143. <legal all>
  144. */
  145. #define RX_MPDU_DESC_INFO_SRC_INFO_OFFSET 0x00000000
  146. #define RX_MPDU_DESC_INFO_SRC_INFO_LSB 15
  147. #define RX_MPDU_DESC_INFO_SRC_INFO_MSB 26
  148. #define RX_MPDU_DESC_INFO_SRC_INFO_MASK 0x07ff8000
  149. /* Description MPDU_QOS_CONTROL_VALID
  150. When set, the MPDU has a QoS control field.
  151. In case of ndp or phy_err, this field will never be set.
  152. <legal all>
  153. */
  154. #define RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_OFFSET 0x00000000
  155. #define RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_LSB 27
  156. #define RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_MSB 27
  157. #define RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_MASK 0x08000000
  158. /* Description TID
  159. Field only valid when mpdu_qos_control_valid is set
  160. The TID field in the QoS control field
  161. <legal all>
  162. */
  163. #define RX_MPDU_DESC_INFO_TID_OFFSET 0x00000000
  164. #define RX_MPDU_DESC_INFO_TID_LSB 28
  165. #define RX_MPDU_DESC_INFO_TID_MSB 31
  166. #define RX_MPDU_DESC_INFO_TID_MASK 0xf0000000
  167. /* Description PEER_META_DATA
  168. Meta data that SW has programmed in the Peer table entry
  169. of the transmitting STA.
  170. <legal all>
  171. */
  172. #define RX_MPDU_DESC_INFO_PEER_META_DATA_OFFSET 0x00000004
  173. #define RX_MPDU_DESC_INFO_PEER_META_DATA_LSB 0
  174. #define RX_MPDU_DESC_INFO_PEER_META_DATA_MSB 31
  175. #define RX_MPDU_DESC_INFO_PEER_META_DATA_MASK 0xffffffff
  176. #endif // RX_MPDU_DESC_INFO