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