/*
 * Copyright (c) 2020 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_
