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