rx_frame_bitmap_ack.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
  2. *
  3. * Permission to use, copy, modify, and/or distribute this software for any
  4. * purpose with or without fee is hereby granted, provided that the above
  5. * copyright notice and this permission notice appear in all copies.
  6. *
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. */
  15. #ifndef _RX_FRAME_BITMAP_ACK_H_
  16. #define _RX_FRAME_BITMAP_ACK_H_
  17. #if !defined(__ASSEMBLER__)
  18. #endif
  19. #define NUM_OF_DWORDS_RX_FRAME_BITMAP_ACK 14
  20. #define NUM_OF_QWORDS_RX_FRAME_BITMAP_ACK 7
  21. struct rx_frame_bitmap_ack {
  22. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  23. uint32_t no_bitmap_available : 1, // [0:0]
  24. explicit_ack : 1, // [1:1]
  25. explict_ack_type : 3, // [4:2]
  26. ba_bitmap_size : 2, // [6:5]
  27. reserved_0a : 3, // [9:7]
  28. ba_tid : 4, // [13:10]
  29. sta_full_aid : 13, // [26:14]
  30. reserved_0b : 5; // [31:27]
  31. uint32_t addr1_31_0 : 32; // [31:0]
  32. uint32_t addr1_47_32 : 16, // [15:0]
  33. addr2_15_0 : 16; // [31:16]
  34. uint32_t addr2_47_16 : 32; // [31:0]
  35. uint32_t ba_ts_ctrl : 16, // [15:0]
  36. ba_ts_seq : 16; // [31:16]
  37. uint32_t ba_ts_bitmap_31_0 : 32; // [31:0]
  38. uint32_t ba_ts_bitmap_63_32 : 32; // [31:0]
  39. uint32_t ba_ts_bitmap_95_64 : 32; // [31:0]
  40. uint32_t ba_ts_bitmap_127_96 : 32; // [31:0]
  41. uint32_t ba_ts_bitmap_159_128 : 32; // [31:0]
  42. uint32_t ba_ts_bitmap_191_160 : 32; // [31:0]
  43. uint32_t ba_ts_bitmap_223_192 : 32; // [31:0]
  44. uint32_t ba_ts_bitmap_255_224 : 32; // [31:0]
  45. uint32_t tlv64_padding : 32; // [31:0]
  46. #else
  47. uint32_t reserved_0b : 5, // [31:27]
  48. sta_full_aid : 13, // [26:14]
  49. ba_tid : 4, // [13:10]
  50. reserved_0a : 3, // [9:7]
  51. ba_bitmap_size : 2, // [6:5]
  52. explict_ack_type : 3, // [4:2]
  53. explicit_ack : 1, // [1:1]
  54. no_bitmap_available : 1; // [0:0]
  55. uint32_t addr1_31_0 : 32; // [31:0]
  56. uint32_t addr2_15_0 : 16, // [31:16]
  57. addr1_47_32 : 16; // [15:0]
  58. uint32_t addr2_47_16 : 32; // [31:0]
  59. uint32_t ba_ts_seq : 16, // [31:16]
  60. ba_ts_ctrl : 16; // [15:0]
  61. uint32_t ba_ts_bitmap_31_0 : 32; // [31:0]
  62. uint32_t ba_ts_bitmap_63_32 : 32; // [31:0]
  63. uint32_t ba_ts_bitmap_95_64 : 32; // [31:0]
  64. uint32_t ba_ts_bitmap_127_96 : 32; // [31:0]
  65. uint32_t ba_ts_bitmap_159_128 : 32; // [31:0]
  66. uint32_t ba_ts_bitmap_191_160 : 32; // [31:0]
  67. uint32_t ba_ts_bitmap_223_192 : 32; // [31:0]
  68. uint32_t ba_ts_bitmap_255_224 : 32; // [31:0]
  69. uint32_t tlv64_padding : 32; // [31:0]
  70. #endif
  71. };
  72. /* Description NO_BITMAP_AVAILABLE
  73. When set, RXPCU does not have any info available for the
  74. requested user.
  75. RXPCU will set the TA/RA, addresses with the devices OWN
  76. address.
  77. All other fields are set to 0
  78. TXPCU will just blindly follow RXPCUs info.
  79. (only for status reporting is TXPCU using this).
  80. Note that this field and field "Explicit_ack" can not be
  81. simultaneously set.
  82. <legal all>
  83. */
  84. #define RX_FRAME_BITMAP_ACK_NO_BITMAP_AVAILABLE_OFFSET 0x0000000000000000
  85. #define RX_FRAME_BITMAP_ACK_NO_BITMAP_AVAILABLE_LSB 0
  86. #define RX_FRAME_BITMAP_ACK_NO_BITMAP_AVAILABLE_MSB 0
  87. #define RX_FRAME_BITMAP_ACK_NO_BITMAP_AVAILABLE_MASK 0x0000000000000001
  88. /* Description EXPLICIT_ACK
  89. When set, no BA is needed for this STA. Instead just a single
  90. ACK indication
  91. Note that this field and field "No_bitmap_available" can
  92. not be simultaneously set.
  93. Also note that RXPCU might not know if the response that
  94. TXPCU is generating is a single ACK or M(sta) BA.
  95. For that reason, RXPCU shall also properly fill in all the
  96. BA related fields. TXPCU will based on the explicit ack
  97. type and in case of BA type response, blindely copy the
  98. required BA related fields and not change their contents:
  99. The related fields are:
  100. Ba_tid
  101. ba_ts_ctrl
  102. ba_ts_seq
  103. ba_ts_bitmap_...
  104. <legal all>
  105. */
  106. #define RX_FRAME_BITMAP_ACK_EXPLICIT_ACK_OFFSET 0x0000000000000000
  107. #define RX_FRAME_BITMAP_ACK_EXPLICIT_ACK_LSB 1
  108. #define RX_FRAME_BITMAP_ACK_EXPLICIT_ACK_MSB 1
  109. #define RX_FRAME_BITMAP_ACK_EXPLICIT_ACK_MASK 0x0000000000000002
  110. /* Description EXPLICT_ACK_TYPE
  111. Field only valid when Explicit_ack is set
  112. Note that TXPCU only needs to evaluate this field in case
  113. of generating a multi (STA) BA
  114. <enum 0 ack_for_single_data_frame> set when only a single
  115. data frame was received that indicated explicitly a 'normal'
  116. ack (no BA) to be sent.
  117. <enum 1 ack_for_management> set when a management frame
  118. was received
  119. <enum 2 ack_for_PSPOLL> set when a PS_POLL frame was received
  120. <enum 3 ack_for_assoc_request> set when an association request
  121. was received from an unassociated STA.
  122. <enum 4 ack_for_all_frames> set when RXPCU determined that
  123. all frames have been properly received.
  124. <legal 0-4>
  125. */
  126. #define RX_FRAME_BITMAP_ACK_EXPLICT_ACK_TYPE_OFFSET 0x0000000000000000
  127. #define RX_FRAME_BITMAP_ACK_EXPLICT_ACK_TYPE_LSB 2
  128. #define RX_FRAME_BITMAP_ACK_EXPLICT_ACK_TYPE_MSB 4
  129. #define RX_FRAME_BITMAP_ACK_EXPLICT_ACK_TYPE_MASK 0x000000000000001c
  130. /* Description BA_BITMAP_SIZE
  131. Field not valid when "No_bitmap_available" or "Explicit_ack"
  132. is set.
  133. <enum 0 BA_bitmap_32 > Bitmap size set to window of 32
  134. <enum 1 BA_bitmap_64 > Bitmap size set to window of 64
  135. <enum 2 BA_bitmap_128 > Bitmap size set to window of 128
  136. <enum 3 BA_bitmap_256 > Bitmap size set to window of 256
  137. <legal 0-3>
  138. */
  139. #define RX_FRAME_BITMAP_ACK_BA_BITMAP_SIZE_OFFSET 0x0000000000000000
  140. #define RX_FRAME_BITMAP_ACK_BA_BITMAP_SIZE_LSB 5
  141. #define RX_FRAME_BITMAP_ACK_BA_BITMAP_SIZE_MSB 6
  142. #define RX_FRAME_BITMAP_ACK_BA_BITMAP_SIZE_MASK 0x0000000000000060
  143. /* Description RESERVED_0A
  144. <legal 0>
  145. */
  146. #define RX_FRAME_BITMAP_ACK_RESERVED_0A_OFFSET 0x0000000000000000
  147. #define RX_FRAME_BITMAP_ACK_RESERVED_0A_LSB 7
  148. #define RX_FRAME_BITMAP_ACK_RESERVED_0A_MSB 9
  149. #define RX_FRAME_BITMAP_ACK_RESERVED_0A_MASK 0x0000000000000380
  150. /* Description BA_TID
  151. The tid for the BA
  152. */
  153. #define RX_FRAME_BITMAP_ACK_BA_TID_OFFSET 0x0000000000000000
  154. #define RX_FRAME_BITMAP_ACK_BA_TID_LSB 10
  155. #define RX_FRAME_BITMAP_ACK_BA_TID_MSB 13
  156. #define RX_FRAME_BITMAP_ACK_BA_TID_MASK 0x0000000000003c00
  157. /* Description STA_FULL_AID
  158. The full AID of this station.
  159. */
  160. #define RX_FRAME_BITMAP_ACK_STA_FULL_AID_OFFSET 0x0000000000000000
  161. #define RX_FRAME_BITMAP_ACK_STA_FULL_AID_LSB 14
  162. #define RX_FRAME_BITMAP_ACK_STA_FULL_AID_MSB 26
  163. #define RX_FRAME_BITMAP_ACK_STA_FULL_AID_MASK 0x0000000007ffc000
  164. /* Description RESERVED_0B
  165. <legal 0>
  166. */
  167. #define RX_FRAME_BITMAP_ACK_RESERVED_0B_OFFSET 0x0000000000000000
  168. #define RX_FRAME_BITMAP_ACK_RESERVED_0B_LSB 27
  169. #define RX_FRAME_BITMAP_ACK_RESERVED_0B_MSB 31
  170. #define RX_FRAME_BITMAP_ACK_RESERVED_0B_MASK 0x00000000f8000000
  171. /* Description ADDR1_31_0
  172. lower 32 bits of addr1 of the received frame
  173. */
  174. #define RX_FRAME_BITMAP_ACK_ADDR1_31_0_OFFSET 0x0000000000000000
  175. #define RX_FRAME_BITMAP_ACK_ADDR1_31_0_LSB 32
  176. #define RX_FRAME_BITMAP_ACK_ADDR1_31_0_MSB 63
  177. #define RX_FRAME_BITMAP_ACK_ADDR1_31_0_MASK 0xffffffff00000000
  178. /* Description ADDR1_47_32
  179. upper 16 bits of addr1 of the received frame
  180. */
  181. #define RX_FRAME_BITMAP_ACK_ADDR1_47_32_OFFSET 0x0000000000000008
  182. #define RX_FRAME_BITMAP_ACK_ADDR1_47_32_LSB 0
  183. #define RX_FRAME_BITMAP_ACK_ADDR1_47_32_MSB 15
  184. #define RX_FRAME_BITMAP_ACK_ADDR1_47_32_MASK 0x000000000000ffff
  185. /* Description ADDR2_15_0
  186. lower 16 bits of addr2 of the received frame
  187. */
  188. #define RX_FRAME_BITMAP_ACK_ADDR2_15_0_OFFSET 0x0000000000000008
  189. #define RX_FRAME_BITMAP_ACK_ADDR2_15_0_LSB 16
  190. #define RX_FRAME_BITMAP_ACK_ADDR2_15_0_MSB 31
  191. #define RX_FRAME_BITMAP_ACK_ADDR2_15_0_MASK 0x00000000ffff0000
  192. /* Description ADDR2_47_16
  193. upper 32 bits of addr2 of the received frame
  194. */
  195. #define RX_FRAME_BITMAP_ACK_ADDR2_47_16_OFFSET 0x0000000000000008
  196. #define RX_FRAME_BITMAP_ACK_ADDR2_47_16_LSB 32
  197. #define RX_FRAME_BITMAP_ACK_ADDR2_47_16_MSB 63
  198. #define RX_FRAME_BITMAP_ACK_ADDR2_47_16_MASK 0xffffffff00000000
  199. /* Description BA_TS_CTRL
  200. Transmit BA control
  201. RXPCU assumes the C-BA format, NOT M-BA format.
  202. In case TXPCU is responding with M-BA, TXPCU will ignore
  203. this field. TXPCU will generate it
  204. */
  205. #define RX_FRAME_BITMAP_ACK_BA_TS_CTRL_OFFSET 0x0000000000000010
  206. #define RX_FRAME_BITMAP_ACK_BA_TS_CTRL_LSB 0
  207. #define RX_FRAME_BITMAP_ACK_BA_TS_CTRL_MSB 15
  208. #define RX_FRAME_BITMAP_ACK_BA_TS_CTRL_MASK 0x000000000000ffff
  209. /* Description BA_TS_SEQ
  210. Transmit BA sequence number.
  211. */
  212. #define RX_FRAME_BITMAP_ACK_BA_TS_SEQ_OFFSET 0x0000000000000010
  213. #define RX_FRAME_BITMAP_ACK_BA_TS_SEQ_LSB 16
  214. #define RX_FRAME_BITMAP_ACK_BA_TS_SEQ_MSB 31
  215. #define RX_FRAME_BITMAP_ACK_BA_TS_SEQ_MASK 0x00000000ffff0000
  216. /* Description BA_TS_BITMAP_31_0
  217. Transmit BA bitmap[31:0]
  218. */
  219. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_31_0_OFFSET 0x0000000000000010
  220. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_31_0_LSB 32
  221. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_31_0_MSB 63
  222. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_31_0_MASK 0xffffffff00000000
  223. /* Description BA_TS_BITMAP_63_32
  224. Transmit BA bitmap[63:32]
  225. */
  226. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_63_32_OFFSET 0x0000000000000018
  227. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_63_32_LSB 0
  228. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_63_32_MSB 31
  229. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_63_32_MASK 0x00000000ffffffff
  230. /* Description BA_TS_BITMAP_95_64
  231. Transmit BA bitmap[95:64]
  232. */
  233. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_95_64_OFFSET 0x0000000000000018
  234. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_95_64_LSB 32
  235. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_95_64_MSB 63
  236. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_95_64_MASK 0xffffffff00000000
  237. /* Description BA_TS_BITMAP_127_96
  238. Transmit BA bitmap[127:96]
  239. */
  240. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_127_96_OFFSET 0x0000000000000020
  241. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_127_96_LSB 0
  242. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_127_96_MSB 31
  243. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_127_96_MASK 0x00000000ffffffff
  244. /* Description BA_TS_BITMAP_159_128
  245. Transmit BA bitmap[159:128]
  246. */
  247. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_159_128_OFFSET 0x0000000000000020
  248. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_159_128_LSB 32
  249. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_159_128_MSB 63
  250. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_159_128_MASK 0xffffffff00000000
  251. /* Description BA_TS_BITMAP_191_160
  252. Transmit BA bitmap[191:160]
  253. */
  254. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_191_160_OFFSET 0x0000000000000028
  255. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_191_160_LSB 0
  256. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_191_160_MSB 31
  257. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_191_160_MASK 0x00000000ffffffff
  258. /* Description BA_TS_BITMAP_223_192
  259. Transmit BA bitmap[223:192]
  260. */
  261. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_223_192_OFFSET 0x0000000000000028
  262. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_223_192_LSB 32
  263. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_223_192_MSB 63
  264. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_223_192_MASK 0xffffffff00000000
  265. /* Description BA_TS_BITMAP_255_224
  266. Transmit BA bitmap[255:224]
  267. */
  268. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_255_224_OFFSET 0x0000000000000030
  269. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_255_224_LSB 0
  270. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_255_224_MSB 31
  271. #define RX_FRAME_BITMAP_ACK_BA_TS_BITMAP_255_224_MASK 0x00000000ffffffff
  272. /* Description TLV64_PADDING
  273. Automatic DWORD padding inserted while converting TLV32
  274. to TLV64 for 64 bit ARCH
  275. <legal 0>
  276. */
  277. #define RX_FRAME_BITMAP_ACK_TLV64_PADDING_OFFSET 0x0000000000000030
  278. #define RX_FRAME_BITMAP_ACK_TLV64_PADDING_LSB 32
  279. #define RX_FRAME_BITMAP_ACK_TLV64_PADDING_MSB 63
  280. #define RX_FRAME_BITMAP_ACK_TLV64_PADDING_MASK 0xffffffff00000000
  281. #endif // RX_FRAME_BITMAP_ACK