1 2 /* Copyright (c) 2022, 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 17 18 19 20 21 22 23 24 25 26 #ifndef _HE_SIG_A_MU_DL_INFO_H_ 27 #define _HE_SIG_A_MU_DL_INFO_H_ 28 #if !defined(__ASSEMBLER__) 29 #endif 30 31 #define NUM_OF_DWORDS_HE_SIG_A_MU_DL_INFO 2 32 33 34 struct he_sig_a_mu_dl_info { 35 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 36 uint32_t dl_ul_flag : 1, // [0:0] 37 mcs_of_sig_b : 3, // [3:1] 38 dcm_of_sig_b : 1, // [4:4] 39 bss_color_id : 6, // [10:5] 40 spatial_reuse : 4, // [14:11] 41 transmit_bw : 3, // [17:15] 42 num_sig_b_symbols : 4, // [21:18] 43 comp_mode_sig_b : 1, // [22:22] 44 cp_ltf_size : 2, // [24:23] 45 doppler_indication : 1, // [25:25] 46 reserved_0a : 6; // [31:26] 47 uint32_t txop_duration : 7, // [6:0] 48 reserved_1a : 1, // [7:7] 49 num_ltf_symbols : 3, // [10:8] 50 ldpc_extra_symbol : 1, // [11:11] 51 stbc : 1, // [12:12] 52 packet_extension_a_factor : 2, // [14:13] 53 packet_extension_pe_disambiguity : 1, // [15:15] 54 crc : 4, // [19:16] 55 tail : 6, // [25:20] 56 reserved_1b : 5, // [30:26] 57 rx_integrity_check_passed : 1; // [31:31] 58 #else 59 uint32_t reserved_0a : 6, // [31:26] 60 doppler_indication : 1, // [25:25] 61 cp_ltf_size : 2, // [24:23] 62 comp_mode_sig_b : 1, // [22:22] 63 num_sig_b_symbols : 4, // [21:18] 64 transmit_bw : 3, // [17:15] 65 spatial_reuse : 4, // [14:11] 66 bss_color_id : 6, // [10:5] 67 dcm_of_sig_b : 1, // [4:4] 68 mcs_of_sig_b : 3, // [3:1] 69 dl_ul_flag : 1; // [0:0] 70 uint32_t rx_integrity_check_passed : 1, // [31:31] 71 reserved_1b : 5, // [30:26] 72 tail : 6, // [25:20] 73 crc : 4, // [19:16] 74 packet_extension_pe_disambiguity : 1, // [15:15] 75 packet_extension_a_factor : 2, // [14:13] 76 stbc : 1, // [12:12] 77 ldpc_extra_symbol : 1, // [11:11] 78 num_ltf_symbols : 3, // [10:8] 79 reserved_1a : 1, // [7:7] 80 txop_duration : 7; // [6:0] 81 #endif 82 }; 83 84 85 /* Description DL_UL_FLAG 86 87 Differentiates between DL and UL transmission 88 89 <enum 0 DL_UL_FLAG_IS_DL_OR_TDLS> 90 <enum 1 DL_UL_FLAG_IS_UL> 91 NOTE: This is unsupported for "HE MU" format (including "MU_SU") 92 Tx in Napier and Hastings80. 93 <legal all> 94 */ 95 96 #define HE_SIG_A_MU_DL_INFO_DL_UL_FLAG_OFFSET 0x00000000 97 #define HE_SIG_A_MU_DL_INFO_DL_UL_FLAG_LSB 0 98 #define HE_SIG_A_MU_DL_INFO_DL_UL_FLAG_MSB 0 99 #define HE_SIG_A_MU_DL_INFO_DL_UL_FLAG_MASK 0x00000001 100 101 102 /* Description MCS_OF_SIG_B 103 104 Indicates the MCS of HE-SIG-B 105 <legal 0-5> 106 */ 107 108 #define HE_SIG_A_MU_DL_INFO_MCS_OF_SIG_B_OFFSET 0x00000000 109 #define HE_SIG_A_MU_DL_INFO_MCS_OF_SIG_B_LSB 1 110 #define HE_SIG_A_MU_DL_INFO_MCS_OF_SIG_B_MSB 3 111 #define HE_SIG_A_MU_DL_INFO_MCS_OF_SIG_B_MASK 0x0000000e 112 113 114 /* Description DCM_OF_SIG_B 115 116 Indicates whether dual sub-carrier modulation is applied 117 to HE-SIG-B 118 119 0: No DCM for HE_SIG_B 120 1: DCM for HE_SIG_B 121 <legal all> 122 */ 123 124 #define HE_SIG_A_MU_DL_INFO_DCM_OF_SIG_B_OFFSET 0x00000000 125 #define HE_SIG_A_MU_DL_INFO_DCM_OF_SIG_B_LSB 4 126 #define HE_SIG_A_MU_DL_INFO_DCM_OF_SIG_B_MSB 4 127 #define HE_SIG_A_MU_DL_INFO_DCM_OF_SIG_B_MASK 0x00000010 128 129 130 /* Description BSS_COLOR_ID 131 132 BSS color ID 133 134 Field Used by MAC HW 135 <legal all> 136 */ 137 138 #define HE_SIG_A_MU_DL_INFO_BSS_COLOR_ID_OFFSET 0x00000000 139 #define HE_SIG_A_MU_DL_INFO_BSS_COLOR_ID_LSB 5 140 #define HE_SIG_A_MU_DL_INFO_BSS_COLOR_ID_MSB 10 141 #define HE_SIG_A_MU_DL_INFO_BSS_COLOR_ID_MASK 0x000007e0 142 143 144 /* Description SPATIAL_REUSE 145 146 Spatial reuse 147 148 For 20MHz one SR field corresponding to entire 20MHz (other 149 3 fields indicate identical values) 150 For 40MHz two SR fields for each 20MHz (other 2 fields indicate 151 identical values) 152 For 80MHz four SR fields for each 20MHz 153 For 160MHz four SR fields for each 40MHz 154 <legal all> 155 */ 156 157 #define HE_SIG_A_MU_DL_INFO_SPATIAL_REUSE_OFFSET 0x00000000 158 #define HE_SIG_A_MU_DL_INFO_SPATIAL_REUSE_LSB 11 159 #define HE_SIG_A_MU_DL_INFO_SPATIAL_REUSE_MSB 14 160 #define HE_SIG_A_MU_DL_INFO_SPATIAL_REUSE_MASK 0x00007800 161 162 163 /* Description TRANSMIT_BW 164 165 Bandwidth of the PPDU. 166 167 <enum 0 HE_SIG_A_MU_DL_BW20> 20 Mhz 168 <enum 1 HE_SIG_A_MU_DL_BW40> 40 Mhz 169 <enum 2 HE_SIG_A_MU_DL_BW80> 80 MHz non-preamble puncturing 170 mode 171 <enum 3 HE_SIG_A_MU_DL_BW160> 160 MHz and 80+80 MHz non-preamble 172 puncturing mode 173 <enum 4 HE_SIG_A_MU_DL_BW80_SEC_20_PUNC> for preamble puncturing 174 in 80 MHz, where in the preamble only the secondary 20 175 MHz is punctured 176 <enum 5 HE_SIG_A_MU_DL_BW80_20_PUNC_IN_SEC_40> for preamble 177 puncturing in 80 MHz, where in the preamble only one of 178 the two 20 MHz sub-channels in secondary 40 MHz is punctured. 179 180 <enum 6 HE_SIG_A_MU_DL_BW160_SEC_20_PUNC> for preamble puncturing 181 in 160 MHz or 80+80 MHz, where in the primary 80 MHz of 182 the preamble only the secondary 20 MHz is punctured. 183 <enum 7 HE_SIG_A_MU_DL_BW160_SEC_40_80_PUNC> for preamble 184 puncturing in 160 MHz or 80+80 MHz, where in the primary 185 80 MHz of the preamble the primary 40 MHz is present. 186 187 On RX side, Field Used by MAC HW 188 <legal 0-7> 189 */ 190 191 #define HE_SIG_A_MU_DL_INFO_TRANSMIT_BW_OFFSET 0x00000000 192 #define HE_SIG_A_MU_DL_INFO_TRANSMIT_BW_LSB 15 193 #define HE_SIG_A_MU_DL_INFO_TRANSMIT_BW_MSB 17 194 #define HE_SIG_A_MU_DL_INFO_TRANSMIT_BW_MASK 0x00038000 195 196 197 /* Description NUM_SIG_B_SYMBOLS 198 199 Number of symbols 200 201 For OFDMA, the actual number of symbols is 1 larger then 202 indicated in this field. 203 204 For MU-MIMO this is equal to the number of users - 1: the 205 following encoding is used: 206 1 => 2 users 207 2 => 3 users 208 Etc. 209 210 <legal all> 211 */ 212 213 #define HE_SIG_A_MU_DL_INFO_NUM_SIG_B_SYMBOLS_OFFSET 0x00000000 214 #define HE_SIG_A_MU_DL_INFO_NUM_SIG_B_SYMBOLS_LSB 18 215 #define HE_SIG_A_MU_DL_INFO_NUM_SIG_B_SYMBOLS_MSB 21 216 #define HE_SIG_A_MU_DL_INFO_NUM_SIG_B_SYMBOLS_MASK 0x003c0000 217 218 219 /* Description COMP_MODE_SIG_B 220 221 Indicates the compression mode of HE-SIG-B 222 223 0: Regular [uncomp mode] 224 1: compressed mode (full-BW MU-MIMO only) 225 <legal all> 226 */ 227 228 #define HE_SIG_A_MU_DL_INFO_COMP_MODE_SIG_B_OFFSET 0x00000000 229 #define HE_SIG_A_MU_DL_INFO_COMP_MODE_SIG_B_LSB 22 230 #define HE_SIG_A_MU_DL_INFO_COMP_MODE_SIG_B_MSB 22 231 #define HE_SIG_A_MU_DL_INFO_COMP_MODE_SIG_B_MASK 0x00400000 232 233 234 /* Description CP_LTF_SIZE 235 236 Indicates the CP and HE-LTF type 237 238 <enum 0 MU_FourX_LTF_0_8CP> 4xLTF + 0.8 us CP 239 <enum 1 MU_TwoX_LTF_0_8CP> 2x LTF + 0.8 µs CP 240 <enum 2 MU_TwoX_LTF_1_6CP> 2x LTF + 1.6 µs CP 241 <enum 3 MU_FourX_LTF_3_2CP> 4x LTF + 3.2 µs CP 242 243 <legal all> 244 */ 245 246 #define HE_SIG_A_MU_DL_INFO_CP_LTF_SIZE_OFFSET 0x00000000 247 #define HE_SIG_A_MU_DL_INFO_CP_LTF_SIZE_LSB 23 248 #define HE_SIG_A_MU_DL_INFO_CP_LTF_SIZE_MSB 24 249 #define HE_SIG_A_MU_DL_INFO_CP_LTF_SIZE_MASK 0x01800000 250 251 252 /* Description DOPPLER_INDICATION 253 254 0: No Doppler support 255 1: Doppler support 256 <legal all> 257 */ 258 259 #define HE_SIG_A_MU_DL_INFO_DOPPLER_INDICATION_OFFSET 0x00000000 260 #define HE_SIG_A_MU_DL_INFO_DOPPLER_INDICATION_LSB 25 261 #define HE_SIG_A_MU_DL_INFO_DOPPLER_INDICATION_MSB 25 262 #define HE_SIG_A_MU_DL_INFO_DOPPLER_INDICATION_MASK 0x02000000 263 264 265 /* Description RESERVED_0A 266 267 <legal 0> 268 */ 269 270 #define HE_SIG_A_MU_DL_INFO_RESERVED_0A_OFFSET 0x00000000 271 #define HE_SIG_A_MU_DL_INFO_RESERVED_0A_LSB 26 272 #define HE_SIG_A_MU_DL_INFO_RESERVED_0A_MSB 31 273 #define HE_SIG_A_MU_DL_INFO_RESERVED_0A_MASK 0xfc000000 274 275 276 /* Description TXOP_DURATION 277 278 Indicates the remaining time in the current TXOP 279 280 Field Used by MAC HW 281 <legal all> 282 */ 283 284 #define HE_SIG_A_MU_DL_INFO_TXOP_DURATION_OFFSET 0x00000004 285 #define HE_SIG_A_MU_DL_INFO_TXOP_DURATION_LSB 0 286 #define HE_SIG_A_MU_DL_INFO_TXOP_DURATION_MSB 6 287 #define HE_SIG_A_MU_DL_INFO_TXOP_DURATION_MASK 0x0000007f 288 289 290 /* Description RESERVED_1A 291 292 Note: spec indicates this shall be set to 1 293 <legal 1> 294 */ 295 296 #define HE_SIG_A_MU_DL_INFO_RESERVED_1A_OFFSET 0x00000004 297 #define HE_SIG_A_MU_DL_INFO_RESERVED_1A_LSB 7 298 #define HE_SIG_A_MU_DL_INFO_RESERVED_1A_MSB 7 299 #define HE_SIG_A_MU_DL_INFO_RESERVED_1A_MASK 0x00000080 300 301 302 /* Description NUM_LTF_SYMBOLS 303 304 Indicates the number of HE-LTF symbols 305 306 0: 1 LTF 307 1: 2 LTFs 308 2: 4 LTFs 309 3: 6 LTFs 310 4: 8 LTFs 311 312 <legal all> 313 */ 314 315 #define HE_SIG_A_MU_DL_INFO_NUM_LTF_SYMBOLS_OFFSET 0x00000004 316 #define HE_SIG_A_MU_DL_INFO_NUM_LTF_SYMBOLS_LSB 8 317 #define HE_SIG_A_MU_DL_INFO_NUM_LTF_SYMBOLS_MSB 10 318 #define HE_SIG_A_MU_DL_INFO_NUM_LTF_SYMBOLS_MASK 0x00000700 319 320 321 /* Description LDPC_EXTRA_SYMBOL 322 323 If LDPC, 324 0: LDPC extra symbol not present 325 1: LDPC extra symbol present 326 Else 327 Set to 1 328 <legal all> 329 */ 330 331 #define HE_SIG_A_MU_DL_INFO_LDPC_EXTRA_SYMBOL_OFFSET 0x00000004 332 #define HE_SIG_A_MU_DL_INFO_LDPC_EXTRA_SYMBOL_LSB 11 333 #define HE_SIG_A_MU_DL_INFO_LDPC_EXTRA_SYMBOL_MSB 11 334 #define HE_SIG_A_MU_DL_INFO_LDPC_EXTRA_SYMBOL_MASK 0x00000800 335 336 337 /* Description STBC 338 339 Indicates whether STBC is applied 340 0: No STBC 341 1: STBC 342 <legal all> 343 */ 344 345 #define HE_SIG_A_MU_DL_INFO_STBC_OFFSET 0x00000004 346 #define HE_SIG_A_MU_DL_INFO_STBC_LSB 12 347 #define HE_SIG_A_MU_DL_INFO_STBC_MSB 12 348 #define HE_SIG_A_MU_DL_INFO_STBC_MASK 0x00001000 349 350 351 /* Description PACKET_EXTENSION_A_FACTOR 352 353 the packet extension duration of the trigger-based PPDU 354 response with these two bits indicating the "a-factor" 355 356 <enum 0 a_factor_4> 357 <enum 1 a_factor_1> 358 <enum 2 a_factor_2> 359 <enum 3 a_factor_3> 360 361 <legal all> 362 */ 363 364 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_A_FACTOR_OFFSET 0x00000004 365 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_A_FACTOR_LSB 13 366 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_A_FACTOR_MSB 14 367 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_A_FACTOR_MASK 0x00006000 368 369 370 /* Description PACKET_EXTENSION_PE_DISAMBIGUITY 371 372 the packet extension duration of the trigger-based PPDU 373 response with this bit indicating the PE-Disambiguity 374 <legal all> 375 */ 376 377 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_OFFSET 0x00000004 378 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_LSB 15 379 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_MSB 15 380 #define HE_SIG_A_MU_DL_INFO_PACKET_EXTENSION_PE_DISAMBIGUITY_MASK 0x00008000 381 382 383 /* Description CRC 384 385 CRC for HE-SIG-A contents. 386 <legal all> 387 */ 388 389 #define HE_SIG_A_MU_DL_INFO_CRC_OFFSET 0x00000004 390 #define HE_SIG_A_MU_DL_INFO_CRC_LSB 16 391 #define HE_SIG_A_MU_DL_INFO_CRC_MSB 19 392 #define HE_SIG_A_MU_DL_INFO_CRC_MASK 0x000f0000 393 394 395 /* Description TAIL 396 397 <legal 0> 398 */ 399 400 #define HE_SIG_A_MU_DL_INFO_TAIL_OFFSET 0x00000004 401 #define HE_SIG_A_MU_DL_INFO_TAIL_LSB 20 402 #define HE_SIG_A_MU_DL_INFO_TAIL_MSB 25 403 #define HE_SIG_A_MU_DL_INFO_TAIL_MASK 0x03f00000 404 405 406 /* Description RESERVED_1B 407 408 <legal 0> 409 */ 410 411 #define HE_SIG_A_MU_DL_INFO_RESERVED_1B_OFFSET 0x00000004 412 #define HE_SIG_A_MU_DL_INFO_RESERVED_1B_LSB 26 413 #define HE_SIG_A_MU_DL_INFO_RESERVED_1B_MSB 30 414 #define HE_SIG_A_MU_DL_INFO_RESERVED_1B_MASK 0x7c000000 415 416 417 /* Description RX_INTEGRITY_CHECK_PASSED 418 419 TX side: Set to 0 420 RX side: Set to 1 if PHY determines the HE-SIG-A CRC check 421 has passed, else set to 0 422 423 <legal all> 424 */ 425 426 #define HE_SIG_A_MU_DL_INFO_RX_INTEGRITY_CHECK_PASSED_OFFSET 0x00000004 427 #define HE_SIG_A_MU_DL_INFO_RX_INTEGRITY_CHECK_PASSED_LSB 31 428 #define HE_SIG_A_MU_DL_INFO_RX_INTEGRITY_CHECK_PASSED_MSB 31 429 #define HE_SIG_A_MU_DL_INFO_RX_INTEGRITY_CHECK_PASSED_MASK 0x80000000 430 431 432 433 #endif // HE_SIG_A_MU_DL_INFO 434