xref: /wlan-driver/fw-api/hw/qca8074/v1/rx_msdu_start.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 // DO NOT EDIT!  This file is automatically generated
20 //               These definitions are tied to a particular hardware layout
21 
22 
23 #ifndef _RX_MSDU_START_H_
24 #define _RX_MSDU_START_H_
25 #if !defined(__ASSEMBLER__)
26 #endif
27 
28 
29 // ################ START SUMMARY #################
30 //
31 //	Dword	Fields
32 //	0	rxpcu_mpdu_filter_in_category[1:0], sw_frame_group_id[8:2], reserved_0[15:9], phy_ppdu_id[31:16]
33 //	1	msdu_length[13:0], reserved_1a[14], ipsec_esp[15], l3_offset[22:16], ipsec_ah[23], l4_offset[31:24]
34 //	2	msdu_number[7:0], decap_format[9:8], ipv4_proto[10], ipv6_proto[11], tcp_proto[12], udp_proto[13], ip_frag[14], tcp_only_ack[15], da_is_bcast_mcast[16], toeplitz_hash[17], reserved_2a[23:18], ip4_protocol_ip6_next_header[31:24]
35 //	3	toeplitz_hash_2_or_4[31:0]
36 //	4	flow_id_toeplitz[31:0]
37 //	5	user_rssi[7:0], pkt_type[11:8], stbc[12], sgi[14:13], rate_mcs[18:15], receive_bandwidth[20:19], reception_type[22:21], nss[25:23], reserved_5[31:26]
38 //	6	ppdu_start_timestamp[31:0]
39 //	7	sw_phy_meta_data[31:0]
40 //
41 // ################ END SUMMARY #################
42 
43 #define NUM_OF_DWORDS_RX_MSDU_START 8
44 
45 struct rx_msdu_start {
46              uint32_t rxpcu_mpdu_filter_in_category   :  2, //[1:0]
47                       sw_frame_group_id               :  7, //[8:2]
48                       reserved_0                      :  7, //[15:9]
49                       phy_ppdu_id                     : 16; //[31:16]
50              uint32_t msdu_length                     : 14, //[13:0]
51                       reserved_1a                     :  1, //[14]
52                       ipsec_esp                       :  1, //[15]
53                       l3_offset                       :  7, //[22:16]
54                       ipsec_ah                        :  1, //[23]
55                       l4_offset                       :  8; //[31:24]
56              uint32_t msdu_number                     :  8, //[7:0]
57                       decap_format                    :  2, //[9:8]
58                       ipv4_proto                      :  1, //[10]
59                       ipv6_proto                      :  1, //[11]
60                       tcp_proto                       :  1, //[12]
61                       udp_proto                       :  1, //[13]
62                       ip_frag                         :  1, //[14]
63                       tcp_only_ack                    :  1, //[15]
64                       da_is_bcast_mcast               :  1, //[16]
65                       toeplitz_hash                   :  1, //[17]
66                       reserved_2a                     :  6, //[23:18]
67                       ip4_protocol_ip6_next_header    :  8; //[31:24]
68              uint32_t toeplitz_hash_2_or_4            : 32; //[31:0]
69              uint32_t flow_id_toeplitz                : 32; //[31:0]
70              uint32_t user_rssi                       :  8, //[7:0]
71                       pkt_type                        :  4, //[11:8]
72                       stbc                            :  1, //[12]
73                       sgi                             :  2, //[14:13]
74                       rate_mcs                        :  4, //[18:15]
75                       receive_bandwidth               :  2, //[20:19]
76                       reception_type                  :  2, //[22:21]
77                       nss                             :  3, //[25:23]
78                       reserved_5                      :  6; //[31:26]
79              uint32_t ppdu_start_timestamp            : 32; //[31:0]
80              uint32_t sw_phy_meta_data                : 32; //[31:0]
81 };
82 
83 /*
84 
85 rxpcu_mpdu_filter_in_category
86 
87 			Field indicates what the reason was that this MPDU frame
88 			was allowed to come into the receive path by RXPCU
89 
90 			<enum 0 rxpcu_filter_pass> This MPDU passed the normal
91 			frame filter programming of rxpcu
92 
93 			<enum 1 rxpcu_monitor_client> This MPDU did NOT pass the
94 			regular frame filter and would have been dropped, were it
95 			not for the frame fitting into the 'monitor_client'
96 			category.
97 
98 			<enum 2 rxpcu_monitor_other> This MPDU did NOT pass the
99 			regular frame filter and also did not pass the
100 			rxpcu_monitor_client filter. It would have been dropped
101 			accept that it did pass the 'monitor_other' category.
102 
103 			<legal 0-2>
104 
105 sw_frame_group_id
106 
107 			SW processes frames based on certain classifications.
108 			This field indicates to what sw classification this MPDU is
109 			mapped.
110 
111 			The classification is given in priority order
112 
113 
114 
115 			<enum 0 sw_frame_group_NDP_frame>
116 
117 
118 
119 			<enum 1 sw_frame_group_Multicast_data>
120 
121 			<enum 2 sw_frame_group_Unicast_data>
122 
123 			<enum 3 sw_frame_group_Null_data > This includes mpdus
124 			of type Data Null as well as QoS Data Null
125 
126 
127 
128 			<enum 4 sw_frame_group_mgmt_0000 >
129 
130 			<enum 5 sw_frame_group_mgmt_0001 >
131 
132 			<enum 6 sw_frame_group_mgmt_0010 >
133 
134 			<enum 7 sw_frame_group_mgmt_0011 >
135 
136 			<enum 8 sw_frame_group_mgmt_0100 >
137 
138 			<enum 9 sw_frame_group_mgmt_0101 >
139 
140 			<enum 10 sw_frame_group_mgmt_0110 >
141 
142 			<enum 11 sw_frame_group_mgmt_0111 >
143 
144 			<enum 12 sw_frame_group_mgmt_1000 >
145 
146 			<enum 13 sw_frame_group_mgmt_1001 >
147 
148 			<enum 14 sw_frame_group_mgmt_1010 >
149 
150 			<enum 15 sw_frame_group_mgmt_1011 >
151 
152 			<enum 16 sw_frame_group_mgmt_1100 >
153 
154 			<enum 17 sw_frame_group_mgmt_1101 >
155 
156 			<enum 18 sw_frame_group_mgmt_1110 >
157 
158 			<enum 19 sw_frame_group_mgmt_1111 >
159 
160 
161 
162 			<enum 20 sw_frame_group_ctrl_0000 >
163 
164 			<enum 21 sw_frame_group_ctrl_0001 >
165 
166 			<enum 22 sw_frame_group_ctrl_0010 >
167 
168 			<enum 23 sw_frame_group_ctrl_0011 >
169 
170 			<enum 24 sw_frame_group_ctrl_0100 >
171 
172 			<enum 25 sw_frame_group_ctrl_0101 >
173 
174 			<enum 26 sw_frame_group_ctrl_0110 >
175 
176 			<enum 27 sw_frame_group_ctrl_0111 >
177 
178 			<enum 28 sw_frame_group_ctrl_1000 >
179 
180 			<enum 29 sw_frame_group_ctrl_1001 >
181 
182 			<enum 30 sw_frame_group_ctrl_1010 >
183 
184 			<enum 31 sw_frame_group_ctrl_1011 >
185 
186 			<enum 32 sw_frame_group_ctrl_1100 >
187 
188 			<enum 33 sw_frame_group_ctrl_1101 >
189 
190 			<enum 34 sw_frame_group_ctrl_1110 >
191 
192 			<enum 35 sw_frame_group_ctrl_1111 >
193 
194 
195 
196 			<enum 36 sw_frame_group_unsupported> This covers type 3
197 			and protocol version != 0
198 
199 
200 
201 
202 
203 
204 			<legal 0-37>
205 
206 reserved_0
207 
208 			<legal 0>
209 
210 phy_ppdu_id
211 
212 			A ppdu counter value that PHY increments for every PPDU
213 			received. The counter value wraps around
214 
215 			<legal all>
216 
217 msdu_length
218 
219 			MSDU length in bytes after decapsulation.
220 
221 
222 
223 			This field is still valid for MPDU frames without
224 
225 reserved_1a
226 
227 			<legal 0>
228 
229 ipsec_esp
230 
231 			Set if IPv4/v6 packet is using IPsec ESP
232 
233 l3_offset
234 
235 			Depending upon mode bit, this field either indicates the
236 			L3 offset in bytes from the start of the RX_HEADER or the IP
237 			offset in bytes from the start of the packet after
238 			decapsulation.  The latter is only valid if ipv4_proto or
239 			ipv6_proto is set.
240 
241 ipsec_ah
242 
243 			Set if IPv4/v6 packet is using IPsec AH
244 
245 l4_offset
246 
247 			Depending upon mode bit, this field either indicates the
248 			L4 offset nin bytes from the start of RX_HEADER(only valid
249 			if either ipv4_proto or ipv6_proto is set to 1) or indicates
250 			the offset in bytes to the start of TCP or UDP header from
251 			the start of the IP header after decapsulation(Only valid if
252 			tcp_proto or udp_proto is set).  The value 0 indicates that
253 			the offset is longer than 127 bytes.
254 
255 msdu_number
256 
257 			Indicates the MSDU number within a MPDU.  This value is
258 			reset to zero at the start of each MPDU.  If the number of
259 			MSDU exceeds 255 this number will wrap using modulo 256.
260 
261 decap_format
262 
263 			Indicates the format after decapsulation:
264 
265 
266 
267 			<enum 0 RAW> No encapsulation
268 
269 			<enum 1 Native_WiFi>
270 
271 			<enum 2 Ethernet> Ethernet 2 (DIX)  or 802.3 (uses
272 			SNAP/LLC)
273 
274 			<enum 3 802_3> DO NOT USE. Indicate Ethernet
275 
276 			<legal all>
277 
278 ipv4_proto
279 
280 			Set if L2 layer indicates IPv4 protocol.
281 
282 ipv6_proto
283 
284 			Set if L2 layer indicates IPv6 protocol.
285 
286 tcp_proto
287 
288 			Set if the ipv4_proto or ipv6_proto are set and the IP
289 			protocol indicates TCP.
290 
291 udp_proto
292 
293 			Set if the ipv4_proto or ipv6_proto are set and the IP
294 			protocol indicates UDP.
295 
296 ip_frag
297 
298 			Indicates that either the IP More frag bit is set or IP
299 			frag number is non-zero.  If set indicates that this is a
300 			fragmented IP packet.
301 
302 tcp_only_ack
303 
304 			Set if only the TCP Ack bit is set in the TCP flags and
305 			if the TCP payload is 0.
306 
307 da_is_bcast_mcast
308 
309 			The destination address is broadcast or multicast.
310 
311 toeplitz_hash
312 
313 			Actual choosen Hash.
314 
315 
316 
317 			0 -> Toeplitz hash of 2-tuple (IP source address, IP
318 			destination address)1 -> Toeplitz hash of 4-tuple (IP source
319 			address, IP destination address, L4 (TCP/UDP) source port,
320 			L4 (TCP/UDP) destination port)
321 
322 reserved_2a
323 
324 			<legal 0>
325 
326 ip4_protocol_ip6_next_header
327 
328 			For IPv4 this is the 8 bit protocol field (when
329 			ipv4_proto is set).  For IPv6 this is the 8 bit next_header
330 			field (when ipv6_proto is set).
331 
332 toeplitz_hash_2_or_4
333 
334 			Controlled by RxOLE register - If register bit set to 0,
335 			Toeplitz hash is computed over 2-tuple IPv4 or IPv6 src/dest
336 			addresses; otherwise, toeplitz hash is computed over 4-tuple
337 			IPv4 or IPv6 src/dest addresses and src/dest ports
338 
339 flow_id_toeplitz
340 
341 			Toeplitz hash of 5-tuple
342 
343 			{IP source address, IP destination address, IP source
344 			port, IP destination port, L4 protocol}  in case of
345 			non-IPSec.
346 
347 			In case of IPSec - Toeplitz hash of 4-tuple
348 
349 			{IP source address, IP destination address, SPI, L4
350 			protocol}
351 
352 
353 
354 			The relevant Toeplitz key registers are provided in
355 			RxOLE's instance of common parser module. These registers
356 			are separate from the Toeplitz keys used by ASE/FSE modules
357 			inside RxOLE.The actual value will be passed on from common
358 			parser module to RxOLE in one of the WHO_* TLVs.
359 
360 			<legal all>
361 
362 user_rssi
363 
364 			RSSI for this user
365 
366 			<legal all>
367 
368 pkt_type
369 
370 			Packet type:
371 
372 			<enum 0 dot11a>802.11a PPDU type
373 
374 			<enum 1 dot11b>802.11b PPDU type
375 
376 			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
377 
378 			<enum 3 dot11ac>802.11ac PPDU type
379 
380 			<enum 4 dot11ax>802.11ax PPDU type
381 
382 stbc
383 
384 			When set, use STBC transmission rates
385 
386 sgi
387 
388 			Field only valid when pkt type is HT, VHT or HE.
389 
390 
391 
392 			<enum 0     0_8_us_sgi > Legacy normal GI. Can also be
393 			used for HE
394 
395 			<enum 1     0_4_us_sgi > Legacy short GI. Can also be
396 			used for HE
397 
398 			<enum 2     1_6_us_sgi > HE related GI
399 
400 			<enum 3     3_2_us_sgi > HE related GI
401 
402 			<legal 0 - 3>
403 
404 rate_mcs
405 
406 			For details, refer to  MCS_TYPE description
407 
408 			<legal all>
409 
410 receive_bandwidth
411 
412 			Full receive Bandwidth
413 
414 
415 
416 			<enum 0     full_rx_bw_20_mhz>
417 
418 			<enum 1      full_rx_bw_40_mhz>
419 
420 			<enum 2      full_rx_bw_80_mhz>
421 
422 			<enum 3      full_rx_bw_160_mhz>
423 
424 
425 
426 			<legal 0-3>
427 
428 reception_type
429 
430 			Indicates what type of reception this is.
431 
432 			<enum 0     reception_type_SU >
433 
434 			<enum 1     reception_type_MU_MIMO >
435 
436 			<enum 2     reception_type_MU_OFDMA >
437 
438 			<enum 3     reception_type_MU_OFDMA_MIMO >
439 
440 			<legal all>
441 
442 nss
443 
444 			Field only valid when Reception_type =
445 			reception_type_MU_MIMO or reception_type_MU_OFDMA_MIMO
446 
447 
448 
449 			Number of Spatial Streams occupied by the User
450 
451 
452 
453 			<enum 0 1_spatial_stream>Single spatial stream
454 
455 			<enum 1 2_spatial_streams>2 spatial streams
456 
457 			<enum 2 3_spatial_streams>3 spatial streams
458 
459 			<enum 3 4_spatial_streams>4 spatial streams
460 
461 			<enum 4 5_spatial_streams>5 spatial streams
462 
463 			<enum 5 6_spatial_streams>6 spatial streams
464 
465 			<enum 6 7_spatial_streams>7 spatial streams
466 
467 			<enum 7 8_spatial_streams>8 spatial streams
468 
469 reserved_5
470 
471 			<legal 0>
472 
473 ppdu_start_timestamp
474 
475 			Timestamp that indicates when the PPDU that contained
476 			this MPDU started on the medium.
477 
478 			<legal all>
479 
480 sw_phy_meta_data
481 
482 			SW programmed Meta data provided by the PHY.
483 
484 
485 
486 			Can be used for SW to indicate the channel the device is
487 			on.
488 
489 			<legal all>
490 */
491 
492 
493 /* Description		RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY
494 
495 			Field indicates what the reason was that this MPDU frame
496 			was allowed to come into the receive path by RXPCU
497 
498 			<enum 0 rxpcu_filter_pass> This MPDU passed the normal
499 			frame filter programming of rxpcu
500 
501 			<enum 1 rxpcu_monitor_client> This MPDU did NOT pass the
502 			regular frame filter and would have been dropped, were it
503 			not for the frame fitting into the 'monitor_client'
504 			category.
505 
506 			<enum 2 rxpcu_monitor_other> This MPDU did NOT pass the
507 			regular frame filter and also did not pass the
508 			rxpcu_monitor_client filter. It would have been dropped
509 			accept that it did pass the 'monitor_other' category.
510 
511 			<legal 0-2>
512 */
513 #define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET         0x00000000
514 #define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_LSB            0
515 #define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_MASK           0x00000003
516 
517 /* Description		RX_MSDU_START_0_SW_FRAME_GROUP_ID
518 
519 			SW processes frames based on certain classifications.
520 			This field indicates to what sw classification this MPDU is
521 			mapped.
522 
523 			The classification is given in priority order
524 
525 
526 
527 			<enum 0 sw_frame_group_NDP_frame>
528 
529 
530 
531 			<enum 1 sw_frame_group_Multicast_data>
532 
533 			<enum 2 sw_frame_group_Unicast_data>
534 
535 			<enum 3 sw_frame_group_Null_data > This includes mpdus
536 			of type Data Null as well as QoS Data Null
537 
538 
539 
540 			<enum 4 sw_frame_group_mgmt_0000 >
541 
542 			<enum 5 sw_frame_group_mgmt_0001 >
543 
544 			<enum 6 sw_frame_group_mgmt_0010 >
545 
546 			<enum 7 sw_frame_group_mgmt_0011 >
547 
548 			<enum 8 sw_frame_group_mgmt_0100 >
549 
550 			<enum 9 sw_frame_group_mgmt_0101 >
551 
552 			<enum 10 sw_frame_group_mgmt_0110 >
553 
554 			<enum 11 sw_frame_group_mgmt_0111 >
555 
556 			<enum 12 sw_frame_group_mgmt_1000 >
557 
558 			<enum 13 sw_frame_group_mgmt_1001 >
559 
560 			<enum 14 sw_frame_group_mgmt_1010 >
561 
562 			<enum 15 sw_frame_group_mgmt_1011 >
563 
564 			<enum 16 sw_frame_group_mgmt_1100 >
565 
566 			<enum 17 sw_frame_group_mgmt_1101 >
567 
568 			<enum 18 sw_frame_group_mgmt_1110 >
569 
570 			<enum 19 sw_frame_group_mgmt_1111 >
571 
572 
573 
574 			<enum 20 sw_frame_group_ctrl_0000 >
575 
576 			<enum 21 sw_frame_group_ctrl_0001 >
577 
578 			<enum 22 sw_frame_group_ctrl_0010 >
579 
580 			<enum 23 sw_frame_group_ctrl_0011 >
581 
582 			<enum 24 sw_frame_group_ctrl_0100 >
583 
584 			<enum 25 sw_frame_group_ctrl_0101 >
585 
586 			<enum 26 sw_frame_group_ctrl_0110 >
587 
588 			<enum 27 sw_frame_group_ctrl_0111 >
589 
590 			<enum 28 sw_frame_group_ctrl_1000 >
591 
592 			<enum 29 sw_frame_group_ctrl_1001 >
593 
594 			<enum 30 sw_frame_group_ctrl_1010 >
595 
596 			<enum 31 sw_frame_group_ctrl_1011 >
597 
598 			<enum 32 sw_frame_group_ctrl_1100 >
599 
600 			<enum 33 sw_frame_group_ctrl_1101 >
601 
602 			<enum 34 sw_frame_group_ctrl_1110 >
603 
604 			<enum 35 sw_frame_group_ctrl_1111 >
605 
606 
607 
608 			<enum 36 sw_frame_group_unsupported> This covers type 3
609 			and protocol version != 0
610 
611 
612 
613 
614 
615 
616 			<legal 0-37>
617 */
618 #define RX_MSDU_START_0_SW_FRAME_GROUP_ID_OFFSET                     0x00000000
619 #define RX_MSDU_START_0_SW_FRAME_GROUP_ID_LSB                        2
620 #define RX_MSDU_START_0_SW_FRAME_GROUP_ID_MASK                       0x000001fc
621 
622 /* Description		RX_MSDU_START_0_RESERVED_0
623 
624 			<legal 0>
625 */
626 #define RX_MSDU_START_0_RESERVED_0_OFFSET                            0x00000000
627 #define RX_MSDU_START_0_RESERVED_0_LSB                               9
628 #define RX_MSDU_START_0_RESERVED_0_MASK                              0x0000fe00
629 
630 /* Description		RX_MSDU_START_0_PHY_PPDU_ID
631 
632 			A ppdu counter value that PHY increments for every PPDU
633 			received. The counter value wraps around
634 
635 			<legal all>
636 */
637 #define RX_MSDU_START_0_PHY_PPDU_ID_OFFSET                           0x00000000
638 #define RX_MSDU_START_0_PHY_PPDU_ID_LSB                              16
639 #define RX_MSDU_START_0_PHY_PPDU_ID_MASK                             0xffff0000
640 
641 /* Description		RX_MSDU_START_1_MSDU_LENGTH
642 
643 			MSDU length in bytes after decapsulation.
644 
645 
646 
647 			This field is still valid for MPDU frames without
648 */
649 #define RX_MSDU_START_1_MSDU_LENGTH_OFFSET                           0x00000004
650 #define RX_MSDU_START_1_MSDU_LENGTH_LSB                              0
651 #define RX_MSDU_START_1_MSDU_LENGTH_MASK                             0x00003fff
652 
653 /* Description		RX_MSDU_START_1_RESERVED_1A
654 
655 			<legal 0>
656 */
657 #define RX_MSDU_START_1_RESERVED_1A_OFFSET                           0x00000004
658 #define RX_MSDU_START_1_RESERVED_1A_LSB                              14
659 #define RX_MSDU_START_1_RESERVED_1A_MASK                             0x00004000
660 
661 /* Description		RX_MSDU_START_1_IPSEC_ESP
662 
663 			Set if IPv4/v6 packet is using IPsec ESP
664 */
665 #define RX_MSDU_START_1_IPSEC_ESP_OFFSET                             0x00000004
666 #define RX_MSDU_START_1_IPSEC_ESP_LSB                                15
667 #define RX_MSDU_START_1_IPSEC_ESP_MASK                               0x00008000
668 
669 /* Description		RX_MSDU_START_1_L3_OFFSET
670 
671 			Depending upon mode bit, this field either indicates the
672 			L3 offset in bytes from the start of the RX_HEADER or the IP
673 			offset in bytes from the start of the packet after
674 			decapsulation.  The latter is only valid if ipv4_proto or
675 			ipv6_proto is set.
676 */
677 #define RX_MSDU_START_1_L3_OFFSET_OFFSET                             0x00000004
678 #define RX_MSDU_START_1_L3_OFFSET_LSB                                16
679 #define RX_MSDU_START_1_L3_OFFSET_MASK                               0x007f0000
680 
681 /* Description		RX_MSDU_START_1_IPSEC_AH
682 
683 			Set if IPv4/v6 packet is using IPsec AH
684 */
685 #define RX_MSDU_START_1_IPSEC_AH_OFFSET                              0x00000004
686 #define RX_MSDU_START_1_IPSEC_AH_LSB                                 23
687 #define RX_MSDU_START_1_IPSEC_AH_MASK                                0x00800000
688 
689 /* Description		RX_MSDU_START_1_L4_OFFSET
690 
691 			Depending upon mode bit, this field either indicates the
692 			L4 offset nin bytes from the start of RX_HEADER(only valid
693 			if either ipv4_proto or ipv6_proto is set to 1) or indicates
694 			the offset in bytes to the start of TCP or UDP header from
695 			the start of the IP header after decapsulation(Only valid if
696 			tcp_proto or udp_proto is set).  The value 0 indicates that
697 			the offset is longer than 127 bytes.
698 */
699 #define RX_MSDU_START_1_L4_OFFSET_OFFSET                             0x00000004
700 #define RX_MSDU_START_1_L4_OFFSET_LSB                                24
701 #define RX_MSDU_START_1_L4_OFFSET_MASK                               0xff000000
702 
703 /* Description		RX_MSDU_START_2_MSDU_NUMBER
704 
705 			Indicates the MSDU number within a MPDU.  This value is
706 			reset to zero at the start of each MPDU.  If the number of
707 			MSDU exceeds 255 this number will wrap using modulo 256.
708 */
709 #define RX_MSDU_START_2_MSDU_NUMBER_OFFSET                           0x00000008
710 #define RX_MSDU_START_2_MSDU_NUMBER_LSB                              0
711 #define RX_MSDU_START_2_MSDU_NUMBER_MASK                             0x000000ff
712 
713 /* Description		RX_MSDU_START_2_DECAP_FORMAT
714 
715 			Indicates the format after decapsulation:
716 
717 
718 
719 			<enum 0 RAW> No encapsulation
720 
721 			<enum 1 Native_WiFi>
722 
723 			<enum 2 Ethernet> Ethernet 2 (DIX)  or 802.3 (uses
724 			SNAP/LLC)
725 
726 			<enum 3 802_3> DO NOT USE. Indicate Ethernet
727 
728 			<legal all>
729 */
730 #define RX_MSDU_START_2_DECAP_FORMAT_OFFSET                          0x00000008
731 #define RX_MSDU_START_2_DECAP_FORMAT_LSB                             8
732 #define RX_MSDU_START_2_DECAP_FORMAT_MASK                            0x00000300
733 
734 /* Description		RX_MSDU_START_2_IPV4_PROTO
735 
736 			Set if L2 layer indicates IPv4 protocol.
737 */
738 #define RX_MSDU_START_2_IPV4_PROTO_OFFSET                            0x00000008
739 #define RX_MSDU_START_2_IPV4_PROTO_LSB                               10
740 #define RX_MSDU_START_2_IPV4_PROTO_MASK                              0x00000400
741 
742 /* Description		RX_MSDU_START_2_IPV6_PROTO
743 
744 			Set if L2 layer indicates IPv6 protocol.
745 */
746 #define RX_MSDU_START_2_IPV6_PROTO_OFFSET                            0x00000008
747 #define RX_MSDU_START_2_IPV6_PROTO_LSB                               11
748 #define RX_MSDU_START_2_IPV6_PROTO_MASK                              0x00000800
749 
750 /* Description		RX_MSDU_START_2_TCP_PROTO
751 
752 			Set if the ipv4_proto or ipv6_proto are set and the IP
753 			protocol indicates TCP.
754 */
755 #define RX_MSDU_START_2_TCP_PROTO_OFFSET                             0x00000008
756 #define RX_MSDU_START_2_TCP_PROTO_LSB                                12
757 #define RX_MSDU_START_2_TCP_PROTO_MASK                               0x00001000
758 
759 /* Description		RX_MSDU_START_2_UDP_PROTO
760 
761 			Set if the ipv4_proto or ipv6_proto are set and the IP
762 			protocol indicates UDP.
763 */
764 #define RX_MSDU_START_2_UDP_PROTO_OFFSET                             0x00000008
765 #define RX_MSDU_START_2_UDP_PROTO_LSB                                13
766 #define RX_MSDU_START_2_UDP_PROTO_MASK                               0x00002000
767 
768 /* Description		RX_MSDU_START_2_IP_FRAG
769 
770 			Indicates that either the IP More frag bit is set or IP
771 			frag number is non-zero.  If set indicates that this is a
772 			fragmented IP packet.
773 */
774 #define RX_MSDU_START_2_IP_FRAG_OFFSET                               0x00000008
775 #define RX_MSDU_START_2_IP_FRAG_LSB                                  14
776 #define RX_MSDU_START_2_IP_FRAG_MASK                                 0x00004000
777 
778 /* Description		RX_MSDU_START_2_TCP_ONLY_ACK
779 
780 			Set if only the TCP Ack bit is set in the TCP flags and
781 			if the TCP payload is 0.
782 */
783 #define RX_MSDU_START_2_TCP_ONLY_ACK_OFFSET                          0x00000008
784 #define RX_MSDU_START_2_TCP_ONLY_ACK_LSB                             15
785 #define RX_MSDU_START_2_TCP_ONLY_ACK_MASK                            0x00008000
786 
787 /* Description		RX_MSDU_START_2_DA_IS_BCAST_MCAST
788 
789 			The destination address is broadcast or multicast.
790 */
791 #define RX_MSDU_START_2_DA_IS_BCAST_MCAST_OFFSET                     0x00000008
792 #define RX_MSDU_START_2_DA_IS_BCAST_MCAST_LSB                        16
793 #define RX_MSDU_START_2_DA_IS_BCAST_MCAST_MASK                       0x00010000
794 
795 /* Description		RX_MSDU_START_2_TOEPLITZ_HASH
796 
797 			Actual choosen Hash.
798 
799 
800 
801 			0 -> Toeplitz hash of 2-tuple (IP source address, IP
802 			destination address)1 -> Toeplitz hash of 4-tuple (IP source
803 			address, IP destination address, L4 (TCP/UDP) source port,
804 			L4 (TCP/UDP) destination port)
805 */
806 #define RX_MSDU_START_2_TOEPLITZ_HASH_OFFSET                         0x00000008
807 #define RX_MSDU_START_2_TOEPLITZ_HASH_LSB                            17
808 #define RX_MSDU_START_2_TOEPLITZ_HASH_MASK                           0x00020000
809 
810 /* Description		RX_MSDU_START_2_RESERVED_2A
811 
812 			<legal 0>
813 */
814 #define RX_MSDU_START_2_RESERVED_2A_OFFSET                           0x00000008
815 #define RX_MSDU_START_2_RESERVED_2A_LSB                              18
816 #define RX_MSDU_START_2_RESERVED_2A_MASK                             0x00fc0000
817 
818 /* Description		RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER
819 
820 			For IPv4 this is the 8 bit protocol field (when
821 			ipv4_proto is set).  For IPv6 this is the 8 bit next_header
822 			field (when ipv6_proto is set).
823 */
824 #define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_OFFSET          0x00000008
825 #define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_LSB             24
826 #define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_MASK            0xff000000
827 
828 /* Description		RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4
829 
830 			Controlled by RxOLE register - If register bit set to 0,
831 			Toeplitz hash is computed over 2-tuple IPv4 or IPv6 src/dest
832 			addresses; otherwise, toeplitz hash is computed over 4-tuple
833 			IPv4 or IPv6 src/dest addresses and src/dest ports
834 */
835 #define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_OFFSET                  0x0000000c
836 #define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_LSB                     0
837 #define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_MASK                    0xffffffff
838 
839 /* Description		RX_MSDU_START_4_FLOW_ID_TOEPLITZ
840 
841 			Toeplitz hash of 5-tuple
842 
843 			{IP source address, IP destination address, IP source
844 			port, IP destination port, L4 protocol}  in case of
845 			non-IPSec.
846 
847 			In case of IPSec - Toeplitz hash of 4-tuple
848 
849 			{IP source address, IP destination address, SPI, L4
850 			protocol}
851 
852 
853 
854 			The relevant Toeplitz key registers are provided in
855 			RxOLE's instance of common parser module. These registers
856 			are separate from the Toeplitz keys used by ASE/FSE modules
857 			inside RxOLE.The actual value will be passed on from common
858 			parser module to RxOLE in one of the WHO_* TLVs.
859 
860 			<legal all>
861 */
862 #define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_OFFSET                      0x00000010
863 #define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_LSB                         0
864 #define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_MASK                        0xffffffff
865 
866 /* Description		RX_MSDU_START_5_USER_RSSI
867 
868 			RSSI for this user
869 
870 			<legal all>
871 */
872 #define RX_MSDU_START_5_USER_RSSI_OFFSET                             0x00000014
873 #define RX_MSDU_START_5_USER_RSSI_LSB                                0
874 #define RX_MSDU_START_5_USER_RSSI_MASK                               0x000000ff
875 
876 /* Description		RX_MSDU_START_5_PKT_TYPE
877 
878 			Packet type:
879 
880 			<enum 0 dot11a>802.11a PPDU type
881 
882 			<enum 1 dot11b>802.11b PPDU type
883 
884 			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
885 
886 			<enum 3 dot11ac>802.11ac PPDU type
887 
888 			<enum 4 dot11ax>802.11ax PPDU type
889 */
890 #define RX_MSDU_START_5_PKT_TYPE_OFFSET                              0x00000014
891 #define RX_MSDU_START_5_PKT_TYPE_LSB                                 8
892 #define RX_MSDU_START_5_PKT_TYPE_MASK                                0x00000f00
893 
894 /* Description		RX_MSDU_START_5_STBC
895 
896 			When set, use STBC transmission rates
897 */
898 #define RX_MSDU_START_5_STBC_OFFSET                                  0x00000014
899 #define RX_MSDU_START_5_STBC_LSB                                     12
900 #define RX_MSDU_START_5_STBC_MASK                                    0x00001000
901 
902 /* Description		RX_MSDU_START_5_SGI
903 
904 			Field only valid when pkt type is HT, VHT or HE.
905 
906 
907 
908 			<enum 0     0_8_us_sgi > Legacy normal GI. Can also be
909 			used for HE
910 
911 			<enum 1     0_4_us_sgi > Legacy short GI. Can also be
912 			used for HE
913 
914 			<enum 2     1_6_us_sgi > HE related GI
915 
916 			<enum 3     3_2_us_sgi > HE related GI
917 
918 			<legal 0 - 3>
919 */
920 #define RX_MSDU_START_5_SGI_OFFSET                                   0x00000014
921 #define RX_MSDU_START_5_SGI_LSB                                      13
922 #define RX_MSDU_START_5_SGI_MASK                                     0x00006000
923 
924 /* Description		RX_MSDU_START_5_RATE_MCS
925 
926 			For details, refer to  MCS_TYPE description
927 
928 			<legal all>
929 */
930 #define RX_MSDU_START_5_RATE_MCS_OFFSET                              0x00000014
931 #define RX_MSDU_START_5_RATE_MCS_LSB                                 15
932 #define RX_MSDU_START_5_RATE_MCS_MASK                                0x00078000
933 
934 /* Description		RX_MSDU_START_5_RECEIVE_BANDWIDTH
935 
936 			Full receive Bandwidth
937 
938 
939 
940 			<enum 0     full_rx_bw_20_mhz>
941 
942 			<enum 1      full_rx_bw_40_mhz>
943 
944 			<enum 2      full_rx_bw_80_mhz>
945 
946 			<enum 3      full_rx_bw_160_mhz>
947 
948 
949 
950 			<legal 0-3>
951 */
952 #define RX_MSDU_START_5_RECEIVE_BANDWIDTH_OFFSET                     0x00000014
953 #define RX_MSDU_START_5_RECEIVE_BANDWIDTH_LSB                        19
954 #define RX_MSDU_START_5_RECEIVE_BANDWIDTH_MASK                       0x00180000
955 
956 /* Description		RX_MSDU_START_5_RECEPTION_TYPE
957 
958 			Indicates what type of reception this is.
959 
960 			<enum 0     reception_type_SU >
961 
962 			<enum 1     reception_type_MU_MIMO >
963 
964 			<enum 2     reception_type_MU_OFDMA >
965 
966 			<enum 3     reception_type_MU_OFDMA_MIMO >
967 
968 			<legal all>
969 */
970 #define RX_MSDU_START_5_RECEPTION_TYPE_OFFSET                        0x00000014
971 #define RX_MSDU_START_5_RECEPTION_TYPE_LSB                           21
972 #define RX_MSDU_START_5_RECEPTION_TYPE_MASK                          0x00600000
973 
974 /* Description		RX_MSDU_START_5_NSS
975 
976 			Field only valid when Reception_type =
977 			reception_type_MU_MIMO or reception_type_MU_OFDMA_MIMO
978 
979 
980 
981 			Number of Spatial Streams occupied by the User
982 
983 
984 
985 			<enum 0 1_spatial_stream>Single spatial stream
986 
987 			<enum 1 2_spatial_streams>2 spatial streams
988 
989 			<enum 2 3_spatial_streams>3 spatial streams
990 
991 			<enum 3 4_spatial_streams>4 spatial streams
992 
993 			<enum 4 5_spatial_streams>5 spatial streams
994 
995 			<enum 5 6_spatial_streams>6 spatial streams
996 
997 			<enum 6 7_spatial_streams>7 spatial streams
998 
999 			<enum 7 8_spatial_streams>8 spatial streams
1000 */
1001 #define RX_MSDU_START_5_NSS_OFFSET                                   0x00000014
1002 #define RX_MSDU_START_5_NSS_LSB                                      23
1003 #define RX_MSDU_START_5_NSS_MASK                                     0x03800000
1004 
1005 /* Description		RX_MSDU_START_5_RESERVED_5
1006 
1007 			<legal 0>
1008 */
1009 #define RX_MSDU_START_5_RESERVED_5_OFFSET                            0x00000014
1010 #define RX_MSDU_START_5_RESERVED_5_LSB                               26
1011 #define RX_MSDU_START_5_RESERVED_5_MASK                              0xfc000000
1012 
1013 /* Description		RX_MSDU_START_6_PPDU_START_TIMESTAMP
1014 
1015 			Timestamp that indicates when the PPDU that contained
1016 			this MPDU started on the medium.
1017 
1018 			<legal all>
1019 */
1020 #define RX_MSDU_START_6_PPDU_START_TIMESTAMP_OFFSET                  0x00000018
1021 #define RX_MSDU_START_6_PPDU_START_TIMESTAMP_LSB                     0
1022 #define RX_MSDU_START_6_PPDU_START_TIMESTAMP_MASK                    0xffffffff
1023 
1024 /* Description		RX_MSDU_START_7_SW_PHY_META_DATA
1025 
1026 			SW programmed Meta data provided by the PHY.
1027 
1028 
1029 
1030 			Can be used for SW to indicate the channel the device is
1031 			on.
1032 
1033 			<legal all>
1034 */
1035 #define RX_MSDU_START_7_SW_PHY_META_DATA_OFFSET                      0x0000001c
1036 #define RX_MSDU_START_7_SW_PHY_META_DATA_LSB                         0
1037 #define RX_MSDU_START_7_SW_PHY_META_DATA_MASK                        0xffffffff
1038 
1039 
1040 #endif // _RX_MSDU_START_H_
1041