/*
 * 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 _RXPCU_PPDU_END_INFO_H_
#define _RXPCU_PPDU_END_INFO_H_
#if !defined(__ASSEMBLER__)
#endif

#include "phyrx_abort_request_info.h"
#include "macrx_abort_request_info.h"

// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	wb_timestamp_lower_32[31:0]
//	1	wb_timestamp_upper_32[31:0]
//	2	rx_antenna[23:0], tx_ht_vht_ack[24], unsupported_mu_nc[25], otp_txbf_disable[26], previous_tlv_corrupted[27], phyrx_abort_request_info_valid[28], macrx_abort_request_info_valid[29], reserved[31:30]
//	3	coex_bt_tx_from_start_of_rx[0], coex_bt_tx_after_start_of_rx[1], coex_wan_tx_from_start_of_rx[2], coex_wan_tx_after_start_of_rx[3], coex_wlan_tx_from_start_of_rx[4], coex_wlan_tx_after_start_of_rx[5], mpdu_delimiter_errors_seen[6], ftm_tm[8:7], dialog_token[16:9], follow_up_dialog_token[24:17], bb_captured_channel[25], bb_captured_reason[28:26], bb_captured_timeout[29], reserved_3[31:30]
//	4	before_mpdu_count_passing_fcs[9:0], before_mpdu_count_failing_fcs[19:10], after_mpdu_count_passing_fcs[29:20], reserved_4[31:30]
//	5	after_mpdu_count_failing_fcs[9:0], reserved_5[31:10]
//	6	phy_timestamp_tx_lower_32[31:0]
//	7	phy_timestamp_tx_upper_32[31:0]
//	8	bb_length[15:0], bb_data[16], reserved_8[19:17], first_bt_broadcast_status_details[31:20]
//	9	rx_ppdu_duration[23:0], reserved_9[31:24]
//	10	ast_index[15:0], ast_index_valid[16], reserved_10[19:17], second_bt_broadcast_status_details[31:20]
//	11	struct phyrx_abort_request_info phyrx_abort_request_info_details;
//	12	struct macrx_abort_request_info macrx_abort_request_info_details;
//	13	rx_ppdu_end_marker[31:0]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RXPCU_PPDU_END_INFO 14

struct rxpcu_ppdu_end_info {
             uint32_t wb_timestamp_lower_32           : 32; //[31:0]
             uint32_t wb_timestamp_upper_32           : 32; //[31:0]
             uint32_t rx_antenna                      : 24, //[23:0]
                      tx_ht_vht_ack                   :  1, //[24]
                      unsupported_mu_nc               :  1, //[25]
                      otp_txbf_disable                :  1, //[26]
                      previous_tlv_corrupted          :  1, //[27]
                      phyrx_abort_request_info_valid  :  1, //[28]
                      macrx_abort_request_info_valid  :  1, //[29]
                      reserved                        :  2; //[31:30]
             uint32_t coex_bt_tx_from_start_of_rx     :  1, //[0]
                      coex_bt_tx_after_start_of_rx    :  1, //[1]
                      coex_wan_tx_from_start_of_rx    :  1, //[2]
                      coex_wan_tx_after_start_of_rx   :  1, //[3]
                      coex_wlan_tx_from_start_of_rx   :  1, //[4]
                      coex_wlan_tx_after_start_of_rx  :  1, //[5]
                      mpdu_delimiter_errors_seen      :  1, //[6]
                      ftm_tm                          :  2, //[8:7]
                      dialog_token                    :  8, //[16:9]
                      follow_up_dialog_token          :  8, //[24:17]
                      bb_captured_channel             :  1, //[25]
                      bb_captured_reason              :  3, //[28:26]
                      bb_captured_timeout             :  1, //[29]
                      reserved_3                      :  2; //[31:30]
             uint32_t before_mpdu_count_passing_fcs   : 10, //[9:0]
                      before_mpdu_count_failing_fcs   : 10, //[19:10]
                      after_mpdu_count_passing_fcs    : 10, //[29:20]
                      reserved_4                      :  2; //[31:30]
             uint32_t after_mpdu_count_failing_fcs    : 10, //[9:0]
                      reserved_5                      : 22; //[31:10]
             uint32_t phy_timestamp_tx_lower_32       : 32; //[31:0]
             uint32_t phy_timestamp_tx_upper_32       : 32; //[31:0]
             uint32_t bb_length                       : 16, //[15:0]
                      bb_data                         :  1, //[16]
                      reserved_8                      :  3, //[19:17]
                      first_bt_broadcast_status_details: 12; //[31:20]
             uint32_t rx_ppdu_duration                : 24, //[23:0]
                      reserved_9                      :  8; //[31:24]
             uint32_t ast_index                       : 16, //[15:0]
                      ast_index_valid                 :  1, //[16]
                      reserved_10                     :  3, //[19:17]
                      second_bt_broadcast_status_details: 12; //[31:20]
    struct            phyrx_abort_request_info                       phyrx_abort_request_info_details;
    struct            macrx_abort_request_info                       macrx_abort_request_info_details;
             uint16_t pre_bt_broadcast_status_details : 12, //[27:16]
                      reserved_12a                    :  4; //[31:28]
             uint32_t rx_ppdu_end_marker              : 32; //[31:0]
};

/*

wb_timestamp_lower_32

			WLAN/BT timestamp is a 1 usec resolution timestamp which
			does not get updated based on receive beacon like TSF.  The
			same rules for capturing tsf_timestamp are used to capture
			the wb_timestamp. This field represents the lower 32 bits of
			the 64-bit timestamp

wb_timestamp_upper_32

			WLAN/BT timestamp is a 1 usec resolution timestamp which
			does not get updated based on receive beacon like TSF.  The
			same rules for capturing tsf_timestamp are used to capture
			the wb_timestamp. This field represents the upper 32 bits of
			the 64-bit timestamp

rx_antenna

			Receive antenna value ???

tx_ht_vht_ack

			Indicates that a HT or VHT Ack/BA frame was transmitted
			in response to this receive packet.

unsupported_mu_nc

			Set if MU Nc > 2 in received NDPA.

			If this bit is set, even though AID and BSSID are
			matched, MAC doesn't send tx_expect_ndp to PHY, because MU
			Nc > 2 is not supported in Helium.

otp_txbf_disable

			Set if either OTP_SUBFEE_DISABLE or OTP_TXBF_DISABLE is
			set and if RXPU receives directed NDPA frame. Then, RXPCU
			should not send TX_EXPECT_NDP TLV to SW but set this bit to
			inform SW.

previous_tlv_corrupted

			When set, the TLV preceding this RXPCU_END_INFO TLV
			within the RX_PPDU_END TLV, is corrupted. Not the entire TLV
			was received.... Likely due to an abort scenario... If abort
			is to blame, see the abort data datastructure for details.

			<legal all>

phyrx_abort_request_info_valid

			When set, the PHY sent an PHYRX_ABORT_REQUEST TLV to
			RXPCU. The abort fields embedded in this TLV contain valid
			info.

			<legal all>

macrx_abort_request_info_valid

			When set, the MAC sent an MACRX_ABORT_REQUEST TLV to
			PHYRX. The abort fields embedded in this TLV contain valid
			info.

			<legal all>

reserved

			<legal 0>

coex_bt_tx_from_start_of_rx

			Set when BT TX was ongoing when WLAN RX started

coex_bt_tx_after_start_of_rx


coex_wan_tx_from_start_of_rx

			Set when WAN TX was ongoing when WLAN RX started

coex_wan_tx_after_start_of_rx

			Set when WAN TX started while WLAN RX was already
			ongoing

coex_wlan_tx_from_start_of_rx

			Set when other WLAN TX was ongoing when WLAN RX started

coex_wlan_tx_after_start_of_rx

			Set when other WLAN TX started while WLAN RX was already
			ongoing

mpdu_delimiter_errors_seen

			When set, MPDU delimiter errors have been detected
			during this PPDU reception

ftm_tm

			Indicate the timestamp is for the FTM or TM frame



			0: non TM or FTM frame

			1: FTM frame

			2: TM frame

			3: reserved

			<legal all>

dialog_token

			The dialog token in the FTM or TM frame. Only valid when
			the FTM is set. Clear to 254 for a non-FTM frame

			<legal all>

follow_up_dialog_token

			The follow up dialog token in the FTM or TM frame. Only
			valid when the FTM is set. Clear to 0 for a non-FTM frame,
			The follow up dialog token in the FTM frame. Only valid when
			the FTM is set. Clear to 255 for a non-FTM frame<legal all>

bb_captured_channel

			Set by RXPCU when MACRX_FREEZE_CAPTURE_CHANNEL TLV is
			sent to PHY, FW check it to correlate current PPDU TLVs with
			uploaded channel information.



			<legal all>

bb_captured_reason

			Copy capture_reason of MACRX_FREEZE_CAPTURE_CHANNEL TLV
			to here for FW usage. Valid when bb_captured_channel or
			bb_captured_timeout is set.



			This field indicates why the MAC asked to capture the
			channel

			<enum 0 freeze_reason_TM>

			<enum 1 freeze_reason_FTM>

			<enum 2 freeze_reason_ACK_resp_to_TM_FTM>

			<enum 3 freeze_reason_TA_RA_TYPE_FILTER>

			<enum 4 freeze_reason_NDPA_NDP>

			<enum 5 freeze_reason_ALL_PACKET>



			<legal 0-5>

bb_captured_timeout

			Set by RxPCU to indicate channel capture condition is
			meet, but MACRX_FREEZE_CAPTURE_CHANNEL is not sent to PHY
			due to AST long delay, which means the rx_frame_falling edge
			to FREEZE TLV ready time exceed the threshold time defined
			by RXPCU register FREEZE_TLV_DELAY_CNT_THRESH.

			Bb_captured_reason is still valid in this case.



			<legal all>

reserved_3

			<legal 0>

before_mpdu_count_passing_fcs

			Number of MPDUs received in this PPDU that passed the
			FCS check before the Coex TX started



			The counter saturates at 0x3FF.

			<legal all>

before_mpdu_count_failing_fcs

			Number of MPDUs received in this PPDU that failed the
			FCS check before the Coex TX started



			The counter saturates at 0x3FF.

			<legal all>

after_mpdu_count_passing_fcs

			Number of MPDUs received in this PPDU that passed the
			FCS check after the moment the Coex TX started



			(Note: The partially received MPDU when the COEX tx
			start event came in falls in the after category)



			The counter saturates at 0x3FF.

			<legal all>

reserved_4

			<legal 0>

after_mpdu_count_failing_fcs

			Number of MPDUs received in this PPDU that failed the
			FCS check after the moment the Coex TX started



			(Note: The partially received MPDU when the COEX tx
			start event came in falls in the after category)



			The counter saturates at 0x3FF.

			<legal all>

reserved_5

			<legal 0>

phy_timestamp_tx_lower_32

			The PHY timestamp in the AMPI of the most recent rising
			edge (TODO: of what ???) after the TX_PHY_DESC.  This field
			indicates the lower 32 bits of the timestamp

phy_timestamp_tx_upper_32

			The PHY timestamp in the AMPI of the most recent rising
			edge (TODO: of what ???) after the TX_PHY_DESC.  This field
			indicates the upper 32 bits of the timestamp

bb_length

			Indicates the number of bytes of baseband information
			for PPDUs where the BB descriptor preamble type is 0x80 to
			0xFF which indicates that this is not a normal PPDU but
			rather contains baseband debug information.

			TODO: Is this still needed ???

bb_data

			Indicates that BB data associated with this PPDU will
			exist in the receive buffer.  The exact contents of this BB
			data can be found by decoding the BB TLV in the buffer
			associated with the BB data.  See vector_fragment in the
			Helium_mac_phy_interface.docx

reserved_8

			Reserved: HW should fill with 0, FW should ignore.

first_bt_broadcast_status_details

			Same contents as field bt_broadcast_status_details for
			the first received COEX_STATUS_BROADCAST tlv during this
			PPDU reception.



			If no COEX_STATUS_BROADCAST tlv is received during this
			PPDU reception, this field will be set to 0





			For detailed info see doc: TBD

			<legal all>

rx_ppdu_duration

			The length of this PPDU reception in us

reserved_9

			<legal 0>

ast_index

			The AST index of the receive Ack/BA.  This information
			is provided from the TXPCU to the RXPCU for receive Ack/BA
			for implicit beamforming.

			<legal all>

ast_index_valid

			Indicates that ast_index is valid.  Should only be set
			for receive Ack/BA where single stream implicit sounding is
			captured.

reserved_10

			<legal 0>

second_bt_broadcast_status_details

			Same contents as field bt_broadcast_status_details for
			the second received COEX_STATUS_BROADCAST tlv during this
			PPDU reception.



			If no second COEX_STATUS_BROADCAST tlv is received
			during this PPDU reception, this field will be set to 0





			For detailed info see doc: TBD

			<legal all>

struct phyrx_abort_request_info phyrx_abort_request_info_details

			Field only valid when Phyrx_abort_request_info_valid is
			set

			The reason why PHY generated an abort request

struct macrx_abort_request_info macrx_abort_request_info_details

			Field only valid when macrx_abort_request_info_valid is
			set

			The reason why MACRX generated an abort request

rx_ppdu_end_marker

			Field used by SW to double check that their structure
			alignment is in sync with what HW has done.

			<legal 0xAABBCCDD>
*/


/* Description		RXPCU_PPDU_END_INFO_0_WB_TIMESTAMP_LOWER_32

			WLAN/BT timestamp is a 1 usec resolution timestamp which
			does not get updated based on receive beacon like TSF.  The
			same rules for capturing tsf_timestamp are used to capture
			the wb_timestamp. This field represents the lower 32 bits of
			the 64-bit timestamp
*/
#define RXPCU_PPDU_END_INFO_0_WB_TIMESTAMP_LOWER_32_OFFSET           0x00000000
#define RXPCU_PPDU_END_INFO_0_WB_TIMESTAMP_LOWER_32_LSB              0
#define RXPCU_PPDU_END_INFO_0_WB_TIMESTAMP_LOWER_32_MASK             0xffffffff

/* Description		RXPCU_PPDU_END_INFO_1_WB_TIMESTAMP_UPPER_32

			WLAN/BT timestamp is a 1 usec resolution timestamp which
			does not get updated based on receive beacon like TSF.  The
			same rules for capturing tsf_timestamp are used to capture
			the wb_timestamp. This field represents the upper 32 bits of
			the 64-bit timestamp
*/
#define RXPCU_PPDU_END_INFO_1_WB_TIMESTAMP_UPPER_32_OFFSET           0x00000004
#define RXPCU_PPDU_END_INFO_1_WB_TIMESTAMP_UPPER_32_LSB              0
#define RXPCU_PPDU_END_INFO_1_WB_TIMESTAMP_UPPER_32_MASK             0xffffffff

/* Description		RXPCU_PPDU_END_INFO_2_RX_ANTENNA

			Receive antenna value ???
*/
#define RXPCU_PPDU_END_INFO_2_RX_ANTENNA_OFFSET                      0x00000008
#define RXPCU_PPDU_END_INFO_2_RX_ANTENNA_LSB                         0
#define RXPCU_PPDU_END_INFO_2_RX_ANTENNA_MASK                        0x00ffffff

/* Description		RXPCU_PPDU_END_INFO_2_TX_HT_VHT_ACK

			Indicates that a HT or VHT Ack/BA frame was transmitted
			in response to this receive packet.
*/
#define RXPCU_PPDU_END_INFO_2_TX_HT_VHT_ACK_OFFSET                   0x00000008
#define RXPCU_PPDU_END_INFO_2_TX_HT_VHT_ACK_LSB                      24
#define RXPCU_PPDU_END_INFO_2_TX_HT_VHT_ACK_MASK                     0x01000000

/* Description		RXPCU_PPDU_END_INFO_2_UNSUPPORTED_MU_NC

			Set if MU Nc > 2 in received NDPA.

			If this bit is set, even though AID and BSSID are
			matched, MAC doesn't send tx_expect_ndp to PHY, because MU
			Nc > 2 is not supported in Helium.
*/
#define RXPCU_PPDU_END_INFO_2_UNSUPPORTED_MU_NC_OFFSET               0x00000008
#define RXPCU_PPDU_END_INFO_2_UNSUPPORTED_MU_NC_LSB                  25
#define RXPCU_PPDU_END_INFO_2_UNSUPPORTED_MU_NC_MASK                 0x02000000

/* Description		RXPCU_PPDU_END_INFO_2_OTP_TXBF_DISABLE

			Set if either OTP_SUBFEE_DISABLE or OTP_TXBF_DISABLE is
			set and if RXPU receives directed NDPA frame. Then, RXPCU
			should not send TX_EXPECT_NDP TLV to SW but set this bit to
			inform SW.
*/
#define RXPCU_PPDU_END_INFO_2_OTP_TXBF_DISABLE_OFFSET                0x00000008
#define RXPCU_PPDU_END_INFO_2_OTP_TXBF_DISABLE_LSB                   26
#define RXPCU_PPDU_END_INFO_2_OTP_TXBF_DISABLE_MASK                  0x04000000

/* Description		RXPCU_PPDU_END_INFO_2_PREVIOUS_TLV_CORRUPTED

			When set, the TLV preceding this RXPCU_END_INFO TLV
			within the RX_PPDU_END TLV, is corrupted. Not the entire TLV
			was received.... Likely due to an abort scenario... If abort
			is to blame, see the abort data datastructure for details.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_2_PREVIOUS_TLV_CORRUPTED_OFFSET          0x00000008
#define RXPCU_PPDU_END_INFO_2_PREVIOUS_TLV_CORRUPTED_LSB             27
#define RXPCU_PPDU_END_INFO_2_PREVIOUS_TLV_CORRUPTED_MASK            0x08000000

/* Description		RXPCU_PPDU_END_INFO_2_PHYRX_ABORT_REQUEST_INFO_VALID

			When set, the PHY sent an PHYRX_ABORT_REQUEST TLV to
			RXPCU. The abort fields embedded in this TLV contain valid
			info.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_2_PHYRX_ABORT_REQUEST_INFO_VALID_OFFSET  0x00000008
#define RXPCU_PPDU_END_INFO_2_PHYRX_ABORT_REQUEST_INFO_VALID_LSB     28
#define RXPCU_PPDU_END_INFO_2_PHYRX_ABORT_REQUEST_INFO_VALID_MASK    0x10000000

/* Description		RXPCU_PPDU_END_INFO_2_MACRX_ABORT_REQUEST_INFO_VALID

			When set, the MAC sent an MACRX_ABORT_REQUEST TLV to
			PHYRX. The abort fields embedded in this TLV contain valid
			info.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_2_MACRX_ABORT_REQUEST_INFO_VALID_OFFSET  0x00000008
#define RXPCU_PPDU_END_INFO_2_MACRX_ABORT_REQUEST_INFO_VALID_LSB     29
#define RXPCU_PPDU_END_INFO_2_MACRX_ABORT_REQUEST_INFO_VALID_MASK    0x20000000

/* Description		RXPCU_PPDU_END_INFO_2_RESERVED

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_2_RESERVED_OFFSET                        0x00000008
#define RXPCU_PPDU_END_INFO_2_RESERVED_LSB                           30
#define RXPCU_PPDU_END_INFO_2_RESERVED_MASK                          0xc0000000

/* Description		RXPCU_PPDU_END_INFO_3_COEX_BT_TX_FROM_START_OF_RX

			Set when BT TX was ongoing when WLAN RX started
*/
#define RXPCU_PPDU_END_INFO_3_COEX_BT_TX_FROM_START_OF_RX_OFFSET     0x0000000c
#define RXPCU_PPDU_END_INFO_3_COEX_BT_TX_FROM_START_OF_RX_LSB        0
#define RXPCU_PPDU_END_INFO_3_COEX_BT_TX_FROM_START_OF_RX_MASK       0x00000001

/* Description		RXPCU_PPDU_END_INFO_3_COEX_BT_TX_AFTER_START_OF_RX

*/
#define RXPCU_PPDU_END_INFO_3_COEX_BT_TX_AFTER_START_OF_RX_OFFSET    0x0000000c
#define RXPCU_PPDU_END_INFO_3_COEX_BT_TX_AFTER_START_OF_RX_LSB       1
#define RXPCU_PPDU_END_INFO_3_COEX_BT_TX_AFTER_START_OF_RX_MASK      0x00000002

/* Description		RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_FROM_START_OF_RX

			Set when WAN TX was ongoing when WLAN RX started
*/
#define RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_FROM_START_OF_RX_OFFSET    0x0000000c
#define RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_FROM_START_OF_RX_LSB       2
#define RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_FROM_START_OF_RX_MASK      0x00000004

/* Description		RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_AFTER_START_OF_RX

			Set when WAN TX started while WLAN RX was already
			ongoing
*/
#define RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_AFTER_START_OF_RX_OFFSET   0x0000000c
#define RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_AFTER_START_OF_RX_LSB      3
#define RXPCU_PPDU_END_INFO_3_COEX_WAN_TX_AFTER_START_OF_RX_MASK     0x00000008

/* Description		RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_FROM_START_OF_RX

			Set when other WLAN TX was ongoing when WLAN RX started
*/
#define RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_FROM_START_OF_RX_OFFSET   0x0000000c
#define RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_FROM_START_OF_RX_LSB      4
#define RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_FROM_START_OF_RX_MASK     0x00000010

/* Description		RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_AFTER_START_OF_RX

			Set when other WLAN TX started while WLAN RX was already
			ongoing
*/
#define RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_AFTER_START_OF_RX_OFFSET  0x0000000c
#define RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_AFTER_START_OF_RX_LSB     5
#define RXPCU_PPDU_END_INFO_3_COEX_WLAN_TX_AFTER_START_OF_RX_MASK    0x00000020

/* Description		RXPCU_PPDU_END_INFO_3_MPDU_DELIMITER_ERRORS_SEEN

			When set, MPDU delimiter errors have been detected
			during this PPDU reception
*/
#define RXPCU_PPDU_END_INFO_3_MPDU_DELIMITER_ERRORS_SEEN_OFFSET      0x0000000c
#define RXPCU_PPDU_END_INFO_3_MPDU_DELIMITER_ERRORS_SEEN_LSB         6
#define RXPCU_PPDU_END_INFO_3_MPDU_DELIMITER_ERRORS_SEEN_MASK        0x00000040

/* Description		RXPCU_PPDU_END_INFO_3_FTM_TM

			Indicate the timestamp is for the FTM or TM frame



			0: non TM or FTM frame

			1: FTM frame

			2: TM frame

			3: reserved

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_3_FTM_TM_OFFSET                          0x0000000c
#define RXPCU_PPDU_END_INFO_3_FTM_TM_LSB                             7
#define RXPCU_PPDU_END_INFO_3_FTM_TM_MASK                            0x00000180

/* Description		RXPCU_PPDU_END_INFO_3_DIALOG_TOKEN

			The dialog token in the FTM or TM frame. Only valid when
			the FTM is set. Clear to 254 for a non-FTM frame

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_3_DIALOG_TOKEN_OFFSET                    0x0000000c
#define RXPCU_PPDU_END_INFO_3_DIALOG_TOKEN_LSB                       9
#define RXPCU_PPDU_END_INFO_3_DIALOG_TOKEN_MASK                      0x0001fe00

/* Description		RXPCU_PPDU_END_INFO_3_FOLLOW_UP_DIALOG_TOKEN

			The follow up dialog token in the FTM or TM frame. Only
			valid when the FTM is set. Clear to 0 for a non-FTM frame,
			The follow up dialog token in the FTM frame. Only valid when
			the FTM is set. Clear to 255 for a non-FTM frame<legal all>
*/
#define RXPCU_PPDU_END_INFO_3_FOLLOW_UP_DIALOG_TOKEN_OFFSET          0x0000000c
#define RXPCU_PPDU_END_INFO_3_FOLLOW_UP_DIALOG_TOKEN_LSB             17
#define RXPCU_PPDU_END_INFO_3_FOLLOW_UP_DIALOG_TOKEN_MASK            0x01fe0000

/* Description		RXPCU_PPDU_END_INFO_3_BB_CAPTURED_CHANNEL

			Set by RXPCU when MACRX_FREEZE_CAPTURE_CHANNEL TLV is
			sent to PHY, FW check it to correlate current PPDU TLVs with
			uploaded channel information.



			<legal all>
*/
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_CHANNEL_OFFSET             0x0000000c
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_CHANNEL_LSB                25
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_CHANNEL_MASK               0x02000000

/* Description		RXPCU_PPDU_END_INFO_3_BB_CAPTURED_REASON

			Copy capture_reason of MACRX_FREEZE_CAPTURE_CHANNEL TLV
			to here for FW usage. Valid when bb_captured_channel or
			bb_captured_timeout is set.



			This field indicates why the MAC asked to capture the
			channel

			<enum 0 freeze_reason_TM>

			<enum 1 freeze_reason_FTM>

			<enum 2 freeze_reason_ACK_resp_to_TM_FTM>

			<enum 3 freeze_reason_TA_RA_TYPE_FILTER>

			<enum 4 freeze_reason_NDPA_NDP>

			<enum 5 freeze_reason_ALL_PACKET>



			<legal 0-5>
*/
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_REASON_OFFSET              0x0000000c
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_REASON_LSB                 26
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_REASON_MASK                0x1c000000

/* Description		RXPCU_PPDU_END_INFO_3_BB_CAPTURED_TIMEOUT

			Set by RxPCU to indicate channel capture condition is
			meet, but MACRX_FREEZE_CAPTURE_CHANNEL is not sent to PHY
			due to AST long delay, which means the rx_frame_falling edge
			to FREEZE TLV ready time exceed the threshold time defined
			by RXPCU register FREEZE_TLV_DELAY_CNT_THRESH.

			Bb_captured_reason is still valid in this case.



			<legal all>
*/
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_TIMEOUT_OFFSET             0x0000000c
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_TIMEOUT_LSB                29
#define RXPCU_PPDU_END_INFO_3_BB_CAPTURED_TIMEOUT_MASK               0x20000000

/* Description		RXPCU_PPDU_END_INFO_3_RESERVED_3

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_3_RESERVED_3_OFFSET                      0x0000000c
#define RXPCU_PPDU_END_INFO_3_RESERVED_3_LSB                         30
#define RXPCU_PPDU_END_INFO_3_RESERVED_3_MASK                        0xc0000000

/* Description		RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_PASSING_FCS

			Number of MPDUs received in this PPDU that passed the
			FCS check before the Coex TX started



			The counter saturates at 0x3FF.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_PASSING_FCS_OFFSET   0x00000010
#define RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_PASSING_FCS_LSB      0
#define RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_PASSING_FCS_MASK     0x000003ff

/* Description		RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_FAILING_FCS

			Number of MPDUs received in this PPDU that failed the
			FCS check before the Coex TX started



			The counter saturates at 0x3FF.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_FAILING_FCS_OFFSET   0x00000010
#define RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_FAILING_FCS_LSB      10
#define RXPCU_PPDU_END_INFO_4_BEFORE_MPDU_COUNT_FAILING_FCS_MASK     0x000ffc00

/* Description		RXPCU_PPDU_END_INFO_4_AFTER_MPDU_COUNT_PASSING_FCS

			Number of MPDUs received in this PPDU that passed the
			FCS check after the moment the Coex TX started



			(Note: The partially received MPDU when the COEX tx
			start event came in falls in the after category)



			The counter saturates at 0x3FF.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_4_AFTER_MPDU_COUNT_PASSING_FCS_OFFSET    0x00000010
#define RXPCU_PPDU_END_INFO_4_AFTER_MPDU_COUNT_PASSING_FCS_LSB       20
#define RXPCU_PPDU_END_INFO_4_AFTER_MPDU_COUNT_PASSING_FCS_MASK      0x3ff00000

/* Description		RXPCU_PPDU_END_INFO_4_RESERVED_4

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_4_RESERVED_4_OFFSET                      0x00000010
#define RXPCU_PPDU_END_INFO_4_RESERVED_4_LSB                         30
#define RXPCU_PPDU_END_INFO_4_RESERVED_4_MASK                        0xc0000000

/* Description		RXPCU_PPDU_END_INFO_5_AFTER_MPDU_COUNT_FAILING_FCS

			Number of MPDUs received in this PPDU that failed the
			FCS check after the moment the Coex TX started



			(Note: The partially received MPDU when the COEX tx
			start event came in falls in the after category)



			The counter saturates at 0x3FF.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_5_AFTER_MPDU_COUNT_FAILING_FCS_OFFSET    0x00000014
#define RXPCU_PPDU_END_INFO_5_AFTER_MPDU_COUNT_FAILING_FCS_LSB       0
#define RXPCU_PPDU_END_INFO_5_AFTER_MPDU_COUNT_FAILING_FCS_MASK      0x000003ff

/* Description		RXPCU_PPDU_END_INFO_5_RESERVED_5

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_5_RESERVED_5_OFFSET                      0x00000014
#define RXPCU_PPDU_END_INFO_5_RESERVED_5_LSB                         10
#define RXPCU_PPDU_END_INFO_5_RESERVED_5_MASK                        0xfffffc00

/* Description		RXPCU_PPDU_END_INFO_6_PHY_TIMESTAMP_TX_LOWER_32

			The PHY timestamp in the AMPI of the most recent rising
			edge (TODO: of what ???) after the TX_PHY_DESC.  This field
			indicates the lower 32 bits of the timestamp
*/
#define RXPCU_PPDU_END_INFO_6_PHY_TIMESTAMP_TX_LOWER_32_OFFSET       0x00000018
#define RXPCU_PPDU_END_INFO_6_PHY_TIMESTAMP_TX_LOWER_32_LSB          0
#define RXPCU_PPDU_END_INFO_6_PHY_TIMESTAMP_TX_LOWER_32_MASK         0xffffffff

/* Description		RXPCU_PPDU_END_INFO_7_PHY_TIMESTAMP_TX_UPPER_32

			The PHY timestamp in the AMPI of the most recent rising
			edge (TODO: of what ???) after the TX_PHY_DESC.  This field
			indicates the upper 32 bits of the timestamp
*/
#define RXPCU_PPDU_END_INFO_7_PHY_TIMESTAMP_TX_UPPER_32_OFFSET       0x0000001c
#define RXPCU_PPDU_END_INFO_7_PHY_TIMESTAMP_TX_UPPER_32_LSB          0
#define RXPCU_PPDU_END_INFO_7_PHY_TIMESTAMP_TX_UPPER_32_MASK         0xffffffff

/* Description		RXPCU_PPDU_END_INFO_8_BB_LENGTH

			Indicates the number of bytes of baseband information
			for PPDUs where the BB descriptor preamble type is 0x80 to
			0xFF which indicates that this is not a normal PPDU but
			rather contains baseband debug information.

			TODO: Is this still needed ???
*/
#define RXPCU_PPDU_END_INFO_8_BB_LENGTH_OFFSET                       0x00000020
#define RXPCU_PPDU_END_INFO_8_BB_LENGTH_LSB                          0
#define RXPCU_PPDU_END_INFO_8_BB_LENGTH_MASK                         0x0000ffff

/* Description		RXPCU_PPDU_END_INFO_8_BB_DATA

			Indicates that BB data associated with this PPDU will
			exist in the receive buffer.  The exact contents of this BB
			data can be found by decoding the BB TLV in the buffer
			associated with the BB data.  See vector_fragment in the
			Helium_mac_phy_interface.docx
*/
#define RXPCU_PPDU_END_INFO_8_BB_DATA_OFFSET                         0x00000020
#define RXPCU_PPDU_END_INFO_8_BB_DATA_LSB                            16
#define RXPCU_PPDU_END_INFO_8_BB_DATA_MASK                           0x00010000

/* Description		RXPCU_PPDU_END_INFO_8_RESERVED_8

			Reserved: HW should fill with 0, FW should ignore.
*/
#define RXPCU_PPDU_END_INFO_8_RESERVED_8_OFFSET                      0x00000020
#define RXPCU_PPDU_END_INFO_8_RESERVED_8_LSB                         17
#define RXPCU_PPDU_END_INFO_8_RESERVED_8_MASK                        0x000e0000

/* Description		RXPCU_PPDU_END_INFO_8_FIRST_BT_BROADCAST_STATUS_DETAILS

			Same contents as field bt_broadcast_status_details for
			the first received COEX_STATUS_BROADCAST tlv during this
			PPDU reception.



			If no COEX_STATUS_BROADCAST tlv is received during this
			PPDU reception, this field will be set to 0





			For detailed info see doc: TBD

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_8_FIRST_BT_BROADCAST_STATUS_DETAILS_OFFSET 0x00000020
#define RXPCU_PPDU_END_INFO_8_FIRST_BT_BROADCAST_STATUS_DETAILS_LSB  20
#define RXPCU_PPDU_END_INFO_8_FIRST_BT_BROADCAST_STATUS_DETAILS_MASK 0xfff00000

/* Description		RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION

			The length of this PPDU reception in us
*/
#define RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION_OFFSET                0x00000024
#define RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION_LSB                   0
#define RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION_MASK                  0x00ffffff

/* Description		RXPCU_PPDU_END_INFO_9_RESERVED_9

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_9_RESERVED_9_OFFSET                      0x00000024
#define RXPCU_PPDU_END_INFO_9_RESERVED_9_LSB                         24
#define RXPCU_PPDU_END_INFO_9_RESERVED_9_MASK                        0xff000000

/* Description		RXPCU_PPDU_END_INFO_10_AST_INDEX

			The AST index of the receive Ack/BA.  This information
			is provided from the TXPCU to the RXPCU for receive Ack/BA
			for implicit beamforming.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_10_AST_INDEX_OFFSET                      0x00000028
#define RXPCU_PPDU_END_INFO_10_AST_INDEX_LSB                         0
#define RXPCU_PPDU_END_INFO_10_AST_INDEX_MASK                        0x0000ffff

/* Description		RXPCU_PPDU_END_INFO_10_AST_INDEX_VALID

			Indicates that ast_index is valid.  Should only be set
			for receive Ack/BA where single stream implicit sounding is
			captured.
*/
#define RXPCU_PPDU_END_INFO_10_AST_INDEX_VALID_OFFSET                0x00000028
#define RXPCU_PPDU_END_INFO_10_AST_INDEX_VALID_LSB                   16
#define RXPCU_PPDU_END_INFO_10_AST_INDEX_VALID_MASK                  0x00010000

/* Description		RXPCU_PPDU_END_INFO_10_RESERVED_10

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_10_RESERVED_10_OFFSET                    0x00000028
#define RXPCU_PPDU_END_INFO_10_RESERVED_10_LSB                       17
#define RXPCU_PPDU_END_INFO_10_RESERVED_10_MASK                      0x000e0000

/* Description		RXPCU_PPDU_END_INFO_10_SECOND_BT_BROADCAST_STATUS_DETAILS

			Same contents as field bt_broadcast_status_details for
			the second received COEX_STATUS_BROADCAST tlv during this
			PPDU reception.



			If no second COEX_STATUS_BROADCAST tlv is received
			during this PPDU reception, this field will be set to 0





			For detailed info see doc: TBD

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_10_SECOND_BT_BROADCAST_STATUS_DETAILS_OFFSET 0x00000028
#define RXPCU_PPDU_END_INFO_10_SECOND_BT_BROADCAST_STATUS_DETAILS_LSB 20
#define RXPCU_PPDU_END_INFO_10_SECOND_BT_BROADCAST_STATUS_DETAILS_MASK 0xfff00000

 /* EXTERNAL REFERENCE : struct phyrx_abort_request_info phyrx_abort_request_info_details */


/* Description		RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON

			<enum 0 phyrx_err_phy_off> Reception aborted due to
			receiving a PHY_OFF TLV

			<enum 1 phyrx_err_synth_off>

			<enum 2 phyrx_err_ofdma_timing>

			<enum 3 phyrx_err_ofdma_signal_parity>

			<enum 4 phyrx_err_ofdma_rate_illegal>

			<enum 5 phyrx_err_ofdma_length_illegal>

			<enum 6 phyrx_err_ofdma_restart>

			<enum 7 phyrx_err_ofdma_service>

			<enum 8 phyrx_err_ppdu_ofdma_power_drop>



			<enum 9 phyrx_err_cck_blokker>

			<enum 10 phyrx_err_cck_timing>

			<enum 11 phyrx_err_cck_header_crc>

			<enum 12 phyrx_err_cck_rate_illegal>

			<enum 13 phyrx_err_cck_length_illegal>

			<enum 14 phyrx_err_cck_restart>

			<enum 15 phyrx_err_cck_service>

			<enum 16 phyrx_err_cck_power_drop>



			<enum 17 phyrx_err_ht_crc_err>

			<enum 18 phyrx_err_ht_length_illegal>

			<enum 19 phyrx_err_ht_rate_illegal>

			<enum 20 phyrx_err_ht_zlf>

			<enum 21 phyrx_err_false_radar_ext>



			<enum 22 phyrx_err_green_field>



			<enum 23 phyrx_err_bw_gt_dyn_bw>

			<enum 24 phyrx_err_leg_ht_mismatch>

			<enum 25 phyrx_err_vht_crc_error>

			<enum 26 phyrx_err_vht_siga_unsupported>

			<enum 27 phyrx_err_vht_lsig_len_invalid>

			<enum 28 phyrx_err_vht_ndp_or_zlf>

			<enum 29 phyrx_err_vht_nsym_lt_zero>

			<enum 30 phyrx_err_vht_rx_extra_symbol_mismatch>

			<enum 31 phyrx_err_vht_rx_skip_group_id0>

			<enum 32 phyrx_err_vht_rx_skip_group_id1to62>

			<enum 33 phyrx_err_vht_rx_skip_group_id63>

			<enum 34 phyrx_err_ofdm_ldpc_decoder_disabled>

			<enum 35 phyrx_err_defer_nap>

			<enum 36 phyrx_err_fdomain_timeout>

			<enum 37 phyrx_err_lsig_rel_check>

			<enum 38 phyrx_err_bt_collision>

			<enum 39 phyrx_err_unsupported_mu_feedback>

			<enum 40 phyrx_err_ppdu_tx_interrupt_rx>

			<enum 41 phyrx_err_unsupported_cbf>



			<enum 42 phyrx_err_other>  Should not really be used. If
			needed, ask for documentation update



			<enum 43 phyrx_err_he_siga_unsupported > <enum 44
			phyrx_err_he_crc_error > <enum 45
			phyrx_err_he_sigb_unsupported > <enum 46
			phyrx_err_he_mu_mode_unsupported > <enum 47
			phyrx_err_he_ndp_or_zlf > <enum 48 phyrx_err_he_nsym_lt_zero
			> <enum 49 phyrx_err_he_ru_params_unsupported > <enum 50
			phyrx_err_he_num_users_unsupported ><enum 51
			phyrx_err_he_sounding_params_unsupported >



			<enum 52 phyrx_err_MU_UL_no_power_detected>

			<enum 53 phyrx_err_MU_UL_not_for_me>



			<legal 0 - 53>
*/
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_OFFSET 0x0000002c
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_LSB 0
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_MASK 0x000000ff

/* Description		RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_NAP_STATE

			When set, PHY enters PHY NAP state after sending this
			abort



			Note that nap and defer state are mutually exclusive.



			Field put pro-actively in place....usage still to be
			agreed upon.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_NAP_STATE_OFFSET 0x0000002c
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_NAP_STATE_LSB 8
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_NAP_STATE_MASK 0x00000100

/* Description		RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_DEFER_STATE

			When set, PHY enters PHY defer state after sending this
			abort



			Note that nap and defer state are mutually exclusive.



			Field put pro-actively in place....usage still to be
			agreed upon.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_DEFER_STATE_OFFSET 0x0000002c
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_DEFER_STATE_LSB 9
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHY_ENTERS_DEFER_STATE_MASK 0x00000200

/* Description		RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0_OFFSET 0x0000002c
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0_LSB 10
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0_MASK 0x0000fc00

/* Description		RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RECEIVE_DURATION

			The remaining receive duration of this PPDU in the
			medium (in us). When PHY does not know this duration when
			this TLV is generated, the field will be set to 0.

			The timing reference point is the reception by the MAC
			of this TLV. The value shall be accurate to within 2us.



			In case Phy_enters_nap_state and/or
			Phy_enters_defer_state is set, there is a possibility that
			MAC PMM can also decide to go into a low(er) power state.

			<legal all>
*/
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RECEIVE_DURATION_OFFSET 0x0000002c
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RECEIVE_DURATION_LSB 16
#define RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_RECEIVE_DURATION_MASK 0xffff0000

 /* EXTERNAL REFERENCE : struct macrx_abort_request_info macrx_abort_request_info_details */


/* Description		RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_MACRX_ABORT_REASON

			<enum 0 macrx_abort_sw_initiated>

			<enum 1 macrx_abort_obss_reception> Upon receiving this
			abort reason, PHY should stop reception of the current frame
			and go back into a search mode

			<enum 2 macrx_abort_other>

			<enum 3 macrx_abort_sw_initiated_channel_switch > MAC FW
			issued an abort for channel switch reasons

			<enum 4 macrx_abort_sw_initiated_power_save > MAC FW
			issued an abort power save reasons

			<enum 5 macrx_abort_too_much_bad_data > RXPCU is
			terminating the current ongoing reception, as the data that
			MAC is receiving seems to be all garbage... The PER is too
			high, or in case of MU UL, Likely the trigger frame never
			got properly received by any of the targeted MU UL devices.
			After the abort, PHYRX can resume a normal search mode.



			<legal 0-5>
*/
#define RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_MACRX_ABORT_REASON_OFFSET 0x00000030
#define RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_MACRX_ABORT_REASON_LSB 0
#define RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_MACRX_ABORT_REASON_MASK 0x000000ff

/* Description		RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0

			<legal 0>
*/
#define RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0_OFFSET 0x00000030
#define RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0_LSB 8
#define RXPCU_PPDU_END_INFO_12_MACRX_ABORT_REQUEST_INFO_DETAILS_RESERVED_0_MASK 0x0000ff00

/* Description		RXPCU_PPDU_END_INFO_13_RX_PPDU_END_MARKER

			Field used by SW to double check that their structure
			alignment is in sync with what HW has done.

			<legal 0xAABBCCDD>
*/
#define RXPCU_PPDU_END_INFO_13_RX_PPDU_END_MARKER_OFFSET             0x00000034
#define RXPCU_PPDU_END_INFO_13_RX_PPDU_END_MARKER_LSB                0
#define RXPCU_PPDU_END_INFO_13_RX_PPDU_END_MARKER_MASK               0xffffffff


#endif // _RXPCU_PPDU_END_INFO_H_
