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


// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	rtt_fac_legacy[15:0], rtt_fac_legacy_ext80[31:16]
//	1	rtt_fac_vht[15:0], rtt_fac_vht_ext80[31:16]
//	2	rtt_fac_legacy_status[0], rtt_fac_legacy_ext80_status[1], rtt_fac_vht_status[2], rtt_fac_vht_ext80_status[3], rtt_fac_sifs[15:4], rtt_fac_sifs_status[17:16], rtt_cfr_status[18], rtt_cir_status[19], rtt_channel_dump_size[30:20], rtt_hw_ifft_mode[31]
//	3	rtt_btcf_status[0], rtt_preamble_type[5:1], rtt_pkt_bw_leg[7:6], rtt_pkt_bw_vht[9:8], rtt_gi_type[11:10], rtt_mcs_rate[16:12], rtt_strongest_chain[19:17], rtt_strongest_chain_ext80[22:20], rtt_rx_chain_mask[30:23], reserved_3[31]
//	4	rx_start_ts[31:0]
//	5	rx_end_ts[31:0]
//	6	sfo_phase_pkt_start[11:0], sfo_phase_pkt_end[23:12], rtt_che_buffer_pointer_high8[31:24]
//	7	rtt_che_buffer_pointer_low32[31:0]
//	8	rtt_cfo_measurement[13:0], rtt_chan_spread[21:14], rtt_timing_backoff_sel[23:22], reserved_8[30:24], rx_location_info_valid[31]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RX_LOCATION_INFO 9

struct rx_location_info {
             uint32_t rtt_fac_legacy                  : 16, //[15:0]
                      rtt_fac_legacy_ext80            : 16; //[31:16]
             uint32_t rtt_fac_vht                     : 16, //[15:0]
                      rtt_fac_vht_ext80               : 16; //[31:16]
             uint32_t rtt_fac_legacy_status           :  1, //[0]
                      rtt_fac_legacy_ext80_status     :  1, //[1]
                      rtt_fac_vht_status              :  1, //[2]
                      rtt_fac_vht_ext80_status        :  1, //[3]
                      rtt_fac_sifs                    : 12, //[15:4]
                      rtt_fac_sifs_status             :  2, //[17:16]
                      rtt_cfr_status                  :  1, //[18]
                      rtt_cir_status                  :  1, //[19]
                      rtt_channel_dump_size           : 11, //[30:20]
                      rtt_hw_ifft_mode                :  1; //[31]
             uint32_t rtt_btcf_status                 :  1, //[0]
                      rtt_preamble_type               :  5, //[5:1]
                      rtt_pkt_bw_leg                  :  2, //[7:6]
                      rtt_pkt_bw_vht                  :  2, //[9:8]
                      rtt_gi_type                     :  2, //[11:10]
                      rtt_mcs_rate                    :  5, //[16:12]
                      rtt_strongest_chain             :  3, //[19:17]
                      rtt_strongest_chain_ext80       :  3, //[22:20]
                      rtt_rx_chain_mask               :  8, //[30:23]
                      reserved_3                      :  1; //[31]
             uint32_t rx_start_ts                     : 32; //[31:0]
             uint32_t rx_end_ts                       : 32; //[31:0]
             uint32_t sfo_phase_pkt_start             : 12, //[11:0]
                      sfo_phase_pkt_end               : 12, //[23:12]
                      rtt_che_buffer_pointer_high8    :  8; //[31:24]
             uint32_t rtt_che_buffer_pointer_low32    : 32; //[31:0]
             uint32_t rtt_cfo_measurement             : 14, //[13:0]
                      rtt_chan_spread                 :  8, //[21:14]
                      rtt_timing_backoff_sel          :  2, //[23:22]
                      reserved_8                      :  7, //[30:24]
                      rx_location_info_valid          :  1; //[31]
};

/*

rtt_fac_legacy

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from L-LTF on the first selected
			Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from L-LTF on pri80 on the
			selected pri80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover pri80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>

rtt_fac_legacy_ext80

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from L-LTF on the second selected
			Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from L-LTF on ext80 on the
			selected ext80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover ext80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>

rtt_fac_vht

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on the first
			selected Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on pri80 on the
			selected pri80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover pri80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>

rtt_fac_vht_ext80

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on the second
			selected Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on ext80 on the
			selected ext80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover ext80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>

rtt_fac_legacy_status

			Status of rtt_fac_legacy



			<enum 0 location_fac_legacy_status_not_valid>

			<enum 1 location_fac_legacy_status_valid>

			<legal all>

rtt_fac_legacy_ext80_status

			Status of rtt_fac_legacy_ext80



			<enum 0 location_fac_legacy_ext80_status_not_valid>

			<enum 1 location_fac_legacy_ext80_status_valid>

			<legal all>

rtt_fac_vht_status

			Status of rtt_fac_vht



			<enum 0 location_fac_vht_status_not_valid>

			<enum 1 location_fac_vht_status_valid>

			<legal all>

rtt_fac_vht_ext80_status

			Status of rtt_fac_vht_ext80



			<enum 0 location_fac_vht_ext80_status_not_valid>

			<enum 1 location_fac_vht_ext80_status_valid>

			<legal all>

rtt_fac_sifs

			To support fine SIFS adjustment, need to provide FAC
			value @ integer number of 320 MHz clock cycles to MAC.  It
			is from L-LTF if it is a Legacy packet and from (V)HT/HE-LTF
			if it is a (V)HT/HE packet



			12 bits, signed, no fractional part

			<legal all>

rtt_fac_sifs_status

			Status of rtt_fac_sifs

			0: not valid

			1: valid and from L-LTF

			2: valid and from (V)HT/HE-LTF

			3: reserved

			<legal 0-2>

rtt_cfr_status

			Status of channel frequency response dump



			<enum 0 location_CFR_dump_not_valid>

			<enum 1 location_CFR_dump_valid>

			<legal all>

rtt_cir_status

			Status of channel impulse response dump



			<enum 0 location_CIR_dump_not_valid>

			<enum 1 location_CIR_dump_valid>

			<legal all>

rtt_channel_dump_size

			Channel dump size.  It shows how many tones in CFR in
			one chain, for example, it will show 52 for Legacy20 and 484
			for VHT160



			<legal all>

rtt_hw_ifft_mode

			Indicator showing if HW IFFT mode or SW IFFT mode



			<enum 0 location_sw_ifft_mode>

			<enum 1 location_hw_ifft_mode>

			<legal all>

rtt_btcf_status

			Indicate if BTCF is used to capture the timestamps



			<enum 0 location_not_BTCF_based_ts>

			<enum 1 location_BTCF_based_ts>

			<legal all>

rtt_preamble_type

			Indicate preamble type



			<enum 0 location_preamble_type_legacy>

			<enum 1 location_preamble_type_ht>

			<enum 2 location_preamble_type_vht>

			<enum 3 location_preamble_type_he_su_4xltf>

			<enum 4 location_preamble_type_he_su_2xltf>

			<enum 5 location_preamble_type_he_su_1xltf>

			<enum 6
			location_preamble_type_he_trigger_based_ul_4xltf>

			<enum 7
			location_preamble_type_he_trigger_based_ul_2xltf>

			<enum 8
			location_preamble_type_he_trigger_based_ul_1xltf>

			<enum 9 location_preamble_type_he_mu_4xltf>

			<enum 10 location_preamble_type_he_mu_2xltf>

			<enum 11 location_preamble_type_he_mu_1xltf>

			<enum 12
			location_preamble_type_he_extended_range_su_4xltf>

			<enum 13
			location_preamble_type_he_extended_range_su_2xltf>

			<enum 14
			location_preamble_type_he_extended_range_su_1xltf>

			<legal 0-14>

rtt_pkt_bw_leg

			Indicate the bandwidth of L-LTF



			<enum 0 location_pkt_bw_20MHz>

			<enum 1 location_pkt_bw_40MHz>

			<enum 2 location_pkt_bw_80MHz>

			<enum 3 location_pkt_bw_160MHz>

			<legal all>

rtt_pkt_bw_vht

			Indicate the bandwidth of (V)HT/HE-LTF



			<enum 0 location_pkt_bw_20MHz>

			<enum 1 location_pkt_bw_40MHz>

			<enum 2 location_pkt_bw_80MHz>

			<enum 3 location_pkt_bw_160MHz>

			<legal all>

rtt_gi_type

			Indicate GI (guard interval) type



			<enum 0     gi_0_8_us > HE related GI. Can also be used
			for HE

			<enum 1     gi_0_4_us > HE related GI. Can also be used
			for HE

			<enum 2     gi_1_6_us > HE related GI

			<enum 3     gi_3_2_us > HE related GI

			<legal 0 - 3>

rtt_mcs_rate

			Bits 0~4 indicate MCS rate, if Legacy,

			0: 48 Mbps,

			1: 24 Mbps,

			2: 12 Mbps,

			3: 6 Mbps,

			4: 54 Mbps,

			5: 36 Mbps,

			6: 18 Mbps,

			7: 9 Mbps,



			if HT, 0-7: MCS0-MCS7,

			if VHT, 0-9: MCS0-MCS9,


			<legal all>

rtt_strongest_chain

			For 20/40/80, this field shows the first selected Rx
			chain that is used in HW IFFT mode



			For 80+80, this field shows the selected pri80 Rx chain
			that is used in HW IFFT mode



			<enum 0 location_strongest_chain_is_0>

			<enum 1 location_strongest_chain_is_1>

			<enum 2 location_strongest_chain_is_2>

			<enum 3 location_strongest_chain_is_3>

			<enum 4 location_strongest_chain_is_4>

			<enum 5 location_strongest_chain_is_5>

			<enum 6 location_strongest_chain_is_6>

			<enum 7 location_strongest_chain_is_7>

			<legal all>

rtt_strongest_chain_ext80

			For 20/40/80, this field shows the second selected Rx
			chain that is used in HW IFFT mode



			For 80+80, this field shows the selected ext80 Rx chain
			that is used in HW IFFT mode



			<enum 0 location_strongest_chain_is_0>

			<enum 1 location_strongest_chain_is_1>

			<enum 2 location_strongest_chain_is_2>

			<enum 3 location_strongest_chain_is_3>

			<enum 4 location_strongest_chain_is_4>

			<enum 5 location_strongest_chain_is_5>

			<enum 6 location_strongest_chain_is_6>

			<enum 7 location_strongest_chain_is_7>

			<legal all>

rtt_rx_chain_mask

			Rx chain mask, each bit is a Rx chain

			0: the Rx chain is not used

			1: the Rx chain is used

			Support up to 8 Rx chains

			<legal all>

reserved_3

			<legal 0>

rx_start_ts

			RX packet start timestamp



			It reports the time the first L-STF ADC sample arrived
			at RX antenna



			clock unit is 480MHz

			<legal all>

rx_end_ts

			RX packet end timestamp



			It reports the time the last symbol's last ADC sample
			arrived at RX antenna



			clock unit is 480MHz

			<legal all>

sfo_phase_pkt_start

			The phase of the SFO of the first symbol's first FFT
			input sample



			12 bits, signed 6.6. 6 bits integer to cover -66.7ns to
			66.7ns, and 6 bits fraction to provide a resolution of
			0.03ns



			clock unit is 480MHz

			<legal all>

sfo_phase_pkt_end

			The phase of the SFO of the last symbol's last FFT input
			sample



			12 bits, signed 6.6. 6 bits integer to cover -66.7ns to
			66.7ns, and 6 bits fraction to provide a resolution of
			0.03ns



			clock unit is 480MHz

			<legal all>

rtt_che_buffer_pointer_high8

			The high 8 bits of the 40 bits pointer pointed to the
			external RTT channel information buffer



			8 bits

			<legal all>

rtt_che_buffer_pointer_low32

			The low 32 bits of the 40 bits pointer pointed to the
			external RTT channel information buffer



			32 bits

			<legal all>

rtt_cfo_measurement

			CFO measurement. Needed for passive locationing



			14 bits, signed 1.13. 13 bits fraction to provide a
			resolution of 153 Hz



			In units of cycles/800 ns

			<legal all>

rtt_chan_spread

			Channel delay spread measurement. Needed for selecting
			GI length



			8 bits, unsigned. At 25 ns step. Can represent up to
			6375 ns



			In units of cycles @ 40 MHz

			<legal all>

rtt_timing_backoff_sel

			Indicate which timing backoff value is used



			<enum 0 timing_backoff_low_rssi>

			<enum 1 timing_backoff_mid_rssi>

			<enum 2 timing_backoff_high_rssi>

			<enum 3 reserved>

			<legal all>

reserved_8

			<legal 0>

rx_location_info_valid

			<enum 0 rx_location_info_is_not_valid>

			<enum 1 rx_location_info_is_valid>

			<legal all>
*/


/* Description		RX_LOCATION_INFO_0_RTT_FAC_LEGACY

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from L-LTF on the first selected
			Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from L-LTF on pri80 on the
			selected pri80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover pri80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>
*/
#define RX_LOCATION_INFO_0_RTT_FAC_LEGACY_OFFSET                     0x00000000
#define RX_LOCATION_INFO_0_RTT_FAC_LEGACY_LSB                        0
#define RX_LOCATION_INFO_0_RTT_FAC_LEGACY_MASK                       0x0000ffff

/* Description		RX_LOCATION_INFO_0_RTT_FAC_LEGACY_EXT80

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from L-LTF on the second selected
			Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from L-LTF on ext80 on the
			selected ext80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover ext80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>
*/
#define RX_LOCATION_INFO_0_RTT_FAC_LEGACY_EXT80_OFFSET               0x00000000
#define RX_LOCATION_INFO_0_RTT_FAC_LEGACY_EXT80_LSB                  16
#define RX_LOCATION_INFO_0_RTT_FAC_LEGACY_EXT80_MASK                 0xffff0000

/* Description		RX_LOCATION_INFO_1_RTT_FAC_VHT

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on the first
			selected Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on pri80 on the
			selected pri80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover pri80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>
*/
#define RX_LOCATION_INFO_1_RTT_FAC_VHT_OFFSET                        0x00000004
#define RX_LOCATION_INFO_1_RTT_FAC_VHT_LSB                           0
#define RX_LOCATION_INFO_1_RTT_FAC_VHT_MASK                          0x0000ffff

/* Description		RX_LOCATION_INFO_1_RTT_FAC_VHT_EXT80

			For 20/40/80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on the second
			selected Rx chain



			For 80+80, this field shows the RTT first arrival
			correction value computed from (V)HT/HE-LTF on ext80 on the
			selected ext80 Rx chain



			16 bits, signed 12.4. 12 bits integer to cover -6.4us to
			6.4us, and 4 bits fraction to cover ext80 and 32x FAC
			interpolation



			clock unit is 320MHz

			<legal all>
*/
#define RX_LOCATION_INFO_1_RTT_FAC_VHT_EXT80_OFFSET                  0x00000004
#define RX_LOCATION_INFO_1_RTT_FAC_VHT_EXT80_LSB                     16
#define RX_LOCATION_INFO_1_RTT_FAC_VHT_EXT80_MASK                    0xffff0000

/* Description		RX_LOCATION_INFO_2_RTT_FAC_LEGACY_STATUS

			Status of rtt_fac_legacy



			<enum 0 location_fac_legacy_status_not_valid>

			<enum 1 location_fac_legacy_status_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_FAC_LEGACY_STATUS_OFFSET              0x00000008
#define RX_LOCATION_INFO_2_RTT_FAC_LEGACY_STATUS_LSB                 0
#define RX_LOCATION_INFO_2_RTT_FAC_LEGACY_STATUS_MASK                0x00000001

/* Description		RX_LOCATION_INFO_2_RTT_FAC_LEGACY_EXT80_STATUS

			Status of rtt_fac_legacy_ext80



			<enum 0 location_fac_legacy_ext80_status_not_valid>

			<enum 1 location_fac_legacy_ext80_status_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_FAC_LEGACY_EXT80_STATUS_OFFSET        0x00000008
#define RX_LOCATION_INFO_2_RTT_FAC_LEGACY_EXT80_STATUS_LSB           1
#define RX_LOCATION_INFO_2_RTT_FAC_LEGACY_EXT80_STATUS_MASK          0x00000002

/* Description		RX_LOCATION_INFO_2_RTT_FAC_VHT_STATUS

			Status of rtt_fac_vht



			<enum 0 location_fac_vht_status_not_valid>

			<enum 1 location_fac_vht_status_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_FAC_VHT_STATUS_OFFSET                 0x00000008
#define RX_LOCATION_INFO_2_RTT_FAC_VHT_STATUS_LSB                    2
#define RX_LOCATION_INFO_2_RTT_FAC_VHT_STATUS_MASK                   0x00000004

/* Description		RX_LOCATION_INFO_2_RTT_FAC_VHT_EXT80_STATUS

			Status of rtt_fac_vht_ext80



			<enum 0 location_fac_vht_ext80_status_not_valid>

			<enum 1 location_fac_vht_ext80_status_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_FAC_VHT_EXT80_STATUS_OFFSET           0x00000008
#define RX_LOCATION_INFO_2_RTT_FAC_VHT_EXT80_STATUS_LSB              3
#define RX_LOCATION_INFO_2_RTT_FAC_VHT_EXT80_STATUS_MASK             0x00000008

/* Description		RX_LOCATION_INFO_2_RTT_FAC_SIFS

			To support fine SIFS adjustment, need to provide FAC
			value @ integer number of 320 MHz clock cycles to MAC.  It
			is from L-LTF if it is a Legacy packet and from (V)HT/HE-LTF
			if it is a (V)HT/HE packet



			12 bits, signed, no fractional part

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_FAC_SIFS_OFFSET                       0x00000008
#define RX_LOCATION_INFO_2_RTT_FAC_SIFS_LSB                          4
#define RX_LOCATION_INFO_2_RTT_FAC_SIFS_MASK                         0x0000fff0

/* Description		RX_LOCATION_INFO_2_RTT_FAC_SIFS_STATUS

			Status of rtt_fac_sifs

			0: not valid

			1: valid and from L-LTF

			2: valid and from (V)HT/HE-LTF

			3: reserved

			<legal 0-2>
*/
#define RX_LOCATION_INFO_2_RTT_FAC_SIFS_STATUS_OFFSET                0x00000008
#define RX_LOCATION_INFO_2_RTT_FAC_SIFS_STATUS_LSB                   16
#define RX_LOCATION_INFO_2_RTT_FAC_SIFS_STATUS_MASK                  0x00030000

/* Description		RX_LOCATION_INFO_2_RTT_CFR_STATUS

			Status of channel frequency response dump



			<enum 0 location_CFR_dump_not_valid>

			<enum 1 location_CFR_dump_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_CFR_STATUS_OFFSET                     0x00000008
#define RX_LOCATION_INFO_2_RTT_CFR_STATUS_LSB                        18
#define RX_LOCATION_INFO_2_RTT_CFR_STATUS_MASK                       0x00040000

/* Description		RX_LOCATION_INFO_2_RTT_CIR_STATUS

			Status of channel impulse response dump



			<enum 0 location_CIR_dump_not_valid>

			<enum 1 location_CIR_dump_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_CIR_STATUS_OFFSET                     0x00000008
#define RX_LOCATION_INFO_2_RTT_CIR_STATUS_LSB                        19
#define RX_LOCATION_INFO_2_RTT_CIR_STATUS_MASK                       0x00080000

/* Description		RX_LOCATION_INFO_2_RTT_CHANNEL_DUMP_SIZE

			Channel dump size.  It shows how many tones in CFR in
			one chain, for example, it will show 52 for Legacy20 and 484
			for VHT160



			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_CHANNEL_DUMP_SIZE_OFFSET              0x00000008
#define RX_LOCATION_INFO_2_RTT_CHANNEL_DUMP_SIZE_LSB                 20
#define RX_LOCATION_INFO_2_RTT_CHANNEL_DUMP_SIZE_MASK                0x7ff00000

/* Description		RX_LOCATION_INFO_2_RTT_HW_IFFT_MODE

			Indicator showing if HW IFFT mode or SW IFFT mode



			<enum 0 location_sw_ifft_mode>

			<enum 1 location_hw_ifft_mode>

			<legal all>
*/
#define RX_LOCATION_INFO_2_RTT_HW_IFFT_MODE_OFFSET                   0x00000008
#define RX_LOCATION_INFO_2_RTT_HW_IFFT_MODE_LSB                      31
#define RX_LOCATION_INFO_2_RTT_HW_IFFT_MODE_MASK                     0x80000000

/* Description		RX_LOCATION_INFO_3_RTT_BTCF_STATUS

			Indicate if BTCF is used to capture the timestamps



			<enum 0 location_not_BTCF_based_ts>

			<enum 1 location_BTCF_based_ts>

			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_BTCF_STATUS_OFFSET                    0x0000000c
#define RX_LOCATION_INFO_3_RTT_BTCF_STATUS_LSB                       0
#define RX_LOCATION_INFO_3_RTT_BTCF_STATUS_MASK                      0x00000001

/* Description		RX_LOCATION_INFO_3_RTT_PREAMBLE_TYPE

			Indicate preamble type



			<enum 0 location_preamble_type_legacy>

			<enum 1 location_preamble_type_ht>

			<enum 2 location_preamble_type_vht>

			<enum 3 location_preamble_type_he_su_4xltf>

			<enum 4 location_preamble_type_he_su_2xltf>

			<enum 5 location_preamble_type_he_su_1xltf>

			<enum 6
			location_preamble_type_he_trigger_based_ul_4xltf>

			<enum 7
			location_preamble_type_he_trigger_based_ul_2xltf>

			<enum 8
			location_preamble_type_he_trigger_based_ul_1xltf>

			<enum 9 location_preamble_type_he_mu_4xltf>

			<enum 10 location_preamble_type_he_mu_2xltf>

			<enum 11 location_preamble_type_he_mu_1xltf>

			<enum 12
			location_preamble_type_he_extended_range_su_4xltf>

			<enum 13
			location_preamble_type_he_extended_range_su_2xltf>

			<enum 14
			location_preamble_type_he_extended_range_su_1xltf>

			<legal 0-14>
*/
#define RX_LOCATION_INFO_3_RTT_PREAMBLE_TYPE_OFFSET                  0x0000000c
#define RX_LOCATION_INFO_3_RTT_PREAMBLE_TYPE_LSB                     1
#define RX_LOCATION_INFO_3_RTT_PREAMBLE_TYPE_MASK                    0x0000003e

/* Description		RX_LOCATION_INFO_3_RTT_PKT_BW_LEG

			Indicate the bandwidth of L-LTF



			<enum 0 location_pkt_bw_20MHz>

			<enum 1 location_pkt_bw_40MHz>

			<enum 2 location_pkt_bw_80MHz>

			<enum 3 location_pkt_bw_160MHz>

			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_PKT_BW_LEG_OFFSET                     0x0000000c
#define RX_LOCATION_INFO_3_RTT_PKT_BW_LEG_LSB                        6
#define RX_LOCATION_INFO_3_RTT_PKT_BW_LEG_MASK                       0x000000c0

/* Description		RX_LOCATION_INFO_3_RTT_PKT_BW_VHT

			Indicate the bandwidth of (V)HT/HE-LTF



			<enum 0 location_pkt_bw_20MHz>

			<enum 1 location_pkt_bw_40MHz>

			<enum 2 location_pkt_bw_80MHz>

			<enum 3 location_pkt_bw_160MHz>

			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_PKT_BW_VHT_OFFSET                     0x0000000c
#define RX_LOCATION_INFO_3_RTT_PKT_BW_VHT_LSB                        8
#define RX_LOCATION_INFO_3_RTT_PKT_BW_VHT_MASK                       0x00000300

/* Description		RX_LOCATION_INFO_3_RTT_GI_TYPE

			Indicate GI (guard interval) type



			<enum 0     gi_0_8_us > HE related GI. Can also be used
			for HE

			<enum 1     gi_0_4_us > HE related GI. Can also be used
			for HE

			<enum 2     gi_1_6_us > HE related GI

			<enum 3     gi_3_2_us > HE related GI

			<legal 0 - 3>
*/
#define RX_LOCATION_INFO_3_RTT_GI_TYPE_OFFSET                        0x0000000c
#define RX_LOCATION_INFO_3_RTT_GI_TYPE_LSB                           10
#define RX_LOCATION_INFO_3_RTT_GI_TYPE_MASK                          0x00000c00

/* Description		RX_LOCATION_INFO_3_RTT_MCS_RATE

			Bits 0~4 indicate MCS rate, if Legacy,

			0: 48 Mbps,

			1: 24 Mbps,

			2: 12 Mbps,

			3: 6 Mbps,

			4: 54 Mbps,

			5: 36 Mbps,

			6: 18 Mbps,

			7: 9 Mbps,



			if HT, 0-7: MCS0-MCS7,

			if VHT, 0-9: MCS0-MCS9,


			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_MCS_RATE_OFFSET                       0x0000000c
#define RX_LOCATION_INFO_3_RTT_MCS_RATE_LSB                          12
#define RX_LOCATION_INFO_3_RTT_MCS_RATE_MASK                         0x0001f000

/* Description		RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN

			For 20/40/80, this field shows the first selected Rx
			chain that is used in HW IFFT mode



			For 80+80, this field shows the selected pri80 Rx chain
			that is used in HW IFFT mode



			<enum 0 location_strongest_chain_is_0>

			<enum 1 location_strongest_chain_is_1>

			<enum 2 location_strongest_chain_is_2>

			<enum 3 location_strongest_chain_is_3>

			<enum 4 location_strongest_chain_is_4>

			<enum 5 location_strongest_chain_is_5>

			<enum 6 location_strongest_chain_is_6>

			<enum 7 location_strongest_chain_is_7>

			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_OFFSET                0x0000000c
#define RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_LSB                   17
#define RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_MASK                  0x000e0000

/* Description		RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_EXT80

			For 20/40/80, this field shows the second selected Rx
			chain that is used in HW IFFT mode



			For 80+80, this field shows the selected ext80 Rx chain
			that is used in HW IFFT mode



			<enum 0 location_strongest_chain_is_0>

			<enum 1 location_strongest_chain_is_1>

			<enum 2 location_strongest_chain_is_2>

			<enum 3 location_strongest_chain_is_3>

			<enum 4 location_strongest_chain_is_4>

			<enum 5 location_strongest_chain_is_5>

			<enum 6 location_strongest_chain_is_6>

			<enum 7 location_strongest_chain_is_7>

			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_EXT80_OFFSET          0x0000000c
#define RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_EXT80_LSB             20
#define RX_LOCATION_INFO_3_RTT_STRONGEST_CHAIN_EXT80_MASK            0x00700000

/* Description		RX_LOCATION_INFO_3_RTT_RX_CHAIN_MASK

			Rx chain mask, each bit is a Rx chain

			0: the Rx chain is not used

			1: the Rx chain is used

			Support up to 8 Rx chains

			<legal all>
*/
#define RX_LOCATION_INFO_3_RTT_RX_CHAIN_MASK_OFFSET                  0x0000000c
#define RX_LOCATION_INFO_3_RTT_RX_CHAIN_MASK_LSB                     23
#define RX_LOCATION_INFO_3_RTT_RX_CHAIN_MASK_MASK                    0x7f800000

/* Description		RX_LOCATION_INFO_3_RESERVED_3

			<legal 0>
*/
#define RX_LOCATION_INFO_3_RESERVED_3_OFFSET                         0x0000000c
#define RX_LOCATION_INFO_3_RESERVED_3_LSB                            31
#define RX_LOCATION_INFO_3_RESERVED_3_MASK                           0x80000000

/* Description		RX_LOCATION_INFO_4_RX_START_TS

			RX packet start timestamp



			It reports the time the first L-STF ADC sample arrived
			at RX antenna



			clock unit is 480MHz

			<legal all>
*/
#define RX_LOCATION_INFO_4_RX_START_TS_OFFSET                        0x00000010
#define RX_LOCATION_INFO_4_RX_START_TS_LSB                           0
#define RX_LOCATION_INFO_4_RX_START_TS_MASK                          0xffffffff

/* Description		RX_LOCATION_INFO_5_RX_END_TS

			RX packet end timestamp



			It reports the time the last symbol's last ADC sample
			arrived at RX antenna



			clock unit is 480MHz

			<legal all>
*/
#define RX_LOCATION_INFO_5_RX_END_TS_OFFSET                          0x00000014
#define RX_LOCATION_INFO_5_RX_END_TS_LSB                             0
#define RX_LOCATION_INFO_5_RX_END_TS_MASK                            0xffffffff

/* Description		RX_LOCATION_INFO_6_SFO_PHASE_PKT_START

			The phase of the SFO of the first symbol's first FFT
			input sample



			12 bits, signed 6.6. 6 bits integer to cover -66.7ns to
			66.7ns, and 6 bits fraction to provide a resolution of
			0.03ns



			clock unit is 480MHz

			<legal all>
*/
#define RX_LOCATION_INFO_6_SFO_PHASE_PKT_START_OFFSET                0x00000018
#define RX_LOCATION_INFO_6_SFO_PHASE_PKT_START_LSB                   0
#define RX_LOCATION_INFO_6_SFO_PHASE_PKT_START_MASK                  0x00000fff

/* Description		RX_LOCATION_INFO_6_SFO_PHASE_PKT_END

			The phase of the SFO of the last symbol's last FFT input
			sample



			12 bits, signed 6.6. 6 bits integer to cover -66.7ns to
			66.7ns, and 6 bits fraction to provide a resolution of
			0.03ns



			clock unit is 480MHz

			<legal all>
*/
#define RX_LOCATION_INFO_6_SFO_PHASE_PKT_END_OFFSET                  0x00000018
#define RX_LOCATION_INFO_6_SFO_PHASE_PKT_END_LSB                     12
#define RX_LOCATION_INFO_6_SFO_PHASE_PKT_END_MASK                    0x00fff000

/* Description		RX_LOCATION_INFO_6_RTT_CHE_BUFFER_POINTER_HIGH8

			The high 8 bits of the 40 bits pointer pointed to the
			external RTT channel information buffer



			8 bits

			<legal all>
*/
#define RX_LOCATION_INFO_6_RTT_CHE_BUFFER_POINTER_HIGH8_OFFSET       0x00000018
#define RX_LOCATION_INFO_6_RTT_CHE_BUFFER_POINTER_HIGH8_LSB          24
#define RX_LOCATION_INFO_6_RTT_CHE_BUFFER_POINTER_HIGH8_MASK         0xff000000

/* Description		RX_LOCATION_INFO_7_RTT_CHE_BUFFER_POINTER_LOW32

			The low 32 bits of the 40 bits pointer pointed to the
			external RTT channel information buffer



			32 bits

			<legal all>
*/
#define RX_LOCATION_INFO_7_RTT_CHE_BUFFER_POINTER_LOW32_OFFSET       0x0000001c
#define RX_LOCATION_INFO_7_RTT_CHE_BUFFER_POINTER_LOW32_LSB          0
#define RX_LOCATION_INFO_7_RTT_CHE_BUFFER_POINTER_LOW32_MASK         0xffffffff

/* Description		RX_LOCATION_INFO_8_RTT_CFO_MEASUREMENT

			CFO measurement. Needed for passive locationing



			14 bits, signed 1.13. 13 bits fraction to provide a
			resolution of 153 Hz



			In units of cycles/800 ns

			<legal all>
*/
#define RX_LOCATION_INFO_8_RTT_CFO_MEASUREMENT_OFFSET                0x00000020
#define RX_LOCATION_INFO_8_RTT_CFO_MEASUREMENT_LSB                   0
#define RX_LOCATION_INFO_8_RTT_CFO_MEASUREMENT_MASK                  0x00003fff

/* Description		RX_LOCATION_INFO_8_RTT_CHAN_SPREAD

			Channel delay spread measurement. Needed for selecting
			GI length



			8 bits, unsigned. At 25 ns step. Can represent up to
			6375 ns



			In units of cycles @ 40 MHz

			<legal all>
*/
#define RX_LOCATION_INFO_8_RTT_CHAN_SPREAD_OFFSET                    0x00000020
#define RX_LOCATION_INFO_8_RTT_CHAN_SPREAD_LSB                       14
#define RX_LOCATION_INFO_8_RTT_CHAN_SPREAD_MASK                      0x003fc000

/* Description		RX_LOCATION_INFO_8_RTT_TIMING_BACKOFF_SEL

			Indicate which timing backoff value is used



			<enum 0 timing_backoff_low_rssi>

			<enum 1 timing_backoff_mid_rssi>

			<enum 2 timing_backoff_high_rssi>

			<enum 3 reserved>

			<legal all>
*/
#define RX_LOCATION_INFO_8_RTT_TIMING_BACKOFF_SEL_OFFSET             0x00000020
#define RX_LOCATION_INFO_8_RTT_TIMING_BACKOFF_SEL_LSB                22
#define RX_LOCATION_INFO_8_RTT_TIMING_BACKOFF_SEL_MASK               0x00c00000

/* Description		RX_LOCATION_INFO_8_RESERVED_8

			<legal 0>
*/
#define RX_LOCATION_INFO_8_RESERVED_8_OFFSET                         0x00000020
#define RX_LOCATION_INFO_8_RESERVED_8_LSB                            24
#define RX_LOCATION_INFO_8_RESERVED_8_MASK                           0x7f000000

/* Description		RX_LOCATION_INFO_8_RX_LOCATION_INFO_VALID

			<enum 0 rx_location_info_is_not_valid>

			<enum 1 rx_location_info_is_valid>

			<legal all>
*/
#define RX_LOCATION_INFO_8_RX_LOCATION_INFO_VALID_OFFSET             0x00000020
#define RX_LOCATION_INFO_8_RX_LOCATION_INFO_VALID_LSB                31
#define RX_LOCATION_INFO_8_RX_LOCATION_INFO_VALID_MASK               0x80000000


#endif // _RX_LOCATION_INFO_H_
