/*
 * Copyright (c) 2019 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_MPDU_END_H_
#define _RX_MPDU_END_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	reserved_1a[10:0], unsup_ktype_short_frame[11], rx_in_tx_decrypt_byp[12], overflow_err[13], mpdu_length_err[14], tkip_mic_err[15], decrypt_err[16], unencrypted_frame_err[17], pn_fields_contain_valid_info[18], fcs_err[19], msdu_length_err[20], rxdma0_destination_ring[22:21], rxdma1_destination_ring[24:23], decrypt_status_code[27:25], rx_bitmap_not_updated[28], reserved_1b[31:29]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RX_MPDU_END 2

struct rx_mpdu_end {
             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 reserved_1a                     : 11, //[10:0]
                      unsup_ktype_short_frame         :  1, //[11]
                      rx_in_tx_decrypt_byp            :  1, //[12]
                      overflow_err                    :  1, //[13]
                      mpdu_length_err                 :  1, //[14]
                      tkip_mic_err                    :  1, //[15]
                      decrypt_err                     :  1, //[16]
                      unencrypted_frame_err           :  1, //[17]
                      pn_fields_contain_valid_info    :  1, //[18]
                      fcs_err                         :  1, //[19]
                      msdu_length_err                 :  1, //[20]
                      rxdma0_destination_ring         :  2, //[22:21]
                      rxdma1_destination_ring         :  2, //[24:23]
                      decrypt_status_code             :  3, //[27:25]
                      rx_bitmap_not_updated           :  1, //[28]
                      reserved_1b                     :  3; //[31:29]
};

/*

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>

reserved_1a

			<legal 0>

unsup_ktype_short_frame

			This bit will be '1' when WEP or TKIP or WAPI key type
			is received for 11ah short frame.  Crypto will bypass the
			received packet without decryption to RxOLE after setting
			this bit.

rx_in_tx_decrypt_byp

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

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

mpdu_length_err

			Set by RXPCU if the expected MPDU length does not
			correspond with the actually received number of bytes in the
			MPDU.

tkip_mic_err

			Set by RX CRYPTO when CRYPTO detected a TKIP MIC error
			for this MPDU

decrypt_err

			Set by RX CRYPTO when CRYPTO detected a decrypt error
			for this MPDU or CRYPTO received an encrypted frame, but did
			not get a valid corresponding key id in the peer entry.

unencrypted_frame_err

			Set by RX CRYPTO when CRYPTO detected an unencrypted
			frame while in the peer entry field
			'All_frames_shall_be_encrypted' is set.

pn_fields_contain_valid_info

			Set by RX CRYPTO to indicate that there is a valid PN
			field present in this MPDU

fcs_err

			Set by RXPCU when there is an FCS error detected for
			this MPDU

			NOTE that when this field is set, all other (error)
			field settings should be ignored as modules could have made
			wrong decisions based on the corrupted data.

msdu_length_err

			Set by RXOLE when there is an msdu length error detected
			in at least 1 of the MSDUs embedded within the MPDU

rxdma0_destination_ring

			The ring to which RXDMA0 shall push the frame, assuming
			no MPDU level errors are detected. In case of MPDU level
			errors, RXDMA0 might change the RXDMA0 destination



			<enum 0  rxdma_release_ring >  RXDMA0 shall push the
			frame to the Release ring. Effectively this means the frame
			needs to be dropped.



			<enum 1  rxdma2fw_ring >  RXDMA0 shall push the frame to
			the FW ring



			<enum 2  rxdma2sw_ring >  RXDMA0 shall push the frame to
			the SW ring



			<enum 3  rxdma2reo_ring >  RXDMA0 shall push the frame
			to the REO entrance ring



			<legal all>

rxdma1_destination_ring

			The ring to which RXDMA1 shall push the frame, assuming
			no MPDU level errors are detected. In case of MPDU level
			errors, RXDMA1 might change the RXDMA destination



			<enum 0  rxdma_release_ring >  RXDMA1 shall push the
			frame to the Release ring. Effectively this means the frame
			needs to be dropped.



			<enum 1  rxdma2fw_ring >  RXDMA1 shall push the frame to
			the FW ring



			<enum 2  rxdma2sw_ring >  RXDMA1 shall push the frame to
			the SW ring



			<enum 3  rxdma2reo_ring >  RXDMA1 shall push the frame
			to the REO entrance ring



			<legal all>

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_1b

			<legal 0>
*/


/* Description		RX_MPDU_END_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_MPDU_END_0_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET           0x00000000
#define RX_MPDU_END_0_RXPCU_MPDU_FILTER_IN_CATEGORY_LSB              0
#define RX_MPDU_END_0_RXPCU_MPDU_FILTER_IN_CATEGORY_MASK             0x00000003

/* Description		RX_MPDU_END_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_MPDU_END_0_SW_FRAME_GROUP_ID_OFFSET                       0x00000000
#define RX_MPDU_END_0_SW_FRAME_GROUP_ID_LSB                          2
#define RX_MPDU_END_0_SW_FRAME_GROUP_ID_MASK                         0x000001fc

/* Description		RX_MPDU_END_0_RESERVED_0

			<legal 0>
*/
#define RX_MPDU_END_0_RESERVED_0_OFFSET                              0x00000000
#define RX_MPDU_END_0_RESERVED_0_LSB                                 9
#define RX_MPDU_END_0_RESERVED_0_MASK                                0x0000fe00

/* Description		RX_MPDU_END_0_PHY_PPDU_ID

			A ppdu counter value that PHY increments for every PPDU
			received. The counter value wraps around

			<legal all>
*/
#define RX_MPDU_END_0_PHY_PPDU_ID_OFFSET                             0x00000000
#define RX_MPDU_END_0_PHY_PPDU_ID_LSB                                16
#define RX_MPDU_END_0_PHY_PPDU_ID_MASK                               0xffff0000

/* Description		RX_MPDU_END_1_RESERVED_1A

			<legal 0>
*/
#define RX_MPDU_END_1_RESERVED_1A_OFFSET                             0x00000004
#define RX_MPDU_END_1_RESERVED_1A_LSB                                0
#define RX_MPDU_END_1_RESERVED_1A_MASK                               0x000007ff

/* Description		RX_MPDU_END_1_UNSUP_KTYPE_SHORT_FRAME

			This bit will be '1' when WEP or TKIP or WAPI key type
			is received for 11ah short frame.  Crypto will bypass the
			received packet without decryption to RxOLE after setting
			this bit.
*/
#define RX_MPDU_END_1_UNSUP_KTYPE_SHORT_FRAME_OFFSET                 0x00000004
#define RX_MPDU_END_1_UNSUP_KTYPE_SHORT_FRAME_LSB                    11
#define RX_MPDU_END_1_UNSUP_KTYPE_SHORT_FRAME_MASK                   0x00000800

/* Description		RX_MPDU_END_1_RX_IN_TX_DECRYPT_BYP

			Indicates that RX packet is not decrypted as Crypto is
			busy with TX packet processing.
*/
#define RX_MPDU_END_1_RX_IN_TX_DECRYPT_BYP_OFFSET                    0x00000004
#define RX_MPDU_END_1_RX_IN_TX_DECRYPT_BYP_LSB                       12
#define RX_MPDU_END_1_RX_IN_TX_DECRYPT_BYP_MASK                      0x00001000

/* Description		RX_MPDU_END_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_MPDU_END_1_OVERFLOW_ERR_OFFSET                            0x00000004
#define RX_MPDU_END_1_OVERFLOW_ERR_LSB                               13
#define RX_MPDU_END_1_OVERFLOW_ERR_MASK                              0x00002000

/* Description		RX_MPDU_END_1_MPDU_LENGTH_ERR

			Set by RXPCU if the expected MPDU length does not
			correspond with the actually received number of bytes in the
			MPDU.
*/
#define RX_MPDU_END_1_MPDU_LENGTH_ERR_OFFSET                         0x00000004
#define RX_MPDU_END_1_MPDU_LENGTH_ERR_LSB                            14
#define RX_MPDU_END_1_MPDU_LENGTH_ERR_MASK                           0x00004000

/* Description		RX_MPDU_END_1_TKIP_MIC_ERR

			Set by RX CRYPTO when CRYPTO detected a TKIP MIC error
			for this MPDU
*/
#define RX_MPDU_END_1_TKIP_MIC_ERR_OFFSET                            0x00000004
#define RX_MPDU_END_1_TKIP_MIC_ERR_LSB                               15
#define RX_MPDU_END_1_TKIP_MIC_ERR_MASK                              0x00008000

/* Description		RX_MPDU_END_1_DECRYPT_ERR

			Set by RX CRYPTO when CRYPTO detected a decrypt error
			for this MPDU or CRYPTO received an encrypted frame, but did
			not get a valid corresponding key id in the peer entry.
*/
#define RX_MPDU_END_1_DECRYPT_ERR_OFFSET                             0x00000004
#define RX_MPDU_END_1_DECRYPT_ERR_LSB                                16
#define RX_MPDU_END_1_DECRYPT_ERR_MASK                               0x00010000

/* Description		RX_MPDU_END_1_UNENCRYPTED_FRAME_ERR

			Set by RX CRYPTO when CRYPTO detected an unencrypted
			frame while in the peer entry field
			'All_frames_shall_be_encrypted' is set.
*/
#define RX_MPDU_END_1_UNENCRYPTED_FRAME_ERR_OFFSET                   0x00000004
#define RX_MPDU_END_1_UNENCRYPTED_FRAME_ERR_LSB                      17
#define RX_MPDU_END_1_UNENCRYPTED_FRAME_ERR_MASK                     0x00020000

/* Description		RX_MPDU_END_1_PN_FIELDS_CONTAIN_VALID_INFO

			Set by RX CRYPTO to indicate that there is a valid PN
			field present in this MPDU
*/
#define RX_MPDU_END_1_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET            0x00000004
#define RX_MPDU_END_1_PN_FIELDS_CONTAIN_VALID_INFO_LSB               18
#define RX_MPDU_END_1_PN_FIELDS_CONTAIN_VALID_INFO_MASK              0x00040000

/* Description		RX_MPDU_END_1_FCS_ERR

			Set by RXPCU when there is an FCS error detected for
			this MPDU

			NOTE that when this field is set, all other (error)
			field settings should be ignored as modules could have made
			wrong decisions based on the corrupted data.
*/
#define RX_MPDU_END_1_FCS_ERR_OFFSET                                 0x00000004
#define RX_MPDU_END_1_FCS_ERR_LSB                                    19
#define RX_MPDU_END_1_FCS_ERR_MASK                                   0x00080000

/* Description		RX_MPDU_END_1_MSDU_LENGTH_ERR

			Set by RXOLE when there is an msdu length error detected
			in at least 1 of the MSDUs embedded within the MPDU
*/
#define RX_MPDU_END_1_MSDU_LENGTH_ERR_OFFSET                         0x00000004
#define RX_MPDU_END_1_MSDU_LENGTH_ERR_LSB                            20
#define RX_MPDU_END_1_MSDU_LENGTH_ERR_MASK                           0x00100000

/* Description		RX_MPDU_END_1_RXDMA0_DESTINATION_RING

			The ring to which RXDMA0 shall push the frame, assuming
			no MPDU level errors are detected. In case of MPDU level
			errors, RXDMA0 might change the RXDMA0 destination



			<enum 0  rxdma_release_ring >  RXDMA0 shall push the
			frame to the Release ring. Effectively this means the frame
			needs to be dropped.



			<enum 1  rxdma2fw_ring >  RXDMA0 shall push the frame to
			the FW ring



			<enum 2  rxdma2sw_ring >  RXDMA0 shall push the frame to
			the SW ring



			<enum 3  rxdma2reo_ring >  RXDMA0 shall push the frame
			to the REO entrance ring



			<legal all>
*/
#define RX_MPDU_END_1_RXDMA0_DESTINATION_RING_OFFSET                 0x00000004
#define RX_MPDU_END_1_RXDMA0_DESTINATION_RING_LSB                    21
#define RX_MPDU_END_1_RXDMA0_DESTINATION_RING_MASK                   0x00600000

/* Description		RX_MPDU_END_1_RXDMA1_DESTINATION_RING

			The ring to which RXDMA1 shall push the frame, assuming
			no MPDU level errors are detected. In case of MPDU level
			errors, RXDMA1 might change the RXDMA destination



			<enum 0  rxdma_release_ring >  RXDMA1 shall push the
			frame to the Release ring. Effectively this means the frame
			needs to be dropped.



			<enum 1  rxdma2fw_ring >  RXDMA1 shall push the frame to
			the FW ring



			<enum 2  rxdma2sw_ring >  RXDMA1 shall push the frame to
			the SW ring



			<enum 3  rxdma2reo_ring >  RXDMA1 shall push the frame
			to the REO entrance ring



			<legal all>
*/
#define RX_MPDU_END_1_RXDMA1_DESTINATION_RING_OFFSET                 0x00000004
#define RX_MPDU_END_1_RXDMA1_DESTINATION_RING_LSB                    23
#define RX_MPDU_END_1_RXDMA1_DESTINATION_RING_MASK                   0x01800000

/* Description		RX_MPDU_END_1_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_MPDU_END_1_DECRYPT_STATUS_CODE_OFFSET                     0x00000004
#define RX_MPDU_END_1_DECRYPT_STATUS_CODE_LSB                        25
#define RX_MPDU_END_1_DECRYPT_STATUS_CODE_MASK                       0x0e000000

/* Description		RX_MPDU_END_1_RX_BITMAP_NOT_UPDATED

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

			<legal all>
*/
#define RX_MPDU_END_1_RX_BITMAP_NOT_UPDATED_OFFSET                   0x00000004
#define RX_MPDU_END_1_RX_BITMAP_NOT_UPDATED_LSB                      28
#define RX_MPDU_END_1_RX_BITMAP_NOT_UPDATED_MASK                     0x10000000

/* Description		RX_MPDU_END_1_RESERVED_1B

			<legal 0>
*/
#define RX_MPDU_END_1_RESERVED_1B_OFFSET                             0x00000004
#define RX_MPDU_END_1_RESERVED_1B_LSB                                29
#define RX_MPDU_END_1_RESERVED_1B_MASK                               0xe0000000


#endif // _RX_MPDU_END_H_
