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


// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	phyrx_abort_reason[7:0], phy_enters_nap_state[8], phy_enters_defer_state[9], reserved_0[15:10], receive_duration[31:16]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_PHYRX_ABORT_REQUEST_INFO 1

struct phyrx_abort_request_info {
             uint32_t phyrx_abort_reason              :  8, //[7:0]
                      phy_enters_nap_state            :  1, //[8]
                      phy_enters_defer_state          :  1, //[9]
                      reserved_0                      :  6, //[15:10]
                      receive_duration                : 16; //[31:16]
};

/*

phyrx_abort_reason

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

			<enum 1 phyrx_err_synth_off>

			<enum 2 phyrx_err_ofdma_timing>

			<enum 3 phyrx_err_ofdma_signal_parity>

			<enum 4 phyrx_err_ofdma_rate_illegal>

			<enum 5 phyrx_err_ofdma_length_illegal>

			<enum 6 phyrx_err_ofdma_restart>

			<enum 7 phyrx_err_ofdma_service>

			<enum 8 phyrx_err_ppdu_ofdma_power_drop>



			<enum 9 phyrx_err_cck_blokker>

			<enum 10 phyrx_err_cck_timing>

			<enum 11 phyrx_err_cck_header_crc>

			<enum 12 phyrx_err_cck_rate_illegal>

			<enum 13 phyrx_err_cck_length_illegal>

			<enum 14 phyrx_err_cck_restart>

			<enum 15 phyrx_err_cck_service>

			<enum 16 phyrx_err_cck_power_drop>



			<enum 17 phyrx_err_ht_crc_err>

			<enum 18 phyrx_err_ht_length_illegal>

			<enum 19 phyrx_err_ht_rate_illegal>

			<enum 20 phyrx_err_ht_zlf>

			<enum 21 phyrx_err_false_radar_ext>



			<enum 22 phyrx_err_green_field>



			<enum 23 phyrx_err_bw_gt_dyn_bw>

			<enum 24 phyrx_err_leg_ht_mismatch>

			<enum 25 phyrx_err_vht_crc_error>

			<enum 26 phyrx_err_vht_siga_unsupported>

			<enum 27 phyrx_err_vht_lsig_len_invalid>

			<enum 28 phyrx_err_vht_ndp_or_zlf>

			<enum 29 phyrx_err_vht_nsym_lt_zero>

			<enum 30 phyrx_err_vht_rx_extra_symbol_mismatch>

			<enum 31 phyrx_err_vht_rx_skip_group_id0>

			<enum 32 phyrx_err_vht_rx_skip_group_id1to62>

			<enum 33 phyrx_err_vht_rx_skip_group_id63>

			<enum 34 phyrx_err_ofdm_ldpc_decoder_disabled>

			<enum 35 phyrx_err_defer_nap>

			<enum 36 phyrx_err_fdomain_timeout>

			<enum 37 phyrx_err_lsig_rel_check>

			<enum 38 phyrx_err_bt_collision>

			<enum 39 phyrx_err_unsupported_mu_feedback>

			<enum 40 phyrx_err_ppdu_tx_interrupt_rx>

			<enum 41 phyrx_err_unsupported_cbf>



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



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



			<enum 52 phyrx_err_MU_UL_no_power_detected>

			<enum 53 phyrx_err_MU_UL_not_for_me>



			<legal 0 - 53>

phy_enters_nap_state

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



			Note that nap and defer state are mutually exclusive.



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

			<legal all>

phy_enters_defer_state

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



			Note that nap and defer state are mutually exclusive.



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

			<legal all>

reserved_0

			<legal 0>

receive_duration

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

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



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

			<legal all>
*/


/* Description		PHYRX_ABORT_REQUEST_INFO_0_PHYRX_ABORT_REASON

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

			<enum 1 phyrx_err_synth_off>

			<enum 2 phyrx_err_ofdma_timing>

			<enum 3 phyrx_err_ofdma_signal_parity>

			<enum 4 phyrx_err_ofdma_rate_illegal>

			<enum 5 phyrx_err_ofdma_length_illegal>

			<enum 6 phyrx_err_ofdma_restart>

			<enum 7 phyrx_err_ofdma_service>

			<enum 8 phyrx_err_ppdu_ofdma_power_drop>



			<enum 9 phyrx_err_cck_blokker>

			<enum 10 phyrx_err_cck_timing>

			<enum 11 phyrx_err_cck_header_crc>

			<enum 12 phyrx_err_cck_rate_illegal>

			<enum 13 phyrx_err_cck_length_illegal>

			<enum 14 phyrx_err_cck_restart>

			<enum 15 phyrx_err_cck_service>

			<enum 16 phyrx_err_cck_power_drop>



			<enum 17 phyrx_err_ht_crc_err>

			<enum 18 phyrx_err_ht_length_illegal>

			<enum 19 phyrx_err_ht_rate_illegal>

			<enum 20 phyrx_err_ht_zlf>

			<enum 21 phyrx_err_false_radar_ext>



			<enum 22 phyrx_err_green_field>



			<enum 23 phyrx_err_bw_gt_dyn_bw>

			<enum 24 phyrx_err_leg_ht_mismatch>

			<enum 25 phyrx_err_vht_crc_error>

			<enum 26 phyrx_err_vht_siga_unsupported>

			<enum 27 phyrx_err_vht_lsig_len_invalid>

			<enum 28 phyrx_err_vht_ndp_or_zlf>

			<enum 29 phyrx_err_vht_nsym_lt_zero>

			<enum 30 phyrx_err_vht_rx_extra_symbol_mismatch>

			<enum 31 phyrx_err_vht_rx_skip_group_id0>

			<enum 32 phyrx_err_vht_rx_skip_group_id1to62>

			<enum 33 phyrx_err_vht_rx_skip_group_id63>

			<enum 34 phyrx_err_ofdm_ldpc_decoder_disabled>

			<enum 35 phyrx_err_defer_nap>

			<enum 36 phyrx_err_fdomain_timeout>

			<enum 37 phyrx_err_lsig_rel_check>

			<enum 38 phyrx_err_bt_collision>

			<enum 39 phyrx_err_unsupported_mu_feedback>

			<enum 40 phyrx_err_ppdu_tx_interrupt_rx>

			<enum 41 phyrx_err_unsupported_cbf>



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



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



			<enum 52 phyrx_err_MU_UL_no_power_detected>

			<enum 53 phyrx_err_MU_UL_not_for_me>



			<legal 0 - 53>
*/
#define PHYRX_ABORT_REQUEST_INFO_0_PHYRX_ABORT_REASON_OFFSET         0x00000000
#define PHYRX_ABORT_REQUEST_INFO_0_PHYRX_ABORT_REASON_LSB            0
#define PHYRX_ABORT_REQUEST_INFO_0_PHYRX_ABORT_REASON_MASK           0x000000ff

/* Description		PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_NAP_STATE

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



			Note that nap and defer state are mutually exclusive.



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

			<legal all>
*/
#define PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_NAP_STATE_OFFSET       0x00000000
#define PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_NAP_STATE_LSB          8
#define PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_NAP_STATE_MASK         0x00000100

/* Description		PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_DEFER_STATE

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



			Note that nap and defer state are mutually exclusive.



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

			<legal all>
*/
#define PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_DEFER_STATE_OFFSET     0x00000000
#define PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_DEFER_STATE_LSB        9
#define PHYRX_ABORT_REQUEST_INFO_0_PHY_ENTERS_DEFER_STATE_MASK       0x00000200

/* Description		PHYRX_ABORT_REQUEST_INFO_0_RESERVED_0

			<legal 0>
*/
#define PHYRX_ABORT_REQUEST_INFO_0_RESERVED_0_OFFSET                 0x00000000
#define PHYRX_ABORT_REQUEST_INFO_0_RESERVED_0_LSB                    10
#define PHYRX_ABORT_REQUEST_INFO_0_RESERVED_0_MASK                   0x0000fc00

/* Description		PHYRX_ABORT_REQUEST_INFO_0_RECEIVE_DURATION

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

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



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

			<legal all>
*/
#define PHYRX_ABORT_REQUEST_INFO_0_RECEIVE_DURATION_OFFSET           0x00000000
#define PHYRX_ABORT_REQUEST_INFO_0_RECEIVE_DURATION_LSB              16
#define PHYRX_ABORT_REQUEST_INFO_0_RECEIVE_DURATION_MASK             0xffff0000


#endif // _PHYRX_ABORT_REQUEST_INFO_H_
