xref: /wlan-driver/fw-api/hw/qca6750/v1/rx_msdu_details.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2020 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 //
20 // DO NOT EDIT!  This file is automatically generated
21 //               These definitions are tied to a particular hardware layout
22 
23 
24 #ifndef _RX_MSDU_DETAILS_H_
25 #define _RX_MSDU_DETAILS_H_
26 #if !defined(__ASSEMBLER__)
27 #endif
28 
29 #include "buffer_addr_info.h"
30 #include "rx_msdu_desc_info.h"
31 
32 // ################ START SUMMARY #################
33 //
34 //	Dword	Fields
35 //	0-1	struct buffer_addr_info buffer_addr_info_details;
36 //	2-3	struct rx_msdu_desc_info rx_msdu_desc_info_details;
37 //
38 // ################ END SUMMARY #################
39 
40 #define NUM_OF_DWORDS_RX_MSDU_DETAILS 4
41 
42 struct rx_msdu_details {
43     struct            buffer_addr_info                       buffer_addr_info_details;
44     struct            rx_msdu_desc_info                       rx_msdu_desc_info_details;
45 };
46 
47 /*
48 
49 struct buffer_addr_info buffer_addr_info_details
50 
51 			Consumer: REO/SW
52 
53 			Producer: RXDMA
54 
55 
56 
57 			Details of the physical address of the buffer containing
58 			an MSDU (or entire MPDU)
59 
60 struct rx_msdu_desc_info rx_msdu_desc_info_details
61 
62 			Consumer: REO/SW
63 
64 			Producer: RXDMA
65 
66 
67 
68 			General information related to the MSDU that should be
69 			passed on from RXDMA all the way to to the REO destination
70 			ring.
71 */
72 
73 
74  /* EXTERNAL REFERENCE : struct buffer_addr_info buffer_addr_info_details */
75 
76 
77 /* Description		RX_MSDU_DETAILS_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0
78 
79 			Address (lower 32 bits) of the MSDU buffer OR
80 			MSDU_EXTENSION descriptor OR Link Descriptor
81 
82 
83 
84 			In case of 'NULL' pointer, this field is set to 0
85 
86 			<legal all>
87 */
88 #define RX_MSDU_DETAILS_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_OFFSET 0x00000000
89 #define RX_MSDU_DETAILS_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_LSB 0
90 #define RX_MSDU_DETAILS_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_MASK 0xffffffff
91 
92 /* Description		RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_39_32
93 
94 			Address (upper 8 bits) of the MSDU buffer OR
95 			MSDU_EXTENSION descriptor OR Link Descriptor
96 
97 
98 
99 			In case of 'NULL' pointer, this field is set to 0
100 
101 			<legal all>
102 */
103 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_39_32_OFFSET 0x00000004
104 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_39_32_LSB 0
105 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_39_32_MASK 0x000000ff
106 
107 /* Description		RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_RETURN_BUFFER_MANAGER
108 
109 			Consumer: WBM
110 
111 			Producer: SW/FW
112 
113 
114 
115 			In case of 'NULL' pointer, this field is set to 0
116 
117 
118 
119 			Indicates to which buffer manager the buffer OR
120 			MSDU_EXTENSION descriptor OR link descriptor that is being
121 			pointed to shall be returned after the frame has been
122 			processed. It is used by WBM for routing purposes.
123 
124 
125 
126 			<enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
127 			to the WMB buffer idle list
128 
129 			<enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
130 			returned to the WMB idle link descriptor idle list
131 
132 			<enum 2 FW_BM> This buffer shall be returned to the FW
133 
134 			<enum 3 SW0_BM> This buffer shall be returned to the SW,
135 			ring 0
136 
137 			<enum 4 SW1_BM> This buffer shall be returned to the SW,
138 			ring 1
139 
140 			<enum 5 SW2_BM> This buffer shall be returned to the SW,
141 			ring 2
142 
143 			<enum 6 SW3_BM> This buffer shall be returned to the SW,
144 			ring 3
145 
146 			<enum 7 SW4_BM> This buffer shall be returned to the SW,
147 			ring 4
148 
149 
150 
151 			<legal all>
152 */
153 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
154 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_RETURN_BUFFER_MANAGER_LSB 8
155 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_RETURN_BUFFER_MANAGER_MASK 0x00000700
156 
157 /* Description		RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_SW_BUFFER_COOKIE
158 
159 			Cookie field exclusively used by SW.
160 
161 
162 
163 			In case of 'NULL' pointer, this field is set to 0
164 
165 
166 
167 			HW ignores the contents, accept that it passes the
168 			programmed value on to other descriptors together with the
169 			physical address
170 
171 
172 
173 			Field can be used by SW to for example associate the
174 			buffers physical address with the virtual address
175 
176 			The bit definitions as used by SW are within SW HLD
177 			specification
178 
179 
180 
181 			NOTE:
182 
183 			The three most significant bits can have a special
184 			meaning in case this struct is embedded in a TX_MPDU_DETAILS
185 			STRUCT, and field transmit_bw_restriction is set
186 
187 
188 
189 			In case of NON punctured transmission:
190 
191 			Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
192 
193 			Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
194 
195 			Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
196 
197 			Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
198 
199 
200 
201 			In case of punctured transmission:
202 
203 			Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
204 
205 			Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
206 
207 			Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
208 
209 			Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
210 
211 			Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
212 
213 			Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
214 
215 			Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
216 
217 			Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
218 
219 
220 
221 			Note: a punctured transmission is indicated by the
222 			presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
223 			TLV
224 
225 
226 
227 			<legal all>
228 */
229 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_SW_BUFFER_COOKIE_OFFSET 0x00000004
230 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_SW_BUFFER_COOKIE_LSB 11
231 #define RX_MSDU_DETAILS_1_BUFFER_ADDR_INFO_DETAILS_SW_BUFFER_COOKIE_MASK 0xfffff800
232 
233  /* EXTERNAL REFERENCE : struct rx_msdu_desc_info rx_msdu_desc_info_details */
234 
235 
236 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG
237 
238 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
239 			over multiple buffers, this field will be valid in the Last
240 			buffer used by the MSDU
241 
242 
243 
244 			<enum 0 Not_first_msdu> This is not the first MSDU in
245 			the MPDU.
246 
247 			<enum 1 first_msdu> This MSDU is the first one in the
248 			MPDU.
249 
250 
251 
252 			<legal all>
253 */
254 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000008
255 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_LSB 0
256 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_MASK 0x00000001
257 
258 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG
259 
260 			Consumer: WBM/REO/SW/FW
261 
262 			Producer: RXDMA
263 
264 
265 
266 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
267 			over multiple buffers, this field will be valid in the Last
268 			buffer used by the MSDU
269 
270 
271 
272 			<enum 0 Not_last_msdu> There are more MSDUs linked to
273 			this MSDU that belongs to this MPDU
274 
275 			<enum 1 Last_msdu> this MSDU is the last one in the
276 			MPDU. This setting is only allowed in combination with
277 			'Msdu_continuation' set to 0. This implies that when an msdu
278 			is spread out over multiple buffers and thus
279 			msdu_continuation is set, only for the very last buffer of
280 			the msdu, can the 'last_msdu_in_mpdu_flag' be set.
281 
282 
283 
284 			When both first_msdu_in_mpdu_flag and
285 			last_msdu_in_mpdu_flag are set, the MPDU that this MSDU
286 			belongs to only contains a single MSDU.
287 
288 
289 
290 
291 
292 			<legal all>
293 */
294 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000008
295 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_LSB 1
296 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_MASK 0x00000002
297 
298 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION
299 
300 			When set, this MSDU buffer was not able to hold the
301 			entire MSDU. The next buffer will therefor contain
302 			additional information related to this MSDU.
303 
304 
305 
306 			<legal all>
307 */
308 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_OFFSET 0x00000008
309 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_LSB 2
310 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_MASK 0x00000004
311 
312 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH
313 
314 			Parsed from RX_MSDU_START TLV . In the case MSDU spans
315 			over multiple buffers, this field will be valid in the First
316 			buffer used by MSDU.
317 
318 
319 
320 			Full MSDU length in bytes after decapsulation.
321 
322 
323 
324 			This field is still valid for MPDU frames without
325 			A-MSDU.  It still represents MSDU length after decapsulation
326 
327 
328 
329 			Or in case of RAW MPDUs, it indicates the length of the
330 			entire MPDU (without FCS field)
331 
332 			<legal all>
333 */
334 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_OFFSET 0x00000008
335 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_LSB  3
336 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_MASK 0x0001fff8
337 
338 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION
339 
340 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
341 			over multiple buffers, this field will be valid in the Last
342 			buffer used by the MSDU
343 
344 
345 
346 			The ID of the REO exit ring where the MSDU frame shall
347 			push after (MPDU level) reordering has finished.
348 
349 
350 
351 			<enum 0 reo_destination_tcl> Reo will push the frame
352 			into the REO2TCL ring
353 
354 			<enum 1 reo_destination_sw1> Reo will push the frame
355 			into the REO2SW1 ring
356 
357 			<enum 2 reo_destination_sw2> Reo will push the frame
358 			into the REO2SW2 ring
359 
360 			<enum 3 reo_destination_sw3> Reo will push the frame
361 			into the REO2SW3 ring
362 
363 			<enum 4 reo_destination_sw4> Reo will push the frame
364 			into the REO2SW4 ring
365 
366 			<enum 5 reo_destination_release> Reo will push the frame
367 			into the REO_release ring
368 
369 			<enum 6 reo_destination_fw> Reo will push the frame into
370 			the REO2FW ring
371 
372 			<enum 7 reo_destination_sw5> Reo will push the frame
373 			into the REO2SW5 ring (REO remaps this in chips without
374 			REO2SW5 ring, e.g. Pine)
375 
376 			<enum 8 reo_destination_sw6> Reo will push the frame
377 			into the REO2SW6 ring (REO remaps this in chips without
378 			REO2SW6 ring, e.g. Pine)
379 
380 			 <enum 9 reo_destination_9> REO remaps this <enum 10
381 			reo_destination_10> REO remaps this
382 
383 			<enum 11 reo_destination_11> REO remaps this
384 
385 			<enum 12 reo_destination_12> REO remaps this <enum 13
386 			reo_destination_13> REO remaps this
387 
388 			<enum 14 reo_destination_14> REO remaps this
389 
390 			<enum 15 reo_destination_15> REO remaps this
391 
392 			<enum 16 reo_destination_16> REO remaps this
393 
394 			<enum 17 reo_destination_17> REO remaps this
395 
396 			<enum 18 reo_destination_18> REO remaps this
397 
398 			<enum 19 reo_destination_19> REO remaps this
399 
400 			<enum 20 reo_destination_20> REO remaps this
401 
402 			<enum 21 reo_destination_21> REO remaps this
403 
404 			<enum 22 reo_destination_22> REO remaps this
405 
406 			<enum 23 reo_destination_23> REO remaps this
407 
408 			<enum 24 reo_destination_24> REO remaps this
409 
410 			<enum 25 reo_destination_25> REO remaps this
411 
412 			<enum 26 reo_destination_26> REO remaps this
413 
414 			<enum 27 reo_destination_27> REO remaps this
415 
416 			<enum 28 reo_destination_28> REO remaps this
417 
418 			<enum 29 reo_destination_29> REO remaps this
419 
420 			<enum 30 reo_destination_30> REO remaps this
421 
422 			<enum 31 reo_destination_31> REO remaps this
423 
424 
425 
426 			<legal all>
427 */
428 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_OFFSET 0x00000008
429 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_LSB 17
430 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_MASK 0x003e0000
431 
432 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP
433 
434 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
435 			over multiple buffers, this field will be valid in the Last
436 			buffer used by the MSDU
437 
438 
439 
440 			When set, REO shall drop this MSDU and not forward it to
441 			any other ring...
442 
443 			<legal all>
444 */
445 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_OFFSET 0x00000008
446 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_LSB    22
447 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_MASK   0x00400000
448 
449 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID
450 
451 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
452 			over multiple buffers, this field will be valid in the Last
453 			buffer used by the MSDU
454 
455 
456 
457 			Indicates that OLE found a valid SA entry for this MSDU
458 
459 			<legal all>
460 */
461 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000008
462 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB  23
463 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x00800000
464 
465 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT
466 
467 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
468 			over multiple buffers, this field will be valid in the Last
469 			buffer used by the MSDU
470 
471 
472 
473 			Indicates an unsuccessful MAC source address search due
474 			to the expiring of the search timer for this MSDU
475 
476 			<legal all>
477 */
478 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_OFFSET 0x00000008
479 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_LSB 24
480 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_MASK 0x01000000
481 
482 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID
483 
484 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
485 			over multiple buffers, this field will be valid in the Last
486 			buffer used by the MSDU
487 
488 
489 
490 			Indicates that OLE found a valid DA entry for this MSDU
491 
492 			<legal all>
493 */
494 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000008
495 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB  25
496 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x02000000
497 
498 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC
499 
500 			Field Only valid if da_is_valid is set
501 
502 
503 
504 			Indicates the DA address was a Multicast of Broadcast
505 			address for this MSDU
506 
507 			<legal all>
508 */
509 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000008
510 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB   26
511 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK  0x04000000
512 
513 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT
514 
515 			Parsed from RX_MSDU_END TLV . In the case MSDU spans
516 			over multiple buffers, this field will be valid in the Last
517 			buffer used by the MSDU
518 
519 
520 
521 			Indicates an unsuccessful MAC destination address search
522 			due to the expiring of the search timer for this MSDU
523 
524 			<legal all>
525 */
526 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_OFFSET 0x00000008
527 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_LSB 27
528 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_MASK 0x08000000
529 
530 /* Description		RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A
531 
532 			<legal 0>
533 */
534 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_OFFSET 0x00000008
535 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_LSB  28
536 #define RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_MASK 0xf0000000
537 
538 /* Description		RX_MSDU_DETAILS_3_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A
539 
540 			<legal 0>
541 */
542 #define RX_MSDU_DETAILS_3_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A_OFFSET 0x0000000c
543 #define RX_MSDU_DETAILS_3_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A_LSB  0
544 #define RX_MSDU_DETAILS_3_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A_MASK 0xffffffff
545 
546 
547 #endif // _RX_MSDU_DETAILS_H_
548