he_sig_a_su_info.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  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 _HE_SIG_A_SU_INFO_H_
  16. #define _HE_SIG_A_SU_INFO_H_
  17. #if !defined(__ASSEMBLER__)
  18. #endif
  19. #define NUM_OF_DWORDS_HE_SIG_A_SU_INFO 2
  20. struct he_sig_a_su_info {
  21. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  22. uint32_t format_indication : 1, // [0:0]
  23. beam_change : 1, // [1:1]
  24. dl_ul_flag : 1, // [2:2]
  25. transmit_mcs : 4, // [6:3]
  26. dcm : 1, // [7:7]
  27. bss_color_id : 6, // [13:8]
  28. reserved_0a : 1, // [14:14]
  29. spatial_reuse : 4, // [18:15]
  30. transmit_bw : 2, // [20:19]
  31. cp_ltf_size : 2, // [22:21]
  32. nsts : 3, // [25:23]
  33. reserved_0b : 6; // [31:26]
  34. uint32_t txop_duration : 7, // [6:0]
  35. coding : 1, // [7:7]
  36. ldpc_extra_symbol : 1, // [8:8]
  37. stbc : 1, // [9:9]
  38. txbf : 1, // [10:10]
  39. packet_extension_a_factor : 2, // [12:11]
  40. packet_extension_pe_disambiguity : 1, // [13:13]
  41. reserved_1a : 1, // [14:14]
  42. doppler_indication : 1, // [15:15]
  43. crc : 4, // [19:16]
  44. tail : 6, // [25:20]
  45. dot11ax_su_extended : 1, // [26:26]
  46. dot11ax_ext_ru_size : 3, // [29:27]
  47. rx_ndp : 1, // [30:30]
  48. rx_integrity_check_passed : 1; // [31:31]
  49. #else
  50. uint32_t reserved_0b : 6, // [31:26]
  51. nsts : 3, // [25:23]
  52. cp_ltf_size : 2, // [22:21]
  53. transmit_bw : 2, // [20:19]
  54. spatial_reuse : 4, // [18:15]
  55. reserved_0a : 1, // [14:14]
  56. bss_color_id : 6, // [13:8]
  57. dcm : 1, // [7:7]
  58. transmit_mcs : 4, // [6:3]
  59. dl_ul_flag : 1, // [2:2]
  60. beam_change : 1, // [1:1]
  61. format_indication : 1; // [0:0]
  62. uint32_t rx_integrity_check_passed : 1, // [31:31]
  63. rx_ndp : 1, // [30:30]
  64. dot11ax_ext_ru_size : 3, // [29:27]
  65. dot11ax_su_extended : 1, // [26:26]
  66. tail : 6, // [25:20]
  67. crc : 4, // [19:16]
  68. doppler_indication : 1, // [15:15]
  69. reserved_1a : 1, // [14:14]
  70. packet_extension_pe_disambiguity : 1, // [13:13]
  71. packet_extension_a_factor : 2, // [12:11]
  72. txbf : 1, // [10:10]
  73. stbc : 1, // [9:9]
  74. ldpc_extra_symbol : 1, // [8:8]
  75. coding : 1, // [7:7]
  76. txop_duration : 7; // [6:0]
  77. #endif
  78. };
  79. /* Description FORMAT_INDICATION
  80. <enum 0 HE_SIGA_FORMAT_HE_TRIG>
  81. <enum 1 HE_SIGA_FORMAT_SU_OR_EXT_SU>
  82. <legal all>
  83. */
  84. #define HE_SIG_A_SU_INFO_FORMAT_INDICATION_OFFSET 0x00000000
  85. #define HE_SIG_A_SU_INFO_FORMAT_INDICATION_LSB 0
  86. #define HE_SIG_A_SU_INFO_FORMAT_INDICATION_MSB 0
  87. #define HE_SIG_A_SU_INFO_FORMAT_INDICATION_MASK 0x00000001
  88. /* Description BEAM_CHANGE
  89. Indicates whether spatial mapping is changed between legacy
  90. and HE portion of preamble. If not, channel estimation
  91. can include legacy preamble to improve accuracy
  92. <legal all>
  93. */
  94. #define HE_SIG_A_SU_INFO_BEAM_CHANGE_OFFSET 0x00000000
  95. #define HE_SIG_A_SU_INFO_BEAM_CHANGE_LSB 1
  96. #define HE_SIG_A_SU_INFO_BEAM_CHANGE_MSB 1
  97. #define HE_SIG_A_SU_INFO_BEAM_CHANGE_MASK 0x00000002
  98. /* Description DL_UL_FLAG
  99. Differentiates between DL and UL transmission
  100. <enum 0 DL_UL_FLAG_IS_DL_OR_TDLS>
  101. <enum 1 DL_UL_FLAG_IS_UL>
  102. <legal all>
  103. */
  104. #define HE_SIG_A_SU_INFO_DL_UL_FLAG_OFFSET 0x00000000
  105. #define HE_SIG_A_SU_INFO_DL_UL_FLAG_LSB 2
  106. #define HE_SIG_A_SU_INFO_DL_UL_FLAG_MSB 2
  107. #define HE_SIG_A_SU_INFO_DL_UL_FLAG_MASK 0x00000004
  108. /* Description TRANSMIT_MCS
  109. Indicates the data MCS
  110. Field Used by MAC HW
  111. <legal all>
  112. */
  113. #define HE_SIG_A_SU_INFO_TRANSMIT_MCS_OFFSET 0x00000000
  114. #define HE_SIG_A_SU_INFO_TRANSMIT_MCS_LSB 3
  115. #define HE_SIG_A_SU_INFO_TRANSMIT_MCS_MSB 6
  116. #define HE_SIG_A_SU_INFO_TRANSMIT_MCS_MASK 0x00000078
  117. /* Description DCM
  118. Indicates whether dual sub-carrier modulation is applied
  119. 0: No DCM
  120. 1:DCM
  121. <legal all>
  122. */
  123. #define HE_SIG_A_SU_INFO_DCM_OFFSET 0x00000000
  124. #define HE_SIG_A_SU_INFO_DCM_LSB 7
  125. #define HE_SIG_A_SU_INFO_DCM_MSB 7
  126. #define HE_SIG_A_SU_INFO_DCM_MASK 0x00000080
  127. /* Description BSS_COLOR_ID
  128. BSS color ID
  129. Field Used by MAC HW
  130. <legal all>
  131. */
  132. #define HE_SIG_A_SU_INFO_BSS_COLOR_ID_OFFSET 0x00000000
  133. #define HE_SIG_A_SU_INFO_BSS_COLOR_ID_LSB 8
  134. #define HE_SIG_A_SU_INFO_BSS_COLOR_ID_MSB 13
  135. #define HE_SIG_A_SU_INFO_BSS_COLOR_ID_MASK 0x00003f00
  136. /* Description RESERVED_0A
  137. Note: spec indicates this shall be set to 1
  138. <legal 1>
  139. */
  140. #define HE_SIG_A_SU_INFO_RESERVED_0A_OFFSET 0x00000000
  141. #define HE_SIG_A_SU_INFO_RESERVED_0A_LSB 14
  142. #define HE_SIG_A_SU_INFO_RESERVED_0A_MSB 14
  143. #define HE_SIG_A_SU_INFO_RESERVED_0A_MASK 0x00004000
  144. /* Description SPATIAL_REUSE
  145. Spatial reuse
  146. For 20MHz one SR field corresponding to entire 20MHz (other
  147. 3 fields indicate identical values)
  148. For 40MHz two SR fields for each 20MHz (other 2 fields indicate
  149. identical values)
  150. For 80MHz four SR fields for each 20MHz
  151. For 160MHz four SR fields for each 40MHz
  152. <legal all>
  153. */
  154. #define HE_SIG_A_SU_INFO_SPATIAL_REUSE_OFFSET 0x00000000
  155. #define HE_SIG_A_SU_INFO_SPATIAL_REUSE_LSB 15
  156. #define HE_SIG_A_SU_INFO_SPATIAL_REUSE_MSB 18
  157. #define HE_SIG_A_SU_INFO_SPATIAL_REUSE_MASK 0x00078000
  158. /* Description TRANSMIT_BW
  159. Bandwidth of the PPDU.
  160. For HE SU PPDU
  161. <enum 0 HE_SIG_A_BW20> 20 Mhz
  162. <enum 1 HE_SIG_A_BW40> 40 Mhz
  163. <enum 2 HE_SIG_A_BW80> 80 Mhz
  164. <enum 3 HE_SIG_A_BW160> 160 MHz or 80+80 MHz
  165. For HE Extended Range SU PPDU
  166. Set to 0 for 242-tone RU
  167. Set to 1 for right 106-tone RU within
  168. the primary 20 MHz
  169. On RX side, Field Used by MAC HW
  170. <legal all>
  171. */
  172. #define HE_SIG_A_SU_INFO_TRANSMIT_BW_OFFSET 0x00000000
  173. #define HE_SIG_A_SU_INFO_TRANSMIT_BW_LSB 19
  174. #define HE_SIG_A_SU_INFO_TRANSMIT_BW_MSB 20
  175. #define HE_SIG_A_SU_INFO_TRANSMIT_BW_MASK 0x00180000
  176. /* Description CP_LTF_SIZE
  177. Indicates the CP and HE-LTF type
  178. <enum 0 OneX_LTF_0_8CP> 1xLTF + 0.8 us CP
  179. <enum 1 TwoX_LTF_0_8CP> 2x LTF + 0.8 µs CP
  180. <enum 2 TwoX_LTF_1_6CP> 2x LTF + 1.6 µs CP
  181. <enum 3 FourX_LTF_0_8CP_3_2CP>
  182. When DCM == 0 OR STBC == 0: 4x LTF + 3.2 µs CP
  183. When DCM == 1 AND STBC == 1: 4x LTF + 0.8 µs CP. Note:
  184. In this scenario, Neither DCM nor STBC is applied to HE
  185. data field.
  186. NOTE:
  187. If ( DCM == 1 ) and ( MCS > 0 ) and (STBC == 0)
  188. 0 = 1xLTF + 0.4 usec
  189. 1 = 2xLTF + 0.4 usec
  190. 2~3 = Reserved
  191. <legal all>
  192. */
  193. #define HE_SIG_A_SU_INFO_CP_LTF_SIZE_OFFSET 0x00000000
  194. #define HE_SIG_A_SU_INFO_CP_LTF_SIZE_LSB 21
  195. #define HE_SIG_A_SU_INFO_CP_LTF_SIZE_MSB 22
  196. #define HE_SIG_A_SU_INFO_CP_LTF_SIZE_MASK 0x00600000
  197. /* Description NSTS
  198. Indicates number of streams used for the SU transmission
  199. For HE SU PPDU
  200. Set to n for n+1 space time stream,
  201. where n = 0, 1, 2,.....,7.
  202. For HE Extended Range PPDU
  203. Set to 0 for 1 space time stream.
  204. Value 1 is TBD
  205. Values 2 - 7 are reserved
  206. <legal all>
  207. */
  208. #define HE_SIG_A_SU_INFO_NSTS_OFFSET 0x00000000
  209. #define HE_SIG_A_SU_INFO_NSTS_LSB 23
  210. #define HE_SIG_A_SU_INFO_NSTS_MSB 25
  211. #define HE_SIG_A_SU_INFO_NSTS_MASK 0x03800000
  212. /* Description RESERVED_0B
  213. <legal 0>
  214. */
  215. #define HE_SIG_A_SU_INFO_RESERVED_0B_OFFSET 0x00000000
  216. #define HE_SIG_A_SU_INFO_RESERVED_0B_LSB 26
  217. #define HE_SIG_A_SU_INFO_RESERVED_0B_MSB 31
  218. #define HE_SIG_A_SU_INFO_RESERVED_0B_MASK 0xfc000000
  219. /* Description TXOP_DURATION
  220. Indicates the remaining time in the current TXOP
  221. Field Used by MAC HW
  222. <legal all>
  223. */
  224. #define HE_SIG_A_SU_INFO_TXOP_DURATION_OFFSET 0x00000004
  225. #define HE_SIG_A_SU_INFO_TXOP_DURATION_LSB 0
  226. #define HE_SIG_A_SU_INFO_TXOP_DURATION_MSB 6
  227. #define HE_SIG_A_SU_INFO_TXOP_DURATION_MASK 0x0000007f
  228. /* Description CODING
  229. Distinguishes between BCC and LDPC coding.
  230. 0: BCC
  231. 1: LDPC
  232. <legal all>
  233. */
  234. #define HE_SIG_A_SU_INFO_CODING_OFFSET 0x00000004
  235. #define HE_SIG_A_SU_INFO_CODING_LSB 7
  236. #define HE_SIG_A_SU_INFO_CODING_MSB 7
  237. #define HE_SIG_A_SU_INFO_CODING_MASK 0x00000080
  238. /* Description LDPC_EXTRA_SYMBOL
  239. If LDPC,
  240. 0: LDPC extra symbol not present
  241. 1: LDPC extra symbol present
  242. Else
  243. Set to 1
  244. <legal all>
  245. */
  246. #define HE_SIG_A_SU_INFO_LDPC_EXTRA_SYMBOL_OFFSET 0x00000004
  247. #define HE_SIG_A_SU_INFO_LDPC_EXTRA_SYMBOL_LSB 8
  248. #define HE_SIG_A_SU_INFO_LDPC_EXTRA_SYMBOL_MSB 8
  249. #define HE_SIG_A_SU_INFO_LDPC_EXTRA_SYMBOL_MASK 0x00000100
  250. /* Description STBC
  251. Indicates whether STBC is applied
  252. 0: No STBC
  253. 1: STBC
  254. <legal all>
  255. */
  256. #define HE_SIG_A_SU_INFO_STBC_OFFSET 0x00000004
  257. #define HE_SIG_A_SU_INFO_STBC_LSB 9
  258. #define HE_SIG_A_SU_INFO_STBC_MSB 9
  259. #define HE_SIG_A_SU_INFO_STBC_MASK 0x00000200
  260. /* Description TXBF
  261. Indicates whether beamforming is applied
  262. 0: No beamforming
  263. 1: beamforming
  264. <legal all>
  265. */
  266. #define HE_SIG_A_SU_INFO_TXBF_OFFSET 0x00000004
  267. #define HE_SIG_A_SU_INFO_TXBF_LSB 10
  268. #define HE_SIG_A_SU_INFO_TXBF_MSB 10
  269. #define HE_SIG_A_SU_INFO_TXBF_MASK 0x00000400
  270. /* Description PACKET_EXTENSION_A_FACTOR
  271. Common trigger info
  272. the packet extension duration of the trigger-based PPDU
  273. response with these two bits indicating the "a-factor"
  274. <enum 0 a_factor_4>
  275. <enum 1 a_factor_1>
  276. <enum 2 a_factor_2>
  277. <enum 3 a_factor_3>
  278. <legal all>
  279. */
  280. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_A_FACTOR_OFFSET 0x00000004
  281. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_A_FACTOR_LSB 11
  282. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_A_FACTOR_MSB 12
  283. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_A_FACTOR_MASK 0x00001800
  284. /* Description PACKET_EXTENSION_PE_DISAMBIGUITY
  285. Common trigger info
  286. the packet extension duration of the trigger-based PPDU
  287. response with this bit indicating the PE-Disambiguity
  288. <legal all>
  289. */
  290. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_OFFSET 0x00000004
  291. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_LSB 13
  292. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_MSB 13
  293. #define HE_SIG_A_SU_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_MASK 0x00002000
  294. /* Description RESERVED_1A
  295. Note: per standard, set to 1
  296. <legal 1>
  297. */
  298. #define HE_SIG_A_SU_INFO_RESERVED_1A_OFFSET 0x00000004
  299. #define HE_SIG_A_SU_INFO_RESERVED_1A_LSB 14
  300. #define HE_SIG_A_SU_INFO_RESERVED_1A_MSB 14
  301. #define HE_SIG_A_SU_INFO_RESERVED_1A_MASK 0x00004000
  302. /* Description DOPPLER_INDICATION
  303. 0: No Doppler support
  304. 1: Doppler support
  305. <legal all>
  306. */
  307. #define HE_SIG_A_SU_INFO_DOPPLER_INDICATION_OFFSET 0x00000004
  308. #define HE_SIG_A_SU_INFO_DOPPLER_INDICATION_LSB 15
  309. #define HE_SIG_A_SU_INFO_DOPPLER_INDICATION_MSB 15
  310. #define HE_SIG_A_SU_INFO_DOPPLER_INDICATION_MASK 0x00008000
  311. /* Description CRC
  312. CRC for HE-SIG-A contents.
  313. <legal all>
  314. */
  315. #define HE_SIG_A_SU_INFO_CRC_OFFSET 0x00000004
  316. #define HE_SIG_A_SU_INFO_CRC_LSB 16
  317. #define HE_SIG_A_SU_INFO_CRC_MSB 19
  318. #define HE_SIG_A_SU_INFO_CRC_MASK 0x000f0000
  319. /* Description TAIL
  320. <legal 0>
  321. */
  322. #define HE_SIG_A_SU_INFO_TAIL_OFFSET 0x00000004
  323. #define HE_SIG_A_SU_INFO_TAIL_LSB 20
  324. #define HE_SIG_A_SU_INFO_TAIL_MSB 25
  325. #define HE_SIG_A_SU_INFO_TAIL_MASK 0x03f00000
  326. /* Description DOT11AX_SU_EXTENDED
  327. TX side:
  328. Set to 0
  329. RX side:
  330. On RX side, evaluated by MAC HW. This is the only way for
  331. MAC RX to know that this was an HE_SIG_A_SU received in
  332. 'extended' format
  333. When set, the 11ax frame is of the extended range format
  334. <legal all>
  335. */
  336. #define HE_SIG_A_SU_INFO_DOT11AX_SU_EXTENDED_OFFSET 0x00000004
  337. #define HE_SIG_A_SU_INFO_DOT11AX_SU_EXTENDED_LSB 26
  338. #define HE_SIG_A_SU_INFO_DOT11AX_SU_EXTENDED_MSB 26
  339. #define HE_SIG_A_SU_INFO_DOT11AX_SU_EXTENDED_MASK 0x04000000
  340. /* Description DOT11AX_EXT_RU_SIZE
  341. TX side:
  342. Set to 0
  343. RX side:
  344. Field only contains valid info when dot11ax_su_extended
  345. is set.
  346. On RX side, evaluated by MAC HW. This is the only way for
  347. MAC RX to know what the number of based RUs was in this
  348. extended range reception. It is used by the MAC to determine
  349. the RU size for the response...
  350. <enum 0 EXT_RU_26>
  351. <enum 1 EXT_RU_52>
  352. <enum 2 EXT_RU_106>
  353. <enum 3 EXT_RU_242><legal 0-3>
  354. */
  355. #define HE_SIG_A_SU_INFO_DOT11AX_EXT_RU_SIZE_OFFSET 0x00000004
  356. #define HE_SIG_A_SU_INFO_DOT11AX_EXT_RU_SIZE_LSB 27
  357. #define HE_SIG_A_SU_INFO_DOT11AX_EXT_RU_SIZE_MSB 29
  358. #define HE_SIG_A_SU_INFO_DOT11AX_EXT_RU_SIZE_MASK 0x38000000
  359. /* Description RX_NDP
  360. TX side:
  361. Set to 0
  362. RX side:Valid on RX side only, and looked at by MAC HW
  363. When set, PHY has received (expected) NDP frame
  364. <legal all>
  365. */
  366. #define HE_SIG_A_SU_INFO_RX_NDP_OFFSET 0x00000004
  367. #define HE_SIG_A_SU_INFO_RX_NDP_LSB 30
  368. #define HE_SIG_A_SU_INFO_RX_NDP_MSB 30
  369. #define HE_SIG_A_SU_INFO_RX_NDP_MASK 0x40000000
  370. /* Description RX_INTEGRITY_CHECK_PASSED
  371. TX side: Set to 0
  372. RX side: Set to 1 if PHY determines the HE-SIG-A CRC check
  373. has passed, else set to 0
  374. <legal all>
  375. */
  376. #define HE_SIG_A_SU_INFO_RX_INTEGRITY_CHECK_PASSED_OFFSET 0x00000004
  377. #define HE_SIG_A_SU_INFO_RX_INTEGRITY_CHECK_PASSED_LSB 31
  378. #define HE_SIG_A_SU_INFO_RX_INTEGRITY_CHECK_PASSED_MSB 31
  379. #define HE_SIG_A_SU_INFO_RX_INTEGRITY_CHECK_PASSED_MASK 0x80000000
  380. #endif // HE_SIG_A_SU_INFO