xref: /wlan-driver/fw-api/hw/qcn6432/he_sig_a_su_info.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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