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 _MACTX_VHT_SIG_A_H_ 18 #define _MACTX_VHT_SIG_A_H_ 19 #if !defined(__ASSEMBLER__) 20 #endif 21 22 #include "vht_sig_a_info.h" 23 #define NUM_OF_DWORDS_MACTX_VHT_SIG_A 2 24 25 #define NUM_OF_QWORDS_MACTX_VHT_SIG_A 1 26 27 28 struct mactx_vht_sig_a { 29 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 30 struct vht_sig_a_info mactx_vht_sig_a_info_details; 31 #else 32 struct vht_sig_a_info mactx_vht_sig_a_info_details; 33 #endif 34 }; 35 36 37 /* Description MACTX_VHT_SIG_A_INFO_DETAILS 38 39 See detailed description of the STRUCT 40 */ 41 42 43 /* Description BANDWIDTH 44 45 Packet bandwidth 46 47 <enum 0 20_MHZ_11AC> 48 <enum 1 40_MHZ_11AC> 49 <enum 2 80_MHZ_11AC> 50 <enum 3 160_MHZ_11AC> 51 52 <legal 0-3> 53 */ 54 55 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_OFFSET 0x0000000000000000 56 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_LSB 0 57 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_MSB 1 58 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_MASK 0x0000000000000003 59 60 61 /* Description VHTA_RESERVED_0 62 63 Reserved. Set to 1 by MAC, PHY should ignore 64 <legal 1> 65 */ 66 67 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_OFFSET 0x0000000000000000 68 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_LSB 2 69 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_MSB 2 70 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_MASK 0x0000000000000004 71 72 73 /* Description STBC 74 75 Space time block coding: 76 <enum 0 stbc_disabled> Indicates STBC is disabled 77 <enum 1 stbc_enabled> Indicates STBC is enabled on 78 all streams 79 <legal 0-1> 80 */ 81 82 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_STBC_OFFSET 0x0000000000000000 83 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_STBC_LSB 3 84 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_STBC_MSB 3 85 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_STBC_MASK 0x0000000000000008 86 87 88 /* Description GROUP_ID 89 90 In a SU VHT PPDU, if the PPDU carries MPDU(s) addressed 91 to an AP or to a mesh STA, the Group ID field is set to 92 0, otherwise it is set to 63. In an NDP PPDU the Group 93 ID is set according to IEEE 802.11ac_D1.0 Section 9.30.6 94 (Transmission of a VHT NDP). For a MU-MIMO PPDU the Group 95 ID is set as in 802.11ac_D1.0 Section 22.3.11.3 (Group 96 ID). <legal all> 97 */ 98 99 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_OFFSET 0x0000000000000000 100 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_LSB 4 101 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_MSB 9 102 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_MASK 0x00000000000003f0 103 104 105 /* Description N_STS 106 107 For MU: 108 3 bits/user with maximum of 4 users (user u uses 109 vht_sig_a[0][10+3u] - vht_sig_a[0][12+3u]), u = 0, 1, 2, 110 3) 111 Set to 0 for 0 space time streams 112 Set to 1 for 1 space time stream 113 Set to 2 for 2 space time streams 114 Set to 3 for 3 space time streams 115 Set to 4 for 4 space time streams (not supported in Wifi 116 3.0) 117 Values 5-7 are reserved 118 In this field, references to user "u" should be interpreted 119 as MU user "u". As described in the previous chapter in 120 this document (see chapter on User number), the MU user 121 value for a given client is defined for each MU group that 122 the client participates in. The MU user number is not related 123 to the internal user number that is used within the BFer. 124 125 126 127 For SU: 128 vht_sig_a[0][12:10] 129 Set to 0 for 1 space time stream 130 Set to 1 for 2 space time streams 131 Set to 2 for 3 space time streams 132 Set to 3 for 4 space time streams 133 Set to 4 for 5 space time streams 134 Set to 5 for 6 space time streams 135 Set to 6 for 7 space time streams 136 Set to 7 for 8 space time streams 137 138 vht_sig_a[0][21:13] 139 Partial AID: 140 Set to the value of the TXVECTOR parameter PARTIAL_AID. 141 Partial AID provides an abbreviated indication of the intended 142 recipient(s) of the frame (see IEEE802.11ac_D1.0 Section 143 9.17a (Partial AID in VHT PPDUs)). 144 <legal all> 145 */ 146 147 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_N_STS_OFFSET 0x0000000000000000 148 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_N_STS_LSB 10 149 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_N_STS_MSB 21 150 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_N_STS_MASK 0x00000000003ffc00 151 152 153 /* Description TXOP_PS_NOT_ALLOWED 154 155 E_num 0 txop_ps_allowed Not supported: If set to by 156 VHT AP if it allows non-AP VHT STAs in TXOP power save 157 mode to enter Doze state during a TXOP 158 <enum 1 no_txop_ps_allowed> Otherwise 159 <legal 1> 160 */ 161 162 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_OFFSET 0x0000000000000000 163 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_LSB 22 164 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_MSB 22 165 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_MASK 0x0000000000400000 166 167 168 /* Description VHTA_RESERVED_0B 169 170 Reserved: Should be set to 1 by the MAC and ignored by the 171 PHY <legal 1> 172 */ 173 174 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_OFFSET 0x0000000000000000 175 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_LSB 23 176 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_MSB 23 177 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_MASK 0x0000000000800000 178 179 180 /* Description RESERVED_0 181 182 This field is not part of HT-SIG: 183 Reserved: Should be set to 0 by the MAC and ignored by the 184 PHY <legal 0> 185 */ 186 187 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_OFFSET 0x0000000000000000 188 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_LSB 24 189 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_MSB 31 190 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_MASK 0x00000000ff000000 191 192 193 /* Description GI_SETTING 194 195 <enum 0 normal_gi> Indicates short guard interval is 196 not used in the data field 197 <enum 1 short_gi> Indicates short guard interval is 198 used in the data field 199 <enum 3 short_gi_ambiguity> Indicates short guard interval 200 is used in the data field and NSYM mod 10 = 9 201 NSYM is defined in IEEE802.11ac_D1.0 Section 22.4.3 (TXTIME 202 and PSDU_LENGTH calculation). 203 <legal 0,1,3> 204 */ 205 206 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_OFFSET 0x0000000000000000 207 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_LSB 32 208 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_MSB 33 209 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_MASK 0x0000000300000000 210 211 212 /* Description SU_MU_CODING 213 214 For an SU PPDU, B2 is set to 0 for BCC, 1 for LDPC For an 215 MU PPDU, if the MU[0] NSTS field is nonzero(#6773), then 216 B2 indicates the coding used for user 0; set to 0 for BCC 217 and 1 for LDPC. If the MU[0] NSTS field is 0, then this 218 field is reserved and set to 1 219 */ 220 221 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_OFFSET 0x0000000000000000 222 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_LSB 34 223 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_MSB 34 224 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_MASK 0x0000000400000000 225 226 227 /* Description LDPC_EXTRA_SYMBOL 228 229 Set to 1 if the LDPC PPDU encoding process (if an SU PPDU), 230 or at least one LDPC user's PPDU encoding process (if an 231 MU PPDU), results in an extra OFDM symbol (or symbols) 232 as described in 22.3.10.5.4 (LDPC coding) and 22.3.10.5.5 233 (Encoding process for MU PPDUs). Set to 0 otherwise. 234 */ 235 236 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_OFFSET 0x0000000000000000 237 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_LSB 35 238 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_MSB 35 239 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_MASK 0x0000000800000000 240 241 242 /* Description MCS 243 244 For SU: 245 Set to 0 for BPSK 1/2 246 Set to 1 for QPSK 1/2 247 Set to 2 for QPSK 3/4 248 Set to 3 for 16-QAM 1/2 249 Set to 4 for 16-QAM 3/4 250 Set to 5 for 64-QAM 2/3 251 Set to 6 for 64-QAM 3/4 252 Set to 7 for 64-QAM 5/6 253 Set to 8 for 256-QAM 3/4 254 Set to 9 for 256-QAM 5/6 255 For MU: 256 If NSTS for user 1 is non-zero, then vht_sig_a[1][4] indicates 257 coding for user 1: set to 0 for BCC, 1 for LDPC. 258 If NSTS for user 1 is set to 0, then vht_sig_a[1][4] is 259 reserved and set to 1. 260 If NSTS for user 2 is non-zero, then vht_sig_a[1][5] indicates 261 coding for user 2: set to 0 for BCC, 1 for LDPC. 262 If NSTS for user 2 is set to 0, then vht_sig_a[1][5] is 263 reserved and set to 1. 264 If NSTS for user 3 is non-zero, then vht_sig_a[1][6] indicates 265 coding for user 3: set to 0 for BCC, 1 for LDPC. 266 If NSTS for user 3 is set to 0, then vht_sig_a[1][6] is 267 reserved and set to 1. 268 vht_sig_a[1][7] is reserved and set to 1 269 <legal 0-15> 270 */ 271 272 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_MCS_OFFSET 0x0000000000000000 273 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_MCS_LSB 36 274 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_MCS_MSB 39 275 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_MCS_MASK 0x000000f000000000 276 277 278 /* Description BEAMFORMED 279 280 For SU: 281 Set to 1 if a Beamforming steering matrix is applied to 282 the waveform in an SU transmission as described in IEEE802.11ac_D1.0 283 Section 19.3.11.11.2 (Spatial mapping), set to 0 otherwise. 284 285 For MU: 286 Reserved and set to 1 287 <legal 0-1> 288 */ 289 290 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_OFFSET 0x0000000000000000 291 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_LSB 40 292 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_MSB 40 293 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_MASK 0x0000010000000000 294 295 296 /* Description VHTA_RESERVED_1 297 298 Reserved and set to 1. <legal 1> 299 */ 300 301 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_OFFSET 0x0000000000000000 302 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_LSB 41 303 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_MSB 41 304 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_MASK 0x0000020000000000 305 306 307 /* Description CRC 308 309 CRC calculated as in IEEE802.11ac_D1.0 Section 19.3.9.4.4 310 (CRC calculation for HTSIG) with C7 in vht_sig_a[1][10], 311 etc. <legal all> 312 */ 313 314 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_CRC_OFFSET 0x0000000000000000 315 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_CRC_LSB 42 316 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_CRC_MSB 49 317 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_CRC_MASK 0x0003fc0000000000 318 319 320 /* Description TAIL 321 322 Used to terminate the trellis of the convolutional decoder. 323 Set to 0. <legal 0> 324 */ 325 326 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TAIL_OFFSET 0x0000000000000000 327 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TAIL_LSB 50 328 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TAIL_MSB 55 329 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_TAIL_MASK 0x00fc000000000000 330 331 332 /* Description RESERVED_1 333 334 This field is not part of HT-SIG: 335 Reserved: Should be set to 0 by the MAC and ignored by the 336 PHY <legal 0> 337 */ 338 339 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_OFFSET 0x0000000000000000 340 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_LSB 56 341 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_MSB 62 342 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_MASK 0x7f00000000000000 343 344 345 /* Description RX_INTEGRITY_CHECK_PASSED 346 347 TX side: Set to 0 348 RX side: Set to 1 if PHY determines the VHT-SIG-A CRC check 349 has passed, else set to 0 350 351 <legal all> 352 */ 353 354 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_OFFSET 0x0000000000000000 355 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_LSB 63 356 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_MSB 63 357 #define MACTX_VHT_SIG_A_MACTX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_MASK 0x8000000000000000 358 359 360 361 #endif // MACTX_VHT_SIG_A 362