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


// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	mcs[6:0], cbw[7], length[23:8], reserved_0[31:24]
//	1	smoothing[0], not_sounding[1], ht_reserved[2], aggregation[3], stbc[5:4], fec_coding[6], short_gi[7], num_ext_sp_str[9:8], crc[17:10], signal_tail[23:18], reserved_1[31:24]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_HT_SIG_INFO 2

struct ht_sig_info {
             uint32_t mcs                             :  7, //[6:0]
                      cbw                             :  1, //[7]
                      length                          : 16, //[23:8]
                      reserved_0                      :  8; //[31:24]
             uint32_t smoothing                       :  1, //[0]
                      not_sounding                    :  1, //[1]
                      ht_reserved                     :  1, //[2]
                      aggregation                     :  1, //[3]
                      stbc                            :  2, //[5:4]
                      fec_coding                      :  1, //[6]
                      short_gi                        :  1, //[7]
                      num_ext_sp_str                  :  2, //[9:8]
                      crc                             :  8, //[17:10]
                      signal_tail                     :  6, //[23:18]
                      reserved_1                      :  8; //[31:24]
};

/*

mcs
			
			Modulation Coding Scheme:
			
			0-7 are used for single stream
			
			8-15 are used for 2 streams
			
			16-23 are used for 3 streams
			
			24-31 are used for 4 streams
			
			32 is used for duplicate HT20 (unsupported)
			
			33-76 is used for unequal modulation (unsupported)
			
			77-127 is reserved.
			
			<legal 0-31>

cbw
			
			Packet bandwidth:
			
			<enum 0     ht_20_mhz>
			
			<enum 1     ht_40_mhz>
			
			<legal 0-1>

length
			
			This is the MPDU or A-MPDU length in octets of the PPDU
			
			<legal all>

reserved_0
			
			This field is not part of HT-SIG
			
			Reserved: Should be set to 0 by the MAC and ignored by
			the PHY <legal 0>

smoothing
			
			Field indicates if smoothing is needed
			
			E_num 0     do_smoothing Unsupported setting: indicates
			smoothing is often used for beamforming 
			
			
			<legal 1>

not_sounding
			
			E_num 0     sounding Unsupported setting: indicates
			sounding is used
			
			<enum 1     no_sounding>  Indicates no sounding is used
			
			<legal 1>

ht_reserved
			
			Reserved: Should be set to 1 by the MAC and ignored by
			the PHY 
			
			<legal 1>

aggregation
			
			<enum 0     mpdu> Indicates MPDU format
			
			<enum 1     a_mpdu> Indicates A-MPDU format
			
			<legal 0-1>

stbc
			
			<enum 0     no_stbc> Indicates no STBC
			
			<enum 1     1_str_stbc> Indicates 1 stream STBC
			
			E_num 2     2_str_stbc Indicates 2 stream STBC
			(Unsupported)
			
			<legal 0-1>

fec_coding
			
			<enum 0     ht_bcc>  Indicates BCC coding
			
			<enum 1     ht_ldpc>  Indicates LDPC coding
			
			<legal 0-1>

short_gi
			
			<enum 0     ht_normal_gi>  Indicates normal guard
			interval
			
			
			<legal 0-1>

num_ext_sp_str
			
			Number of extension spatial streams: (Used for TxBF)
			
			<enum 0     0_ext_sp_str>  No extension spatial streams
			
			E_num 1     1_ext_sp_str  Not supported: 1 extension
			spatial streams
			
			E_num 2     2_ext_sp_str  Not supported:  2 extension
			spatial streams
			
			<legal 0>

crc
			
			The CRC protects the HT-SIG (HT-SIG[0][23:0] and
			HT-SIG[1][9:0]. The generator polynomial is G(D) = D8 + D2 +
			D + 1.  <legal all>

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

reserved_1
			
			This field is not part of HT-SIG:
			
			Reserved: Should be set to 0 by the MAC and ignored by
			the PHY.  <legal 0>
*/


/* Description		HT_SIG_INFO_0_MCS
			
			Modulation Coding Scheme:
			
			0-7 are used for single stream
			
			8-15 are used for 2 streams
			
			16-23 are used for 3 streams
			
			24-31 are used for 4 streams
			
			32 is used for duplicate HT20 (unsupported)
			
			33-76 is used for unequal modulation (unsupported)
			
			77-127 is reserved.
			
			<legal 0-31>
*/
#define HT_SIG_INFO_0_MCS_OFFSET                                     0x00000000
#define HT_SIG_INFO_0_MCS_LSB                                        0
#define HT_SIG_INFO_0_MCS_MASK                                       0x0000007f

/* Description		HT_SIG_INFO_0_CBW
			
			Packet bandwidth:
			
			<enum 0     ht_20_mhz>
			
			<enum 1     ht_40_mhz>
			
			<legal 0-1>
*/
#define HT_SIG_INFO_0_CBW_OFFSET                                     0x00000000
#define HT_SIG_INFO_0_CBW_LSB                                        7
#define HT_SIG_INFO_0_CBW_MASK                                       0x00000080

/* Description		HT_SIG_INFO_0_LENGTH
			
			This is the MPDU or A-MPDU length in octets of the PPDU
			
			<legal all>
*/
#define HT_SIG_INFO_0_LENGTH_OFFSET                                  0x00000000
#define HT_SIG_INFO_0_LENGTH_LSB                                     8
#define HT_SIG_INFO_0_LENGTH_MASK                                    0x00ffff00

/* Description		HT_SIG_INFO_0_RESERVED_0
			
			This field is not part of HT-SIG
			
			Reserved: Should be set to 0 by the MAC and ignored by
			the PHY <legal 0>
*/
#define HT_SIG_INFO_0_RESERVED_0_OFFSET                              0x00000000
#define HT_SIG_INFO_0_RESERVED_0_LSB                                 24
#define HT_SIG_INFO_0_RESERVED_0_MASK                                0xff000000

/* Description		HT_SIG_INFO_1_SMOOTHING
			
			Field indicates if smoothing is needed
			
			E_num 0     do_smoothing Unsupported setting: indicates
			smoothing is often used for beamforming 
			
			
			<legal 1>
*/
#define HT_SIG_INFO_1_SMOOTHING_OFFSET                               0x00000004
#define HT_SIG_INFO_1_SMOOTHING_LSB                                  0
#define HT_SIG_INFO_1_SMOOTHING_MASK                                 0x00000001

/* Description		HT_SIG_INFO_1_NOT_SOUNDING
			
			E_num 0     sounding Unsupported setting: indicates
			sounding is used
			
			<enum 1     no_sounding>  Indicates no sounding is used
			
			<legal 1>
*/
#define HT_SIG_INFO_1_NOT_SOUNDING_OFFSET                            0x00000004
#define HT_SIG_INFO_1_NOT_SOUNDING_LSB                               1
#define HT_SIG_INFO_1_NOT_SOUNDING_MASK                              0x00000002

/* Description		HT_SIG_INFO_1_HT_RESERVED
			
			Reserved: Should be set to 1 by the MAC and ignored by
			the PHY 
			
			<legal 1>
*/
#define HT_SIG_INFO_1_HT_RESERVED_OFFSET                             0x00000004
#define HT_SIG_INFO_1_HT_RESERVED_LSB                                2
#define HT_SIG_INFO_1_HT_RESERVED_MASK                               0x00000004

/* Description		HT_SIG_INFO_1_AGGREGATION
			
			<enum 0     mpdu> Indicates MPDU format
			
			<enum 1     a_mpdu> Indicates A-MPDU format
			
			<legal 0-1>
*/
#define HT_SIG_INFO_1_AGGREGATION_OFFSET                             0x00000004
#define HT_SIG_INFO_1_AGGREGATION_LSB                                3
#define HT_SIG_INFO_1_AGGREGATION_MASK                               0x00000008

/* Description		HT_SIG_INFO_1_STBC
			
			<enum 0     no_stbc> Indicates no STBC
			
			<enum 1     1_str_stbc> Indicates 1 stream STBC
			
			E_num 2     2_str_stbc Indicates 2 stream STBC
			(Unsupported)
			
			<legal 0-1>
*/
#define HT_SIG_INFO_1_STBC_OFFSET                                    0x00000004
#define HT_SIG_INFO_1_STBC_LSB                                       4
#define HT_SIG_INFO_1_STBC_MASK                                      0x00000030

/* Description		HT_SIG_INFO_1_FEC_CODING
			
			<enum 0     ht_bcc>  Indicates BCC coding
			
			<enum 1     ht_ldpc>  Indicates LDPC coding
			
			<legal 0-1>
*/
#define HT_SIG_INFO_1_FEC_CODING_OFFSET                              0x00000004
#define HT_SIG_INFO_1_FEC_CODING_LSB                                 6
#define HT_SIG_INFO_1_FEC_CODING_MASK                                0x00000040

/* Description		HT_SIG_INFO_1_SHORT_GI
			
			<enum 0     ht_normal_gi>  Indicates normal guard
			interval
			
			
			<legal 0-1>
*/
#define HT_SIG_INFO_1_SHORT_GI_OFFSET                                0x00000004
#define HT_SIG_INFO_1_SHORT_GI_LSB                                   7
#define HT_SIG_INFO_1_SHORT_GI_MASK                                  0x00000080

/* Description		HT_SIG_INFO_1_NUM_EXT_SP_STR
			
			Number of extension spatial streams: (Used for TxBF)
			
			<enum 0     0_ext_sp_str>  No extension spatial streams
			
			E_num 1     1_ext_sp_str  Not supported: 1 extension
			spatial streams
			
			E_num 2     2_ext_sp_str  Not supported:  2 extension
			spatial streams
			
			<legal 0>
*/
#define HT_SIG_INFO_1_NUM_EXT_SP_STR_OFFSET                          0x00000004
#define HT_SIG_INFO_1_NUM_EXT_SP_STR_LSB                             8
#define HT_SIG_INFO_1_NUM_EXT_SP_STR_MASK                            0x00000300

/* Description		HT_SIG_INFO_1_CRC
			
			The CRC protects the HT-SIG (HT-SIG[0][23:0] and
			HT-SIG[1][9:0]. The generator polynomial is G(D) = D8 + D2 +
			D + 1.  <legal all>
*/
#define HT_SIG_INFO_1_CRC_OFFSET                                     0x00000004
#define HT_SIG_INFO_1_CRC_LSB                                        10
#define HT_SIG_INFO_1_CRC_MASK                                       0x0003fc00

/* Description		HT_SIG_INFO_1_SIGNAL_TAIL
			
			The 6 bits of tail is always set to 0 is used to flush
			the BCC encoder and decoder.  <legal 0>
*/
#define HT_SIG_INFO_1_SIGNAL_TAIL_OFFSET                             0x00000004
#define HT_SIG_INFO_1_SIGNAL_TAIL_LSB                                18
#define HT_SIG_INFO_1_SIGNAL_TAIL_MASK                               0x00fc0000

/* Description		HT_SIG_INFO_1_RESERVED_1
			
			This field is not part of HT-SIG:
			
			Reserved: Should be set to 0 by the MAC and ignored by
			the PHY.  <legal 0>
*/
#define HT_SIG_INFO_1_RESERVED_1_OFFSET                              0x00000004
#define HT_SIG_INFO_1_RESERVED_1_LSB                                 24
#define HT_SIG_INFO_1_RESERVED_1_MASK                                0xff000000


#endif // _HT_SIG_INFO_H_