xref: /wlan-driver/fw-api/hw/qca6290/11ax/v1/rx_mpdu_desc_info.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2016-2017 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 _RX_MPDU_DESC_INFO_H_
20 #define _RX_MPDU_DESC_INFO_H_
21 #if !defined(__ASSEMBLER__)
22 #endif
23 
24 
25 // ################ START SUMMARY #################
26 //
27 //	Dword	Fields
28 //	0	msdu_count[7:0], mpdu_sequence_number[19:8], fragment_flag[20], mpdu_retry_bit[21], ampdu_flag[22], bar_frame[23], pn_fields_contain_valid_info[24], sa_is_valid[25], sa_idx_timeout[26], da_is_valid[27], da_is_mcbc[28], da_idx_timeout[29], raw_mpdu[30], reserved[31]
29 //	1	peer_meta_data[31:0]
30 //
31 // ################ END SUMMARY #################
32 
33 #define NUM_OF_DWORDS_RX_MPDU_DESC_INFO 2
34 
35 struct rx_mpdu_desc_info {
36              uint32_t msdu_count                      :  8, //[7:0]
37                       mpdu_sequence_number            : 12, //[19:8]
38                       fragment_flag                   :  1, //[20]
39                       mpdu_retry_bit                  :  1, //[21]
40                       ampdu_flag                      :  1, //[22]
41                       bar_frame                       :  1, //[23]
42                       pn_fields_contain_valid_info    :  1, //[24]
43                       sa_is_valid                     :  1, //[25]
44                       sa_idx_timeout                  :  1, //[26]
45                       da_is_valid                     :  1, //[27]
46                       da_is_mcbc                      :  1, //[28]
47                       da_idx_timeout                  :  1, //[29]
48                       raw_mpdu                        :  1, //[30]
49                       reserved                        :  1; //[31]
50              uint32_t peer_meta_data                  : 32; //[31:0]
51 };
52 
53 /*
54 
55 msdu_count
56 
57 			Consumer: REO/SW/FW
58 
59 			Producer: RXDMA
60 
61 
62 
63 			The number of MSDUs within the MPDU
64 
65 			<legal all>
66 
67 mpdu_sequence_number
68 
69 			Consumer: REO/SW/FW
70 
71 			Producer: RXDMA
72 
73 
74 
75 			The field can have two different meanings based on the
76 			setting of field 'BAR_frame':
77 
78 
79 
80 			'BAR_frame' is NOT set:
81 
82 			The MPDU sequence number of the received frame.
83 
84 
85 
86 			'BAR_frame' is set.
87 
88 			The MPDU Start sequence number from the BAR frame
89 
90 			<legal all>
91 
92 fragment_flag
93 
94 			Consumer: REO/SW/FW
95 
96 			Producer: RXDMA
97 
98 
99 
100 			When set, this MPDU is a fragment and REO should forward
101 			this fragment MPDU to the REO destination ring without any
102 			reorder checks, pn checks or bitmap update. This implies
103 			that REO is forwarding the pointer to the MSDU link
104 			descriptor. The destination ring is coming from a
105 			programmable register setting in REO
106 
107 
108 
109 			<legal all>
110 
111 mpdu_retry_bit
112 
113 			Consumer: REO/SW/FW
114 
115 			Producer: RXDMA
116 
117 
118 
119 			The retry bit setting from the MPDU header of the
120 			received frame
121 
122 			<legal all>
123 
124 ampdu_flag
125 
126 			Consumer: REO/SW/FW
127 
128 			Producer: RXDMA
129 
130 
131 
132 			When set, the MPDU was received as part of an A-MPDU.
133 
134 			<legal all>
135 
136 bar_frame
137 
138 			Consumer: REO/SW/FW
139 
140 			Producer: RXDMA
141 
142 
143 
144 			When set, the received frame is a BAR frame. After
145 			processing, this frame shall be pushed to SW or deleted.
146 
147 			<legal all>
148 
149 pn_fields_contain_valid_info
150 
151 			Consumer: REO/SW/FW
152 
153 			Producer: RXDMA
154 
155 
156 
157 			Copied here by RXDMA from RX_MPDU_END
158 
159 			When not set, REO will Not perform a PN sequence number
160 			check
161 
162 sa_is_valid
163 
164 			When set, OLE found a valid SA entry for all MSDUs in
165 			this MPDU
166 
167 			<legal all>
168 
169 sa_idx_timeout
170 
171 			When set, at least 1 MSDU within the MPDU has an
172 			unsuccessful MAC source address search due to the expiration
173 			of the search timer.
174 
175 			<legal all>
176 
177 da_is_valid
178 
179 			When set, OLE found a valid DA entry for all MSDUs in
180 			this MPDU
181 
182 			<legal all>
183 
184 da_is_mcbc
185 
186 			Field Only valid if da_is_valid is set
187 
188 
189 
190 			When set, at least one of the DA addresses is a
191 			Multicast or Broadcast address.
192 
193 			<legal all>
194 
195 da_idx_timeout
196 
197 			When set, at least 1 MSDU within the MPDU has an
198 			unsuccessful MAC destination address search due to the
199 			expiration of the search timer.
200 
201 			<legal all>
202 
203 raw_mpdu
204 
205 			Field only valid when first_msdu_in_mpdu_flag is set.
206 
207 
208 
209 			When set, the contents in the MSDU buffer contains a
210 			'RAW' MPDU. This 'RAW' MPDU might be spread out over
211 			multiple MSDU buffers.
212 
213 			<legal all>
214 
215 reserved
216 
217 			<legal 0>
218 
219 peer_meta_data
220 
221 			Meta data that SW has programmed in the Peer table entry
222 			of the transmitting STA.
223 
224 			<legal all>
225 */
226 
227 
228 /* Description		RX_MPDU_DESC_INFO_0_MSDU_COUNT
229 
230 			Consumer: REO/SW/FW
231 
232 			Producer: RXDMA
233 
234 
235 
236 			The number of MSDUs within the MPDU
237 
238 			<legal all>
239 */
240 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_OFFSET                        0x00000000
241 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_LSB                           0
242 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_MASK                          0x000000ff
243 
244 /* Description		RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER
245 
246 			Consumer: REO/SW/FW
247 
248 			Producer: RXDMA
249 
250 
251 
252 			The field can have two different meanings based on the
253 			setting of field 'BAR_frame':
254 
255 
256 
257 			'BAR_frame' is NOT set:
258 
259 			The MPDU sequence number of the received frame.
260 
261 
262 
263 			'BAR_frame' is set.
264 
265 			The MPDU Start sequence number from the BAR frame
266 
267 			<legal all>
268 */
269 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_OFFSET              0x00000000
270 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_LSB                 8
271 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_MASK                0x000fff00
272 
273 /* Description		RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG
274 
275 			Consumer: REO/SW/FW
276 
277 			Producer: RXDMA
278 
279 
280 
281 			When set, this MPDU is a fragment and REO should forward
282 			this fragment MPDU to the REO destination ring without any
283 			reorder checks, pn checks or bitmap update. This implies
284 			that REO is forwarding the pointer to the MSDU link
285 			descriptor. The destination ring is coming from a
286 			programmable register setting in REO
287 
288 
289 
290 			<legal all>
291 */
292 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_OFFSET                     0x00000000
293 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_LSB                        20
294 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_MASK                       0x00100000
295 
296 /* Description		RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT
297 
298 			Consumer: REO/SW/FW
299 
300 			Producer: RXDMA
301 
302 
303 
304 			The retry bit setting from the MPDU header of the
305 			received frame
306 
307 			<legal all>
308 */
309 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_OFFSET                    0x00000000
310 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_LSB                       21
311 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_MASK                      0x00200000
312 
313 /* Description		RX_MPDU_DESC_INFO_0_AMPDU_FLAG
314 
315 			Consumer: REO/SW/FW
316 
317 			Producer: RXDMA
318 
319 
320 
321 			When set, the MPDU was received as part of an A-MPDU.
322 
323 			<legal all>
324 */
325 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_OFFSET                        0x00000000
326 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_LSB                           22
327 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_MASK                          0x00400000
328 
329 /* Description		RX_MPDU_DESC_INFO_0_BAR_FRAME
330 
331 			Consumer: REO/SW/FW
332 
333 			Producer: RXDMA
334 
335 
336 
337 			When set, the received frame is a BAR frame. After
338 			processing, this frame shall be pushed to SW or deleted.
339 
340 			<legal all>
341 */
342 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_OFFSET                         0x00000000
343 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_LSB                            23
344 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_MASK                           0x00800000
345 
346 /* Description		RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO
347 
348 			Consumer: REO/SW/FW
349 
350 			Producer: RXDMA
351 
352 
353 
354 			Copied here by RXDMA from RX_MPDU_END
355 
356 			When not set, REO will Not perform a PN sequence number
357 			check
358 */
359 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET      0x00000000
360 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_LSB         24
361 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_MASK        0x01000000
362 
363 /* Description		RX_MPDU_DESC_INFO_0_SA_IS_VALID
364 
365 			When set, OLE found a valid SA entry for all MSDUs in
366 			this MPDU
367 
368 			<legal all>
369 */
370 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_OFFSET                       0x00000000
371 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_LSB                          25
372 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_MASK                         0x02000000
373 
374 /* Description		RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT
375 
376 			When set, at least 1 MSDU within the MPDU has an
377 			unsuccessful MAC source address search due to the expiration
378 			of the search timer.
379 
380 			<legal all>
381 */
382 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_OFFSET                    0x00000000
383 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_LSB                       26
384 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_MASK                      0x04000000
385 
386 /* Description		RX_MPDU_DESC_INFO_0_DA_IS_VALID
387 
388 			When set, OLE found a valid DA entry for all MSDUs in
389 			this MPDU
390 
391 			<legal all>
392 */
393 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_OFFSET                       0x00000000
394 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_LSB                          27
395 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_MASK                         0x08000000
396 
397 /* Description		RX_MPDU_DESC_INFO_0_DA_IS_MCBC
398 
399 			Field Only valid if da_is_valid is set
400 
401 
402 
403 			When set, at least one of the DA addresses is a
404 			Multicast or Broadcast address.
405 
406 			<legal all>
407 */
408 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_OFFSET                        0x00000000
409 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_LSB                           28
410 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_MASK                          0x10000000
411 
412 /* Description		RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT
413 
414 			When set, at least 1 MSDU within the MPDU has an
415 			unsuccessful MAC destination address search due to the
416 			expiration of the search timer.
417 
418 			<legal all>
419 */
420 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_OFFSET                    0x00000000
421 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_LSB                       29
422 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_MASK                      0x20000000
423 
424 /* Description		RX_MPDU_DESC_INFO_0_RAW_MPDU
425 
426 			Field only valid when first_msdu_in_mpdu_flag is set.
427 
428 
429 
430 			When set, the contents in the MSDU buffer contains a
431 			'RAW' MPDU. This 'RAW' MPDU might be spread out over
432 			multiple MSDU buffers.
433 
434 			<legal all>
435 */
436 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_OFFSET                          0x00000000
437 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_LSB                             30
438 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_MASK                            0x40000000
439 
440 /* Description		RX_MPDU_DESC_INFO_0_RESERVED
441 
442 			<legal 0>
443 */
444 #define RX_MPDU_DESC_INFO_0_RESERVED_OFFSET                          0x00000000
445 #define RX_MPDU_DESC_INFO_0_RESERVED_LSB                             31
446 #define RX_MPDU_DESC_INFO_0_RESERVED_MASK                            0x80000000
447 
448 /* Description		RX_MPDU_DESC_INFO_1_PEER_META_DATA
449 
450 			Meta data that SW has programmed in the Peer table entry
451 			of the transmitting STA.
452 
453 			<legal all>
454 */
455 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_OFFSET                    0x00000004
456 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_LSB                       0
457 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_MASK                      0xffffffff
458 
459 
460 #endif // _RX_MPDU_DESC_INFO_H_
461