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


// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	rate[3:0], lsig_reserved[4], length[16:5], parity[17], tail[23:18], pkt_type[27:24], captured_implicit_sounding[28], reserved[31:29]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_L_SIG_A_INFO 1

struct l_sig_a_info {
             uint32_t rate                            :  4, //[3:0]
                      lsig_reserved                   :  1, //[4]
                      length                          : 12, //[16:5]
                      parity                          :  1, //[17]
                      tail                            :  6, //[23:18]
                      pkt_type                        :  4, //[27:24]
                      captured_implicit_sounding      :  1, //[28]
                      reserved                        :  3; //[31:29]
};

/*

rate

			This format is originally defined for OFDM as a 4 bit
			field but the 5th bit was added to indicate 11b formatted
			frames.  In the standard bit [4] is specified as reserved.
			For 11b frames this L-SIG is transformed in the PHY into the
			11b preamble format.  The following are the rates:

			<enum 8     ofdm_48_mbps> 64-QAM 2/3 (48 Mbps)

			<enum 9     ofdm_24_mbps> 16-QAM 1/2 (24 Mbps)

			<enum 10     ofdm_12_mbps> QPSK 1/2 (12 Mbps)

			<enum 11     ofdm_6_mbps> BPSK 1/2 (6 Mbps)

			<enum 12     ofdm_54_mbps> 64-QAM 3/4 (54 Mbps)

			<enum 13     ofdm_36_mbps> 16-QAM 3/4 (36 Mbps)

			<enum 14     ofdm_18_mbps> QPSK 1/2 (18 Mbps)

			<enum 15     ofdm_9_mbps> BPSK 3/4 (9 Mbps)

			<legal 8-15>

lsig_reserved

			Reserved: Should be set to 0 by the MAC and ignored by
			the PHY

			<legal 0>

length

			The length indicates the number of octets in this MPDU.
			Note that when using mixed mode 11n preamble this length
			provides the spoofed length for the PPDU.  This length
			provides part of the information to derive the actually PPDU
			length.  For legacy OFDM and 11B frames the maximum length
			is

			<legal all>

parity

			11a/n/ac TX: This field provides even parity over the
			first 18 bits of the signal field which means that the sum
			of 1s in the signal field will always be even on

			11a/n/ac RX: this field contains the received parity
			field from the L-SIG symbol for the current packet.

			<legal 0-1>

tail

			The 6 bits of tail is always set to 0 is used to flush
			the BCC encoder and decoder.  <legal 0>

pkt_type

			Only used on the RX side.

			Note: This is not really part of L-SIG



			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

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

captured_implicit_sounding

			Only used on the RX side.

			Note: This is not really part of L-SIG



			This indicates that the PHY has captured implicit
			sounding.

reserved

			Reserved: Should be set to 0 by the transmitting MAC and
			ignored by the PHY <legal 0>
*/


/* Description		L_SIG_A_INFO_0_RATE

			This format is originally defined for OFDM as a 4 bit
			field but the 5th bit was added to indicate 11b formatted
			frames.  In the standard bit [4] is specified as reserved.
			For 11b frames this L-SIG is transformed in the PHY into the
			11b preamble format.  The following are the rates:

			<enum 8     ofdm_48_mbps> 64-QAM 2/3 (48 Mbps)

			<enum 9     ofdm_24_mbps> 16-QAM 1/2 (24 Mbps)

			<enum 10     ofdm_12_mbps> QPSK 1/2 (12 Mbps)

			<enum 11     ofdm_6_mbps> BPSK 1/2 (6 Mbps)

			<enum 12     ofdm_54_mbps> 64-QAM 3/4 (54 Mbps)

			<enum 13     ofdm_36_mbps> 16-QAM 3/4 (36 Mbps)

			<enum 14     ofdm_18_mbps> QPSK 1/2 (18 Mbps)

			<enum 15     ofdm_9_mbps> BPSK 3/4 (9 Mbps)

			<legal 8-15>
*/
#define L_SIG_A_INFO_0_RATE_OFFSET                                   0x00000000
#define L_SIG_A_INFO_0_RATE_LSB                                      0
#define L_SIG_A_INFO_0_RATE_MASK                                     0x0000000f

/* Description		L_SIG_A_INFO_0_LSIG_RESERVED

			Reserved: Should be set to 0 by the MAC and ignored by
			the PHY

			<legal 0>
*/
#define L_SIG_A_INFO_0_LSIG_RESERVED_OFFSET                          0x00000000
#define L_SIG_A_INFO_0_LSIG_RESERVED_LSB                             4
#define L_SIG_A_INFO_0_LSIG_RESERVED_MASK                            0x00000010

/* Description		L_SIG_A_INFO_0_LENGTH

			The length indicates the number of octets in this MPDU.
			Note that when using mixed mode 11n preamble this length
			provides the spoofed length for the PPDU.  This length
			provides part of the information to derive the actually PPDU
			length.  For legacy OFDM and 11B frames the maximum length
			is

			<legal all>
*/
#define L_SIG_A_INFO_0_LENGTH_OFFSET                                 0x00000000
#define L_SIG_A_INFO_0_LENGTH_LSB                                    5
#define L_SIG_A_INFO_0_LENGTH_MASK                                   0x0001ffe0

/* Description		L_SIG_A_INFO_0_PARITY

			11a/n/ac TX: This field provides even parity over the
			first 18 bits of the signal field which means that the sum
			of 1s in the signal field will always be even on

			11a/n/ac RX: this field contains the received parity
			field from the L-SIG symbol for the current packet.

			<legal 0-1>
*/
#define L_SIG_A_INFO_0_PARITY_OFFSET                                 0x00000000
#define L_SIG_A_INFO_0_PARITY_LSB                                    17
#define L_SIG_A_INFO_0_PARITY_MASK                                   0x00020000

/* Description		L_SIG_A_INFO_0_TAIL

			The 6 bits of tail is always set to 0 is used to flush
			the BCC encoder and decoder.  <legal 0>
*/
#define L_SIG_A_INFO_0_TAIL_OFFSET                                   0x00000000
#define L_SIG_A_INFO_0_TAIL_LSB                                      18
#define L_SIG_A_INFO_0_TAIL_MASK                                     0x00fc0000

/* Description		L_SIG_A_INFO_0_PKT_TYPE

			Only used on the RX side.

			Note: This is not really part of L-SIG



			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

			<enum 5 dot11ba>802.11ba (WUR) PPDU type
*/
#define L_SIG_A_INFO_0_PKT_TYPE_OFFSET                               0x00000000
#define L_SIG_A_INFO_0_PKT_TYPE_LSB                                  24
#define L_SIG_A_INFO_0_PKT_TYPE_MASK                                 0x0f000000

/* Description		L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING

			Only used on the RX side.

			Note: This is not really part of L-SIG



			This indicates that the PHY has captured implicit
			sounding.
*/
#define L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING_OFFSET             0x00000000
#define L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING_LSB                28
#define L_SIG_A_INFO_0_CAPTURED_IMPLICIT_SOUNDING_MASK               0x10000000

/* Description		L_SIG_A_INFO_0_RESERVED

			Reserved: Should be set to 0 by the transmitting MAC and
			ignored by the PHY <legal 0>
*/
#define L_SIG_A_INFO_0_RESERVED_OFFSET                               0x00000000
#define L_SIG_A_INFO_0_RESERVED_LSB                                  29
#define L_SIG_A_INFO_0_RESERVED_MASK                                 0xe0000000


#endif // _L_SIG_A_INFO_H_
