/*
 * 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_ATTENTION_H_
#define _RX_ATTENTION_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	first_mpdu[0], reserved_1a[1], mcast_bcast[2], ast_index_not_found[3], ast_index_timeout[4], power_mgmt[5], non_qos[6], null_data[7], mgmt_type[8], ctrl_type[9], more_data[10], eosp[11], a_msdu_error[12], fragment_flag[13], order[14], cce_match[15], overflow_err[16], msdu_length_err[17], tcp_udp_chksum_fail[18], ip_chksum_fail[19], sa_idx_invalid[20], da_idx_invalid[21], reserved_1b[22], rx_in_tx_decrypt_byp[23], encrypt_required[24], directed[25], buffer_fragment[26], mpdu_length_err[27], tkip_mic_err[28], decrypt_err[29], unencrypted_frame_err[30], fcs_err[31]
//	2	flow_idx_timeout[0], flow_idx_invalid[1], wifi_parser_error[2], amsdu_parser_error[3], sa_idx_timeout[4], da_idx_timeout[5], msdu_limit_error[6], da_is_valid[7], da_is_mcbc[8], sa_is_valid[9], decrypt_status_code[12:10], rx_bitmap_not_updated[13], reserved_2[30:14], msdu_done[31]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RX_ATTENTION 3

struct rx_attention {
             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 first_mpdu                      :  1, //[0]
                      reserved_1a                     :  1, //[1]
                      mcast_bcast                     :  1, //[2]
                      ast_index_not_found             :  1, //[3]
                      ast_index_timeout               :  1, //[4]
                      power_mgmt                      :  1, //[5]
                      non_qos                         :  1, //[6]
                      null_data                       :  1, //[7]
                      mgmt_type                       :  1, //[8]
                      ctrl_type                       :  1, //[9]
                      more_data                       :  1, //[10]
                      eosp                            :  1, //[11]
                      a_msdu_error                    :  1, //[12]
                      fragment_flag                   :  1, //[13]
                      order                           :  1, //[14]
                      cce_match                       :  1, //[15]
                      overflow_err                    :  1, //[16]
                      msdu_length_err                 :  1, //[17]
                      tcp_udp_chksum_fail             :  1, //[18]
                      ip_chksum_fail                  :  1, //[19]
                      sa_idx_invalid                  :  1, //[20]
                      da_idx_invalid                  :  1, //[21]
                      reserved_1b                     :  1, //[22]
                      rx_in_tx_decrypt_byp            :  1, //[23]
                      encrypt_required                :  1, //[24]
                      directed                        :  1, //[25]
                      buffer_fragment                 :  1, //[26]
                      mpdu_length_err                 :  1, //[27]
                      tkip_mic_err                    :  1, //[28]
                      decrypt_err                     :  1, //[29]
                      unencrypted_frame_err           :  1, //[30]
                      fcs_err                         :  1; //[31]
             uint32_t flow_idx_timeout                :  1, //[0]
                      flow_idx_invalid                :  1, //[1]
                      wifi_parser_error               :  1, //[2]
                      amsdu_parser_error              :  1, //[3]
                      sa_idx_timeout                  :  1, //[4]
                      da_idx_timeout                  :  1, //[5]
                      msdu_limit_error                :  1, //[6]
                      da_is_valid                     :  1, //[7]
                      da_is_mcbc                      :  1, //[8]
                      sa_is_valid                     :  1, //[9]
                      decrypt_status_code             :  3, //[12:10]
                      rx_bitmap_not_updated           :  1, //[13]
                      reserved_2                      : 17, //[30:14]
                      msdu_done                       :  1; //[31]
};

/*

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>

first_mpdu
			
			Indicates the first MSDU of the PPDU.  If both
			first_mpdu and last_mpdu are set in the MSDU then this is a
			not an A-MPDU frame but a stand alone MPDU.  Interior MPDU
			in an A-MPDU shall have both first_mpdu and last_mpdu bits
			set to 0.  The PPDU start status will only be valid when
			this bit is set.

reserved_1a
			
			<legal 0>

mcast_bcast
			
			Multicast / broadcast indicator.  Only set when the MAC
			address 1 bit 0 is set indicating mcast/bcast and the BSSID
			matches one of the 4 BSSID registers. Only set when
			first_msdu is set.

ast_index_not_found
			
			Only valid when first_msdu is set.
			
			
			
			Indicates no AST matching entries within the the max
			search count.  

ast_index_timeout
			
			Only valid when first_msdu is set.
			
			
			
			Indicates an unsuccessful search in the address seach
			table due to timeout.  

power_mgmt
			
			Power management bit set in the 802.11 header.  Only set
			when first_msdu is set.

non_qos
			
			Set if packet is not a non-QoS data frame.  Only set
			when first_msdu is set.

null_data
			
			Set if frame type indicates either null data or QoS null
			data format.  Only set when first_msdu is set.

mgmt_type
			
			Set if packet is a management packet.  Only set when
			first_msdu is set.

ctrl_type
			
			Set if packet is a control packet.  Only set when
			first_msdu is set.

more_data
			
			Set if more bit in frame control is set.  Only set when
			first_msdu is set.

eosp
			
			Set if the EOSP (end of service period) bit in the QoS
			control field is set.  Only set when first_msdu is set.

a_msdu_error
			
			Set if number of MSDUs in A-MSDU is above a threshold or
			if the size of the MSDU is invalid.  This receive buffer
			will contain all of the remainder of the MSDUs in this MPDU
			without decapsulation.

fragment_flag
			
			Indicates that this is an 802.11 fragment frame.  This
			is set when either the more_frag bit is set in the frame
			control or the fragment number is not zero.  Only set when
			first_msdu is set.

order
			
			Set if the order bit in the frame control is set.  Only
			set when first_msdu is set.

cce_match
			
			Indicates that this status has a corresponding MSDU that
			requires FW processing.  The OLE will have classification
			ring mask registers which will indicate the ring(s) for
			packets and descriptors which need FW attention.

overflow_err
			
			RXPCU Receive FIFO ran out of space to receive the full
			MPDU. Therefor this MPDU is terminated early and is thus
			corrupted.  
			
			
			
			This MPDU will not be ACKed.
			
			RXPCU might still be able to correctly receive the
			following MPDUs in the PPDU if enough fifo space became
			available in time

msdu_length_err
			
			Indicates that the MSDU length from the 802.3
			encapsulated length field extends beyond the MPDU boundary
			or if the length is less than 14 bytes.
			
			Merged with original other_msdu_err: Indicates that the
			MSDU threshold was exceeded and thus all the rest of the
			MSDUs will not be scattered and will not be decasulated but
			will be DMA'ed in RAW format as a single MSDU buffer

tcp_udp_chksum_fail
			
			Indicates that the computed checksum (tcp_udp_chksum in
			'RX_MSDU_END') did not match the checksum in the TCP/UDP
			header.

ip_chksum_fail
			
			Indicates that the computed checksum (ip_hdr_chksum in
			'RX_MSDU_END') did not match the checksum in the IP header.

sa_idx_invalid
			
			Indicates no matching entry was found in the address
			search table for the source MAC address.

da_idx_invalid
			
			Indicates no matching entry was found in the address
			search table for the destination MAC address.

reserved_1b
			
			<legal 0>

rx_in_tx_decrypt_byp
			
			Indicates that RX packet is not decrypted as Crypto is
			busy with TX packet processing.

encrypt_required
			
			Indicates that this data type frame is not encrypted
			even if the policy for this MPDU requires encryption as
			indicated in the peer entry key type.

directed
			
			MPDU is a directed packet which means that the RA
			matched our STA addresses.  In proxySTA it means that the TA
			matched an entry in our address search table with the
			corresponding no_ack bit is the address search entry
			cleared.

buffer_fragment
			
			Indicates that at least one of the rx buffers has been
			fragmented.  If set the FW should look at the rx_frag_info
			descriptor described below.

mpdu_length_err
			
			Indicates that the MPDU was pre-maturely terminated
			resulting in a truncated MPDU.  Don't trust the MPDU length
			field.

tkip_mic_err
			
			Indicates that the MPDU Michael integrity check failed

decrypt_err
			
			Indicates that the MPDU decrypt integrity check failed
			or CRYPTO received an encrypted frame, but did not get a
			valid corresponding key id in the peer entry.

unencrypted_frame_err
			
			Copied here by RX OLE from the RX_MPDU_END TLV

fcs_err
			
			Indicates that the MPDU FCS check failed

flow_idx_timeout
			
			Indicates an unsuccessful flow search due to the
			expiring of the search timer.
			
			<legal all>

flow_idx_invalid
			
			flow id is not valid
			
			<legal all>

wifi_parser_error
			
			Indicates that the WiFi frame has one of the following
			errors
			
			o has less than minimum allowed bytes as per standard
			
			o has incomplete VLAN LLC/SNAP (only for non A-MSDUs)
			
			<legal all>

amsdu_parser_error
			
			A-MSDU could not be properly de-agregated.
			
			<legal all>

sa_idx_timeout
			
			Indicates an unsuccessful MAC source address search due
			to the expiring of the search timer.

da_idx_timeout
			
			Indicates an unsuccessful MAC destination address search
			due to the expiring of the search timer.

msdu_limit_error
			
			Indicates that the MSDU threshold was exceeded and thus
			all the rest of the MSDUs will not be scattered and will not
			be decasulated but will be DMA'ed in RAW format as a single
			MSDU buffer

da_is_valid
			
			Indicates that OLE found a valid DA entry

da_is_mcbc
			
			Field Only valid if da_is_valid is set
			
			
			
			Indicates the DA address was a Multicast of Broadcast
			address.

sa_is_valid
			
			Indicates that OLE found a valid SA entry

decrypt_status_code
			
			Field provides insight into the decryption performed
			
			
			
			<enum 0 decrypt_ok> Frame had protection enabled and
			decrypted properly 
			
			<enum 1 decrypt_unprotected_frame > Frame is unprotected
			and hence bypassed 
			
			<enum 2 decrypt_data_err > Frame has protection enabled
			and could not be properly decrypted due to MIC/ICV mismatch
			etc. 
			
			<enum 3 decrypt_key_invalid > Frame has protection
			enabled but the key that was required to decrypt this frame
			was not valid 
			
			<enum 4 decrypt_peer_entry_invalid > Frame has
			protection enabled but the key that was required to decrypt
			this frame was not valid
			
			<enum 5 decrypt_other > Reserved for other indications
			
			
			
			<legal 0 - 5>

rx_bitmap_not_updated
			
			Frame is received, but RXPCU could not update the
			receive bitmap due to (temporary) fifo contraints.
			
			<legal all>

reserved_2
			
			<legal 0>

msdu_done
			
			If set indicates that the RX packet data, RX header
			data, RX PPDU start descriptor, RX MPDU start/end
			descriptor, RX MSDU start/end descriptors and RX Attention
			descriptor are all valid.  This bit must be in the last
			octet of the descriptor.
*/


/* Description		RX_ATTENTION_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_ATTENTION_0_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET          0x00000000
#define RX_ATTENTION_0_RXPCU_MPDU_FILTER_IN_CATEGORY_LSB             0
#define RX_ATTENTION_0_RXPCU_MPDU_FILTER_IN_CATEGORY_MASK            0x00000003

/* Description		RX_ATTENTION_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_ATTENTION_0_SW_FRAME_GROUP_ID_OFFSET                      0x00000000
#define RX_ATTENTION_0_SW_FRAME_GROUP_ID_LSB                         2
#define RX_ATTENTION_0_SW_FRAME_GROUP_ID_MASK                        0x000001fc

/* Description		RX_ATTENTION_0_RESERVED_0
			
			<legal 0>
*/
#define RX_ATTENTION_0_RESERVED_0_OFFSET                             0x00000000
#define RX_ATTENTION_0_RESERVED_0_LSB                                9
#define RX_ATTENTION_0_RESERVED_0_MASK                               0x0000fe00

/* Description		RX_ATTENTION_0_PHY_PPDU_ID
			
			A ppdu counter value that PHY increments for every PPDU
			received. The counter value wraps around  
			
			<legal all>
*/
#define RX_ATTENTION_0_PHY_PPDU_ID_OFFSET                            0x00000000
#define RX_ATTENTION_0_PHY_PPDU_ID_LSB                               16
#define RX_ATTENTION_0_PHY_PPDU_ID_MASK                              0xffff0000

/* Description		RX_ATTENTION_1_FIRST_MPDU
			
			Indicates the first MSDU of the PPDU.  If both
			first_mpdu and last_mpdu are set in the MSDU then this is a
			not an A-MPDU frame but a stand alone MPDU.  Interior MPDU
			in an A-MPDU shall have both first_mpdu and last_mpdu bits
			set to 0.  The PPDU start status will only be valid when
			this bit is set.
*/
#define RX_ATTENTION_1_FIRST_MPDU_OFFSET                             0x00000004
#define RX_ATTENTION_1_FIRST_MPDU_LSB                                0
#define RX_ATTENTION_1_FIRST_MPDU_MASK                               0x00000001

/* Description		RX_ATTENTION_1_RESERVED_1A
			
			<legal 0>
*/
#define RX_ATTENTION_1_RESERVED_1A_OFFSET                            0x00000004
#define RX_ATTENTION_1_RESERVED_1A_LSB                               1
#define RX_ATTENTION_1_RESERVED_1A_MASK                              0x00000002

/* Description		RX_ATTENTION_1_MCAST_BCAST
			
			Multicast / broadcast indicator.  Only set when the MAC
			address 1 bit 0 is set indicating mcast/bcast and the BSSID
			matches one of the 4 BSSID registers. Only set when
			first_msdu is set.
*/
#define RX_ATTENTION_1_MCAST_BCAST_OFFSET                            0x00000004
#define RX_ATTENTION_1_MCAST_BCAST_LSB                               2
#define RX_ATTENTION_1_MCAST_BCAST_MASK                              0x00000004

/* Description		RX_ATTENTION_1_AST_INDEX_NOT_FOUND
			
			Only valid when first_msdu is set.
			
			
			
			Indicates no AST matching entries within the the max
			search count.  
*/
#define RX_ATTENTION_1_AST_INDEX_NOT_FOUND_OFFSET                    0x00000004
#define RX_ATTENTION_1_AST_INDEX_NOT_FOUND_LSB                       3
#define RX_ATTENTION_1_AST_INDEX_NOT_FOUND_MASK                      0x00000008

/* Description		RX_ATTENTION_1_AST_INDEX_TIMEOUT
			
			Only valid when first_msdu is set.
			
			
			
			Indicates an unsuccessful search in the address seach
			table due to timeout.  
*/
#define RX_ATTENTION_1_AST_INDEX_TIMEOUT_OFFSET                      0x00000004
#define RX_ATTENTION_1_AST_INDEX_TIMEOUT_LSB                         4
#define RX_ATTENTION_1_AST_INDEX_TIMEOUT_MASK                        0x00000010

/* Description		RX_ATTENTION_1_POWER_MGMT
			
			Power management bit set in the 802.11 header.  Only set
			when first_msdu is set.
*/
#define RX_ATTENTION_1_POWER_MGMT_OFFSET                             0x00000004
#define RX_ATTENTION_1_POWER_MGMT_LSB                                5
#define RX_ATTENTION_1_POWER_MGMT_MASK                               0x00000020

/* Description		RX_ATTENTION_1_NON_QOS
			
			Set if packet is not a non-QoS data frame.  Only set
			when first_msdu is set.
*/
#define RX_ATTENTION_1_NON_QOS_OFFSET                                0x00000004
#define RX_ATTENTION_1_NON_QOS_LSB                                   6
#define RX_ATTENTION_1_NON_QOS_MASK                                  0x00000040

/* Description		RX_ATTENTION_1_NULL_DATA
			
			Set if frame type indicates either null data or QoS null
			data format.  Only set when first_msdu is set.
*/
#define RX_ATTENTION_1_NULL_DATA_OFFSET                              0x00000004
#define RX_ATTENTION_1_NULL_DATA_LSB                                 7
#define RX_ATTENTION_1_NULL_DATA_MASK                                0x00000080

/* Description		RX_ATTENTION_1_MGMT_TYPE
			
			Set if packet is a management packet.  Only set when
			first_msdu is set.
*/
#define RX_ATTENTION_1_MGMT_TYPE_OFFSET                              0x00000004
#define RX_ATTENTION_1_MGMT_TYPE_LSB                                 8
#define RX_ATTENTION_1_MGMT_TYPE_MASK                                0x00000100

/* Description		RX_ATTENTION_1_CTRL_TYPE
			
			Set if packet is a control packet.  Only set when
			first_msdu is set.
*/
#define RX_ATTENTION_1_CTRL_TYPE_OFFSET                              0x00000004
#define RX_ATTENTION_1_CTRL_TYPE_LSB                                 9
#define RX_ATTENTION_1_CTRL_TYPE_MASK                                0x00000200

/* Description		RX_ATTENTION_1_MORE_DATA
			
			Set if more bit in frame control is set.  Only set when
			first_msdu is set.
*/
#define RX_ATTENTION_1_MORE_DATA_OFFSET                              0x00000004
#define RX_ATTENTION_1_MORE_DATA_LSB                                 10
#define RX_ATTENTION_1_MORE_DATA_MASK                                0x00000400

/* Description		RX_ATTENTION_1_EOSP
			
			Set if the EOSP (end of service period) bit in the QoS
			control field is set.  Only set when first_msdu is set.
*/
#define RX_ATTENTION_1_EOSP_OFFSET                                   0x00000004
#define RX_ATTENTION_1_EOSP_LSB                                      11
#define RX_ATTENTION_1_EOSP_MASK                                     0x00000800

/* Description		RX_ATTENTION_1_A_MSDU_ERROR
			
			Set if number of MSDUs in A-MSDU is above a threshold or
			if the size of the MSDU is invalid.  This receive buffer
			will contain all of the remainder of the MSDUs in this MPDU
			without decapsulation.
*/
#define RX_ATTENTION_1_A_MSDU_ERROR_OFFSET                           0x00000004
#define RX_ATTENTION_1_A_MSDU_ERROR_LSB                              12
#define RX_ATTENTION_1_A_MSDU_ERROR_MASK                             0x00001000

/* Description		RX_ATTENTION_1_FRAGMENT_FLAG
			
			Indicates that this is an 802.11 fragment frame.  This
			is set when either the more_frag bit is set in the frame
			control or the fragment number is not zero.  Only set when
			first_msdu is set.
*/
#define RX_ATTENTION_1_FRAGMENT_FLAG_OFFSET                          0x00000004
#define RX_ATTENTION_1_FRAGMENT_FLAG_LSB                             13
#define RX_ATTENTION_1_FRAGMENT_FLAG_MASK                            0x00002000

/* Description		RX_ATTENTION_1_ORDER
			
			Set if the order bit in the frame control is set.  Only
			set when first_msdu is set.
*/
#define RX_ATTENTION_1_ORDER_OFFSET                                  0x00000004
#define RX_ATTENTION_1_ORDER_LSB                                     14
#define RX_ATTENTION_1_ORDER_MASK                                    0x00004000

/* Description		RX_ATTENTION_1_CCE_MATCH
			
			Indicates that this status has a corresponding MSDU that
			requires FW processing.  The OLE will have classification
			ring mask registers which will indicate the ring(s) for
			packets and descriptors which need FW attention.
*/
#define RX_ATTENTION_1_CCE_MATCH_OFFSET                              0x00000004
#define RX_ATTENTION_1_CCE_MATCH_LSB                                 15
#define RX_ATTENTION_1_CCE_MATCH_MASK                                0x00008000

/* Description		RX_ATTENTION_1_OVERFLOW_ERR
			
			RXPCU Receive FIFO ran out of space to receive the full
			MPDU. Therefor this MPDU is terminated early and is thus
			corrupted.  
			
			
			
			This MPDU will not be ACKed.
			
			RXPCU might still be able to correctly receive the
			following MPDUs in the PPDU if enough fifo space became
			available in time
*/
#define RX_ATTENTION_1_OVERFLOW_ERR_OFFSET                           0x00000004
#define RX_ATTENTION_1_OVERFLOW_ERR_LSB                              16
#define RX_ATTENTION_1_OVERFLOW_ERR_MASK                             0x00010000

/* Description		RX_ATTENTION_1_MSDU_LENGTH_ERR
			
			Indicates that the MSDU length from the 802.3
			encapsulated length field extends beyond the MPDU boundary
			or if the length is less than 14 bytes.
			
			Merged with original other_msdu_err: Indicates that the
			MSDU threshold was exceeded and thus all the rest of the
			MSDUs will not be scattered and will not be decasulated but
			will be DMA'ed in RAW format as a single MSDU buffer
*/
#define RX_ATTENTION_1_MSDU_LENGTH_ERR_OFFSET                        0x00000004
#define RX_ATTENTION_1_MSDU_LENGTH_ERR_LSB                           17
#define RX_ATTENTION_1_MSDU_LENGTH_ERR_MASK                          0x00020000

/* Description		RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL
			
			Indicates that the computed checksum (tcp_udp_chksum in
			'RX_MSDU_END') did not match the checksum in the TCP/UDP
			header.
*/
#define RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL_OFFSET                    0x00000004
#define RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL_LSB                       18
#define RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL_MASK                      0x00040000

/* Description		RX_ATTENTION_1_IP_CHKSUM_FAIL
			
			Indicates that the computed checksum (ip_hdr_chksum in
			'RX_MSDU_END') did not match the checksum in the IP header.
*/
#define RX_ATTENTION_1_IP_CHKSUM_FAIL_OFFSET                         0x00000004
#define RX_ATTENTION_1_IP_CHKSUM_FAIL_LSB                            19
#define RX_ATTENTION_1_IP_CHKSUM_FAIL_MASK                           0x00080000

/* Description		RX_ATTENTION_1_SA_IDX_INVALID
			
			Indicates no matching entry was found in the address
			search table for the source MAC address.
*/
#define RX_ATTENTION_1_SA_IDX_INVALID_OFFSET                         0x00000004
#define RX_ATTENTION_1_SA_IDX_INVALID_LSB                            20
#define RX_ATTENTION_1_SA_IDX_INVALID_MASK                           0x00100000

/* Description		RX_ATTENTION_1_DA_IDX_INVALID
			
			Indicates no matching entry was found in the address
			search table for the destination MAC address.
*/
#define RX_ATTENTION_1_DA_IDX_INVALID_OFFSET                         0x00000004
#define RX_ATTENTION_1_DA_IDX_INVALID_LSB                            21
#define RX_ATTENTION_1_DA_IDX_INVALID_MASK                           0x00200000

/* Description		RX_ATTENTION_1_RESERVED_1B
			
			<legal 0>
*/
#define RX_ATTENTION_1_RESERVED_1B_OFFSET                            0x00000004
#define RX_ATTENTION_1_RESERVED_1B_LSB                               22
#define RX_ATTENTION_1_RESERVED_1B_MASK                              0x00400000

/* Description		RX_ATTENTION_1_RX_IN_TX_DECRYPT_BYP
			
			Indicates that RX packet is not decrypted as Crypto is
			busy with TX packet processing.
*/
#define RX_ATTENTION_1_RX_IN_TX_DECRYPT_BYP_OFFSET                   0x00000004
#define RX_ATTENTION_1_RX_IN_TX_DECRYPT_BYP_LSB                      23
#define RX_ATTENTION_1_RX_IN_TX_DECRYPT_BYP_MASK                     0x00800000

/* Description		RX_ATTENTION_1_ENCRYPT_REQUIRED
			
			Indicates that this data type frame is not encrypted
			even if the policy for this MPDU requires encryption as
			indicated in the peer entry key type.
*/
#define RX_ATTENTION_1_ENCRYPT_REQUIRED_OFFSET                       0x00000004
#define RX_ATTENTION_1_ENCRYPT_REQUIRED_LSB                          24
#define RX_ATTENTION_1_ENCRYPT_REQUIRED_MASK                         0x01000000

/* Description		RX_ATTENTION_1_DIRECTED
			
			MPDU is a directed packet which means that the RA
			matched our STA addresses.  In proxySTA it means that the TA
			matched an entry in our address search table with the
			corresponding no_ack bit is the address search entry
			cleared.
*/
#define RX_ATTENTION_1_DIRECTED_OFFSET                               0x00000004
#define RX_ATTENTION_1_DIRECTED_LSB                                  25
#define RX_ATTENTION_1_DIRECTED_MASK                                 0x02000000

/* Description		RX_ATTENTION_1_BUFFER_FRAGMENT
			
			Indicates that at least one of the rx buffers has been
			fragmented.  If set the FW should look at the rx_frag_info
			descriptor described below.
*/
#define RX_ATTENTION_1_BUFFER_FRAGMENT_OFFSET                        0x00000004
#define RX_ATTENTION_1_BUFFER_FRAGMENT_LSB                           26
#define RX_ATTENTION_1_BUFFER_FRAGMENT_MASK                          0x04000000

/* Description		RX_ATTENTION_1_MPDU_LENGTH_ERR
			
			Indicates that the MPDU was pre-maturely terminated
			resulting in a truncated MPDU.  Don't trust the MPDU length
			field.
*/
#define RX_ATTENTION_1_MPDU_LENGTH_ERR_OFFSET                        0x00000004
#define RX_ATTENTION_1_MPDU_LENGTH_ERR_LSB                           27
#define RX_ATTENTION_1_MPDU_LENGTH_ERR_MASK                          0x08000000

/* Description		RX_ATTENTION_1_TKIP_MIC_ERR
			
			Indicates that the MPDU Michael integrity check failed
*/
#define RX_ATTENTION_1_TKIP_MIC_ERR_OFFSET                           0x00000004
#define RX_ATTENTION_1_TKIP_MIC_ERR_LSB                              28
#define RX_ATTENTION_1_TKIP_MIC_ERR_MASK                             0x10000000

/* Description		RX_ATTENTION_1_DECRYPT_ERR
			
			Indicates that the MPDU decrypt integrity check failed
			or CRYPTO received an encrypted frame, but did not get a
			valid corresponding key id in the peer entry.
*/
#define RX_ATTENTION_1_DECRYPT_ERR_OFFSET                            0x00000004
#define RX_ATTENTION_1_DECRYPT_ERR_LSB                               29
#define RX_ATTENTION_1_DECRYPT_ERR_MASK                              0x20000000

/* Description		RX_ATTENTION_1_UNENCRYPTED_FRAME_ERR
			
			Copied here by RX OLE from the RX_MPDU_END TLV
*/
#define RX_ATTENTION_1_UNENCRYPTED_FRAME_ERR_OFFSET                  0x00000004
#define RX_ATTENTION_1_UNENCRYPTED_FRAME_ERR_LSB                     30
#define RX_ATTENTION_1_UNENCRYPTED_FRAME_ERR_MASK                    0x40000000

/* Description		RX_ATTENTION_1_FCS_ERR
			
			Indicates that the MPDU FCS check failed
*/
#define RX_ATTENTION_1_FCS_ERR_OFFSET                                0x00000004
#define RX_ATTENTION_1_FCS_ERR_LSB                                   31
#define RX_ATTENTION_1_FCS_ERR_MASK                                  0x80000000

/* Description		RX_ATTENTION_2_FLOW_IDX_TIMEOUT
			
			Indicates an unsuccessful flow search due to the
			expiring of the search timer.
			
			<legal all>
*/
#define RX_ATTENTION_2_FLOW_IDX_TIMEOUT_OFFSET                       0x00000008
#define RX_ATTENTION_2_FLOW_IDX_TIMEOUT_LSB                          0
#define RX_ATTENTION_2_FLOW_IDX_TIMEOUT_MASK                         0x00000001

/* Description		RX_ATTENTION_2_FLOW_IDX_INVALID
			
			flow id is not valid
			
			<legal all>
*/
#define RX_ATTENTION_2_FLOW_IDX_INVALID_OFFSET                       0x00000008
#define RX_ATTENTION_2_FLOW_IDX_INVALID_LSB                          1
#define RX_ATTENTION_2_FLOW_IDX_INVALID_MASK                         0x00000002

/* Description		RX_ATTENTION_2_WIFI_PARSER_ERROR
			
			Indicates that the WiFi frame has one of the following
			errors
			
			o has less than minimum allowed bytes as per standard
			
			o has incomplete VLAN LLC/SNAP (only for non A-MSDUs)
			
			<legal all>
*/
#define RX_ATTENTION_2_WIFI_PARSER_ERROR_OFFSET                      0x00000008
#define RX_ATTENTION_2_WIFI_PARSER_ERROR_LSB                         2
#define RX_ATTENTION_2_WIFI_PARSER_ERROR_MASK                        0x00000004

/* Description		RX_ATTENTION_2_AMSDU_PARSER_ERROR
			
			A-MSDU could not be properly de-agregated.
			
			<legal all>
*/
#define RX_ATTENTION_2_AMSDU_PARSER_ERROR_OFFSET                     0x00000008
#define RX_ATTENTION_2_AMSDU_PARSER_ERROR_LSB                        3
#define RX_ATTENTION_2_AMSDU_PARSER_ERROR_MASK                       0x00000008

/* Description		RX_ATTENTION_2_SA_IDX_TIMEOUT
			
			Indicates an unsuccessful MAC source address search due
			to the expiring of the search timer.
*/
#define RX_ATTENTION_2_SA_IDX_TIMEOUT_OFFSET                         0x00000008
#define RX_ATTENTION_2_SA_IDX_TIMEOUT_LSB                            4
#define RX_ATTENTION_2_SA_IDX_TIMEOUT_MASK                           0x00000010

/* Description		RX_ATTENTION_2_DA_IDX_TIMEOUT
			
			Indicates an unsuccessful MAC destination address search
			due to the expiring of the search timer.
*/
#define RX_ATTENTION_2_DA_IDX_TIMEOUT_OFFSET                         0x00000008
#define RX_ATTENTION_2_DA_IDX_TIMEOUT_LSB                            5
#define RX_ATTENTION_2_DA_IDX_TIMEOUT_MASK                           0x00000020

/* Description		RX_ATTENTION_2_MSDU_LIMIT_ERROR
			
			Indicates that the MSDU threshold was exceeded and thus
			all the rest of the MSDUs will not be scattered and will not
			be decasulated but will be DMA'ed in RAW format as a single
			MSDU buffer
*/
#define RX_ATTENTION_2_MSDU_LIMIT_ERROR_OFFSET                       0x00000008
#define RX_ATTENTION_2_MSDU_LIMIT_ERROR_LSB                          6
#define RX_ATTENTION_2_MSDU_LIMIT_ERROR_MASK                         0x00000040

/* Description		RX_ATTENTION_2_DA_IS_VALID
			
			Indicates that OLE found a valid DA entry
*/
#define RX_ATTENTION_2_DA_IS_VALID_OFFSET                            0x00000008
#define RX_ATTENTION_2_DA_IS_VALID_LSB                               7
#define RX_ATTENTION_2_DA_IS_VALID_MASK                              0x00000080

/* Description		RX_ATTENTION_2_DA_IS_MCBC
			
			Field Only valid if da_is_valid is set
			
			
			
			Indicates the DA address was a Multicast of Broadcast
			address.
*/
#define RX_ATTENTION_2_DA_IS_MCBC_OFFSET                             0x00000008
#define RX_ATTENTION_2_DA_IS_MCBC_LSB                                8
#define RX_ATTENTION_2_DA_IS_MCBC_MASK                               0x00000100

/* Description		RX_ATTENTION_2_SA_IS_VALID
			
			Indicates that OLE found a valid SA entry
*/
#define RX_ATTENTION_2_SA_IS_VALID_OFFSET                            0x00000008
#define RX_ATTENTION_2_SA_IS_VALID_LSB                               9
#define RX_ATTENTION_2_SA_IS_VALID_MASK                              0x00000200

/* Description		RX_ATTENTION_2_DECRYPT_STATUS_CODE
			
			Field provides insight into the decryption performed
			
			
			
			<enum 0 decrypt_ok> Frame had protection enabled and
			decrypted properly 
			
			<enum 1 decrypt_unprotected_frame > Frame is unprotected
			and hence bypassed 
			
			<enum 2 decrypt_data_err > Frame has protection enabled
			and could not be properly decrypted due to MIC/ICV mismatch
			etc. 
			
			<enum 3 decrypt_key_invalid > Frame has protection
			enabled but the key that was required to decrypt this frame
			was not valid 
			
			<enum 4 decrypt_peer_entry_invalid > Frame has
			protection enabled but the key that was required to decrypt
			this frame was not valid
			
			<enum 5 decrypt_other > Reserved for other indications
			
			
			
			<legal 0 - 5>
*/
#define RX_ATTENTION_2_DECRYPT_STATUS_CODE_OFFSET                    0x00000008
#define RX_ATTENTION_2_DECRYPT_STATUS_CODE_LSB                       10
#define RX_ATTENTION_2_DECRYPT_STATUS_CODE_MASK                      0x00001c00

/* Description		RX_ATTENTION_2_RX_BITMAP_NOT_UPDATED
			
			Frame is received, but RXPCU could not update the
			receive bitmap due to (temporary) fifo contraints.
			
			<legal all>
*/
#define RX_ATTENTION_2_RX_BITMAP_NOT_UPDATED_OFFSET                  0x00000008
#define RX_ATTENTION_2_RX_BITMAP_NOT_UPDATED_LSB                     13
#define RX_ATTENTION_2_RX_BITMAP_NOT_UPDATED_MASK                    0x00002000

/* Description		RX_ATTENTION_2_RESERVED_2
			
			<legal 0>
*/
#define RX_ATTENTION_2_RESERVED_2_OFFSET                             0x00000008
#define RX_ATTENTION_2_RESERVED_2_LSB                                14
#define RX_ATTENTION_2_RESERVED_2_MASK                               0x7fffc000

/* Description		RX_ATTENTION_2_MSDU_DONE
			
			If set indicates that the RX packet data, RX header
			data, RX PPDU start descriptor, RX MPDU start/end
			descriptor, RX MSDU start/end descriptors and RX Attention
			descriptor are all valid.  This bit must be in the last
			octet of the descriptor.
*/
#define RX_ATTENTION_2_MSDU_DONE_OFFSET                              0x00000008
#define RX_ATTENTION_2_MSDU_DONE_LSB                                 31
#define RX_ATTENTION_2_MSDU_DONE_MASK                                0x80000000


#endif // _RX_ATTENTION_H_