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