1  /*
2   * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3   *
4   * Permission to use, copy, modify, and/or distribute this software for
5   * any purpose with or without fee is hereby granted, provided that the
6   * above copyright notice and this permission notice appear in all
7   * copies.
8   *
9   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10   * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11   * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12   * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13   * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14   * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16   * PERFORMANCE OF THIS SOFTWARE.
17   */
18  
19  #ifndef _L_SIG_A_INFO_H_
20  #define _L_SIG_A_INFO_H_
21  #if !defined(__ASSEMBLER__)
22  #endif
23  
24  
25  // ################ START SUMMARY #################
26  //
27  //	Dword	Fields
28  //	0	rate[3:0], lsig_reserved[4], length[16:5], parity[17], tail[23:18], pkt_type[27:24], captured_implicit_sounding[28], reserved[31:29]
29  //
30  // ################ END SUMMARY #################
31  
32  #define NUM_OF_DWORDS_L_SIG_A_INFO 1
33  
34  struct l_sig_a_info {
35               uint32_t rate                            :  4, //[3:0]
36                        lsig_reserved                   :  1, //[4]
37                        length                          : 12, //[16:5]
38                        parity                          :  1, //[17]
39                        tail                            :  6, //[23:18]
40                        pkt_type                        :  4, //[27:24]
41                        captured_implicit_sounding      :  1, //[28]
42                        reserved                        :  3; //[31:29]
43  };
44  
45  /*
46  
47  rate
48  
49  			This format is originally defined for OFDM as a 4 bit
50  			field but the 5th bit was added to indicate 11b formatted
51  			frames.  In the standard bit [4] is specified as reserved.
52  			For 11b frames this L-SIG is transformed in the PHY into the
53  			11b preamble format.  The following are the rates:
54  
55  			<enum 8     ofdm_48_mbps> 64-QAM 2/3 (48 Mbps)
56  
57  			<enum 9     ofdm_24_mbps> 16-QAM 1/2 (24 Mbps)
58  
59  			<enum 10     ofdm_12_mbps> QPSK 1/2 (12 Mbps)
60  
61  			<enum 11     ofdm_6_mbps> BPSK 1/2 (6 Mbps)
62  
63  			<enum 12     ofdm_54_mbps> 64-QAM 3/4 (54 Mbps)
64  
65  			<enum 13     ofdm_36_mbps> 16-QAM 3/4 (36 Mbps)
66  
67  			<enum 14     ofdm_18_mbps> QPSK 1/2 (18 Mbps)
68  
69  			<enum 15     ofdm_9_mbps> BPSK 3/4 (9 Mbps)
70  
71  			<legal 8-15>
72  
73  lsig_reserved
74  
75  			Reserved: Should be set to 0 by the MAC and ignored by
76  			the PHY
77  
78  			<legal 0>
79  
80  length
81  
82  			The length indicates the number of octets in this MPDU.
83  			Note that when using mixed mode 11n preamble this length
84  			provides the spoofed length for the PPDU.  This length
85  			provides part of the information to derive the actually PPDU
86  			length.  For legacy OFDM and 11B frames the maximum length
87  			is
88  
89  			<legal all>
90  
91  parity
92  
93  			11a/n/ac TX: This field provides even parity over the
94  			first 18 bits of the signal field which means that the sum
95  			of 1s in the signal field will always be even on
96  
97  			11a/n/ac RX: this field contains the received parity
98  			field from the L-SIG symbol for the current packet.
99  
100  			<legal 0-1>
101  
102  tail
103  
104  			The 6 bits of tail is always set to 0 is used to flush
105  			the BCC encoder and decoder.  <legal 0>
106  
107  pkt_type
108  
109  			Only used on the RX side.
110  
111  			Note: This is not really part of L-SIG
112  
113  
114  
115  			Packet type:
116  
117  			<enum 0 dot11a>802.11a PPDU type
118  
119  			<enum 1 dot11b>802.11b PPDU type
120  
121  			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
122  
123  			<enum 3 dot11ac>802.11ac PPDU type
124  
125  			<enum 4 dot11ax>802.11ax PPDU type
126  
127  captured_implicit_sounding
128  
129  			Only used on the RX side.
130  
131  			Note: This is not really part of L-SIG
132  
133  
134  
135  			This indicates that the PHY has captured implicit
136  			sounding.
137  
138  reserved
139  
140  			Reserved: Should be set to 0 by the transmitting MAC and
141  			ignored by the PHY <legal 0>
142  */
143  
144  
145  /* Description		L_SIG_A_INFO_0_RATE
146  
147  			This format is originally defined for OFDM as a 4 bit
148  			field but the 5th bit was added to indicate 11b formatted
149  			frames.  In the standard bit [4] is specified as reserved.
150  			For 11b frames this L-SIG is transformed in the PHY into the
151  			11b preamble format.  The following are the rates:
152  
153  			<enum 8     ofdm_48_mbps> 64-QAM 2/3 (48 Mbps)
154  
155  			<enum 9     ofdm_24_mbps> 16-QAM 1/2 (24 Mbps)
156  
157  			<enum 10     ofdm_12_mbps> QPSK 1/2 (12 Mbps)
158  
159  			<enum 11     ofdm_6_mbps> BPSK 1/2 (6 Mbps)
160  
161  			<enum 12     ofdm_54_mbps> 64-QAM 3/4 (54 Mbps)
162  
163  			<enum 13     ofdm_36_mbps> 16-QAM 3/4 (36 Mbps)
164  
165  			<enum 14     ofdm_18_mbps> QPSK 1/2 (18 Mbps)
166  
167  			<enum 15     ofdm_9_mbps> BPSK 3/4 (9 Mbps)
168  
169  			<legal 8-15>
170  */
171  #define L_SIG_A_INFO_0_RATE_OFFSET                                   0x00000000
172  #define L_SIG_A_INFO_0_RATE_LSB                                      0
173  #define L_SIG_A_INFO_0_RATE_MASK                                     0x0000000f
174  
175  /* Description		L_SIG_A_INFO_0_LSIG_RESERVED
176  
177  			Reserved: Should be set to 0 by the MAC and ignored by
178  			the PHY
179  
180  			<legal 0>
181  */
182  #define L_SIG_A_INFO_0_LSIG_RESERVED_OFFSET                          0x00000000
183  #define L_SIG_A_INFO_0_LSIG_RESERVED_LSB                             4
184  #define L_SIG_A_INFO_0_LSIG_RESERVED_MASK                            0x00000010
185  
186  /* Description		L_SIG_A_INFO_0_LENGTH
187  
188  			The length indicates the number of octets in this MPDU.
189  			Note that when using mixed mode 11n preamble this length
190  			provides the spoofed length for the PPDU.  This length
191  			provides part of the information to derive the actually PPDU
192  			length.  For legacy OFDM and 11B frames the maximum length
193  			is
194  
195  			<legal all>
196  */
197  #define L_SIG_A_INFO_0_LENGTH_OFFSET                                 0x00000000
198  #define L_SIG_A_INFO_0_LENGTH_LSB                                    5
199  #define L_SIG_A_INFO_0_LENGTH_MASK                                   0x0001ffe0
200  
201  /* Description		L_SIG_A_INFO_0_PARITY
202  
203  			11a/n/ac TX: This field provides even parity over the
204  			first 18 bits of the signal field which means that the sum
205  			of 1s in the signal field will always be even on
206  
207  			11a/n/ac RX: this field contains the received parity
208  			field from the L-SIG symbol for the current packet.
209  
210  			<legal 0-1>
211  */
212  #define L_SIG_A_INFO_0_PARITY_OFFSET                                 0x00000000
213  #define L_SIG_A_INFO_0_PARITY_LSB                                    17
214  #define L_SIG_A_INFO_0_PARITY_MASK                                   0x00020000
215  
216  /* Description		L_SIG_A_INFO_0_TAIL
217  
218  			The 6 bits of tail is always set to 0 is used to flush
219  			the BCC encoder and decoder.  <legal 0>
220  */
221  #define L_SIG_A_INFO_0_TAIL_OFFSET                                   0x00000000
222  #define L_SIG_A_INFO_0_TAIL_LSB                                      18
223  #define L_SIG_A_INFO_0_TAIL_MASK                                     0x00fc0000
224  
225  /* Description		L_SIG_A_INFO_0_PKT_TYPE
226  
227  			Only used on the RX side.
228  
229  			Note: This is not really part of L-SIG
230  
231  
232  
233  			Packet type:
234  
235  			<enum 0 dot11a>802.11a PPDU type
236  
237  			<enum 1 dot11b>802.11b PPDU type
238  
239  			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
240  
241  			<enum 3 dot11ac>802.11ac PPDU type
242  
243  			<enum 4 dot11ax>802.11ax PPDU type
244  */
245  #define L_SIG_A_INFO_0_PKT_TYPE_OFFSET                               0x00000000
246  #define L_SIG_A_INFO_0_PKT_TYPE_LSB                                  24
247  #define L_SIG_A_INFO_0_PKT_TYPE_MASK                                 0x0f000000
248  
249  /* Description		L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING
250  
251  			Only used on the RX side.
252  
253  			Note: This is not really part of L-SIG
254  
255  
256  
257  			This indicates that the PHY has captured implicit
258  			sounding.
259  */
260  #define L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING_OFFSET             0x00000000
261  #define L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING_LSB                28
262  #define L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING_MASK               0x10000000
263  
264  /* Description		L_SIG_A_INFO_0_RESERVED
265  
266  			Reserved: Should be set to 0 by the transmitting MAC and
267  			ignored by the PHY <legal 0>
268  */
269  #define L_SIG_A_INFO_0_RESERVED_OFFSET                               0x00000000
270  #define L_SIG_A_INFO_0_RESERVED_LSB                                  29
271  #define L_SIG_A_INFO_0_RESERVED_MASK                                 0xe0000000
272  
273  
274  #endif // _L_SIG_A_INFO_H_
275