/*
 * Copyright (c) 2016-2018 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.
 */

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


// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	tx_rate_stats_info_valid[0], transmit_bw[2:1], transmit_pkt_type[6:3], transmit_stbc[7], transmit_ldpc[8], transmit_sgi[10:9], transmit_mcs[14:11], ofdma_transmission[15], tones_in_ru[27:16], reserved_0a[31:28]
//	1	tsf_directly_after_ppdu_transmission[31:0]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_TX_RATE_STATS_INFO 2

struct tx_rate_stats_info {
             uint32_t tx_rate_stats_info_valid        :  1, //[0]
                      transmit_bw                     :  2, //[2:1]
                      transmit_pkt_type               :  4, //[6:3]
                      transmit_stbc                   :  1, //[7]
                      transmit_ldpc                   :  1, //[8]
                      transmit_sgi                    :  2, //[10:9]
                      transmit_mcs                    :  4, //[14:11]
                      ofdma_transmission              :  1, //[15]
                      tones_in_ru                     : 12, //[27:16]
                      reserved_0a                     :  4; //[31:28]
             uint32_t tsf_directly_after_ppdu_transmission: 32; //[31:0]
};

/*

tx_rate_stats_info_valid
			
			When set all other fields in this STRUCT contain valid
			info.
			
			
			
			
			<legal all>

transmit_bw
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Indicates the BW of the upcoming transmission that shall
			likely start in about 3 -4 us on the medium
			
			
			
			<enum 0 transmit_bw_20_MHz>
			
			<enum 1 transmit_bw_40_MHz>
			
			<enum 2 transmit_bw_80_MHz>
			
			<enum 3 transmit_bw_160_MHz>
			
			
			
			<legal all>

transmit_pkt_type
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			The packet type
			
			<enum 0 dot11a>802.11a PPDU type
			
			<enum 1 dot11b>802.11b PPDU type
			
			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
			
			<enum 3 dot11ac>802.11ac PPDU type
			
			<enum 4 dot11ax>802.11ax PPDU type

transmit_stbc
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			When set, STBC transmission rate was used.

transmit_ldpc
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			When set, use LDPC transmission rates

transmit_sgi
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			<enum 0     0_8_us_sgi > Legacy normal GI. Can also be
			used for HE
			
			<enum 1     0_4_us_sgi > Legacy short GI. Can also be
			used for HE
			
			<enum 2     1_6_us_sgi > HE related GI
			
			<enum 3     3_2_us_sgi > HE related GI
			
			<legal 0 - 3>

transmit_mcs
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			For details, refer to  MCS_TYPE description
			
			<legal all>

ofdma_transmission
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			
			
			Set when the transmission was an OFDMA transmission (DL
			or UL).
			
			<legal all>

tones_in_ru
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			The number of tones in the RU used.
			
			<legal all>

reserved_0a
			
			<legal 0>

tsf_directly_after_ppdu_transmission
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Lower 32 bits of the TSF, snapshot of this value when
			transmission of the PPDU containing the frame finished.
			
			<legal all>
*/


/* Description		TX_RATE_STATS_INFO_0_TX_RATE_STATS_INFO_VALID
			
			When set all other fields in this STRUCT contain valid
			info.
			
			
			
			
			<legal all>
*/
#define TX_RATE_STATS_INFO_0_TX_RATE_STATS_INFO_VALID_OFFSET         0x00000000
#define TX_RATE_STATS_INFO_0_TX_RATE_STATS_INFO_VALID_LSB            0
#define TX_RATE_STATS_INFO_0_TX_RATE_STATS_INFO_VALID_MASK           0x00000001

/* Description		TX_RATE_STATS_INFO_0_TRANSMIT_BW
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Indicates the BW of the upcoming transmission that shall
			likely start in about 3 -4 us on the medium
			
			
			
			<enum 0 transmit_bw_20_MHz>
			
			<enum 1 transmit_bw_40_MHz>
			
			<enum 2 transmit_bw_80_MHz>
			
			<enum 3 transmit_bw_160_MHz>
			
			
			
			<legal all>
*/
#define TX_RATE_STATS_INFO_0_TRANSMIT_BW_OFFSET                      0x00000000
#define TX_RATE_STATS_INFO_0_TRANSMIT_BW_LSB                         1
#define TX_RATE_STATS_INFO_0_TRANSMIT_BW_MASK                        0x00000006

/* Description		TX_RATE_STATS_INFO_0_TRANSMIT_PKT_TYPE
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			The packet type
			
			<enum 0 dot11a>802.11a PPDU type
			
			<enum 1 dot11b>802.11b PPDU type
			
			<enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
			
			<enum 3 dot11ac>802.11ac PPDU type
			
			<enum 4 dot11ax>802.11ax PPDU type
*/
#define TX_RATE_STATS_INFO_0_TRANSMIT_PKT_TYPE_OFFSET                0x00000000
#define TX_RATE_STATS_INFO_0_TRANSMIT_PKT_TYPE_LSB                   3
#define TX_RATE_STATS_INFO_0_TRANSMIT_PKT_TYPE_MASK                  0x00000078

/* Description		TX_RATE_STATS_INFO_0_TRANSMIT_STBC
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			When set, STBC transmission rate was used.
*/
#define TX_RATE_STATS_INFO_0_TRANSMIT_STBC_OFFSET                    0x00000000
#define TX_RATE_STATS_INFO_0_TRANSMIT_STBC_LSB                       7
#define TX_RATE_STATS_INFO_0_TRANSMIT_STBC_MASK                      0x00000080

/* Description		TX_RATE_STATS_INFO_0_TRANSMIT_LDPC
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			When set, use LDPC transmission rates
*/
#define TX_RATE_STATS_INFO_0_TRANSMIT_LDPC_OFFSET                    0x00000000
#define TX_RATE_STATS_INFO_0_TRANSMIT_LDPC_LSB                       8
#define TX_RATE_STATS_INFO_0_TRANSMIT_LDPC_MASK                      0x00000100

/* Description		TX_RATE_STATS_INFO_0_TRANSMIT_SGI
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			<enum 0     0_8_us_sgi > Legacy normal GI. Can also be
			used for HE
			
			<enum 1     0_4_us_sgi > Legacy short GI. Can also be
			used for HE
			
			<enum 2     1_6_us_sgi > HE related GI
			
			<enum 3     3_2_us_sgi > HE related GI
			
			<legal 0 - 3>
*/
#define TX_RATE_STATS_INFO_0_TRANSMIT_SGI_OFFSET                     0x00000000
#define TX_RATE_STATS_INFO_0_TRANSMIT_SGI_LSB                        9
#define TX_RATE_STATS_INFO_0_TRANSMIT_SGI_MASK                       0x00000600

/* Description		TX_RATE_STATS_INFO_0_TRANSMIT_MCS
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			For details, refer to  MCS_TYPE description
			
			<legal all>
*/
#define TX_RATE_STATS_INFO_0_TRANSMIT_MCS_OFFSET                     0x00000000
#define TX_RATE_STATS_INFO_0_TRANSMIT_MCS_LSB                        11
#define TX_RATE_STATS_INFO_0_TRANSMIT_MCS_MASK                       0x00007800

/* Description		TX_RATE_STATS_INFO_0_OFDMA_TRANSMISSION
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			
			
			Set when the transmission was an OFDMA transmission (DL
			or UL).
			
			<legal all>
*/
#define TX_RATE_STATS_INFO_0_OFDMA_TRANSMISSION_OFFSET               0x00000000
#define TX_RATE_STATS_INFO_0_OFDMA_TRANSMISSION_LSB                  15
#define TX_RATE_STATS_INFO_0_OFDMA_TRANSMISSION_MASK                 0x00008000

/* Description		TX_RATE_STATS_INFO_0_TONES_IN_RU
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Field filled in by PDG.
			
			Not valid when in SW transmit mode
			
			
			
			The number of tones in the RU used.
			
			<legal all>
*/
#define TX_RATE_STATS_INFO_0_TONES_IN_RU_OFFSET                      0x00000000
#define TX_RATE_STATS_INFO_0_TONES_IN_RU_LSB                         16
#define TX_RATE_STATS_INFO_0_TONES_IN_RU_MASK                        0x0fff0000

/* Description		TX_RATE_STATS_INFO_0_RESERVED_0A
			
			<legal 0>
*/
#define TX_RATE_STATS_INFO_0_RESERVED_0A_OFFSET                      0x00000000
#define TX_RATE_STATS_INFO_0_RESERVED_0A_LSB                         28
#define TX_RATE_STATS_INFO_0_RESERVED_0A_MASK                        0xf0000000

/* Description		TX_RATE_STATS_INFO_1_TSF_DIRECTLY_AFTER_PPDU_TRANSMISSION
			
			Field only valid when Tx_rate_stats_info_valid is set
			
			
			
			Lower 32 bits of the TSF, snapshot of this value when
			transmission of the PPDU containing the frame finished.
			
			<legal all>
*/
#define TX_RATE_STATS_INFO_1_TSF_DIRECTLY_AFTER_PPDU_TRANSMISSION_OFFSET 0x00000004
#define TX_RATE_STATS_INFO_1_TSF_DIRECTLY_AFTER_PPDU_TRANSMISSION_LSB 0
#define TX_RATE_STATS_INFO_1_TSF_DIRECTLY_AFTER_PPDU_TRANSMISSION_MASK 0xffffffff


#endif // _TX_RATE_STATS_INFO_H_