/*
 * Copyright (c) 2020 The Linux Foundation. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

//
// DO NOT EDIT!  This file is automatically generated
//               These definitions are tied to a particular hardware layout


#ifndef _RX_MSDU_START_H_
#define _RX_MSDU_START_H_
#if !defined(__ASSEMBLER__)
#endif


// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	rxpcu_mpdu_filter_in_category[1:0], sw_frame_group_id[8:2], reserved_0[15:9], phy_ppdu_id[31:16]
//	1	msdu_length[13:0], reserved_1a[14], ipsec_esp[15], l3_offset[22:16], ipsec_ah[23], l4_offset[31:24]
//	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]
//	3	toeplitz_hash_2_or_4[31:0]
//	4	flow_id_toeplitz[31:0]
//	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]
//	6	ppdu_start_timestamp[31:0]
//	7	sw_phy_meta_data[31:0]
//	8	vlan_ctag_ci[15:0], vlan_stag_ci[31:16]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RX_MSDU_START 9

struct rx_msdu_start {
             uint32_t rxpcu_mpdu_filter_in_category   :  2, //[1:0]
                      sw_frame_group_id               :  7, //[8:2]
                      reserved_0                      :  7, //[15:9]
                      phy_ppdu_id                     : 16; //[31:16]
             uint32_t msdu_length                     : 14, //[13:0]
                      reserved_1a                     :  1, //[14]
                      ipsec_esp                       :  1, //[15]
                      l3_offset                       :  7, //[22:16]
                      ipsec_ah                        :  1, //[23]
                      l4_offset                       :  8; //[31:24]
             uint32_t msdu_number                     :  8, //[7:0]
                      decap_format                    :  2, //[9:8]
                      ipv4_proto                      :  1, //[10]
                      ipv6_proto                      :  1, //[11]
                      tcp_proto                       :  1, //[12]
                      udp_proto                       :  1, //[13]
                      ip_frag                         :  1, //[14]
                      tcp_only_ack                    :  1, //[15]
                      da_is_bcast_mcast               :  1, //[16]
                      toeplitz_hash_sel               :  2, //[18:17]
                      ip_fixed_header_valid           :  1, //[19]
                      ip_extn_header_valid            :  1, //[20]
                      tcp_udp_header_valid            :  1, //[21]
                      mesh_control_present            :  1, //[22]
                      ldpc                            :  1, //[23]
                      ip4_protocol_ip6_next_header    :  8; //[31:24]
             uint32_t toeplitz_hash_2_or_4            : 32; //[31:0]
             uint32_t flow_id_toeplitz                : 32; //[31:0]
             uint32_t user_rssi                       :  8, //[7:0]
                      pkt_type                        :  4, //[11:8]
                      stbc                            :  1, //[12]
                      sgi                             :  2, //[14:13]
                      rate_mcs                        :  4, //[18:15]
                      receive_bandwidth               :  2, //[20:19]
                      reception_type                  :  3, //[23:21]
                      mimo_ss_bitmap                  :  8; //[31:24]
             uint32_t ppdu_start_timestamp            : 32; //[31:0]
             uint32_t sw_phy_meta_data                : 32; //[31:0]
             uint32_t vlan_ctag_ci                    : 16, //[15:0]
                      vlan_stag_ci                    : 16; //[31:16]
};

/*

rxpcu_mpdu_filter_in_category
			
			Field indicates what the reason was that this MPDU frame
			was allowed to come into the receive path by RXPCU
			
			<enum 0 rxpcu_filter_pass> This MPDU passed the normal
			frame filter programming of rxpcu
			
			<enum 1 rxpcu_monitor_client> This MPDU did NOT pass the
			regular frame filter and would have been dropped, were it
			not for the frame fitting into the 'monitor_client'
			category.
			
			<enum 2 rxpcu_monitor_other> This MPDU did NOT pass the
			regular frame filter and also did not pass the
			rxpcu_monitor_client filter. It would have been dropped
			accept that it did pass the 'monitor_other' category.
			
			<legal 0-2>

sw_frame_group_id
			
			SW processes frames based on certain classifications.
			This field indicates to what sw classification this MPDU is
			mapped.
			
			The classification is given in priority order
			
			
			
			<enum 0 sw_frame_group_NDP_frame> 
			
			
			
			<enum 1 sw_frame_group_Multicast_data> 
			
			<enum 2 sw_frame_group_Unicast_data> 
			
			<enum 3 sw_frame_group_Null_data > This includes mpdus
			of type Data Null as well as QoS Data Null
			
			
			
			<enum 4 sw_frame_group_mgmt_0000 > 
			
			<enum 5 sw_frame_group_mgmt_0001 > 
			
			<enum 6 sw_frame_group_mgmt_0010 > 
			
			<enum 7 sw_frame_group_mgmt_0011 > 
			
			<enum 8 sw_frame_group_mgmt_0100 > 
			
			<enum 9 sw_frame_group_mgmt_0101 > 
			
			<enum 10 sw_frame_group_mgmt_0110 > 
			
			<enum 11 sw_frame_group_mgmt_0111 > 
			
			<enum 12 sw_frame_group_mgmt_1000 > 
			
			<enum 13 sw_frame_group_mgmt_1001 > 
			
			<enum 14 sw_frame_group_mgmt_1010 > 
			
			<enum 15 sw_frame_group_mgmt_1011 > 
			
			<enum 16 sw_frame_group_mgmt_1100 > 
			
			<enum 17 sw_frame_group_mgmt_1101 > 
			
			<enum 18 sw_frame_group_mgmt_1110 > 
			
			<enum 19 sw_frame_group_mgmt_1111 > 
			
			
			
			<enum 20 sw_frame_group_ctrl_0000 > 
			
			<enum 21 sw_frame_group_ctrl_0001 > 
			
			<enum 22 sw_frame_group_ctrl_0010 > 
			
			<enum 23 sw_frame_group_ctrl_0011 > 
			
			<enum 24 sw_frame_group_ctrl_0100 > 
			
			<enum 25 sw_frame_group_ctrl_0101 > 
			
			<enum 26 sw_frame_group_ctrl_0110 > 
			
			<enum 27 sw_frame_group_ctrl_0111 > 
			
			<enum 28 sw_frame_group_ctrl_1000 > 
			
			<enum 29 sw_frame_group_ctrl_1001 > 
			
			<enum 30 sw_frame_group_ctrl_1010 > 
			
			<enum 31 sw_frame_group_ctrl_1011 > 
			
			<enum 32 sw_frame_group_ctrl_1100 > 
			
			<enum 33 sw_frame_group_ctrl_1101 > 
			
			<enum 34 sw_frame_group_ctrl_1110 > 
			
			<enum 35 sw_frame_group_ctrl_1111 > 
			
			
			
			<enum 36 sw_frame_group_unsupported> This covers type 3
			and protocol version != 0
			
			
			
			
			
			
			<legal 0-37>

reserved_0
			
			<legal 0>

phy_ppdu_id
			
			A ppdu counter value that PHY increments for every PPDU
			received. The counter value wraps around  
			
			<legal all>

msdu_length
			
			MSDU length in bytes after decapsulation. 
			
			
			
			This field is still valid for MPDU frames without

reserved_1a
			
			<legal 0>

ipsec_esp
			
			Set if IPv4/v6 packet is using IPsec ESP

l3_offset
			
			Depending upon mode bit, this field either indicates the
			L3 offset in bytes from the start of the RX_HEADER or the IP
			offset in bytes from the start of the packet after
			decapsulation.  The latter is only valid if ipv4_proto or
			ipv6_proto is set.

ipsec_ah
			
			Set if IPv4/v6 packet is using IPsec AH

l4_offset
			
			Depending upon mode bit, this field either indicates the
			L4 offset nin bytes from the start of RX_HEADER(only valid
			if either ipv4_proto or ipv6_proto is set to 1) or indicates
			the offset in bytes to the start of TCP or UDP header from
			the start of the IP header after decapsulation(Only valid if
			tcp_proto or udp_proto is set).  The value 0 indicates that
			the offset is longer than 127 bytes.

msdu_number
			
			Indicates the MSDU number within a MPDU.  This value is
			reset to zero at the start of each MPDU.  If the number of
			MSDU exceeds 255 this number will wrap using modulo 256.

decap_format
			
			Indicates the format after decapsulation:
			
			
			
			<enum 0 RAW> No encapsulation
			
			<enum 1 Native_WiFi>
			
			<enum 2 Ethernet> Ethernet 2 (DIX)  or 802.3 (uses
			SNAP/LLC)
			
			<enum 3 802_3> Indicate Ethernet
			
			
			
			<legal all>

ipv4_proto
			
			Set if L2 layer indicates IPv4 protocol.

ipv6_proto
			
			Set if L2 layer indicates IPv6 protocol.

tcp_proto
			
			Set if the ipv4_proto or ipv6_proto are set and the IP
			protocol indicates TCP.

udp_proto
			
			Set if the ipv4_proto or ipv6_proto are set and the IP
			protocol indicates UDP.

ip_frag
			
			Indicates that either the IP More frag bit is set or IP
			frag number is non-zero.  If set indicates that this is a
			fragmented IP packet.

tcp_only_ack
			
			Set if only the TCP Ack bit is set in the TCP flags and
			if the TCP payload is 0.

da_is_bcast_mcast
			
			The destination address is broadcast or multicast.

toeplitz_hash_sel
			
			Actual choosen Hash.
			
			
			
			0 -> Toeplitz hash of 2-tuple (IP source address, IP
			destination address)1 -> Toeplitz hash of 4-tuple (IP source
			address, IP destination address, L4 (TCP/UDP) source port,
			L4 (TCP/UDP) destination port)
			
			2 -> Toeplitz of flow_id
			
			3 -> Zero is used
			
			<legal all>

ip_fixed_header_valid
			
			Fixed 20-byte IPv4 header or 40-byte IPv6 header parsed
			fully within first 256 bytes of the packet

ip_extn_header_valid
			
			IPv6/IPv6 header, including IPv4 options and
			recognizable extension headers parsed fully within first 256
			bytes of the packet

tcp_udp_header_valid
			
			Fixed 20-byte TCP (excluding TCP options) or 8-byte UDP
			header parsed fully within first 256 bytes of the packet

mesh_control_present
			
			When set, this MSDU includes the 'Mesh Control' field
			
			<legal all>

ldpc
			
			When set, indicates that LDPC coding was used.
			
			<legal all>

ip4_protocol_ip6_next_header
			
			For IPv4 this is the 8 bit protocol field (when
			ipv4_proto is set).  For IPv6 this is the 8 bit next_header
			field (when ipv6_proto is set).

toeplitz_hash_2_or_4
			
			Controlled by multiple RxOLE registers for TCP/UDP over
			IPv4/IPv6 - Either, Toeplitz hash computed over 2-tuple IPv4
			or IPv6 src/dest addresses is reported; or, Toeplitz hash
			computed over 4-tuple IPv4 or IPv6 src/dest addresses and
			src/dest ports is reported. The Flow_id_toeplitz hash can
			also be reported here. Usually the hash reported here is the
			one used for hash-based REO routing (see
			use_flow_id_toeplitz_clfy in 'RXPT_CLASSIFY_INFO').
			
			
			
			In Pine, optionally the 3-tuple Toeplitz hash over IPv4
			or IPv6 src/dest addresses and L4 protocol can be reported
			here. (Unsupported in HastingsPrime)

flow_id_toeplitz
			
			Toeplitz hash of 5-tuple 
			
			{IP source address, IP destination address, IP source
			port, IP destination port, L4 protocol}  in case of
			non-IPSec.
			
			In case of IPSec - Toeplitz hash of 4-tuple 
			
			{IP source address, IP destination address, SPI, L4
			protocol}
			
			
			
			In Pine, optionally the 3-tuple Toeplitz hash over IPv4
			or IPv6 src/dest addresses and L4 protocol can be reported
			here. (Unsupported in HastingsPrime)
			
			
			
			The relevant Toeplitz key registers are provided in
			RxOLE's instance of common parser module. These registers
			are separate from the Toeplitz keys used by ASE/FSE modules
			inside RxOLE.The actual value will be passed on from common
			parser module to RxOLE in one of the WHO_* TLVs.
			
			<legal all>

user_rssi
			
			RSSI for this user
			
			<legal all>

pkt_type
			
			Packet type:
			
			<enum 0 dot11a>802.11a PPDU type
			
			<enum 1 dot11b>802.11b PPDU type
			
			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
			
			<enum 3 dot11ac>802.11ac PPDU type
			
			<enum 4 dot11ax>802.11ax PPDU type
			
			<enum 5 dot11ba>802.11ba (WUR) PPDU type

stbc
			
			When set, use STBC transmission rates

sgi
			
			Field only valid when pkt type is HT, VHT or HE.
			
			
			
			<enum 0     0_8_us_sgi > Legacy normal GI. Can also be
			used for HE
			
			<enum 1     0_4_us_sgi > Legacy short GI. Can also be
			used for HE
			
			<enum 2     1_6_us_sgi > HE related GI
			
			<enum 3     3_2_us_sgi > HE related GI
			
			<legal 0 - 3>

rate_mcs
			
			For details, refer to  MCS_TYPE description
			
			Note: This is rate in case of 11a/11b
			
			
			
			<legal all>

receive_bandwidth
			
			Full receive Bandwidth
			
			
			
			<enum 0     full_rx_bw_20_mhz>
			
			<enum 1      full_rx_bw_40_mhz>
			
			<enum 2      full_rx_bw_80_mhz>
			
			<enum 3      full_rx_bw_160_mhz> 
			
			
			
			<legal 0-3>

reception_type
			
			Indicates what type of reception this is.
			
			<enum 0     reception_type_SU > Basic SU reception (not
			part of OFDMA or MIMO)
			
			<enum 1     reception_type_MU_MIMO > This is related to
			DL type of reception
			
			<enum 2     reception_type_MU_OFDMA >  This is related
			to DL type of reception
			
			<enum 3     reception_type_MU_OFDMA_MIMO >  This is
			related to DL type of reception
			
			<enum 4     reception_type_UL_MU_MIMO > This is related
			to UL type of reception
			
			<enum 5     reception_type_UL_MU_OFDMA >  This is
			related to UL type of reception
			
			<enum 6     reception_type_UL_MU_OFDMA_MIMO >  This is
			related to UL type of reception
			
			
			
			<legal 0-6>

mimo_ss_bitmap
			
			Field only valid when Reception_type for the MPDU from
			this STA is some form of MIMO reception
			
			
			
			Bitmap, with each bit indicating if the related spatial
			stream is used for this STA
			
			LSB related to SS 0
			
			
			
			0: spatial stream not used for this reception
			
			1: spatial stream used for this reception
			
			
			
			<legal all>

ppdu_start_timestamp
			
			Timestamp that indicates when the PPDU that contained
			this MPDU started on the medium.
			
			<legal all>

sw_phy_meta_data
			
			SW programmed Meta data provided by the PHY.
			
			
			
			Can be used for SW to indicate the channel the device is
			on.
			
			<legal all>

vlan_ctag_ci
			
			2 bytes of C-VLAN Tag Control Information from
			WHO_L2_LLC

vlan_stag_ci
			
			2 bytes of S-VLAN Tag Control Information from
			WHO_L2_LLC in case of double VLAN
*/


/* Description		RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY
			
			Field indicates what the reason was that this MPDU frame
			was allowed to come into the receive path by RXPCU
			
			<enum 0 rxpcu_filter_pass> This MPDU passed the normal
			frame filter programming of rxpcu
			
			<enum 1 rxpcu_monitor_client> This MPDU did NOT pass the
			regular frame filter and would have been dropped, were it
			not for the frame fitting into the 'monitor_client'
			category.
			
			<enum 2 rxpcu_monitor_other> This MPDU did NOT pass the
			regular frame filter and also did not pass the
			rxpcu_monitor_client filter. It would have been dropped
			accept that it did pass the 'monitor_other' category.
			
			<legal 0-2>
*/
#define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET         0x00000000
#define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_LSB            0
#define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_MASK           0x00000003

/* Description		RX_MSDU_START_0_SW_FRAME_GROUP_ID
			
			SW processes frames based on certain classifications.
			This field indicates to what sw classification this MPDU is
			mapped.
			
			The classification is given in priority order
			
			
			
			<enum 0 sw_frame_group_NDP_frame> 
			
			
			
			<enum 1 sw_frame_group_Multicast_data> 
			
			<enum 2 sw_frame_group_Unicast_data> 
			
			<enum 3 sw_frame_group_Null_data > This includes mpdus
			of type Data Null as well as QoS Data Null
			
			
			
			<enum 4 sw_frame_group_mgmt_0000 > 
			
			<enum 5 sw_frame_group_mgmt_0001 > 
			
			<enum 6 sw_frame_group_mgmt_0010 > 
			
			<enum 7 sw_frame_group_mgmt_0011 > 
			
			<enum 8 sw_frame_group_mgmt_0100 > 
			
			<enum 9 sw_frame_group_mgmt_0101 > 
			
			<enum 10 sw_frame_group_mgmt_0110 > 
			
			<enum 11 sw_frame_group_mgmt_0111 > 
			
			<enum 12 sw_frame_group_mgmt_1000 > 
			
			<enum 13 sw_frame_group_mgmt_1001 > 
			
			<enum 14 sw_frame_group_mgmt_1010 > 
			
			<enum 15 sw_frame_group_mgmt_1011 > 
			
			<enum 16 sw_frame_group_mgmt_1100 > 
			
			<enum 17 sw_frame_group_mgmt_1101 > 
			
			<enum 18 sw_frame_group_mgmt_1110 > 
			
			<enum 19 sw_frame_group_mgmt_1111 > 
			
			
			
			<enum 20 sw_frame_group_ctrl_0000 > 
			
			<enum 21 sw_frame_group_ctrl_0001 > 
			
			<enum 22 sw_frame_group_ctrl_0010 > 
			
			<enum 23 sw_frame_group_ctrl_0011 > 
			
			<enum 24 sw_frame_group_ctrl_0100 > 
			
			<enum 25 sw_frame_group_ctrl_0101 > 
			
			<enum 26 sw_frame_group_ctrl_0110 > 
			
			<enum 27 sw_frame_group_ctrl_0111 > 
			
			<enum 28 sw_frame_group_ctrl_1000 > 
			
			<enum 29 sw_frame_group_ctrl_1001 > 
			
			<enum 30 sw_frame_group_ctrl_1010 > 
			
			<enum 31 sw_frame_group_ctrl_1011 > 
			
			<enum 32 sw_frame_group_ctrl_1100 > 
			
			<enum 33 sw_frame_group_ctrl_1101 > 
			
			<enum 34 sw_frame_group_ctrl_1110 > 
			
			<enum 35 sw_frame_group_ctrl_1111 > 
			
			
			
			<enum 36 sw_frame_group_unsupported> This covers type 3
			and protocol version != 0
			
			
			
			
			
			
			<legal 0-37>
*/
#define RX_MSDU_START_0_SW_FRAME_GROUP_ID_OFFSET                     0x00000000
#define RX_MSDU_START_0_SW_FRAME_GROUP_ID_LSB                        2
#define RX_MSDU_START_0_SW_FRAME_GROUP_ID_MASK                       0x000001fc

/* Description		RX_MSDU_START_0_RESERVED_0
			
			<legal 0>
*/
#define RX_MSDU_START_0_RESERVED_0_OFFSET                            0x00000000
#define RX_MSDU_START_0_RESERVED_0_LSB                               9
#define RX_MSDU_START_0_RESERVED_0_MASK                              0x0000fe00

/* Description		RX_MSDU_START_0_PHY_PPDU_ID
			
			A ppdu counter value that PHY increments for every PPDU
			received. The counter value wraps around  
			
			<legal all>
*/
#define RX_MSDU_START_0_PHY_PPDU_ID_OFFSET                           0x00000000
#define RX_MSDU_START_0_PHY_PPDU_ID_LSB                              16
#define RX_MSDU_START_0_PHY_PPDU_ID_MASK                             0xffff0000

/* Description		RX_MSDU_START_1_MSDU_LENGTH
			
			MSDU length in bytes after decapsulation. 
			
			
			
			This field is still valid for MPDU frames without
*/
#define RX_MSDU_START_1_MSDU_LENGTH_OFFSET                           0x00000004
#define RX_MSDU_START_1_MSDU_LENGTH_LSB                              0
#define RX_MSDU_START_1_MSDU_LENGTH_MASK                             0x00003fff

/* Description		RX_MSDU_START_1_RESERVED_1A
			
			<legal 0>
*/
#define RX_MSDU_START_1_RESERVED_1A_OFFSET                           0x00000004
#define RX_MSDU_START_1_RESERVED_1A_LSB                              14
#define RX_MSDU_START_1_RESERVED_1A_MASK                             0x00004000

/* Description		RX_MSDU_START_1_IPSEC_ESP
			
			Set if IPv4/v6 packet is using IPsec ESP
*/
#define RX_MSDU_START_1_IPSEC_ESP_OFFSET                             0x00000004
#define RX_MSDU_START_1_IPSEC_ESP_LSB                                15
#define RX_MSDU_START_1_IPSEC_ESP_MASK                               0x00008000

/* Description		RX_MSDU_START_1_L3_OFFSET
			
			Depending upon mode bit, this field either indicates the
			L3 offset in bytes from the start of the RX_HEADER or the IP
			offset in bytes from the start of the packet after
			decapsulation.  The latter is only valid if ipv4_proto or
			ipv6_proto is set.
*/
#define RX_MSDU_START_1_L3_OFFSET_OFFSET                             0x00000004
#define RX_MSDU_START_1_L3_OFFSET_LSB                                16
#define RX_MSDU_START_1_L3_OFFSET_MASK                               0x007f0000

/* Description		RX_MSDU_START_1_IPSEC_AH
			
			Set if IPv4/v6 packet is using IPsec AH
*/
#define RX_MSDU_START_1_IPSEC_AH_OFFSET                              0x00000004
#define RX_MSDU_START_1_IPSEC_AH_LSB                                 23
#define RX_MSDU_START_1_IPSEC_AH_MASK                                0x00800000

/* Description		RX_MSDU_START_1_L4_OFFSET
			
			Depending upon mode bit, this field either indicates the
			L4 offset nin bytes from the start of RX_HEADER(only valid
			if either ipv4_proto or ipv6_proto is set to 1) or indicates
			the offset in bytes to the start of TCP or UDP header from
			the start of the IP header after decapsulation(Only valid if
			tcp_proto or udp_proto is set).  The value 0 indicates that
			the offset is longer than 127 bytes.
*/
#define RX_MSDU_START_1_L4_OFFSET_OFFSET                             0x00000004
#define RX_MSDU_START_1_L4_OFFSET_LSB                                24
#define RX_MSDU_START_1_L4_OFFSET_MASK                               0xff000000

/* Description		RX_MSDU_START_2_MSDU_NUMBER
			
			Indicates the MSDU number within a MPDU.  This value is
			reset to zero at the start of each MPDU.  If the number of
			MSDU exceeds 255 this number will wrap using modulo 256.
*/
#define RX_MSDU_START_2_MSDU_NUMBER_OFFSET                           0x00000008
#define RX_MSDU_START_2_MSDU_NUMBER_LSB                              0
#define RX_MSDU_START_2_MSDU_NUMBER_MASK                             0x000000ff

/* Description		RX_MSDU_START_2_DECAP_FORMAT
			
			Indicates the format after decapsulation:
			
			
			
			<enum 0 RAW> No encapsulation
			
			<enum 1 Native_WiFi>
			
			<enum 2 Ethernet> Ethernet 2 (DIX)  or 802.3 (uses
			SNAP/LLC)
			
			<enum 3 802_3> Indicate Ethernet
			
			
			
			<legal all>
*/
#define RX_MSDU_START_2_DECAP_FORMAT_OFFSET                          0x00000008
#define RX_MSDU_START_2_DECAP_FORMAT_LSB                             8
#define RX_MSDU_START_2_DECAP_FORMAT_MASK                            0x00000300

/* Description		RX_MSDU_START_2_IPV4_PROTO
			
			Set if L2 layer indicates IPv4 protocol.
*/
#define RX_MSDU_START_2_IPV4_PROTO_OFFSET                            0x00000008
#define RX_MSDU_START_2_IPV4_PROTO_LSB                               10
#define RX_MSDU_START_2_IPV4_PROTO_MASK                              0x00000400

/* Description		RX_MSDU_START_2_IPV6_PROTO
			
			Set if L2 layer indicates IPv6 protocol.
*/
#define RX_MSDU_START_2_IPV6_PROTO_OFFSET                            0x00000008
#define RX_MSDU_START_2_IPV6_PROTO_LSB                               11
#define RX_MSDU_START_2_IPV6_PROTO_MASK                              0x00000800

/* Description		RX_MSDU_START_2_TCP_PROTO
			
			Set if the ipv4_proto or ipv6_proto are set and the IP
			protocol indicates TCP.
*/
#define RX_MSDU_START_2_TCP_PROTO_OFFSET                             0x00000008
#define RX_MSDU_START_2_TCP_PROTO_LSB                                12
#define RX_MSDU_START_2_TCP_PROTO_MASK                               0x00001000

/* Description		RX_MSDU_START_2_UDP_PROTO
			
			Set if the ipv4_proto or ipv6_proto are set and the IP
			protocol indicates UDP.
*/
#define RX_MSDU_START_2_UDP_PROTO_OFFSET                             0x00000008
#define RX_MSDU_START_2_UDP_PROTO_LSB                                13
#define RX_MSDU_START_2_UDP_PROTO_MASK                               0x00002000

/* Description		RX_MSDU_START_2_IP_FRAG
			
			Indicates that either the IP More frag bit is set or IP
			frag number is non-zero.  If set indicates that this is a
			fragmented IP packet.
*/
#define RX_MSDU_START_2_IP_FRAG_OFFSET                               0x00000008
#define RX_MSDU_START_2_IP_FRAG_LSB                                  14
#define RX_MSDU_START_2_IP_FRAG_MASK                                 0x00004000

/* Description		RX_MSDU_START_2_TCP_ONLY_ACK
			
			Set if only the TCP Ack bit is set in the TCP flags and
			if the TCP payload is 0.
*/
#define RX_MSDU_START_2_TCP_ONLY_ACK_OFFSET                          0x00000008
#define RX_MSDU_START_2_TCP_ONLY_ACK_LSB                             15
#define RX_MSDU_START_2_TCP_ONLY_ACK_MASK                            0x00008000

/* Description		RX_MSDU_START_2_DA_IS_BCAST_MCAST
			
			The destination address is broadcast or multicast.
*/
#define RX_MSDU_START_2_DA_IS_BCAST_MCAST_OFFSET                     0x00000008
#define RX_MSDU_START_2_DA_IS_BCAST_MCAST_LSB                        16
#define RX_MSDU_START_2_DA_IS_BCAST_MCAST_MASK                       0x00010000

/* Description		RX_MSDU_START_2_TOEPLITZ_HASH_SEL
			
			Actual choosen Hash.
			
			
			
			0 -> Toeplitz hash of 2-tuple (IP source address, IP
			destination address)1 -> Toeplitz hash of 4-tuple (IP source
			address, IP destination address, L4 (TCP/UDP) source port,
			L4 (TCP/UDP) destination port)
			
			2 -> Toeplitz of flow_id
			
			3 -> Zero is used
			
			<legal all>
*/
#define RX_MSDU_START_2_TOEPLITZ_HASH_SEL_OFFSET                     0x00000008
#define RX_MSDU_START_2_TOEPLITZ_HASH_SEL_LSB                        17
#define RX_MSDU_START_2_TOEPLITZ_HASH_SEL_MASK                       0x00060000

/* Description		RX_MSDU_START_2_IP_FIXED_HEADER_VALID
			
			Fixed 20-byte IPv4 header or 40-byte IPv6 header parsed
			fully within first 256 bytes of the packet
*/
#define RX_MSDU_START_2_IP_FIXED_HEADER_VALID_OFFSET                 0x00000008
#define RX_MSDU_START_2_IP_FIXED_HEADER_VALID_LSB                    19
#define RX_MSDU_START_2_IP_FIXED_HEADER_VALID_MASK                   0x00080000

/* Description		RX_MSDU_START_2_IP_EXTN_HEADER_VALID
			
			IPv6/IPv6 header, including IPv4 options and
			recognizable extension headers parsed fully within first 256
			bytes of the packet
*/
#define RX_MSDU_START_2_IP_EXTN_HEADER_VALID_OFFSET                  0x00000008
#define RX_MSDU_START_2_IP_EXTN_HEADER_VALID_LSB                     20
#define RX_MSDU_START_2_IP_EXTN_HEADER_VALID_MASK                    0x00100000

/* Description		RX_MSDU_START_2_TCP_UDP_HEADER_VALID
			
			Fixed 20-byte TCP (excluding TCP options) or 8-byte UDP
			header parsed fully within first 256 bytes of the packet
*/
#define RX_MSDU_START_2_TCP_UDP_HEADER_VALID_OFFSET                  0x00000008
#define RX_MSDU_START_2_TCP_UDP_HEADER_VALID_LSB                     21
#define RX_MSDU_START_2_TCP_UDP_HEADER_VALID_MASK                    0x00200000

/* Description		RX_MSDU_START_2_MESH_CONTROL_PRESENT
			
			When set, this MSDU includes the 'Mesh Control' field
			
			<legal all>
*/
#define RX_MSDU_START_2_MESH_CONTROL_PRESENT_OFFSET                  0x00000008
#define RX_MSDU_START_2_MESH_CONTROL_PRESENT_LSB                     22
#define RX_MSDU_START_2_MESH_CONTROL_PRESENT_MASK                    0x00400000

/* Description		RX_MSDU_START_2_LDPC
			
			When set, indicates that LDPC coding was used.
			
			<legal all>
*/
#define RX_MSDU_START_2_LDPC_OFFSET                                  0x00000008
#define RX_MSDU_START_2_LDPC_LSB                                     23
#define RX_MSDU_START_2_LDPC_MASK                                    0x00800000

/* Description		RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER
			
			For IPv4 this is the 8 bit protocol field (when
			ipv4_proto is set).  For IPv6 this is the 8 bit next_header
			field (when ipv6_proto is set).
*/
#define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_OFFSET          0x00000008
#define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_LSB             24
#define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_MASK            0xff000000

/* Description		RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4
			
			Controlled by multiple RxOLE registers for TCP/UDP over
			IPv4/IPv6 - Either, Toeplitz hash computed over 2-tuple IPv4
			or IPv6 src/dest addresses is reported; or, Toeplitz hash
			computed over 4-tuple IPv4 or IPv6 src/dest addresses and
			src/dest ports is reported. The Flow_id_toeplitz hash can
			also be reported here. Usually the hash reported here is the
			one used for hash-based REO routing (see
			use_flow_id_toeplitz_clfy in 'RXPT_CLASSIFY_INFO').
			
			
			
			In Pine, optionally the 3-tuple Toeplitz hash over IPv4
			or IPv6 src/dest addresses and L4 protocol can be reported
			here. (Unsupported in HastingsPrime)
*/
#define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_OFFSET                  0x0000000c
#define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_LSB                     0
#define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_MASK                    0xffffffff

/* Description		RX_MSDU_START_4_FLOW_ID_TOEPLITZ
			
			Toeplitz hash of 5-tuple 
			
			{IP source address, IP destination address, IP source
			port, IP destination port, L4 protocol}  in case of
			non-IPSec.
			
			In case of IPSec - Toeplitz hash of 4-tuple 
			
			{IP source address, IP destination address, SPI, L4
			protocol}
			
			
			
			In Pine, optionally the 3-tuple Toeplitz hash over IPv4
			or IPv6 src/dest addresses and L4 protocol can be reported
			here. (Unsupported in HastingsPrime)
			
			
			
			The relevant Toeplitz key registers are provided in
			RxOLE's instance of common parser module. These registers
			are separate from the Toeplitz keys used by ASE/FSE modules
			inside RxOLE.The actual value will be passed on from common
			parser module to RxOLE in one of the WHO_* TLVs.
			
			<legal all>
*/
#define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_OFFSET                      0x00000010
#define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_LSB                         0
#define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_MASK                        0xffffffff

/* Description		RX_MSDU_START_5_USER_RSSI
			
			RSSI for this user
			
			<legal all>
*/
#define RX_MSDU_START_5_USER_RSSI_OFFSET                             0x00000014
#define RX_MSDU_START_5_USER_RSSI_LSB                                0
#define RX_MSDU_START_5_USER_RSSI_MASK                               0x000000ff

/* Description		RX_MSDU_START_5_PKT_TYPE
			
			Packet type:
			
			<enum 0 dot11a>802.11a PPDU type
			
			<enum 1 dot11b>802.11b PPDU type
			
			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
			
			<enum 3 dot11ac>802.11ac PPDU type
			
			<enum 4 dot11ax>802.11ax PPDU type
			
			<enum 5 dot11ba>802.11ba (WUR) PPDU type
*/
#define RX_MSDU_START_5_PKT_TYPE_OFFSET                              0x00000014
#define RX_MSDU_START_5_PKT_TYPE_LSB                                 8
#define RX_MSDU_START_5_PKT_TYPE_MASK                                0x00000f00

/* Description		RX_MSDU_START_5_STBC
			
			When set, use STBC transmission rates
*/
#define RX_MSDU_START_5_STBC_OFFSET                                  0x00000014
#define RX_MSDU_START_5_STBC_LSB                                     12
#define RX_MSDU_START_5_STBC_MASK                                    0x00001000

/* Description		RX_MSDU_START_5_SGI
			
			Field only valid when pkt type is HT, VHT or HE.
			
			
			
			<enum 0     0_8_us_sgi > Legacy normal GI. Can also be
			used for HE
			
			<enum 1     0_4_us_sgi > Legacy short GI. Can also be
			used for HE
			
			<enum 2     1_6_us_sgi > HE related GI
			
			<enum 3     3_2_us_sgi > HE related GI
			
			<legal 0 - 3>
*/
#define RX_MSDU_START_5_SGI_OFFSET                                   0x00000014
#define RX_MSDU_START_5_SGI_LSB                                      13
#define RX_MSDU_START_5_SGI_MASK                                     0x00006000

/* Description		RX_MSDU_START_5_RATE_MCS
			
			For details, refer to  MCS_TYPE description
			
			Note: This is rate in case of 11a/11b
			
			
			
			<legal all>
*/
#define RX_MSDU_START_5_RATE_MCS_OFFSET                              0x00000014
#define RX_MSDU_START_5_RATE_MCS_LSB                                 15
#define RX_MSDU_START_5_RATE_MCS_MASK                                0x00078000

/* Description		RX_MSDU_START_5_RECEIVE_BANDWIDTH
			
			Full receive Bandwidth
			
			
			
			<enum 0     full_rx_bw_20_mhz>
			
			<enum 1      full_rx_bw_40_mhz>
			
			<enum 2      full_rx_bw_80_mhz>
			
			<enum 3      full_rx_bw_160_mhz> 
			
			
			
			<legal 0-3>
*/
#define RX_MSDU_START_5_RECEIVE_BANDWIDTH_OFFSET                     0x00000014
#define RX_MSDU_START_5_RECEIVE_BANDWIDTH_LSB                        19
#define RX_MSDU_START_5_RECEIVE_BANDWIDTH_MASK                       0x00180000

/* Description		RX_MSDU_START_5_RECEPTION_TYPE
			
			Indicates what type of reception this is.
			
			<enum 0     reception_type_SU > Basic SU reception (not
			part of OFDMA or MIMO)
			
			<enum 1     reception_type_MU_MIMO > This is related to
			DL type of reception
			
			<enum 2     reception_type_MU_OFDMA >  This is related
			to DL type of reception
			
			<enum 3     reception_type_MU_OFDMA_MIMO >  This is
			related to DL type of reception
			
			<enum 4     reception_type_UL_MU_MIMO > This is related
			to UL type of reception
			
			<enum 5     reception_type_UL_MU_OFDMA >  This is
			related to UL type of reception
			
			<enum 6     reception_type_UL_MU_OFDMA_MIMO >  This is
			related to UL type of reception
			
			
			
			<legal 0-6>
*/
#define RX_MSDU_START_5_RECEPTION_TYPE_OFFSET                        0x00000014
#define RX_MSDU_START_5_RECEPTION_TYPE_LSB                           21
#define RX_MSDU_START_5_RECEPTION_TYPE_MASK                          0x00e00000

/* Description		RX_MSDU_START_5_MIMO_SS_BITMAP
			
			Field only valid when Reception_type for the MPDU from
			this STA is some form of MIMO reception
			
			
			
			Bitmap, with each bit indicating if the related spatial
			stream is used for this STA
			
			LSB related to SS 0
			
			
			
			0: spatial stream not used for this reception
			
			1: spatial stream used for this reception
			
			
			
			<legal all>
*/
#define RX_MSDU_START_5_MIMO_SS_BITMAP_OFFSET                        0x00000014
#define RX_MSDU_START_5_MIMO_SS_BITMAP_LSB                           24
#define RX_MSDU_START_5_MIMO_SS_BITMAP_MASK                          0xff000000

/* Description		RX_MSDU_START_6_PPDU_START_TIMESTAMP
			
			Timestamp that indicates when the PPDU that contained
			this MPDU started on the medium.
			
			<legal all>
*/
#define RX_MSDU_START_6_PPDU_START_TIMESTAMP_OFFSET                  0x00000018
#define RX_MSDU_START_6_PPDU_START_TIMESTAMP_LSB                     0
#define RX_MSDU_START_6_PPDU_START_TIMESTAMP_MASK                    0xffffffff

/* Description		RX_MSDU_START_7_SW_PHY_META_DATA
			
			SW programmed Meta data provided by the PHY.
			
			
			
			Can be used for SW to indicate the channel the device is
			on.
			
			<legal all>
*/
#define RX_MSDU_START_7_SW_PHY_META_DATA_OFFSET                      0x0000001c
#define RX_MSDU_START_7_SW_PHY_META_DATA_LSB                         0
#define RX_MSDU_START_7_SW_PHY_META_DATA_MASK                        0xffffffff

/* Description		RX_MSDU_START_8_VLAN_CTAG_CI
			
			2 bytes of C-VLAN Tag Control Information from
			WHO_L2_LLC
*/
#define RX_MSDU_START_8_VLAN_CTAG_CI_OFFSET                          0x00000020
#define RX_MSDU_START_8_VLAN_CTAG_CI_LSB                             0
#define RX_MSDU_START_8_VLAN_CTAG_CI_MASK                            0x0000ffff

/* Description		RX_MSDU_START_8_VLAN_STAG_CI
			
			2 bytes of S-VLAN Tag Control Information from
			WHO_L2_LLC in case of double VLAN
*/
#define RX_MSDU_START_8_VLAN_STAG_CI_OFFSET                          0x00000020
#define RX_MSDU_START_8_VLAN_STAG_CI_LSB                             16
#define RX_MSDU_START_8_VLAN_STAG_CI_MASK                            0xffff0000


#endif // _RX_MSDU_START_H_
