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 _PHYRX_VHT_SIG_A_H_ 27 #define _PHYRX_VHT_SIG_A_H_ 28 #if !defined(__ASSEMBLER__) 29 #endif 30 31 #include "vht_sig_a_info.h" 32 #define NUM_OF_DWORDS_PHYRX_VHT_SIG_A 2 33 34 #define NUM_OF_QWORDS_PHYRX_VHT_SIG_A 1 35 36 37 struct phyrx_vht_sig_a { 38 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 39 struct vht_sig_a_info phyrx_vht_sig_a_info_details; 40 #else 41 struct vht_sig_a_info phyrx_vht_sig_a_info_details; 42 #endif 43 }; 44 45 46 /* Description PHYRX_VHT_SIG_A_INFO_DETAILS 47 48 See detailed description of the STRUCT 49 */ 50 51 52 /* Description BANDWIDTH 53 54 Packet bandwidth 55 56 <enum 0 20_MHZ_11AC> 57 <enum 1 40_MHZ_11AC> 58 <enum 2 80_MHZ_11AC> 59 <enum 3 160_MHZ_11AC> 60 61 <legal 0-3> 62 */ 63 64 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_OFFSET 0x0000000000000000 65 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_LSB 0 66 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_MSB 1 67 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_MASK 0x0000000000000003 68 69 70 /* Description VHTA_RESERVED_0 71 72 Reserved. Set to 1 by MAC, PHY should ignore 73 <legal 1> 74 */ 75 76 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_OFFSET 0x0000000000000000 77 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_LSB 2 78 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_MSB 2 79 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0_MASK 0x0000000000000004 80 81 82 /* Description STBC 83 84 Space time block coding: 85 <enum 0 stbc_disabled> Indicates STBC is disabled 86 <enum 1 stbc_enabled> Indicates STBC is enabled on 87 all streams 88 <legal 0-1> 89 */ 90 91 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_STBC_OFFSET 0x0000000000000000 92 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_STBC_LSB 3 93 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_STBC_MSB 3 94 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_STBC_MASK 0x0000000000000008 95 96 97 /* Description GROUP_ID 98 99 In a SU VHT PPDU, if the PPDU carries MPDU(s) addressed 100 to an AP or to a mesh STA, the Group ID field is set to 101 0, otherwise it is set to 63. In an NDP PPDU the Group 102 ID is set according to IEEE 802.11ac_D1.0 Section 9.30.6 103 (Transmission of a VHT NDP). For a MU-MIMO PPDU the Group 104 ID is set as in 802.11ac_D1.0 Section 22.3.11.3 (Group 105 ID). <legal all> 106 */ 107 108 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_OFFSET 0x0000000000000000 109 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_LSB 4 110 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_MSB 9 111 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GROUP_ID_MASK 0x00000000000003f0 112 113 114 /* Description N_STS 115 116 For MU: 117 3 bits/user with maximum of 4 users (user u uses 118 vht_sig_a[0][10+3u] - vht_sig_a[0][12+3u]), u = 0, 1, 2, 119 3) 120 Set to 0 for 0 space time streams 121 Set to 1 for 1 space time stream 122 Set to 2 for 2 space time streams 123 Set to 3 for 3 space time streams 124 Set to 4 for 4 space time streams (not supported in Wifi 125 3.0) 126 Values 5-7 are reserved 127 In this field, references to user "u" should be interpreted 128 as MU user "u". As described in the previous chapter in 129 this document (see chapter on User number), the MU user 130 value for a given client is defined for each MU group that 131 the client participates in. The MU user number is not related 132 to the internal user number that is used within the BFer. 133 134 135 136 For SU: 137 vht_sig_a[0][12:10] 138 Set to 0 for 1 space time stream 139 Set to 1 for 2 space time streams 140 Set to 2 for 3 space time streams 141 Set to 3 for 4 space time streams 142 Set to 4 for 5 space time streams 143 Set to 5 for 6 space time streams 144 Set to 6 for 7 space time streams 145 Set to 7 for 8 space time streams 146 147 vht_sig_a[0][21:13] 148 Partial AID: 149 Set to the value of the TXVECTOR parameter PARTIAL_AID. 150 Partial AID provides an abbreviated indication of the intended 151 recipient(s) of the frame (see IEEE802.11ac_D1.0 Section 152 9.17a (Partial AID in VHT PPDUs)). 153 <legal all> 154 */ 155 156 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_N_STS_OFFSET 0x0000000000000000 157 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_N_STS_LSB 10 158 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_N_STS_MSB 21 159 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_N_STS_MASK 0x00000000003ffc00 160 161 162 /* Description TXOP_PS_NOT_ALLOWED 163 164 E_num 0 txop_ps_allowed Not supported: If set to by 165 VHT AP if it allows non-AP VHT STAs in TXOP power save 166 mode to enter Doze state during a TXOP 167 <enum 1 no_txop_ps_allowed> Otherwise 168 <legal 1> 169 */ 170 171 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_OFFSET 0x0000000000000000 172 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_LSB 22 173 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_MSB 22 174 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TXOP_PS_NOT_ALLOWED_MASK 0x0000000000400000 175 176 177 /* Description VHTA_RESERVED_0B 178 179 Reserved: Should be set to 1 by the MAC and ignored by the 180 PHY <legal 1> 181 */ 182 183 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_OFFSET 0x0000000000000000 184 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_LSB 23 185 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_MSB 23 186 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_0B_MASK 0x0000000000800000 187 188 189 /* Description RESERVED_0 190 191 This field is not part of HT-SIG: 192 Reserved: Should be set to 0 by the MAC and ignored by the 193 PHY <legal 0> 194 */ 195 196 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_OFFSET 0x0000000000000000 197 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_LSB 24 198 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_MSB 31 199 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_0_MASK 0x00000000ff000000 200 201 202 /* Description GI_SETTING 203 204 <enum 0 normal_gi> Indicates short guard interval is 205 not used in the data field 206 <enum 1 short_gi> Indicates short guard interval is 207 used in the data field 208 <enum 3 short_gi_ambiguity> Indicates short guard interval 209 is used in the data field and NSYM mod 10 = 9 210 NSYM is defined in IEEE802.11ac_D1.0 Section 22.4.3 (TXTIME 211 and PSDU_LENGTH calculation). 212 <legal 0,1,3> 213 */ 214 215 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_OFFSET 0x0000000000000000 216 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_LSB 32 217 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_MSB 33 218 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_GI_SETTING_MASK 0x0000000300000000 219 220 221 /* Description SU_MU_CODING 222 223 For an SU PPDU, B2 is set to 0 for BCC, 1 for LDPC For an 224 MU PPDU, if the MU[0] NSTS field is nonzero(#6773), then 225 B2 indicates the coding used for user 0; set to 0 for BCC 226 and 1 for LDPC. If the MU[0] NSTS field is 0, then this 227 field is reserved and set to 1 228 */ 229 230 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_OFFSET 0x0000000000000000 231 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_LSB 34 232 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_MSB 34 233 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_SU_MU_CODING_MASK 0x0000000400000000 234 235 236 /* Description LDPC_EXTRA_SYMBOL 237 238 Set to 1 if the LDPC PPDU encoding process (if an SU PPDU), 239 or at least one LDPC user's PPDU encoding process (if an 240 MU PPDU), results in an extra OFDM symbol (or symbols) 241 as described in 22.3.10.5.4 (LDPC coding) and 22.3.10.5.5 242 (Encoding process for MU PPDUs). Set to 0 otherwise. 243 */ 244 245 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_OFFSET 0x0000000000000000 246 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_LSB 35 247 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_MSB 35 248 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_LDPC_EXTRA_SYMBOL_MASK 0x0000000800000000 249 250 251 /* Description MCS 252 253 For SU: 254 Set to 0 for BPSK 1/2 255 Set to 1 for QPSK 1/2 256 Set to 2 for QPSK 3/4 257 Set to 3 for 16-QAM 1/2 258 Set to 4 for 16-QAM 3/4 259 Set to 5 for 64-QAM 2/3 260 Set to 6 for 64-QAM 3/4 261 Set to 7 for 64-QAM 5/6 262 Set to 8 for 256-QAM 3/4 263 Set to 9 for 256-QAM 5/6 264 For MU: 265 If NSTS for user 1 is non-zero, then vht_sig_a[1][4] indicates 266 coding for user 1: set to 0 for BCC, 1 for LDPC. 267 If NSTS for user 1 is set to 0, then vht_sig_a[1][4] is 268 reserved and set to 1. 269 If NSTS for user 2 is non-zero, then vht_sig_a[1][5] indicates 270 coding for user 2: set to 0 for BCC, 1 for LDPC. 271 If NSTS for user 2 is set to 0, then vht_sig_a[1][5] is 272 reserved and set to 1. 273 If NSTS for user 3 is non-zero, then vht_sig_a[1][6] indicates 274 coding for user 3: set to 0 for BCC, 1 for LDPC. 275 If NSTS for user 3 is set to 0, then vht_sig_a[1][6] is 276 reserved and set to 1. 277 vht_sig_a[1][7] is reserved and set to 1 278 <legal 0-15> 279 */ 280 281 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_MCS_OFFSET 0x0000000000000000 282 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_MCS_LSB 36 283 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_MCS_MSB 39 284 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_MCS_MASK 0x000000f000000000 285 286 287 /* Description BEAMFORMED 288 289 For SU: 290 Set to 1 if a Beamforming steering matrix is applied to 291 the waveform in an SU transmission as described in IEEE802.11ac_D1.0 292 Section 19.3.11.11.2 (Spatial mapping), set to 0 otherwise. 293 294 For MU: 295 Reserved and set to 1 296 <legal 0-1> 297 */ 298 299 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_OFFSET 0x0000000000000000 300 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_LSB 40 301 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_MSB 40 302 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BEAMFORMED_MASK 0x0000010000000000 303 304 305 /* Description VHTA_RESERVED_1 306 307 Reserved and set to 1. <legal 1> 308 */ 309 310 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_OFFSET 0x0000000000000000 311 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_LSB 41 312 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_MSB 41 313 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_VHTA_RESERVED_1_MASK 0x0000020000000000 314 315 316 /* Description CRC 317 318 CRC calculated as in IEEE802.11ac_D1.0 Section 19.3.9.4.4 319 (CRC calculation for HTSIG) with C7 in vht_sig_a[1][10], 320 etc. <legal all> 321 */ 322 323 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_CRC_OFFSET 0x0000000000000000 324 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_CRC_LSB 42 325 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_CRC_MSB 49 326 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_CRC_MASK 0x0003fc0000000000 327 328 329 /* Description TAIL 330 331 Used to terminate the trellis of the convolutional decoder. 332 Set to 0. <legal 0> 333 */ 334 335 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TAIL_OFFSET 0x0000000000000000 336 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TAIL_LSB 50 337 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TAIL_MSB 55 338 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_TAIL_MASK 0x00fc000000000000 339 340 341 /* Description RESERVED_1 342 343 This field is not part of HT-SIG: 344 Reserved: Should be set to 0 by the MAC and ignored by the 345 PHY <legal 0> 346 */ 347 348 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_OFFSET 0x0000000000000000 349 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_LSB 56 350 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_MSB 62 351 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RESERVED_1_MASK 0x7f00000000000000 352 353 354 /* Description RX_INTEGRITY_CHECK_PASSED 355 356 TX side: Set to 0 357 RX side: Set to 1 if PHY determines the VHT-SIG-A CRC check 358 has passed, else set to 0 359 360 <legal all> 361 */ 362 363 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_OFFSET 0x0000000000000000 364 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_LSB 63 365 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_MSB 63 366 #define PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_RX_INTEGRITY_CHECK_PASSED_MASK 0x8000000000000000 367 368 369 370 #endif // PHYRX_VHT_SIG_A 371