1 /* 2 * Copyright (c) 2019, The Linux Foundation. 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 23 // ################ START SUMMARY ################# 24 // 25 // Dword Fields 26 // 0 dl_ul_flag[0], mcs_of_sig_b[3:1], dcm_of_sig_b[4], bss_color_id[10:5], spatial_reuse[14:11], transmit_bw[17:15], num_sig_b_symbols[21:18], comp_mode_sig_b[22], cp_ltf_size[24:23], doppler_indication[25], reserved_0a[31:26] 27 // 1 txop_duration[6:0], reserved_1a[7], num_ltf_symbols[10:8], ldpc_extra_symbol[11], stbc[12], packet_extension_a_factor[14:13], packet_extension_pe_disambiguity[15], crc[19:16], tail[25:20], reserved_1b[31:26] 28 // 29 // ################ END SUMMARY ################# 30 31 #define NUM_OF_DWORDS_HE_SIG_A_MU_DL_INFO 2 32 33 struct he_sig_a_mu_dl_info { 34 uint32_t dl_ul_flag : 1, //[0] 35 mcs_of_sig_b : 3, //[3:1] 36 dcm_of_sig_b : 1, //[4] 37 bss_color_id : 6, //[10:5] 38 spatial_reuse : 4, //[14:11] 39 transmit_bw : 3, //[17:15] 40 num_sig_b_symbols : 4, //[21:18] 41 comp_mode_sig_b : 1, //[22] 42 cp_ltf_size : 2, //[24:23] 43 doppler_indication : 1, //[25] 44 reserved_0a : 6; //[31:26] 45 uint32_t txop_duration : 7, //[6:0] 46 reserved_1a : 1, //[7] 47 num_ltf_symbols : 3, //[10:8] 48 ldpc_extra_symbol : 1, //[11] 49 stbc : 1, //[12] 50 packet_extension_a_factor : 2, //[14:13] 51 packet_extension_pe_disambiguity: 1, //[15] 52 crc : 4, //[19:16] 53 tail : 6, //[25:20] 54 reserved_1b : 6; //[31:26] 55 }; 56 57 /* 58 59 dl_ul_flag 60 61 Differentiates between DL and UL transmission 62 63 64 65 <enum 0 DL_UL_FLAG_IS_DL_OR_TDLS> 66 67 <enum 1 DL_UL_FLAG_IS_UL> 68 69 NOTE: This is unsupported for HE MU format (including 70 MU_SU) Tx in Napier and Hastings80. 71 72 <legal all> 73 74 mcs_of_sig_b 75 76 Indicates the MCS of HE-SIG-B 77 78 <legal 0-5> 79 80 dcm_of_sig_b 81 82 Indicates whether dual sub-carrier modulation is applied 83 to HE-SIG-B 84 85 86 87 0: No DCM for HE_SIG_B 88 89 1: DCM for HE_SIG_B 90 91 <legal all> 92 93 bss_color_id 94 95 BSS color ID 96 97 98 99 Field Used by MAC HW 100 101 <legal all> 102 103 spatial_reuse 104 105 Spatial reuse 106 107 108 109 For 20MHz one SR field corresponding to entire 20MHz 110 (other 3 fields indicate identical values) 111 112 For 40MHz two SR fields for each 20MHz (other 2 fields 113 indicate identical values) 114 115 For 80MHz four SR fields for each 20MHz 116 117 For 160MHz four SR fields for each 40MHz 118 119 <legal all> 120 121 transmit_bw 122 123 Bandwidth of the PPDU. 124 125 126 127 <enum 0 HE_SIG_A_MU_DL_BW20> 20 Mhz 128 129 <enum 1 HE_SIG_A_MU_DL_BW40> 40 Mhz 130 131 <enum 2 HE_SIG_A_MU_DL_BW80> 80 MHz non-preamble 132 puncturing mode 133 134 <enum 3 HE_SIG_A_MU_DL_BW160> 160 MHz and 80+80 MHz 135 non-preamble puncturing mode 136 137 <enum 4 HE_SIG_A_MU_DL_BW80_SEC_20_PUNC> for preamble 138 puncturing in 80 MHz, where in the preamble only the 139 secondary 20 MHz is punctured 140 141 <enum 5 HE_SIG_A_MU_DL_BW80_20_PUNC_IN_SEC_40> for 142 preamble puncturing in 80 MHz, where in the preamble only 143 one of the two 20 MHz sub-channels in secondary 40 MHz is 144 punctured. 145 146 <enum 6 HE_SIG_A_MU_DL_BW160_SEC_20_PUNC> for preamble 147 puncturing in 160 MHz or 80+80 MHz, where in the primary 80 148 MHz of the preamble only the secondary 20 MHz is punctured. 149 150 <enum 7 HE_SIG_A_MU_DL_BW160_SEC_40_80_PUNC> for 151 preamble puncturing in 160 MHz or 80+80 MHz, where in the 152 primary 80 MHz of the preamble the primary 40 MHz is 153 present. 154 155 156 157 On RX side, Field Used by MAC HW 158 159 <legal 0-7> 160 161 num_sig_b_symbols 162 163 Number of symbols 164 165 166 167 For OFDMA, the actual number of symbols is 1 larger then 168 indicated in this field. 169 170 171 172 For MU-MIMO this is equal to the number of users - 1: 173 the following encoding is used: 174 175 1 => 2 users 176 177 2 => 3 users 178 179 Etc. 180 181 182 183 <legal all> 184 185 comp_mode_sig_b 186 187 Indicates the compression mode of HE-SIG-B 188 189 190 191 0: Regular [uncomp mode] 192 193 1: compressed mode (full-BW MU-MIMO only) 194 195 <legal all> 196 197 cp_ltf_size 198 199 Indicates the CP and HE-LTF type 200 201 202 203 <enum 0 MU_FourX_LTF_0_8CP> 4xLTF + 0.8 us CP 204 205 <enum 1 MU_TwoX_LTF_0_8CP> 2x LTF + 0.8 µs CP 206 207 <enum 2 MU_TwoX_LTF_1_6CP> 2x LTF + 1.6 µs CP 208 209 <enum 3 MU_FourX_LTF_3_2CP> 4x LTF + 3.2 µs CP 210 211 212 213 214 <legal all> 215 216 doppler_indication 217 218 0: No Doppler support 219 220 1: Doppler support 221 222 <legal all> 223 224 reserved_0a 225 226 <legal 0> 227 228 txop_duration 229 230 Indicates the remaining time in the current TXOP 231 232 233 234 Field Used by MAC HW 235 236 <legal all> 237 238 reserved_1a 239 240 Note: spec indicates this shall be set to 1 241 242 <legal 1> 243 244 num_ltf_symbols 245 246 Indicates the number of HE-LTF symbols 247 248 249 250 0: 1 LTF 251 252 1: 2 LTFs 253 254 2: 4 LTFs 255 256 3: 6 LTFs 257 258 4: 8 LTFs 259 260 261 262 <legal all> 263 264 ldpc_extra_symbol 265 266 If LDPC, 267 268 0: LDPC extra symbol not present 269 270 1: LDPC extra symbol present 271 272 Else 273 274 Set to 1 275 276 <legal all> 277 278 stbc 279 280 Indicates whether STBC is applied 281 282 0: No STBC 283 284 1: STBC 285 286 <legal all> 287 288 packet_extension_a_factor 289 290 the packet extension duration of the trigger-based PPDU 291 response with these two bits indicating the a-factor 292 293 294 295 <enum 0 a_factor_4> 296 297 <enum 1 a_factor_1> 298 299 <enum 2 a_factor_2> 300 301 <enum 3 a_factor_3> 302 303 304 305 <legal all> 306 307 packet_extension_pe_disambiguity 308 309 the packet extension duration of the trigger-based PPDU 310 response with this bit indicating the PE-Disambiguity 311 312 <legal all> 313 314 crc 315 316 CRC for HE-SIG-A contents. 317 318 <legal all> 319 320 tail 321 322 <legal 0> 323 324 reserved_1b 325 326 <legal 0> 327 */ 328 329 330 /* Description HE_SIG_A_MU_DL_INFO_0_DL_UL_FLAG 331 332 Differentiates between DL and UL transmission 333 334 335 336 <enum 0 DL_UL_FLAG_IS_DL_OR_TDLS> 337 338 <enum 1 DL_UL_FLAG_IS_UL> 339 340 NOTE: This is unsupported for HE MU format (including 341 MU_SU) Tx in Napier and Hastings80. 342 343 <legal all> 344 */ 345 #define HE_SIG_A_MU_DL_INFO_0_DL_UL_FLAG_OFFSET 0x00000000 346 #define HE_SIG_A_MU_DL_INFO_0_DL_UL_FLAG_LSB 0 347 #define HE_SIG_A_MU_DL_INFO_0_DL_UL_FLAG_MASK 0x00000001 348 349 /* Description HE_SIG_A_MU_DL_INFO_0_MCS_OF_SIG_B 350 351 Indicates the MCS of HE-SIG-B 352 353 <legal 0-5> 354 */ 355 #define HE_SIG_A_MU_DL_INFO_0_MCS_OF_SIG_B_OFFSET 0x00000000 356 #define HE_SIG_A_MU_DL_INFO_0_MCS_OF_SIG_B_LSB 1 357 #define HE_SIG_A_MU_DL_INFO_0_MCS_OF_SIG_B_MASK 0x0000000e 358 359 /* Description HE_SIG_A_MU_DL_INFO_0_DCM_OF_SIG_B 360 361 Indicates whether dual sub-carrier modulation is applied 362 to HE-SIG-B 363 364 365 366 0: No DCM for HE_SIG_B 367 368 1: DCM for HE_SIG_B 369 370 <legal all> 371 */ 372 #define HE_SIG_A_MU_DL_INFO_0_DCM_OF_SIG_B_OFFSET 0x00000000 373 #define HE_SIG_A_MU_DL_INFO_0_DCM_OF_SIG_B_LSB 4 374 #define HE_SIG_A_MU_DL_INFO_0_DCM_OF_SIG_B_MASK 0x00000010 375 376 /* Description HE_SIG_A_MU_DL_INFO_0_BSS_COLOR_ID 377 378 BSS color ID 379 380 381 382 Field Used by MAC HW 383 384 <legal all> 385 */ 386 #define HE_SIG_A_MU_DL_INFO_0_BSS_COLOR_ID_OFFSET 0x00000000 387 #define HE_SIG_A_MU_DL_INFO_0_BSS_COLOR_ID_LSB 5 388 #define HE_SIG_A_MU_DL_INFO_0_BSS_COLOR_ID_MASK 0x000007e0 389 390 /* Description HE_SIG_A_MU_DL_INFO_0_SPATIAL_REUSE 391 392 Spatial reuse 393 394 395 396 For 20MHz one SR field corresponding to entire 20MHz 397 (other 3 fields indicate identical values) 398 399 For 40MHz two SR fields for each 20MHz (other 2 fields 400 indicate identical values) 401 402 For 80MHz four SR fields for each 20MHz 403 404 For 160MHz four SR fields for each 40MHz 405 406 <legal all> 407 */ 408 #define HE_SIG_A_MU_DL_INFO_0_SPATIAL_REUSE_OFFSET 0x00000000 409 #define HE_SIG_A_MU_DL_INFO_0_SPATIAL_REUSE_LSB 11 410 #define HE_SIG_A_MU_DL_INFO_0_SPATIAL_REUSE_MASK 0x00007800 411 412 /* Description HE_SIG_A_MU_DL_INFO_0_TRANSMIT_BW 413 414 Bandwidth of the PPDU. 415 416 417 418 <enum 0 HE_SIG_A_MU_DL_BW20> 20 Mhz 419 420 <enum 1 HE_SIG_A_MU_DL_BW40> 40 Mhz 421 422 <enum 2 HE_SIG_A_MU_DL_BW80> 80 MHz non-preamble 423 puncturing mode 424 425 <enum 3 HE_SIG_A_MU_DL_BW160> 160 MHz and 80+80 MHz 426 non-preamble puncturing mode 427 428 <enum 4 HE_SIG_A_MU_DL_BW80_SEC_20_PUNC> for preamble 429 puncturing in 80 MHz, where in the preamble only the 430 secondary 20 MHz is punctured 431 432 <enum 5 HE_SIG_A_MU_DL_BW80_20_PUNC_IN_SEC_40> for 433 preamble puncturing in 80 MHz, where in the preamble only 434 one of the two 20 MHz sub-channels in secondary 40 MHz is 435 punctured. 436 437 <enum 6 HE_SIG_A_MU_DL_BW160_SEC_20_PUNC> for preamble 438 puncturing in 160 MHz or 80+80 MHz, where in the primary 80 439 MHz of the preamble only the secondary 20 MHz is punctured. 440 441 <enum 7 HE_SIG_A_MU_DL_BW160_SEC_40_80_PUNC> for 442 preamble puncturing in 160 MHz or 80+80 MHz, where in the 443 primary 80 MHz of the preamble the primary 40 MHz is 444 present. 445 446 447 448 On RX side, Field Used by MAC HW 449 450 <legal 0-7> 451 */ 452 #define HE_SIG_A_MU_DL_INFO_0_TRANSMIT_BW_OFFSET 0x00000000 453 #define HE_SIG_A_MU_DL_INFO_0_TRANSMIT_BW_LSB 15 454 #define HE_SIG_A_MU_DL_INFO_0_TRANSMIT_BW_MASK 0x00038000 455 456 /* Description HE_SIG_A_MU_DL_INFO_0_NUM_SIG_B_SYMBOLS 457 458 Number of symbols 459 460 461 462 For OFDMA, the actual number of symbols is 1 larger then 463 indicated in this field. 464 465 466 467 For MU-MIMO this is equal to the number of users - 1: 468 the following encoding is used: 469 470 1 => 2 users 471 472 2 => 3 users 473 474 Etc. 475 476 477 478 <legal all> 479 */ 480 #define HE_SIG_A_MU_DL_INFO_0_NUM_SIG_B_SYMBOLS_OFFSET 0x00000000 481 #define HE_SIG_A_MU_DL_INFO_0_NUM_SIG_B_SYMBOLS_LSB 18 482 #define HE_SIG_A_MU_DL_INFO_0_NUM_SIG_B_SYMBOLS_MASK 0x003c0000 483 484 /* Description HE_SIG_A_MU_DL_INFO_0_COMP_MODE_SIG_B 485 486 Indicates the compression mode of HE-SIG-B 487 488 489 490 0: Regular [uncomp mode] 491 492 1: compressed mode (full-BW MU-MIMO only) 493 494 <legal all> 495 */ 496 #define HE_SIG_A_MU_DL_INFO_0_COMP_MODE_SIG_B_OFFSET 0x00000000 497 #define HE_SIG_A_MU_DL_INFO_0_COMP_MODE_SIG_B_LSB 22 498 #define HE_SIG_A_MU_DL_INFO_0_COMP_MODE_SIG_B_MASK 0x00400000 499 500 /* Description HE_SIG_A_MU_DL_INFO_0_CP_LTF_SIZE 501 502 Indicates the CP and HE-LTF type 503 504 505 506 <enum 0 MU_FourX_LTF_0_8CP> 4xLTF + 0.8 us CP 507 508 <enum 1 MU_TwoX_LTF_0_8CP> 2x LTF + 0.8 µs CP 509 510 <enum 2 MU_TwoX_LTF_1_6CP> 2x LTF + 1.6 µs CP 511 512 <enum 3 MU_FourX_LTF_3_2CP> 4x LTF + 3.2 µs CP 513 514 515 516 517 <legal all> 518 */ 519 #define HE_SIG_A_MU_DL_INFO_0_CP_LTF_SIZE_OFFSET 0x00000000 520 #define HE_SIG_A_MU_DL_INFO_0_CP_LTF_SIZE_LSB 23 521 #define HE_SIG_A_MU_DL_INFO_0_CP_LTF_SIZE_MASK 0x01800000 522 523 /* Description HE_SIG_A_MU_DL_INFO_0_DOPPLER_INDICATION 524 525 0: No Doppler support 526 527 1: Doppler support 528 529 <legal all> 530 */ 531 #define HE_SIG_A_MU_DL_INFO_0_DOPPLER_INDICATION_OFFSET 0x00000000 532 #define HE_SIG_A_MU_DL_INFO_0_DOPPLER_INDICATION_LSB 25 533 #define HE_SIG_A_MU_DL_INFO_0_DOPPLER_INDICATION_MASK 0x02000000 534 535 /* Description HE_SIG_A_MU_DL_INFO_0_RESERVED_0A 536 537 <legal 0> 538 */ 539 #define HE_SIG_A_MU_DL_INFO_0_RESERVED_0A_OFFSET 0x00000000 540 #define HE_SIG_A_MU_DL_INFO_0_RESERVED_0A_LSB 26 541 #define HE_SIG_A_MU_DL_INFO_0_RESERVED_0A_MASK 0xfc000000 542 543 /* Description HE_SIG_A_MU_DL_INFO_1_TXOP_DURATION 544 545 Indicates the remaining time in the current TXOP 546 547 548 549 Field Used by MAC HW 550 551 <legal all> 552 */ 553 #define HE_SIG_A_MU_DL_INFO_1_TXOP_DURATION_OFFSET 0x00000004 554 #define HE_SIG_A_MU_DL_INFO_1_TXOP_DURATION_LSB 0 555 #define HE_SIG_A_MU_DL_INFO_1_TXOP_DURATION_MASK 0x0000007f 556 557 /* Description HE_SIG_A_MU_DL_INFO_1_RESERVED_1A 558 559 Note: spec indicates this shall be set to 1 560 561 <legal 1> 562 */ 563 #define HE_SIG_A_MU_DL_INFO_1_RESERVED_1A_OFFSET 0x00000004 564 #define HE_SIG_A_MU_DL_INFO_1_RESERVED_1A_LSB 7 565 #define HE_SIG_A_MU_DL_INFO_1_RESERVED_1A_MASK 0x00000080 566 567 /* Description HE_SIG_A_MU_DL_INFO_1_NUM_LTF_SYMBOLS 568 569 Indicates the number of HE-LTF symbols 570 571 572 573 0: 1 LTF 574 575 1: 2 LTFs 576 577 2: 4 LTFs 578 579 3: 6 LTFs 580 581 4: 8 LTFs 582 583 584 585 <legal all> 586 */ 587 #define HE_SIG_A_MU_DL_INFO_1_NUM_LTF_SYMBOLS_OFFSET 0x00000004 588 #define HE_SIG_A_MU_DL_INFO_1_NUM_LTF_SYMBOLS_LSB 8 589 #define HE_SIG_A_MU_DL_INFO_1_NUM_LTF_SYMBOLS_MASK 0x00000700 590 591 /* Description HE_SIG_A_MU_DL_INFO_1_LDPC_EXTRA_SYMBOL 592 593 If LDPC, 594 595 0: LDPC extra symbol not present 596 597 1: LDPC extra symbol present 598 599 Else 600 601 Set to 1 602 603 <legal all> 604 */ 605 #define HE_SIG_A_MU_DL_INFO_1_LDPC_EXTRA_SYMBOL_OFFSET 0x00000004 606 #define HE_SIG_A_MU_DL_INFO_1_LDPC_EXTRA_SYMBOL_LSB 11 607 #define HE_SIG_A_MU_DL_INFO_1_LDPC_EXTRA_SYMBOL_MASK 0x00000800 608 609 /* Description HE_SIG_A_MU_DL_INFO_1_STBC 610 611 Indicates whether STBC is applied 612 613 0: No STBC 614 615 1: STBC 616 617 <legal all> 618 */ 619 #define HE_SIG_A_MU_DL_INFO_1_STBC_OFFSET 0x00000004 620 #define HE_SIG_A_MU_DL_INFO_1_STBC_LSB 12 621 #define HE_SIG_A_MU_DL_INFO_1_STBC_MASK 0x00001000 622 623 /* Description HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_A_FACTOR 624 625 the packet extension duration of the trigger-based PPDU 626 response with these two bits indicating the a-factor 627 628 629 630 <enum 0 a_factor_4> 631 632 <enum 1 a_factor_1> 633 634 <enum 2 a_factor_2> 635 636 <enum 3 a_factor_3> 637 638 639 640 <legal all> 641 */ 642 #define HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_A_FACTOR_OFFSET 0x00000004 643 #define HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_A_FACTOR_LSB 13 644 #define HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_A_FACTOR_MASK 0x00006000 645 646 /* Description HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_PE_DISAMBIGUITY 647 648 the packet extension duration of the trigger-based PPDU 649 response with this bit indicating the PE-Disambiguity 650 651 <legal all> 652 */ 653 #define HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_PE_DISAMBIGUITY_OFFSET 0x00000004 654 #define HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_PE_DISAMBIGUITY_LSB 15 655 #define HE_SIG_A_MU_DL_INFO_1_PACKET_EXTENSION_PE_DISAMBIGUITY_MASK 0x00008000 656 657 /* Description HE_SIG_A_MU_DL_INFO_1_CRC 658 659 CRC for HE-SIG-A contents. 660 661 <legal all> 662 */ 663 #define HE_SIG_A_MU_DL_INFO_1_CRC_OFFSET 0x00000004 664 #define HE_SIG_A_MU_DL_INFO_1_CRC_LSB 16 665 #define HE_SIG_A_MU_DL_INFO_1_CRC_MASK 0x000f0000 666 667 /* Description HE_SIG_A_MU_DL_INFO_1_TAIL 668 669 <legal 0> 670 */ 671 #define HE_SIG_A_MU_DL_INFO_1_TAIL_OFFSET 0x00000004 672 #define HE_SIG_A_MU_DL_INFO_1_TAIL_LSB 20 673 #define HE_SIG_A_MU_DL_INFO_1_TAIL_MASK 0x03f00000 674 675 /* Description HE_SIG_A_MU_DL_INFO_1_RESERVED_1B 676 677 <legal 0> 678 */ 679 #define HE_SIG_A_MU_DL_INFO_1_RESERVED_1B_OFFSET 0x00000004 680 #define HE_SIG_A_MU_DL_INFO_1_RESERVED_1B_LSB 26 681 #define HE_SIG_A_MU_DL_INFO_1_RESERVED_1B_MASK 0xfc000000 682 683 684 #endif // _HE_SIG_A_MU_DL_INFO_H_ 685