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