text: /*
   * 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 _RECEIVE_USER_INFO_H_
  #define _RECEIVE_USER_INFO_H_
  #if !defined(__ASSEMBLER__)
  #endif
  
  
  // ################ START SUMMARY #################
  //
  //	Dword	Fields
  //	0	phy_ppdu_id[15:0], user_rssi[23:16], pkt_type[27:24], stbc[28], reception_type[31:29]
  //	1	rate_mcs[3:0], sgi[5:4], receive_bandwidth[7:6], mimo_ss_bitmap[15:8], ofdma_ru_allocation[23:16], ofdma_user_index[30:24], ofdma_content_channel[31]
  //	2	ldpc[0], ru_width[7:1], reserved_2a[31:8]
  //
  // ################ END SUMMARY #################
  
  #define NUM_OF_DWORDS_RECEIVE_USER_INFO 3
  
  struct receive_user_info {
               uint32_t phy_ppdu_id                     : 16, //[15:0]
                        user_rssi                       :  8, //[23:16]
                        pkt_type                        :  4, //[27:24]
                        stbc                            :  1, //[28]
                        reception_type                  :  3; //[31:29]
               uint32_t rate_mcs                        :  4, //[3:0]
                        sgi                             :  2, //[5:4]
                        receive_bandwidth               :  2, //[7:6]
                        mimo_ss_bitmap                  :  8, //[15:8]
                        ofdma_ru_allocation             :  8, //[23:16]
                        ofdma_user_index                :  7, //[30:24]
                        ofdma_content_channel           :  1; //[31]
               uint32_t ldpc                            :  1, //[0]
                        ru_width                        :  7, //[7:1]
                        reserved_2a                     : 24; //[31:8]
  };
  
  /*
  
  phy_ppdu_id
  			
  			A ppdu counter value that PHY increments for every PPDU
  			received. The counter value wraps around  
  			
  			<legal all>
  
  user_rssi
  			
  			RSSI for this user
  			
  			Frequency domain RSSI measurement for this user. Based
  			on the channel estimate.  
  			
  			
  			
  			<legal all>
  
  pkt_type
  			
  			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
  
  stbc
  			
  			When set, use STBC transmission rates
  
  reception_type
  			
  			Indicates what type of reception this is.
  			
  			<enum 0     reception_type_SU > Basic SU reception (not
  			part of OFDMA or MU-MIMO)
  			
  			<enum 1     reception_type_MU_MIMO > This is related to
  			DL type of reception
  			
  			<enum 2     reception_type_MU_OFDMA >  This is related
  			to DL type of reception
  			
  			<enum 3     reception_type_MU_OFDMA_MIMO >  This is
  			related to DL type of reception
  			
  			<enum 4     reception_type_UL_MU_MIMO > This is related
  			to UL type of reception
  			
  			<enum 5     reception_type_UL_MU_OFDMA >  This is
  			related to UL type of reception
  			
  			<enum 6     reception_type_UL_MU_OFDMA_MIMO >  This is
  			related to UL type of reception
  			
  			
  			
  			<legal 0-6>
  
  rate_mcs
  			
  			For details, refer to  MCS_TYPE description
  			
  			<legal all>
  
  sgi
  			
  			Field only valid when pkt type is HT, VHT or HE.
  			
  			
  			
  			<enum 0     gi_0_8_us > Legacy normal GI.  Can also be
  			used for HE
  			
  			<enum 1     gi_0_4_us > Legacy short 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>
  
  receive_bandwidth
  			
  			Full receive Bandwidth
  			
  			
  			
  			<enum 0     full_rx_bw_20_mhz>
  			
  			<enum 1      full_rx_bw_40_mhz>
  			
  			<enum 2      full_rx_bw_80_mhz>
  			
  			<enum 3      full_rx_bw_160_mhz> 
  			
  			
  			
  			<legal 0-3>
  
  mimo_ss_bitmap
  			
  			Bitmap, with each bit indicating if the related spatial
  			stream is used for this STA
  			
  			LSB related to SS 0
  			
  			
  			
  			0: spatial stream not used for this reception
  			
  			1: spatial stream used for this reception
  			
  			
  			
  			<legal all>
  
  ofdma_ru_allocation
  			
  			Field only valid in case of OFDMA type receptions (DL
  			and UL)
  			
  			
  			
  			Indicates the RU number associated with this user.
  			
  			
  			
  			In case of reception where the transmission was DL MU
  			OFDMA, this field provides the RU pattern. Note that fields
  			ofdma_user_index and ofdma_content_channel are needed to
  			determine which RU (within a 40 MHz channel) was actually
  			assigned to this user, but this does not give info on which
  			40 MHz channel was assigned to this user. Please refer
  			DL_ofdma_ru_* in PHYRX_PKT_END_INFO for complete RU info for
  			this user.
  			
  			
  			
  			In case of reception where the transmission was UL MU
  			OFDMA, PHY is recommended to insert the RU start index in
  			this field. Note that PHY may insert the RU width in
  			Reserved_2a[6:0].
  			
  			<legal all>
  
  ofdma_user_index
  			
  			Field only valid in the of DL MU OFDMA reception
  			
  			
  			
  			The user number within the RU_allocation.
  			
  			
  			
  			This is needed for SW to determine the exact RU position
  			within the reception.
  			
  			<legal all>
  
  ofdma_content_channel
  			
  			Field only valid in the of DL MU OFDMA/MIMO reception
  			
  			
  			
  			In case of DL MU reception, this field indicates the
  			content channel number where PHY found the RU information
  			for this user
  			
  			
  			
  			This is needed for SW to determine the exact RU position
  			within the reception.
  			
  			
  			
  			<enum 0      content_channel_1>
  			
  			<enum 1      content_channel_2> 
  			
  			
  			
  			<legal all>
  
  ldpc
  			
  			When set, use LDPC transmission rates were used.
  			
  			<legal all>
  
  ru_width
  			
  			In case of UL OFDMA reception, PHY is recommended to
  			insert the RU width
  			
  			In Hastings80: was using Reserved_2a[6:0].
  			
  			<legal 1 - 74>
  
  reserved_2a
  			
  			<legal 0>
  */
  
  
  /* Description		RECEIVE_USER_INFO_0_PHY_PPDU_ID
  			
  			A ppdu counter value that PHY increments for every PPDU
  			received. The counter value wraps around  
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_0_PHY_PPDU_ID_OFFSET                       0x00000000
  #define RECEIVE_USER_INFO_0_PHY_PPDU_ID_LSB                          0
  #define RECEIVE_USER_INFO_0_PHY_PPDU_ID_MASK                         0x0000ffff
  
  /* Description		RECEIVE_USER_INFO_0_USER_RSSI
  			
  			RSSI for this user
  			
  			Frequency domain RSSI measurement for this user. Based
  			on the channel estimate.  
  			
  			
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_0_USER_RSSI_OFFSET                         0x00000000
  #define RECEIVE_USER_INFO_0_USER_RSSI_LSB                            16
  #define RECEIVE_USER_INFO_0_USER_RSSI_MASK                           0x00ff0000
  
  /* Description		RECEIVE_USER_INFO_0_PKT_TYPE
  			
  			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 RECEIVE_USER_INFO_0_PKT_TYPE_OFFSET                          0x00000000
  #define RECEIVE_USER_INFO_0_PKT_TYPE_LSB                             24
  #define RECEIVE_USER_INFO_0_PKT_TYPE_MASK                            0x0f000000
  
  /* Description		RECEIVE_USER_INFO_0_STBC
  			
  			When set, use STBC transmission rates
  */
  #define RECEIVE_USER_INFO_0_STBC_OFFSET                              0x00000000
  #define RECEIVE_USER_INFO_0_STBC_LSB                                 28
  #define RECEIVE_USER_INFO_0_STBC_MASK                                0x10000000
  
  /* Description		RECEIVE_USER_INFO_0_RECEPTION_TYPE
  			
  			Indicates what type of reception this is.
  			
  			<enum 0     reception_type_SU > Basic SU reception (not
  			part of OFDMA or MU-MIMO)
  			
  			<enum 1     reception_type_MU_MIMO > This is related to
  			DL type of reception
  			
  			<enum 2     reception_type_MU_OFDMA >  This is related
  			to DL type of reception
  			
  			<enum 3     reception_type_MU_OFDMA_MIMO >  This is
  			related to DL type of reception
  			
  			<enum 4     reception_type_UL_MU_MIMO > This is related
  			to UL type of reception
  			
  			<enum 5     reception_type_UL_MU_OFDMA >  This is
  			related to UL type of reception
  			
  			<enum 6     reception_type_UL_MU_OFDMA_MIMO >  This is
  			related to UL type of reception
  			
  			
  			
  			<legal 0-6>
  */
  #define RECEIVE_USER_INFO_0_RECEPTION_TYPE_OFFSET                    0x00000000
  #define RECEIVE_USER_INFO_0_RECEPTION_TYPE_LSB                       29
  #define RECEIVE_USER_INFO_0_RECEPTION_TYPE_MASK                      0xe0000000
  
  /* Description		RECEIVE_USER_INFO_1_RATE_MCS
  			
  			For details, refer to  MCS_TYPE description
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_1_RATE_MCS_OFFSET                          0x00000004
  #define RECEIVE_USER_INFO_1_RATE_MCS_LSB                             0
  #define RECEIVE_USER_INFO_1_RATE_MCS_MASK                            0x0000000f
  
  /* Description		RECEIVE_USER_INFO_1_SGI
  			
  			Field only valid when pkt type is HT, VHT or HE.
  			
  			
  			
  			<enum 0     gi_0_8_us > Legacy normal GI.  Can also be
  			used for HE
  			
  			<enum 1     gi_0_4_us > Legacy short 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 RECEIVE_USER_INFO_1_SGI_OFFSET                               0x00000004
  #define RECEIVE_USER_INFO_1_SGI_LSB                                  4
  #define RECEIVE_USER_INFO_1_SGI_MASK                                 0x00000030
  
  /* Description		RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH
  			
  			Full receive Bandwidth
  			
  			
  			
  			<enum 0     full_rx_bw_20_mhz>
  			
  			<enum 1      full_rx_bw_40_mhz>
  			
  			<enum 2      full_rx_bw_80_mhz>
  			
  			<enum 3      full_rx_bw_160_mhz> 
  			
  			
  			
  			<legal 0-3>
  */
  #define RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH_OFFSET                 0x00000004
  #define RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH_LSB                    6
  #define RECEIVE_USER_INFO_1_RECEIVE_BANDWIDTH_MASK                   0x000000c0
  
  /* Description		RECEIVE_USER_INFO_1_MIMO_SS_BITMAP
  			
  			Bitmap, with each bit indicating if the related spatial
  			stream is used for this STA
  			
  			LSB related to SS 0
  			
  			
  			
  			0: spatial stream not used for this reception
  			
  			1: spatial stream used for this reception
  			
  			
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_1_MIMO_SS_BITMAP_OFFSET                    0x00000004
  #define RECEIVE_USER_INFO_1_MIMO_SS_BITMAP_LSB                       8
  #define RECEIVE_USER_INFO_1_MIMO_SS_BITMAP_MASK                      0x0000ff00
  
  /* Description		RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION
  			
  			Field only valid in case of OFDMA type receptions (DL
  			and UL)
  			
  			
  			
  			Indicates the RU number associated with this user.
  			
  			
  			
  			In case of reception where the transmission was DL MU
  			OFDMA, this field provides the RU pattern. Note that fields
  			ofdma_user_index and ofdma_content_channel are needed to
  			determine which RU (within a 40 MHz channel) was actually
  			assigned to this user, but this does not give info on which
  			40 MHz channel was assigned to this user. Please refer
  			DL_ofdma_ru_* in PHYRX_PKT_END_INFO for complete RU info for
  			this user.
  			
  			
  			
  			In case of reception where the transmission was UL MU
  			OFDMA, PHY is recommended to insert the RU start index in
  			this field. Note that PHY may insert the RU width in
  			Reserved_2a[6:0].
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION_OFFSET               0x00000004
  #define RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION_LSB                  16
  #define RECEIVE_USER_INFO_1_OFDMA_RU_ALLOCATION_MASK                 0x00ff0000
  
  /* Description		RECEIVE_USER_INFO_1_OFDMA_USER_INDEX
  			
  			Field only valid in the of DL MU OFDMA reception
  			
  			
  			
  			The user number within the RU_allocation.
  			
  			
  			
  			This is needed for SW to determine the exact RU position
  			within the reception.
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_1_OFDMA_USER_INDEX_OFFSET                  0x00000004
  #define RECEIVE_USER_INFO_1_OFDMA_USER_INDEX_LSB                     24
  #define RECEIVE_USER_INFO_1_OFDMA_USER_INDEX_MASK                    0x7f000000
  
  /* Description		RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL
  			
  			Field only valid in the of DL MU OFDMA/MIMO reception
  			
  			
  			
  			In case of DL MU reception, this field indicates the
  			content channel number where PHY found the RU information
  			for this user
  			
  			
  			
  			This is needed for SW to determine the exact RU position
  			within the reception.
  			
  			
  			
  			<enum 0      content_channel_1>
  			
  			<enum 1      content_channel_2> 
  			
  			
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL_OFFSET             0x00000004
  #define RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL_LSB                31
  #define RECEIVE_USER_INFO_1_OFDMA_CONTENT_CHANNEL_MASK               0x80000000
  
  /* Description		RECEIVE_USER_INFO_2_LDPC
  			
  			When set, use LDPC transmission rates were used.
  			
  			<legal all>
  */
  #define RECEIVE_USER_INFO_2_LDPC_OFFSET                              0x00000008
  #define RECEIVE_USER_INFO_2_LDPC_LSB                                 0
  #define RECEIVE_USER_INFO_2_LDPC_MASK                                0x00000001
  
  /* Description		RECEIVE_USER_INFO_2_RU_WIDTH
  			
  			In case of UL OFDMA reception, PHY is recommended to
  			insert the RU width
  			
  			In Hastings80: was using Reserved_2a[6:0].
  			
  			<legal 1 - 74>
  */
  #define RECEIVE_USER_INFO_2_RU_WIDTH_OFFSET                          0x00000008
  #define RECEIVE_USER_INFO_2_RU_WIDTH_LSB                             1
  #define RECEIVE_USER_INFO_2_RU_WIDTH_MASK                            0x000000fe
  
  /* Description		RECEIVE_USER_INFO_2_RESERVED_2A
  			
  			<legal 0>
  */
  #define RECEIVE_USER_INFO_2_RESERVED_2A_OFFSET                       0x00000008
  #define RECEIVE_USER_INFO_2_RESERVED_2A_LSB                          8
  #define RECEIVE_USER_INFO_2_RESERVED_2A_MASK                         0xffffff00
  
  
  #endif // _RECEIVE_USER_INFO_H_
  