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