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

#include "rx_rxpcu_classification_overview.h"

// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	struct rx_rxpcu_classification_overview rxpcu_classification_details;
//	1	sta_full_aid[12:0], mcs[16:13], nss[19:17], ofdma_info_valid[20], dl_ofdma_ru_start_index[27:21], reserved_1a[31:28]
//	2	dl_ofdma_ru_width[6:0], reserved_2a[7], user_receive_quality[15:8], mpdu_cnt_fcs_err[25:16], wbm2rxdma_buf_source_used[26], fw2rxdma_buf_source_used[27], sw2rxdma_buf_source_used[28], reserved_2b[31:29]
//	3	mpdu_cnt_fcs_ok[8:0], frame_control_info_valid[9], qos_control_info_valid[10], ht_control_info_valid[11], data_sequence_control_info_valid[12], ht_control_info_null_valid[13], reserved_3a[15:14], rxdma2reo_ring_used[16], rxdma2fw_ring_used[17], rxdma2sw_ring_used[18], rxdma_release_ring_used[19], ht_control_field_pkt_type[23:20], reserved_3b[31:24]
//	4	ast_index[15:0], frame_control_field[31:16]
//	5	first_data_seq_ctrl[15:0], qos_control_field[31:16]
//	6	ht_control_field[31:0]
//	7	fcs_ok_bitmap_31_0[31:0]
//	8	fcs_ok_bitmap_63_32[31:0]
//	9	udp_msdu_count[15:0], tcp_msdu_count[31:16]
//	10	other_msdu_count[15:0], tcp_ack_msdu_count[31:16]
//	11	sw_response_reference_ptr[31:0]
//	12	received_qos_data_tid_bitmap[15:0], received_qos_data_tid_eosp_bitmap[31:16]
//	13	qosctrl_15_8_tid0[7:0], qosctrl_15_8_tid1[15:8], qosctrl_15_8_tid2[23:16], qosctrl_15_8_tid3[31:24]
//	14	qosctrl_15_8_tid4[7:0], qosctrl_15_8_tid5[15:8], qosctrl_15_8_tid6[23:16], qosctrl_15_8_tid7[31:24]
//	15	qosctrl_15_8_tid8[7:0], qosctrl_15_8_tid9[15:8], qosctrl_15_8_tid10[23:16], qosctrl_15_8_tid11[31:24]
//	16	qosctrl_15_8_tid12[7:0], qosctrl_15_8_tid13[15:8], qosctrl_15_8_tid14[23:16], qosctrl_15_8_tid15[31:24]
//	17	mpdu_ok_byte_count[24:0], ampdu_delim_ok_count_6_0[31:25]
//	18	ampdu_delim_err_count[24:0], ampdu_delim_ok_count_13_7[31:25]
//	19	mpdu_err_byte_count[24:0], ampdu_delim_ok_count_20_14[31:25]
//	20	non_consecutive_delimiter_err[15:0], reserved_20a[31:16]
//	21	ht_control_null_field[31:0]
//	22	sw_response_reference_ptr_ext[31:0]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RX_PPDU_END_USER_STATS 23

struct rx_ppdu_end_user_stats {
    struct            rx_rxpcu_classification_overview                       rxpcu_classification_details;
             uint32_t sta_full_aid                    : 13, //[12:0]
                      mcs                             :  4, //[16:13]
                      nss                             :  3, //[19:17]
                      ofdma_info_valid                :  1, //[20]
                      dl_ofdma_ru_start_index         :  7, //[27:21]
                      reserved_1a                     :  4; //[31:28]
             uint32_t dl_ofdma_ru_width               :  7, //[6:0]
                      reserved_2a                     :  1, //[7]
                      user_receive_quality            :  8, //[15:8]
                      mpdu_cnt_fcs_err                : 10, //[25:16]
                      wbm2rxdma_buf_source_used       :  1, //[26]
                      fw2rxdma_buf_source_used        :  1, //[27]
                      sw2rxdma_buf_source_used        :  1, //[28]
                      reserved_2b                     :  3; //[31:29]
             uint32_t mpdu_cnt_fcs_ok                 :  9, //[8:0]
                      frame_control_info_valid        :  1, //[9]
                      qos_control_info_valid          :  1, //[10]
                      ht_control_info_valid           :  1, //[11]
                      data_sequence_control_info_valid:  1, //[12]
                      ht_control_info_null_valid      :  1, //[13]
                      reserved_3a                     :  2, //[15:14]
                      rxdma2reo_ring_used             :  1, //[16]
                      rxdma2fw_ring_used              :  1, //[17]
                      rxdma2sw_ring_used              :  1, //[18]
                      rxdma_release_ring_used         :  1, //[19]
                      ht_control_field_pkt_type       :  4, //[23:20]
                      reserved_3b                     :  8; //[31:24]
             uint32_t ast_index                       : 16, //[15:0]
                      frame_control_field             : 16; //[31:16]
             uint32_t first_data_seq_ctrl             : 16, //[15:0]
                      qos_control_field               : 16; //[31:16]
             uint32_t ht_control_field                : 32; //[31:0]
             uint32_t fcs_ok_bitmap_31_0              : 32; //[31:0]
             uint32_t fcs_ok_bitmap_63_32             : 32; //[31:0]
             uint32_t udp_msdu_count                  : 16, //[15:0]
                      tcp_msdu_count                  : 16; //[31:16]
             uint32_t other_msdu_count                : 16, //[15:0]
                      tcp_ack_msdu_count              : 16; //[31:16]
             uint32_t sw_response_reference_ptr       : 32; //[31:0]
             uint32_t received_qos_data_tid_bitmap    : 16, //[15:0]
                      received_qos_data_tid_eosp_bitmap: 16; //[31:16]
             uint32_t qosctrl_15_8_tid0               :  8, //[7:0]
                      qosctrl_15_8_tid1               :  8, //[15:8]
                      qosctrl_15_8_tid2               :  8, //[23:16]
                      qosctrl_15_8_tid3               :  8; //[31:24]
             uint32_t qosctrl_15_8_tid4               :  8, //[7:0]
                      qosctrl_15_8_tid5               :  8, //[15:8]
                      qosctrl_15_8_tid6               :  8, //[23:16]
                      qosctrl_15_8_tid7               :  8; //[31:24]
             uint32_t qosctrl_15_8_tid8               :  8, //[7:0]
                      qosctrl_15_8_tid9               :  8, //[15:8]
                      qosctrl_15_8_tid10              :  8, //[23:16]
                      qosctrl_15_8_tid11              :  8; //[31:24]
             uint32_t qosctrl_15_8_tid12              :  8, //[7:0]
                      qosctrl_15_8_tid13              :  8, //[15:8]
                      qosctrl_15_8_tid14              :  8, //[23:16]
                      qosctrl_15_8_tid15              :  8; //[31:24]
             uint32_t mpdu_ok_byte_count              : 25, //[24:0]
                      ampdu_delim_ok_count_6_0        :  7; //[31:25]
             uint32_t ampdu_delim_err_count           : 25, //[24:0]
                      ampdu_delim_ok_count_13_7       :  7; //[31:25]
             uint32_t mpdu_err_byte_count             : 25, //[24:0]
                      ampdu_delim_ok_count_20_14      :  7; //[31:25]
             uint32_t non_consecutive_delimiter_err   : 16, //[15:0]
                      reserved_20a                    : 16; //[31:16]
             uint32_t ht_control_null_field           : 32; //[31:0]
             uint32_t sw_response_reference_ptr_ext   : 32; //[31:0]
};

/*

struct rx_rxpcu_classification_overview rxpcu_classification_details

			Details related to what RXPCU classification types of
			MPDUs have been received

sta_full_aid

			Consumer: FW

			Producer: RXPCU



			The full AID of this station.



			<legal all>

mcs

			MCS of the received frame



			For details, refer to  MCS_TYPE description

			Note: This is rate in case of 11a/11b



			<legal all>

nss

			Number of spatial streams.



			NOTE: RXPCU derives this from the 'Mimo_ss_bitmap'



			<enum 0 1_spatial_stream>Single spatial stream

			<enum 1 2_spatial_streams>2 spatial streams

			<enum 2 3_spatial_streams>3 spatial streams

			<enum 3 4_spatial_streams>4 spatial streams

			<enum 4 5_spatial_streams>5 spatial streams

			<enum 5 6_spatial_streams>6 spatial streams

			<enum 6 7_spatial_streams>7 spatial streams

			<enum 7 8_spatial_streams>8 spatial streams

ofdma_info_valid

			When set, ofdma RU related info in the following fields
			is valid

			<legal all>

dl_ofdma_ru_start_index

			Field only valid when Ofdma_info_valid is set



			RU index number to which User is assigned

			RU numbering is over the entire BW, starting from 0

			<legal 0-73>

reserved_1a

			<legal 0>

dl_ofdma_ru_width

			The size of the RU for this user.

			In units of 1 (26 tone) RU

			<legal 1-74>

reserved_2a

			<legal 0>

user_receive_quality

			DO NOT USE



			Field not populated by MAC HW

			<legal all>

mpdu_cnt_fcs_err

			The number of MPDUs received from this STA in this PPDU
			with FCS errors

			<legal all>

wbm2rxdma_buf_source_used

			Field filled in by RXDMA



			When set, RXDMA has used the wbm2rxdma_buf ring as
			source for at least one of the frames in this PPDU.

fw2rxdma_buf_source_used

			Field filled in by RXDMA



			When set, RXDMA has used the fw2rxdma_buf ring as source
			for at least one of the frames in this PPDU.

sw2rxdma_buf_source_used

			Field filled in by RXDMA



			When set, RXDMA has used the sw2rxdma_buf ring as source
			for at least one of the frames in this PPDU.

reserved_2b

			<legal 0>

mpdu_cnt_fcs_ok

			The number of MPDUs received from this STA in this PPDU
			with correct FCS

			<legal all>

frame_control_info_valid

			When set, the frame_control_info field contains valid
			information

			<legal all>

qos_control_info_valid

			When set, the QoS_control_info field contains valid
			information

			<legal all>

ht_control_info_valid

			When set, the HT_control_field contains valid
			information

			<legal all>

data_sequence_control_info_valid

			When set, the First_data_seq_ctrl field contains valid
			information

			<legal all>

ht_control_info_null_valid

			When set, the HT_control_NULL_field contains valid
			information

			<legal all>

reserved_3a

			<legal 0>

rxdma2reo_ring_used

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA

rxdma2fw_ring_used

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA

rxdma2sw_ring_used

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA

rxdma_release_ring_used

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA

ht_control_field_pkt_type

			Field only valid when HT_control_info_valid or
			HT_control_info_NULL_valid    is set.



			Indicates what the PHY receive type was for receiving
			this frame. Can help determine if the HT_CONTROL field shall
			be interpreted as HT/VHT or HE.



			NOTE: later on in the 11ax IEEE spec a bit within the HT
			control field was introduced that explicitly indicated how
			to interpret the HT control field.... As HT, VHT, or HE.



			<enum 0 dot11a>802.11a PPDU type

			<enum 1 dot11b>802.11b PPDU type

			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type

			<enum 3 dot11ac>802.11ac PPDU type

			<enum 4 dot11ax>802.11ax PPDU type

			<enum 5 dot11ba>802.11ba (WUR) PPDU type

reserved_3b

			<legal 0>

ast_index

			This field indicates the index of the AST entry
			corresponding to this MPDU. It is provided by the GSE module
			instantiated in RXPCU.

			A value of 0xFFFF indicates an invalid AST index,
			meaning that No AST entry was found or NO AST search was
			performed

			<legal all>

frame_control_field

			Field only valid when Frame_control_info_valid is set.



			Last successfully received Frame_control field of data
			frame (excluding Data NULL/ QoS Null) for this user

			Mainly used to track the PM state of the transmitted
			device



			NOTE: only data frame info is needed, as control and
			management frames are already routed to the FW.

			<legal all>

first_data_seq_ctrl

			Field only valid when Data_sequence_control_info_valid
			is set.



			Sequence control field of the first data frame
			(excluding Data NULL or QoS Data null) received for this
			user with correct FCS



			NOTE: only data frame info is needed, as control and
			management frames are already routed to the FW.

			<legal all>

qos_control_field

			Field only valid when QoS_control_info_valid is set.



			Last successfully received QoS_control field of data
			frame (excluding Data NULL/ QoS Null) for this user



			Note that in case of multi TID, this field can only
			reflect the last properly received MPDU, and thus can not
			indicate all potentially different TIDs that had been
			received earlier.



			There are however per TID fields, that will contain
			among other things all buffer status info: See

			QoSCtrl_15_8_tid???

			<legal all>

ht_control_field

			Field only valid when HT_control_info_valid is set.



			Last successfully received
			HT_CONTROL/VHT_CONTROL/HE_CONTROL  field of data frames,
			excluding QoS Null frames for this user.



			NOTE: HT control fields  from QoS Null frames are
			captured in field HT_control_NULL_field

			<legal all>

fcs_ok_bitmap_31_0

			Bitmap indicates in order of received MPDUs, which MPDUs
			had an passing FCS or had an error.

			1: FCS OK

			0: FCS error

			<legal all>

fcs_ok_bitmap_63_32

			Bitmap indicates in order of received MPDUs, which MPDUs
			had an passing FCS or had an error.

			1: FCS OK

			0: FCS error



			NOTE: for users 0, 1, 2 and 3, additional bitmap info
			(up to 256 bitmap window) is provided in
			RX_PPDU_END_USER_STATS_EXT TLV

			<legal all>

udp_msdu_count

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain UDP frames.

			<legal all>

tcp_msdu_count

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain TCP frames.



			(Note: This does NOT include TCP-ACK)

			<legal all>

other_msdu_count

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain neither UDP or TCP frames.



			Includes Management and control frames.



			<legal all>

tcp_ack_msdu_count

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain TCP ack frames.

			<legal all>

sw_response_reference_ptr

			Pointer that SW uses to refer back to an expected
			response reception. Used for Rate adaptation purposes.

			When a reception occurs that is not tied to an expected
			response, this field is set to 0x0.



			Note: further on in this TLV there is also the field:
			Sw_response_reference_ptr_ext.

			<legal all>

received_qos_data_tid_bitmap

			Whenever a frame is received that contains a QoS control
			field (that includes QoS Data and/or QoS Null), the bit in
			this field that corresponds to the received TID shall be
			set.

			...Bitmap[0] = TID0

			...Bitmap[1] = TID1

			Etc.

			<legal all>

received_qos_data_tid_eosp_bitmap

			Field initialized to 0

			For every QoS Data frame that is correctly received, the
			EOSP bit of that frame is copied over into the corresponding
			TID related field.

			Note that this implies that the bits here represent the
			EOSP bit status for each TID of the last MPDU received for
			that TID.



			received TID shall be set.

			...eosp_bitmap[0] = eosp of TID0

			...eosp_bitmap[1] = eosp of TID1

			Etc.

			<legal all>

qosctrl_15_8_tid0

			Field only valid when Received_qos_data_tid_bitmap[0] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 0

qosctrl_15_8_tid1

			Field only valid when Received_qos_data_tid_bitmap[1] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 1

qosctrl_15_8_tid2

			Field only valid when Received_qos_data_tid_bitmap[2] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 2

qosctrl_15_8_tid3

			Field only valid when Received_qos_data_tid_bitmap[3] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 3

qosctrl_15_8_tid4

			Field only valid when Received_qos_data_tid_bitmap[4] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 4

qosctrl_15_8_tid5

			Field only valid when Received_qos_data_tid_bitmap[5] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 5

qosctrl_15_8_tid6

			Field only valid when Received_qos_data_tid_bitmap[6] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 6

qosctrl_15_8_tid7

			Field only valid when Received_qos_data_tid_bitmap[7] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 7

qosctrl_15_8_tid8

			Field only valid when Received_qos_data_tid_bitmap[8] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 8

qosctrl_15_8_tid9

			Field only valid when Received_qos_data_tid_bitmap[9] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 9

qosctrl_15_8_tid10

			Field only valid when Received_qos_data_tid_bitmap[10]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 10

qosctrl_15_8_tid11

			Field only valid when Received_qos_data_tid_bitmap[11]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 11

qosctrl_15_8_tid12

			Field only valid when Received_qos_data_tid_bitmap[12]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 12

qosctrl_15_8_tid13

			Field only valid when Received_qos_data_tid_bitmap[13]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 13

qosctrl_15_8_tid14

			Field only valid when Received_qos_data_tid_bitmap[14]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 14

qosctrl_15_8_tid15

			Field only valid when Received_qos_data_tid_bitmap[15]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 15

mpdu_ok_byte_count

			The number of bytes received within an MPDU for this
			user with correct FCS. This includes the FCS field



			NOTE:

			The sum of the four fields.....

			Mpdu_ok_byte_count +

			mpdu_err_byte_count +


			.....is the total number of bytes that were received for
			this user from the PHY.



			<legal all>

ampdu_delim_ok_count_6_0

			Number of AMPDU delimiter received with correct
			structure

			LSB 7 bits from this counter



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4



			<legal all>

ampdu_delim_err_count

			The number of MPDU delimiter errors counted for this
			user.



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4

			<legal all>

ampdu_delim_ok_count_13_7

			Number of AMPDU delimiters received with correct
			structure

			Bits 13-7 from this counter



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4

			<legal all>

mpdu_err_byte_count

			The number of bytes belonging to MPDUs with an FCS
			error. This includes the FCS field.



			<legal all>

ampdu_delim_ok_count_20_14

			Number of AMPDU delimiters received with correct
			structure

			Bits 20-14 from this counter



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4



			<legal all>

non_consecutive_delimiter_err

			The number of times an MPDU delimiter error is detected
			that is not immediately preceded by another MPDU delimiter
			also with FCS error.



			The counter saturates at 0xFFFF



			<legal all>

reserved_20a

			<legal 0>

ht_control_null_field




			Last successfully received
			HT_CONTROL/VHT_CONTROL/HE_CONTROL  field from QoS Null frame
			for this user.

			<legal all>

sw_response_reference_ptr_ext

			Extended Pointer info that SW uses to refer back to an
			expected response transmission. Used for Rate adaptation
			purposes.

			When a reception occurs that is not tied to an expected
			response, this field is set to 0x0.



			Note: earlier on in this TLV there is also the field:
			Sw_response_reference_ptr.

			<legal all>
*/


 /* EXTERNAL REFERENCE : struct rx_rxpcu_classification_overview rxpcu_classification_details */


/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS

			When set, at least one Filter Pass MPDU has been
			received. FCS might or might not have been passing.



			For MU UL, in  TLVs RX_PPDU_END and
			RX_PPDU_END_STATUS_DONE, this field is the OR of all the
			users.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_LSB 0
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_MASK 0x00000001

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_FCS_OK

			When set, at least one Filter Pass MPDU has been
			received that has a correct FCS.



			For MU UL, in  TLVs RX_PPDU_END and
			RX_PPDU_END_STATUS_DONE, this field is the OR of all the
			users.



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_FCS_OK_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_FCS_OK_LSB 1
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_FILTER_PASS_MPDUS_FCS_OK_MASK 0x00000002

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS

			When set, at least one Monitor Direct MPDU has been
			received. FCS might or might not have been passing



			For MU UL, in  TLVs RX_PPDU_END and
			RX_PPDU_END_STATUS_DONE, this field is the OR of all the
			users.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_LSB 2
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_MASK 0x00000004

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_FCS_OK

			When set, at least one Monitor Direct MPDU has been
			received that has a correct FCS.



			For MU UL, in  TLVs RX_PPDU_END and
			RX_PPDU_END_STATUS_DONE, this field is the OR of all the
			users.



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_FCS_OK_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_FCS_OK_LSB 3
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_DIRECT_MPDUS_FCS_OK_MASK 0x00000008

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS

			When set, at least one Monitor Direct MPDU has been
			received. FCS might or might not have been passing.



			For MU UL, in  TLVs RX_PPDU_END and
			RX_PPDU_END_STATUS_DONE, this field is the OR of all the
			users.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_LSB 4
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_MASK 0x00000010

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_FCS_OK

			When set, at least one Monitor Direct MPDU has been
			received that has a correct FCS.



			For MU UL, in  TLVs RX_PPDU_END and
			RX_PPDU_END_STATUS_DONE, this field is the OR of all the
			users.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_FCS_OK_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_FCS_OK_LSB 5
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_MONITOR_OTHER_MPDUS_FCS_OK_MASK 0x00000020

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHYRX_ABORT_RECEIVED

			When set, PPDU reception was aborted by the PHY

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHYRX_ABORT_RECEIVED_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHYRX_ABORT_RECEIVED_LSB 6
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHYRX_ABORT_RECEIVED_MASK 0x00000040

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_RESERVED_0

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_RESERVED_0_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_RESERVED_0_LSB 7
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_RESERVED_0_MASK 0x0000ff80

/* Description		RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHY_PPDU_ID

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

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHY_PPDU_ID_OFFSET 0x00000000
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHY_PPDU_ID_LSB 16
#define RX_PPDU_END_USER_STATS_0_RXPCU_CLASSIFICATION_DETAILS_PHY_PPDU_ID_MASK 0xffff0000

/* Description		RX_PPDU_END_USER_STATS_1_STA_FULL_AID

			Consumer: FW

			Producer: RXPCU



			The full AID of this station.



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_1_STA_FULL_AID_OFFSET                 0x00000004
#define RX_PPDU_END_USER_STATS_1_STA_FULL_AID_LSB                    0
#define RX_PPDU_END_USER_STATS_1_STA_FULL_AID_MASK                   0x00001fff

/* Description		RX_PPDU_END_USER_STATS_1_MCS

			MCS of the received frame



			For details, refer to  MCS_TYPE description

			Note: This is rate in case of 11a/11b



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_1_MCS_OFFSET                          0x00000004
#define RX_PPDU_END_USER_STATS_1_MCS_LSB                             13
#define RX_PPDU_END_USER_STATS_1_MCS_MASK                            0x0001e000

/* Description		RX_PPDU_END_USER_STATS_1_NSS

			Number of spatial streams.



			NOTE: RXPCU derives this from the 'Mimo_ss_bitmap'



			<enum 0 1_spatial_stream>Single spatial stream

			<enum 1 2_spatial_streams>2 spatial streams

			<enum 2 3_spatial_streams>3 spatial streams

			<enum 3 4_spatial_streams>4 spatial streams

			<enum 4 5_spatial_streams>5 spatial streams

			<enum 5 6_spatial_streams>6 spatial streams

			<enum 6 7_spatial_streams>7 spatial streams

			<enum 7 8_spatial_streams>8 spatial streams
*/
#define RX_PPDU_END_USER_STATS_1_NSS_OFFSET                          0x00000004
#define RX_PPDU_END_USER_STATS_1_NSS_LSB                             17
#define RX_PPDU_END_USER_STATS_1_NSS_MASK                            0x000e0000

/* Description		RX_PPDU_END_USER_STATS_1_OFDMA_INFO_VALID

			When set, ofdma RU related info in the following fields
			is valid

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_1_OFDMA_INFO_VALID_OFFSET             0x00000004
#define RX_PPDU_END_USER_STATS_1_OFDMA_INFO_VALID_LSB                20
#define RX_PPDU_END_USER_STATS_1_OFDMA_INFO_VALID_MASK               0x00100000

/* Description		RX_PPDU_END_USER_STATS_1_DL_OFDMA_RU_START_INDEX

			Field only valid when Ofdma_info_valid is set



			RU index number to which User is assigned

			RU numbering is over the entire BW, starting from 0

			<legal 0-73>
*/
#define RX_PPDU_END_USER_STATS_1_DL_OFDMA_RU_START_INDEX_OFFSET      0x00000004
#define RX_PPDU_END_USER_STATS_1_DL_OFDMA_RU_START_INDEX_LSB         21
#define RX_PPDU_END_USER_STATS_1_DL_OFDMA_RU_START_INDEX_MASK        0x0fe00000

/* Description		RX_PPDU_END_USER_STATS_1_RESERVED_1A

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_1_RESERVED_1A_OFFSET                  0x00000004
#define RX_PPDU_END_USER_STATS_1_RESERVED_1A_LSB                     28
#define RX_PPDU_END_USER_STATS_1_RESERVED_1A_MASK                    0xf0000000

/* Description		RX_PPDU_END_USER_STATS_2_DL_OFDMA_RU_WIDTH

			The size of the RU for this user.

			In units of 1 (26 tone) RU

			<legal 1-74>
*/
#define RX_PPDU_END_USER_STATS_2_DL_OFDMA_RU_WIDTH_OFFSET            0x00000008
#define RX_PPDU_END_USER_STATS_2_DL_OFDMA_RU_WIDTH_LSB               0
#define RX_PPDU_END_USER_STATS_2_DL_OFDMA_RU_WIDTH_MASK              0x0000007f

/* Description		RX_PPDU_END_USER_STATS_2_RESERVED_2A

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_2_RESERVED_2A_OFFSET                  0x00000008
#define RX_PPDU_END_USER_STATS_2_RESERVED_2A_LSB                     7
#define RX_PPDU_END_USER_STATS_2_RESERVED_2A_MASK                    0x00000080

/* Description		RX_PPDU_END_USER_STATS_2_USER_RECEIVE_QUALITY

			DO NOT USE



			Field not populated by MAC HW

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_2_USER_RECEIVE_QUALITY_OFFSET         0x00000008
#define RX_PPDU_END_USER_STATS_2_USER_RECEIVE_QUALITY_LSB            8
#define RX_PPDU_END_USER_STATS_2_USER_RECEIVE_QUALITY_MASK           0x0000ff00

/* Description		RX_PPDU_END_USER_STATS_2_MPDU_CNT_FCS_ERR

			The number of MPDUs received from this STA in this PPDU
			with FCS errors

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_2_MPDU_CNT_FCS_ERR_OFFSET             0x00000008
#define RX_PPDU_END_USER_STATS_2_MPDU_CNT_FCS_ERR_LSB                16
#define RX_PPDU_END_USER_STATS_2_MPDU_CNT_FCS_ERR_MASK               0x03ff0000

/* Description		RX_PPDU_END_USER_STATS_2_WBM2RXDMA_BUF_SOURCE_USED

			Field filled in by RXDMA



			When set, RXDMA has used the wbm2rxdma_buf ring as
			source for at least one of the frames in this PPDU.
*/
#define RX_PPDU_END_USER_STATS_2_WBM2RXDMA_BUF_SOURCE_USED_OFFSET    0x00000008
#define RX_PPDU_END_USER_STATS_2_WBM2RXDMA_BUF_SOURCE_USED_LSB       26
#define RX_PPDU_END_USER_STATS_2_WBM2RXDMA_BUF_SOURCE_USED_MASK      0x04000000

/* Description		RX_PPDU_END_USER_STATS_2_FW2RXDMA_BUF_SOURCE_USED

			Field filled in by RXDMA



			When set, RXDMA has used the fw2rxdma_buf ring as source
			for at least one of the frames in this PPDU.
*/
#define RX_PPDU_END_USER_STATS_2_FW2RXDMA_BUF_SOURCE_USED_OFFSET     0x00000008
#define RX_PPDU_END_USER_STATS_2_FW2RXDMA_BUF_SOURCE_USED_LSB        27
#define RX_PPDU_END_USER_STATS_2_FW2RXDMA_BUF_SOURCE_USED_MASK       0x08000000

/* Description		RX_PPDU_END_USER_STATS_2_SW2RXDMA_BUF_SOURCE_USED

			Field filled in by RXDMA



			When set, RXDMA has used the sw2rxdma_buf ring as source
			for at least one of the frames in this PPDU.
*/
#define RX_PPDU_END_USER_STATS_2_SW2RXDMA_BUF_SOURCE_USED_OFFSET     0x00000008
#define RX_PPDU_END_USER_STATS_2_SW2RXDMA_BUF_SOURCE_USED_LSB        28
#define RX_PPDU_END_USER_STATS_2_SW2RXDMA_BUF_SOURCE_USED_MASK       0x10000000

/* Description		RX_PPDU_END_USER_STATS_2_RESERVED_2B

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_2_RESERVED_2B_OFFSET                  0x00000008
#define RX_PPDU_END_USER_STATS_2_RESERVED_2B_LSB                     29
#define RX_PPDU_END_USER_STATS_2_RESERVED_2B_MASK                    0xe0000000

/* Description		RX_PPDU_END_USER_STATS_3_MPDU_CNT_FCS_OK

			The number of MPDUs received from this STA in this PPDU
			with correct FCS

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_3_MPDU_CNT_FCS_OK_OFFSET              0x0000000c
#define RX_PPDU_END_USER_STATS_3_MPDU_CNT_FCS_OK_LSB                 0
#define RX_PPDU_END_USER_STATS_3_MPDU_CNT_FCS_OK_MASK                0x000001ff

/* Description		RX_PPDU_END_USER_STATS_3_FRAME_CONTROL_INFO_VALID

			When set, the frame_control_info field contains valid
			information

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_3_FRAME_CONTROL_INFO_VALID_OFFSET     0x0000000c
#define RX_PPDU_END_USER_STATS_3_FRAME_CONTROL_INFO_VALID_LSB        9
#define RX_PPDU_END_USER_STATS_3_FRAME_CONTROL_INFO_VALID_MASK       0x00000200

/* Description		RX_PPDU_END_USER_STATS_3_QOS_CONTROL_INFO_VALID

			When set, the QoS_control_info field contains valid
			information

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_3_QOS_CONTROL_INFO_VALID_OFFSET       0x0000000c
#define RX_PPDU_END_USER_STATS_3_QOS_CONTROL_INFO_VALID_LSB          10
#define RX_PPDU_END_USER_STATS_3_QOS_CONTROL_INFO_VALID_MASK         0x00000400

/* Description		RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_VALID

			When set, the HT_control_field contains valid
			information

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_VALID_OFFSET        0x0000000c
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_VALID_LSB           11
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_VALID_MASK          0x00000800

/* Description		RX_PPDU_END_USER_STATS_3_DATA_SEQUENCE_CONTROL_INFO_VALID

			When set, the First_data_seq_ctrl field contains valid
			information

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_3_DATA_SEQUENCE_CONTROL_INFO_VALID_OFFSET 0x0000000c
#define RX_PPDU_END_USER_STATS_3_DATA_SEQUENCE_CONTROL_INFO_VALID_LSB 12
#define RX_PPDU_END_USER_STATS_3_DATA_SEQUENCE_CONTROL_INFO_VALID_MASK 0x00001000

/* Description		RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_NULL_VALID

			When set, the HT_control_NULL_field contains valid
			information

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_NULL_VALID_OFFSET   0x0000000c
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_NULL_VALID_LSB      13
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_INFO_NULL_VALID_MASK     0x00002000

/* Description		RX_PPDU_END_USER_STATS_3_RESERVED_3A

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_3_RESERVED_3A_OFFSET                  0x0000000c
#define RX_PPDU_END_USER_STATS_3_RESERVED_3A_LSB                     14
#define RX_PPDU_END_USER_STATS_3_RESERVED_3A_MASK                    0x0000c000

/* Description		RX_PPDU_END_USER_STATS_3_RXDMA2REO_RING_USED

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA
*/
#define RX_PPDU_END_USER_STATS_3_RXDMA2REO_RING_USED_OFFSET          0x0000000c
#define RX_PPDU_END_USER_STATS_3_RXDMA2REO_RING_USED_LSB             16
#define RX_PPDU_END_USER_STATS_3_RXDMA2REO_RING_USED_MASK            0x00010000

/* Description		RX_PPDU_END_USER_STATS_3_RXDMA2FW_RING_USED

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA
*/
#define RX_PPDU_END_USER_STATS_3_RXDMA2FW_RING_USED_OFFSET           0x0000000c
#define RX_PPDU_END_USER_STATS_3_RXDMA2FW_RING_USED_LSB              17
#define RX_PPDU_END_USER_STATS_3_RXDMA2FW_RING_USED_MASK             0x00020000

/* Description		RX_PPDU_END_USER_STATS_3_RXDMA2SW_RING_USED

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA
*/
#define RX_PPDU_END_USER_STATS_3_RXDMA2SW_RING_USED_OFFSET           0x0000000c
#define RX_PPDU_END_USER_STATS_3_RXDMA2SW_RING_USED_LSB              18
#define RX_PPDU_END_USER_STATS_3_RXDMA2SW_RING_USED_MASK             0x00040000

/* Description		RX_PPDU_END_USER_STATS_3_RXDMA_RELEASE_RING_USED

			Field filled in by RXDMA



			Set when at least one frame during this PPDU got pushed
			to this ring by RXDMA
*/
#define RX_PPDU_END_USER_STATS_3_RXDMA_RELEASE_RING_USED_OFFSET      0x0000000c
#define RX_PPDU_END_USER_STATS_3_RXDMA_RELEASE_RING_USED_LSB         19
#define RX_PPDU_END_USER_STATS_3_RXDMA_RELEASE_RING_USED_MASK        0x00080000

/* Description		RX_PPDU_END_USER_STATS_3_HT_CONTROL_FIELD_PKT_TYPE

			Field only valid when HT_control_info_valid or
			HT_control_info_NULL_valid    is set.



			Indicates what the PHY receive type was for receiving
			this frame. Can help determine if the HT_CONTROL field shall
			be interpreted as HT/VHT or HE.



			NOTE: later on in the 11ax IEEE spec a bit within the HT
			control field was introduced that explicitly indicated how
			to interpret the HT control field.... As HT, VHT, or HE.



			<enum 0 dot11a>802.11a PPDU type

			<enum 1 dot11b>802.11b PPDU type

			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type

			<enum 3 dot11ac>802.11ac PPDU type

			<enum 4 dot11ax>802.11ax PPDU type

			<enum 5 dot11ba>802.11ba (WUR) PPDU type
*/
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_FIELD_PKT_TYPE_OFFSET    0x0000000c
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_FIELD_PKT_TYPE_LSB       20
#define RX_PPDU_END_USER_STATS_3_HT_CONTROL_FIELD_PKT_TYPE_MASK      0x00f00000

/* Description		RX_PPDU_END_USER_STATS_3_RESERVED_3B

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_3_RESERVED_3B_OFFSET                  0x0000000c
#define RX_PPDU_END_USER_STATS_3_RESERVED_3B_LSB                     24
#define RX_PPDU_END_USER_STATS_3_RESERVED_3B_MASK                    0xff000000

/* Description		RX_PPDU_END_USER_STATS_4_AST_INDEX

			This field indicates the index of the AST entry
			corresponding to this MPDU. It is provided by the GSE module
			instantiated in RXPCU.

			A value of 0xFFFF indicates an invalid AST index,
			meaning that No AST entry was found or NO AST search was
			performed

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_4_AST_INDEX_OFFSET                    0x00000010
#define RX_PPDU_END_USER_STATS_4_AST_INDEX_LSB                       0
#define RX_PPDU_END_USER_STATS_4_AST_INDEX_MASK                      0x0000ffff

/* Description		RX_PPDU_END_USER_STATS_4_FRAME_CONTROL_FIELD

			Field only valid when Frame_control_info_valid is set.



			Last successfully received Frame_control field of data
			frame (excluding Data NULL/ QoS Null) for this user

			Mainly used to track the PM state of the transmitted
			device



			NOTE: only data frame info is needed, as control and
			management frames are already routed to the FW.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_4_FRAME_CONTROL_FIELD_OFFSET          0x00000010
#define RX_PPDU_END_USER_STATS_4_FRAME_CONTROL_FIELD_LSB             16
#define RX_PPDU_END_USER_STATS_4_FRAME_CONTROL_FIELD_MASK            0xffff0000

/* Description		RX_PPDU_END_USER_STATS_5_FIRST_DATA_SEQ_CTRL

			Field only valid when Data_sequence_control_info_valid
			is set.



			Sequence control field of the first data frame
			(excluding Data NULL or QoS Data null) received for this
			user with correct FCS



			NOTE: only data frame info is needed, as control and
			management frames are already routed to the FW.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_5_FIRST_DATA_SEQ_CTRL_OFFSET          0x00000014
#define RX_PPDU_END_USER_STATS_5_FIRST_DATA_SEQ_CTRL_LSB             0
#define RX_PPDU_END_USER_STATS_5_FIRST_DATA_SEQ_CTRL_MASK            0x0000ffff

/* Description		RX_PPDU_END_USER_STATS_5_QOS_CONTROL_FIELD

			Field only valid when QoS_control_info_valid is set.



			Last successfully received QoS_control field of data
			frame (excluding Data NULL/ QoS Null) for this user



			Note that in case of multi TID, this field can only
			reflect the last properly received MPDU, and thus can not
			indicate all potentially different TIDs that had been
			received earlier.



			There are however per TID fields, that will contain
			among other things all buffer status info: See

			QoSCtrl_15_8_tid???

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_5_QOS_CONTROL_FIELD_OFFSET            0x00000014
#define RX_PPDU_END_USER_STATS_5_QOS_CONTROL_FIELD_LSB               16
#define RX_PPDU_END_USER_STATS_5_QOS_CONTROL_FIELD_MASK              0xffff0000

/* Description		RX_PPDU_END_USER_STATS_6_HT_CONTROL_FIELD

			Field only valid when HT_control_info_valid is set.



			Last successfully received
			HT_CONTROL/VHT_CONTROL/HE_CONTROL  field of data frames,
			excluding QoS Null frames for this user.



			NOTE: HT control fields  from QoS Null frames are
			captured in field HT_control_NULL_field

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_6_HT_CONTROL_FIELD_OFFSET             0x00000018
#define RX_PPDU_END_USER_STATS_6_HT_CONTROL_FIELD_LSB                0
#define RX_PPDU_END_USER_STATS_6_HT_CONTROL_FIELD_MASK               0xffffffff

/* Description		RX_PPDU_END_USER_STATS_7_FCS_OK_BITMAP_31_0

			Bitmap indicates in order of received MPDUs, which MPDUs
			had an passing FCS or had an error.

			1: FCS OK

			0: FCS error

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_7_FCS_OK_BITMAP_31_0_OFFSET           0x0000001c
#define RX_PPDU_END_USER_STATS_7_FCS_OK_BITMAP_31_0_LSB              0
#define RX_PPDU_END_USER_STATS_7_FCS_OK_BITMAP_31_0_MASK             0xffffffff

/* Description		RX_PPDU_END_USER_STATS_8_FCS_OK_BITMAP_63_32

			Bitmap indicates in order of received MPDUs, which MPDUs
			had an passing FCS or had an error.

			1: FCS OK

			0: FCS error



			NOTE: for users 0, 1, 2 and 3, additional bitmap info
			(up to 256 bitmap window) is provided in
			RX_PPDU_END_USER_STATS_EXT TLV

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_8_FCS_OK_BITMAP_63_32_OFFSET          0x00000020
#define RX_PPDU_END_USER_STATS_8_FCS_OK_BITMAP_63_32_LSB             0
#define RX_PPDU_END_USER_STATS_8_FCS_OK_BITMAP_63_32_MASK            0xffffffff

/* Description		RX_PPDU_END_USER_STATS_9_UDP_MSDU_COUNT

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain UDP frames.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_9_UDP_MSDU_COUNT_OFFSET               0x00000024
#define RX_PPDU_END_USER_STATS_9_UDP_MSDU_COUNT_LSB                  0
#define RX_PPDU_END_USER_STATS_9_UDP_MSDU_COUNT_MASK                 0x0000ffff

/* Description		RX_PPDU_END_USER_STATS_9_TCP_MSDU_COUNT

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain TCP frames.



			(Note: This does NOT include TCP-ACK)

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_9_TCP_MSDU_COUNT_OFFSET               0x00000024
#define RX_PPDU_END_USER_STATS_9_TCP_MSDU_COUNT_LSB                  16
#define RX_PPDU_END_USER_STATS_9_TCP_MSDU_COUNT_MASK                 0xffff0000

/* Description		RX_PPDU_END_USER_STATS_10_OTHER_MSDU_COUNT

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain neither UDP or TCP frames.



			Includes Management and control frames.



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_10_OTHER_MSDU_COUNT_OFFSET            0x00000028
#define RX_PPDU_END_USER_STATS_10_OTHER_MSDU_COUNT_LSB               0
#define RX_PPDU_END_USER_STATS_10_OTHER_MSDU_COUNT_MASK              0x0000ffff

/* Description		RX_PPDU_END_USER_STATS_10_TCP_ACK_MSDU_COUNT

			Field filled in by RX OLE

			Set to 0 by RXPCU



			The number of MSDUs that are part of MPDUs without FCS
			error, that contain TCP ack frames.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_10_TCP_ACK_MSDU_COUNT_OFFSET          0x00000028
#define RX_PPDU_END_USER_STATS_10_TCP_ACK_MSDU_COUNT_LSB             16
#define RX_PPDU_END_USER_STATS_10_TCP_ACK_MSDU_COUNT_MASK            0xffff0000

/* Description		RX_PPDU_END_USER_STATS_11_SW_RESPONSE_REFERENCE_PTR

			Pointer that SW uses to refer back to an expected
			response reception. Used for Rate adaptation purposes.

			When a reception occurs that is not tied to an expected
			response, this field is set to 0x0.



			Note: further on in this TLV there is also the field:
			Sw_response_reference_ptr_ext.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_11_SW_RESPONSE_REFERENCE_PTR_OFFSET   0x0000002c
#define RX_PPDU_END_USER_STATS_11_SW_RESPONSE_REFERENCE_PTR_LSB      0
#define RX_PPDU_END_USER_STATS_11_SW_RESPONSE_REFERENCE_PTR_MASK     0xffffffff

/* Description		RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_BITMAP

			Whenever a frame is received that contains a QoS control
			field (that includes QoS Data and/or QoS Null), the bit in
			this field that corresponds to the received TID shall be
			set.

			...Bitmap[0] = TID0

			...Bitmap[1] = TID1

			Etc.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_BITMAP_OFFSET 0x00000030
#define RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_BITMAP_LSB   0
#define RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_BITMAP_MASK  0x0000ffff

/* Description		RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_EOSP_BITMAP

			Field initialized to 0

			For every QoS Data frame that is correctly received, the
			EOSP bit of that frame is copied over into the corresponding
			TID related field.

			Note that this implies that the bits here represent the
			EOSP bit status for each TID of the last MPDU received for
			that TID.



			received TID shall be set.

			...eosp_bitmap[0] = eosp of TID0

			...eosp_bitmap[1] = eosp of TID1

			Etc.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_EOSP_BITMAP_OFFSET 0x00000030
#define RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_EOSP_BITMAP_LSB 16
#define RX_PPDU_END_USER_STATS_12_RECEIVED_QOS_DATA_TID_EOSP_BITMAP_MASK 0xffff0000

/* Description		RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID0

			Field only valid when Received_qos_data_tid_bitmap[0] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 0
*/
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID0_OFFSET           0x00000034
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID0_LSB              0
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID0_MASK             0x000000ff

/* Description		RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID1

			Field only valid when Received_qos_data_tid_bitmap[1] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 1
*/
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID1_OFFSET           0x00000034
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID1_LSB              8
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID1_MASK             0x0000ff00

/* Description		RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID2

			Field only valid when Received_qos_data_tid_bitmap[2] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 2
*/
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID2_OFFSET           0x00000034
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID2_LSB              16
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID2_MASK             0x00ff0000

/* Description		RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID3

			Field only valid when Received_qos_data_tid_bitmap[3] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 3
*/
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID3_OFFSET           0x00000034
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID3_LSB              24
#define RX_PPDU_END_USER_STATS_13_QOSCTRL_15_8_TID3_MASK             0xff000000

/* Description		RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID4

			Field only valid when Received_qos_data_tid_bitmap[4] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 4
*/
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID4_OFFSET           0x00000038
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID4_LSB              0
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID4_MASK             0x000000ff

/* Description		RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID5

			Field only valid when Received_qos_data_tid_bitmap[5] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 5
*/
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID5_OFFSET           0x00000038
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID5_LSB              8
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID5_MASK             0x0000ff00

/* Description		RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID6

			Field only valid when Received_qos_data_tid_bitmap[6] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 6
*/
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID6_OFFSET           0x00000038
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID6_LSB              16
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID6_MASK             0x00ff0000

/* Description		RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID7

			Field only valid when Received_qos_data_tid_bitmap[7] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 7
*/
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID7_OFFSET           0x00000038
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID7_LSB              24
#define RX_PPDU_END_USER_STATS_14_QOSCTRL_15_8_TID7_MASK             0xff000000

/* Description		RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID8

			Field only valid when Received_qos_data_tid_bitmap[8] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 8
*/
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID8_OFFSET           0x0000003c
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID8_LSB              0
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID8_MASK             0x000000ff

/* Description		RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID9

			Field only valid when Received_qos_data_tid_bitmap[9] is
			set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 9
*/
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID9_OFFSET           0x0000003c
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID9_LSB              8
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID9_MASK             0x0000ff00

/* Description		RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID10

			Field only valid when Received_qos_data_tid_bitmap[10]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 10
*/
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID10_OFFSET          0x0000003c
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID10_LSB             16
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID10_MASK            0x00ff0000

/* Description		RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID11

			Field only valid when Received_qos_data_tid_bitmap[11]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 11
*/
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID11_OFFSET          0x0000003c
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID11_LSB             24
#define RX_PPDU_END_USER_STATS_15_QOSCTRL_15_8_TID11_MASK            0xff000000

/* Description		RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID12

			Field only valid when Received_qos_data_tid_bitmap[12]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 12
*/
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID12_OFFSET          0x00000040
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID12_LSB             0
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID12_MASK            0x000000ff

/* Description		RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID13

			Field only valid when Received_qos_data_tid_bitmap[13]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 13
*/
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID13_OFFSET          0x00000040
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID13_LSB             8
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID13_MASK            0x0000ff00

/* Description		RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID14

			Field only valid when Received_qos_data_tid_bitmap[14]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 14
*/
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID14_OFFSET          0x00000040
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID14_LSB             16
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID14_MASK            0x00ff0000

/* Description		RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID15

			Field only valid when Received_qos_data_tid_bitmap[15]
			is set



			QoS control field bits 15-8 of the last properly
			received MPDU with a QoS control field embedded, with  TID
			== 15
*/
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID15_OFFSET          0x00000040
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID15_LSB             24
#define RX_PPDU_END_USER_STATS_16_QOSCTRL_15_8_TID15_MASK            0xff000000

/* Description		RX_PPDU_END_USER_STATS_17_MPDU_OK_BYTE_COUNT

			The number of bytes received within an MPDU for this
			user with correct FCS. This includes the FCS field



			NOTE:

			The sum of the four fields.....

			Mpdu_ok_byte_count +

			mpdu_err_byte_count +


			.....is the total number of bytes that were received for
			this user from the PHY.



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_17_MPDU_OK_BYTE_COUNT_OFFSET          0x00000044
#define RX_PPDU_END_USER_STATS_17_MPDU_OK_BYTE_COUNT_LSB             0
#define RX_PPDU_END_USER_STATS_17_MPDU_OK_BYTE_COUNT_MASK            0x01ffffff

/* Description		RX_PPDU_END_USER_STATS_17_AMPDU_DELIM_OK_COUNT_6_0

			Number of AMPDU delimiter received with correct
			structure

			LSB 7 bits from this counter



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_17_AMPDU_DELIM_OK_COUNT_6_0_OFFSET    0x00000044
#define RX_PPDU_END_USER_STATS_17_AMPDU_DELIM_OK_COUNT_6_0_LSB       25
#define RX_PPDU_END_USER_STATS_17_AMPDU_DELIM_OK_COUNT_6_0_MASK      0xfe000000

/* Description		RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_ERR_COUNT

			The number of MPDU delimiter errors counted for this
			user.



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_ERR_COUNT_OFFSET       0x00000048
#define RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_ERR_COUNT_LSB          0
#define RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_ERR_COUNT_MASK         0x01ffffff

/* Description		RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_OK_COUNT_13_7

			Number of AMPDU delimiters received with correct
			structure

			Bits 13-7 from this counter



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_OK_COUNT_13_7_OFFSET   0x00000048
#define RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_OK_COUNT_13_7_LSB      25
#define RX_PPDU_END_USER_STATS_18_AMPDU_DELIM_OK_COUNT_13_7_MASK     0xfe000000

/* Description		RX_PPDU_END_USER_STATS_19_MPDU_ERR_BYTE_COUNT

			The number of bytes belonging to MPDUs with an FCS
			error. This includes the FCS field.



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_19_MPDU_ERR_BYTE_COUNT_OFFSET         0x0000004c
#define RX_PPDU_END_USER_STATS_19_MPDU_ERR_BYTE_COUNT_LSB            0
#define RX_PPDU_END_USER_STATS_19_MPDU_ERR_BYTE_COUNT_MASK           0x01ffffff

/* Description		RX_PPDU_END_USER_STATS_19_AMPDU_DELIM_OK_COUNT_20_14

			Number of AMPDU delimiters received with correct
			structure

			Bits 20-14 from this counter



			Note that this is a delimiter count and not byte count.
			To get to the number of bytes occupied by these delimiters,
			multiply this number by 4



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_19_AMPDU_DELIM_OK_COUNT_20_14_OFFSET  0x0000004c
#define RX_PPDU_END_USER_STATS_19_AMPDU_DELIM_OK_COUNT_20_14_LSB     25
#define RX_PPDU_END_USER_STATS_19_AMPDU_DELIM_OK_COUNT_20_14_MASK    0xfe000000

/* Description		RX_PPDU_END_USER_STATS_20_NON_CONSECUTIVE_DELIMITER_ERR

			The number of times an MPDU delimiter error is detected
			that is not immediately preceded by another MPDU delimiter
			also with FCS error.



			The counter saturates at 0xFFFF



			<legal all>
*/
#define RX_PPDU_END_USER_STATS_20_NON_CONSECUTIVE_DELIMITER_ERR_OFFSET 0x00000050
#define RX_PPDU_END_USER_STATS_20_NON_CONSECUTIVE_DELIMITER_ERR_LSB  0
#define RX_PPDU_END_USER_STATS_20_NON_CONSECUTIVE_DELIMITER_ERR_MASK 0x0000ffff

/* Description		RX_PPDU_END_USER_STATS_20_RESERVED_20A

			<legal 0>
*/
#define RX_PPDU_END_USER_STATS_20_RESERVED_20A_OFFSET                0x00000050
#define RX_PPDU_END_USER_STATS_20_RESERVED_20A_LSB                   16
#define RX_PPDU_END_USER_STATS_20_RESERVED_20A_MASK                  0xffff0000

/* Description		RX_PPDU_END_USER_STATS_21_HT_CONTROL_NULL_FIELD




			Last successfully received
			HT_CONTROL/VHT_CONTROL/HE_CONTROL  field from QoS Null frame
			for this user.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_21_HT_CONTROL_NULL_FIELD_OFFSET       0x00000054
#define RX_PPDU_END_USER_STATS_21_HT_CONTROL_NULL_FIELD_LSB          0
#define RX_PPDU_END_USER_STATS_21_HT_CONTROL_NULL_FIELD_MASK         0xffffffff

/* Description		RX_PPDU_END_USER_STATS_22_SW_RESPONSE_REFERENCE_PTR_EXT

			Extended Pointer info that SW uses to refer back to an
			expected response transmission. Used for Rate adaptation
			purposes.

			When a reception occurs that is not tied to an expected
			response, this field is set to 0x0.



			Note: earlier on in this TLV there is also the field:
			Sw_response_reference_ptr.

			<legal all>
*/
#define RX_PPDU_END_USER_STATS_22_SW_RESPONSE_REFERENCE_PTR_EXT_OFFSET 0x00000058
#define RX_PPDU_END_USER_STATS_22_SW_RESPONSE_REFERENCE_PTR_EXT_LSB  0
#define RX_PPDU_END_USER_STATS_22_SW_RESPONSE_REFERENCE_PTR_EXT_MASK 0xffffffff


#endif // _RX_PPDU_END_USER_STATS_H_
