/******************************************************************************
 *
 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
 * Copyright(c) 2018        Intel Corporation
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Intel Corporation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/
/****************************************************************************
 * File Name : API_rates.h
 *
 *
 * Description : uCode\Driver Command & Response API Definitions
 ****************************************************************************/

#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_MVM_API_RATES_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_MVM_API_RATES_H_

#include "src/iwlwifi/platform/compiler.h"

/**
  @defgroup GroupRates Rates Masks and Indices
  @ingroup GroupDataPath
  @{
 */

// *****************************************
// * channel width code/index from 20Mhz ... 160Mhz
// *****************************************
#define CHANNEL_WIDTH20 0
#define CHANNEL_WIDTH40 1
#define CHANNEL_WIDTH80 2
#define CHANNEL_WIDTH160 3
#define MAX_CHANNEL_BW_INDX 4  // used to initialize const arrays

#define MAX_NSS 2  // max number of spatial streams

#define CHANNEL_WIDTH_MSK_API_D_VER_1 1
#define CHANNEL_WIDTH_MSK_API_D_VER_2 3

// *****************************************
// * ofdm & cck rate codes
// *****************************************
/**
  @defgroup GroupRatesCodes OFDM and CCK Rate Codes
  @ingroup GroupRates
  @{
 */
#define R_6M 0xd
#define R_9M 0xf
#define R_12M 0x5
#define R_18M 0x7
#define R_24M 0x9
#define R_36M 0xb
#define R_48M 0x1
#define R_54M 0x3

#define R_1M 0xa
#define R_2M 0x14
#define R_5_5M 0x37
#define R_11M 0x6e
/**@} GroupRatesCodes */

// *****************************************
// * ofdm & cck indices
// *****************************************
/**
  @defgroup GroupRatesIndices OFDM and CCK Rate Indices
  @ingroup GroupRates
  @{
 */
#define R_6M_INDEX 0x6
#define R_9M_INDEX 0x7
#define R_12M_INDEX 0x2
#define R_18M_INDEX 0x3
#define R_24M_INDEX 0x4
#define R_36M_INDEX 0x5
#define R_48M_INDEX 0x0
#define R_54M_INDEX 0x1

#define R_1M_INDEX 0x0
#define R_2M_INDEX 0x1
#define R_5_5M_INDEX 0x3
#define R_11M_INDEX 0x2
/**@} GroupRatesIndices */

// *****************************************
// * OFDM Rate Masks
// *****************************************
/**
  @defgroup GroupOfdmRatesMasks OFDM Rate Masks
  @ingroup GroupRates
  @{
 */
#define R_6M_MSK 0x1
#define R_9M_MSK 0x2
#define R_12M_MSK 0x4
#define R_18M_MSK 0x8
#define R_24M_MSK 0x10
#define R_36M_MSK 0x20
#define R_48M_MSK 0x40
#define R_54M_MSK 0x80
/**@} GroupOfdmRatesMasks */

// *****************************************
// * CCK Rate Masks
// *****************************************
/**
  @defgroup GroupCckRatesMasks CCK Rate Masks
  @ingroup GroupRates
  @{
 */
#define R_1M_MSK 0x1
#define R_2M_MSK 0x2
#define R_5_5M_MSK 0x4
#define R_11M_MSK 0x8
/**@} GroupCckRatesMasks */

// *****************************************
// * OFDM HT rate codes
// *****************************************
#define MCS_6M 0
#define MCS_12M 1
#define MCS_18M 2
#define MCS_24M 3
#define MCS_36M 4
#define MCS_48M 5
#define MCS_54M 6
#define MCS_60M 7

// MIMO 2-spatial streams
#define MCS_MIMO2_6M 0x8
#define MCS_MIMO2_12M 0x9
#define MCS_MIMO2_18M 0xa
#define MCS_MIMO2_24M 0xb
#define MCS_MIMO2_36M 0xc
#define MCS_MIMO2_48M 0xd
#define MCS_MIMO2_54M 0xe
#define MCS_MIMO2_60M 0xf
// MIMO 3-spatial streams
#define MCS_MIMO3_6M 0x10
#define MCS_MIMO3_12M 0x11
#define MCS_MIMO3_18M 0x12
#define MCS_MIMO3_24M 0x13
#define MCS_MIMO3_36M 0x14
#define MCS_MIMO3_48M 0x15
#define MCS_MIMO3_54M 0x16
#define MCS_MIMO3_60M 0x17

#define MCS_DUP_6M 0x20

// for VHT rates (i.e. 256-QAM punc 3/4 and 5/6)
#define VHT_MCS_RATES_NUM (10)
// for HE rates (i.e. 1024-QAM punc 3/4 and 5/6)
#define HE_MCS_RATES_NUM (12)

#define MCS_VHT_6M MCS_6M
#define MCS_VHT_12M MCS_12M
#define MCS_VHT_18M MCS_18M
#define MCS_VHT_24M MCS_24M
#define MCS_VHT_36M MCS_36M
#define MCS_VHT_48M MCS_48M
#define MCS_VHT_54M MCS_54M
#define MCS_VHT_60M MCS_60M
#define MCS_VHT_72M 8
#define MCS_VHT_80M 9

#define MCS_VHT_MIMO2_6M (0x10 | MCS_VHT_6M)
#define MCS_VHT_MIMO2_12M (0x10 | MCS_VHT_12M)
#define MCS_VHT_MIMO2_18M (0x10 | MCS_VHT_18M)
#define MCS_VHT_MIMO2_24M (0x10 | MCS_VHT_24M)
#define MCS_VHT_MIMO2_36M (0x10 | MCS_VHT_36M)
#define MCS_VHT_MIMO2_48M (0x10 | MCS_VHT_48M)
#define MCS_VHT_MIMO2_54M (0x10 | MCS_VHT_54M)
#define MCS_VHT_MIMO2_60M (0x10 | MCS_VHT_60M)
#define MCS_VHT_MIMO2_72M (0x10 | MCS_VHT_72M)
#define MCS_VHT_MIMO2_80M (0x10 | MCS_VHT_80M)

#define MCS_VHT_MIMO3_6M (0x20 | MCS_VHT_6M)
#define MCS_VHT_MIMO3_12M (0x20 | MCS_VHT_12M)
#define MCS_VHT_MIMO3_18M (0x20 | MCS_VHT_18M)
#define MCS_VHT_MIMO3_24M (0x20 | MCS_VHT_24M)
#define MCS_VHT_MIMO3_36M (0x20 | MCS_VHT_36M)
#define MCS_VHT_MIMO3_48M (0x20 | MCS_VHT_48M)
#define MCS_VHT_MIMO3_54M (0x20 | MCS_VHT_54M)
#define MCS_VHT_MIMO3_60M (0x20 | MCS_VHT_60M)
#define MCS_VHT_MIMO3_72M (0x20 | MCS_VHT_72M)
#define MCS_VHT_MIMO3_80M (0x20 | MCS_VHT_80M)

// HT these rates are not used
#define MCS_MIMO2_MIXED_16Q_04Q_39M 0x21
#define MCS_MIMO2_MIXED_64Q_04Q_52M 0x22
#define MCS_MIMO2_MIXED_64Q_16Q_65M 0x23
#define MCS_MIMO2_MIXED_16Q_04Q_58M 0x24
#define MCS_MIMO2_MIXED_64Q_04Q_78M 0x25
#define MCS_MIMO2_MIXED_64Q_16Q_97M 0x26

#define MCS_MIMO3_MIXED_16Q_04Q_04Q_52M 0x27
#define MCS_MIMO3_MIXED_16Q_16Q_04Q_65M 0x28
#define MCS_MIMO3_MIXED_64Q_04Q_04Q_65M 0x29
#define MCS_MIMO3_MIXED_64Q_16Q_04Q_78M 0x2a
#define MCS_MIMO3_MIXED_64Q_16Q_16Q_91M 0x2b
#define MCS_MIMO3_MIXED_64Q_64Q_04Q_91M 0x2c
#define MCS_MIMO3_MIXED_64Q_64Q_16Q_104M 0x2d
#define MCS_MIMO3_MIXED_16Q_04Q_04Q_78M 0x2e
#define MCS_MIMO3_MIXED_16Q_16Q_04Q_97M 0x2f
#define MCS_MIMO3_MIXED_64Q_04Q_04Q_97M 0x30
#define MCS_MIMO3_MIXED_64Q_16Q_04Q_117M 0x31
#define MCS_MIMO3_MIXED_64Q_16Q_16Q_136M 0x32
#define MCS_MIMO3_MIXED_64Q_64Q_04Q_136M 0x33
#define MCS_MIMO3_MIXED_64Q_64Q_16Q_156M 0x34

#define QAM_BPSK 0  // MCS 0
#define QAM_QPSK 1  // MCS 1, 2
#define QAM_16 2    // MCS 3, 4
#define QAM_64 3    // MCS 5, 6, 7
#define QAM_256 4   // MCS 8, 9
#define QAM_1024 5  // MCS 10, 11

// *****************************************
// * OFDM HT Rate Masks
// *****************************************
#define MCS_6M_MSK 0x1
#define MCS_12M_MSK 0x2
#define MCS_18M_MSK 0x4
#define MCS_24M_MSK 0x8
#define MCS_36M_MSK 0x10
#define MCS_48M_MSK 0x20
#define MCS_54M_MSK 0x40
#define MCS_60M_MSK 0x80
#define MCS_12M_DUAL_MSK 0x100
#define MCS_24M_DUAL_MSK 0x200
#define MCS_36M_DUAL_MSK 0x400
#define MCS_48M_DUAL_MSK 0x800
#define MCS_72M_DUAL_MSK 0x1000
#define MCS_96M_DUAL_MSK 0x2000
#define MCS_108M_DUAL_MSK 0x4000
#define MCS_120M_DUAL_MSK 0x8000
#define MCS_18M_TRIPPLE_MSK 0x10000
#define MCS_36M_TRIPPLE_MSK 0x20000
#define MCS_54M_TRIPPLE_MSK 0x40000
#define MCS_72M_TRIPPLE_MSK 0x80000
#define MCS_108M_TRIPPLE_MSK 0x100000
#define MCS_144M_TRIPPLE_MSK 0x200000
#define MCS_162M_TRIPPLE_MSK 0x400000
#define MCS_180M_TRIPPLE_MSK 0x800000

// *****************************************
// * OFDM VHT Rate Masks
// *****************************************
#define MCS_VHT_6M_MSK 0x1
#define MCS_VHT_12M_MSK 0x2
#define MCS_VHT_18M_MSK 0x4
#define MCS_VHT_24M_MSK 0x8
#define MCS_VHT_36M_MSK 0x10
#define MCS_VHT_48M_MSK 0x20
#define MCS_VHT_54M_MSK 0x40
#define MCS_VHT_60M_MSK 0x80
#define MCS_VHT_72M_MSK 0x100
#define MCS_VHT_80M_MSK 0x200
#define MCS_VHT_6M_MIMO2_MSK 0x400
#define MCS_VHT_12M_MIMO2_MSK 0x800
#define MCS_VHT_18M_MIMO2_MSK 0x1000
#define MCS_VHT_24M_MIMO2_MSK 0x2000
#define MCS_VHT_36M_MIMO2_MSK 0x4000
#define MCS_VHT_48M_MIMO2_MSK 0x8000
#define MCS_VHT_54M_MIMO2_MSK 0x10000
#define MCS_VHT_60M_MIMO2_MSK 0x20000
#define MCS_VHT_72M_MIMO2_MSK 0x40000
#define MCS_VHT_80M_MIMO2_MSK 0x80000
#define MCS_VHT_6M_MIMO3_MSK 0x100000
#define MCS_VHT_12M_MIMO3_MSK 0x200000
#define MCS_VHT_18M_MIMO3_MSK 0x400000
#define MCS_VHT_24M_MIMO3_MSK 0x800000
#define MCS_VHT_36M_MIMO3_MSK 0x1000000
#define MCS_VHT_48M_MIMO3_MSK 0x2000000
#define MCS_VHT_54M_MIMO3_MSK 0x4000000
#define MCS_VHT_60M_MIMO3_MSK 0x8000000
#define MCS_VHT_72M_MIMO3_MSK 0x10000000
#define MCS_VHT_80M_MIMO3_MSK 0x20000000

#define MCS_HE_6M MCS_VHT_6M
#define MCS_HE_12M MCS_VHT_12M
#define MCS_HE_18M MCS_VHT_18M
#define MCS_HE_24M MCS_VHT_24M
#define MCS_HE_36M MCS_VHT_36M
#define MCS_HE_48M MCS_VHT_48M
#define MCS_HE_54M MCS_VHT_54M
#define MCS_HE_60M MCS_VHT_60M
#define MCS_HE_72M MCS_VHT_72M
#define MCS_HE_80M MCS_VHT_80M
#define MCS_HE_90M 0xa
#define MCS_HE_100M 0xb
#define MCS_HE_MAX MCS_HE_100M

#define BEACON_TEMPLATE_FLAGS_ANT_A_POS (9)
#define BEACON_TEMPLATE_FLAGS_ANT_B_POS (10)
#define BEACON_TEMPLATE_FLAGS_ANT_C_POS (11)
#define BEACON_TEMPLATE_FLAGS_ANT_ABC_NORM_MSK (BIT_MASK_3BIT)
#define BEACON_TEMPLATE_FLAGS_ANT_ABC_MSK \
  (BEACON_TEMPLATE_FLAGS_ANT_ABC_NORM_MSK << BEACON_TEMPLATE_FLAGS_ANT_A_POS)

// Kedron, added rate & MCS struct
// bit 7:0 Rate or MCS
// bit 8 OFDM-HT
// bit 9 CCK
// bit 10 reserved (removed CCK short preamble)
// bit 11 FAT channel
// bit 12 reserved (removed FAT duplicate)
// bit 13 short GI
// bit 14 TX chain A enable
// bit 15 TX chain B enable
// bit 16 TX chain C enable

// HT  bit-2:0 give rate code (QAM/puncture) such 0==>6M....7==>63M,
//     bit-4:3 spatial streams such 0==>1 SS, 1==>2 SS, 2==>3 SS
// VHT bit-3:0 give rate code (QAM/puncture)
//     bit-5:4 spatial streams such 0==>1 SS, 1==>2 SS, 2==>3 SS
// HE
#define RATE_MCS_CODE_MSK 0x7f

typedef enum _MIMO_INDX_E {
  SISO_INDX = 0,
  MIMO2_INDX = 1,
  MIMO3_INDX = 2,
  MIMO4_INDX = 3,
  MAX_MIMO_INDX
} MIMO_INDX_E;

// this mask will apply to all MCS with the exception of MCS 32 which is not mimo but bit 5 is set
// for all other MCSs bits [6..3] set --> MIMO rate
#define RATE_MCS_HT_RATE_CODE_MSK 0x7
#define RATE_MCS_HT_MIMO_POS 3
#define RATE_MCS_HT_MIMO_MSK (0x3 << RATE_MCS_HT_MIMO_POS)
// bit-3 0==>one spatial stream 1==>two spatial streams
#define RATE_MCS_HT_SISO_MSK (0 << RATE_MCS_HT_MIMO_POS)
#define RATE_MCS_HT_MIMO2_MSK (1 << RATE_MCS_HT_MIMO_POS)
#define RATE_MCS_HT_MIMO3_MSK (2 << RATE_MCS_HT_MIMO_POS)

// bit-3:0 give VHT rate code, QAM and puncturing
// 0==>BPSK 1/2,   1==>QPSK 1/2,  2==>QPSK 2/3,  3==>16QAM 1/2
// 4==>16QAM 3/4,  5==>64QAM 2/3, 6==>64QAM 3/4, 7==>64QAM 5/6
// 8==>256QAM 3/4, 9==>256QAM 5/6
#define RATE_MCS_VHT_RATE_CODE_MSK 0xf
#define RATE_MCS_VHT_MIMO_POS 4
#define RATE_MCS_VHT_MIMO_MSK (3 << RATE_MCS_VHT_MIMO_POS)
#define RATE_MCS_VHT_SISO (0 << RATE_MCS_VHT_MIMO_POS)
#define RATE_MCS_VHT_MIMO2 (1 << RATE_MCS_VHT_MIMO_POS)
#define RATE_MCS_VHT_MIMO3 (2 << RATE_MCS_VHT_MIMO_POS)
#define RATE_MCS_VHT_MIMO4 (3 << RATE_MCS_VHT_MIMO_POS)

// bit-5 HT MCS 0x20, 2x6Mbps, not used
#define RATE_MCS_HT_DUP_POS 5
#define RATE_MCS_HT_DUP_MSK (1 << RATE_MCS_HT_DUP_POS)
// flag field reside at bits 15:8
#define RATE_MCS_FLAGS_POS 8

// bit-8 0==>legacy rate 1==>HT MCS
#define RATE_MCS_HT_POS 8
#define RATE_MCS_HT_MSK (1 << RATE_MCS_HT_POS)
// bit-9 0==>OFDM 1==>CCK
#define RATE_MCS_CCK_POS 9
#define RATE_MCS_CCK_MSK (1 << RATE_MCS_CCK_POS)

// bit-10 mark usage of green-field preamble
//#define RATE_MCS_GF_POS            10
//#define RATE_MCS_GF_MSK            (1 << RATE_MCS_GF_POS)

// bit-10 mark modulation is OFDM HE, exact type is given in VHT_HT_TYPE field
#define RATE_MCS_HE_POS 10

// bit-12:11 0==>20MHz, 1==>40MHz, 2==>80MHz, 3==>160MHz
// Note: for duplicate use non-FAT
#define RATE_MCS_FAT_POS 11
#define RATE_MCS_FAT_MSK_API_D_VER_1 (CHANNEL_WIDTH_MSK_API_D_VER_1 << RATE_MCS_FAT_POS)
#define RATE_MCS_FAT_MSK_API_D_VER_2 (CHANNEL_WIDTH_MSK_API_D_VER_2 << RATE_MCS_FAT_POS)
#define RATE_MCS_FAT40 (CHANNEL_WIDTH40 << RATE_MCS_FAT_POS)
#define RATE_MCS_FAT80 (CHANNEL_WIDTH80 << RATE_MCS_FAT_POS)
#define RATE_MCS_FAT160 (CHANNEL_WIDTH160 << RATE_MCS_FAT_POS)

// bit-13 0==>normal guard interval 1==>short guard interval
#define RATE_MCS_SGI_POS 13
#define RATE_MCS_SGI_MSK (1 << RATE_MCS_SGI_POS)
// bit-14 0==>chain A incative 1==>chain A active
#define RATE_MCS_ANT_A_POS 14
// bit-15 0==>chain B incative 1==>chain B active
#define RATE_MCS_ANT_B_POS 15

// new flags in shiloh (ext_flags)

// bit-16 0==>chain B incative 1==>chain B active
#define RATE_MCS_ANT_C_POS 16
// bit-15:14 mask for both ant.
#define RATE_MCS_ANT_AB_MSK (RATE_MCS_ANT_A_MSK | RATE_MCS_ANT_B_MSK)
#define RATE_MCS_ANT_AC_MSK (RATE_MCS_ANT_A_MSK | RATE_MCS_ANT_C_MSK)
#define RATE_MCS_ANT_BC_MSK (RATE_MCS_ANT_B_MSK | RATE_MCS_ANT_C_MSK)

// bit-16:14 mask for all ants.

#define RATE_MCS_3ANT_MSK(rate) ((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_ABC_MSK)

#define RATE_MCS_2ANT_MSK(rate)                                           \
  (((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_AB_MSK) || \
   ((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_AC_MSK) || \
   ((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_BC_MSK))

#define RATE_MCS_1ANT_MSK(rate)                                          \
  (((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_A_MSK) || \
   ((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_B_MSK) || \
   ((rate.rate_n_flags & RATE_MCS_ANT_ABC_MSK) == RATE_MCS_ANT_C_MSK))

// rate&flags cleanup - use single bit for STBC
// for HT the number of space-time-streams is SS+STBC, STBC is 0/1/2
// for VHT the number of space-time-streams is: STBC=0 ==> SS, STBC=1 ==> SS*2, STBC is 0/1
// note for HT STBC is writen in TX_VEC0, while for VHT in TX_VEC_VHT1 (0x8051)
#define RATE_MCS_STBC_POS 17

// HE - dual carrier mode
#define RATE_MCS_HE_DCM_POS 18
#define RATE_MCS_HE_DCM_MSK (1 << RATE_MCS_HE_DCM_POS)

// Beam-forming defines
#define RATE_MCS_BF_POS 19
#define RATE_MCS_BF_MSK (1 << RATE_MCS_BF_POS)

// removed - HE rate&flags cleanup
// BFR NDP frame, this is used only for TX NDP.
//#define RATE_MCS_ZLF_POS           (20)
//#define RATE_MCS_ZLF_MSK           (1 << RATE_MCS_ZLF_POS)

// removed - HE rate&flags cleanup
// sounding packet, used (currently) only for HT BF, (i.e. not VHT)
//#define RATE_MCS_HT_SOUNDING_POS   (21)
//#define RATE_MCS_HT_SOUNDING_MSK   (1 << RATE_MCS_HT_SOUNDING_POS)

// removed - HE rate&flags cleanup
// extended LTFs used to allow the transmitter to send more LTFs then the MIMO level
// currently used only for HT rates, (for VHT use NDP (i.e. ZLF))
//#define RATE_MCS_HT_NUMBER_EXT_LTF_POS (22)
//#define RATE_MCS_HT_NUMBER_EXT_LTF_MSK (3 << RATE_MCS_HT_NUMBER_EXT_LTF_POS)

// HE guard-interval and LTF size: 0 - 1xLTF+0.8us, 1 - 2xLTF+0.8us, 2 - 2xLTF+1.6us, 3 -
// 4xLTF+3.2us,
//  for HE_SU a 4th - 4xLTF+0.8us <- GI_LTF=3 & SGI=1
#define RATE_MCS_HE_GI_LTF_POS 20

// VHT: 0 - SU, 2 - MU, HE: 0 - SU, 1 - SU_EXT, 2 - MU, 3 - trig-base
#define RATE_MCS_VHT_HE_TYPE_POS 22
#define RATE_MCS_VHT_HE_TYPE_MSK (0x3 << RATE_MCS_VHT_HE_TYPE_POS)
#define RATE_MCS_VHT_HE_SU 0
#define RATE_MCS_HE_EXT_RANGE 1
#define RATE_MCS_VHT_HE_MU 2
#define RATE_MCS_HE_TRIG_BASE 3

// VHT rates defines
// VHT frame
// 0==>1x20MHz (i.e. no dup), 1==>2x20MHz, 2==>4x20MHz, 3==>8x20MHz
// note: when using duplicate FAT should be 0, i.e. 20Mhz
#define RATE_MCS_DUP_POS_API_D_VER_1 (12)
#define RATE_MCS_DUP_POS_API_D_VER_2 (24)

#define RATE_MCS_DUP_MSK_API_D_VER_1 (CHANNEL_WIDTH_MSK_API_D_VER_1 << RATE_MCS_DUP_POS_API_D_VER_1)
#define RATE_MCS_DUP_MSK_API_D_VER_2 (CHANNEL_WIDTH_MSK_API_D_VER_2 << RATE_MCS_DUP_POS_API_D_VER_2)

// rate&flags cleanup, moved to VHT_HE_TYPE field
//#define RATE_MCS_MU_POS            (28)
//#define RATE_MCS_MU_MSK            (1 << RATE_MCS_MU_POS)

// mark HE extended range using 106-tones
#define RATE_MCS_HE_ER_106_POS (28)
#define RATE_MCS_HE_ER_106_MSK (1 << RATE_MCS_HE_ER_106_POS)

#define RATE_MCS_RTS_REQUIRED_POS (30)
#define RATE_MCS_RTS_REQUIRED_MSK (0x1 << RATE_MCS_RTS_REQUIRED_POS)

#define RATE_MCS_CTS_REQUIRED_POS (31)
#define RATE_MCS_CTS_REQUIRED_MSK ((U32)0x1 << RATE_MCS_CTS_REQUIRED_POS)

#define RATE_MCS_PROT_REQUIRED_POS (30)
#define RATE_MCS_PROT_REQUIRED_MSK ((U32)0x3 << RATE_MCS_PROT_REQUIRED_POS)

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// The below defines are obsolete.
// There are still define here since the driver still use it.
// Need to cleanup the driver code and remove it from here.
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define RATE_MCS_GF_POS (10)
#define RATE_MCS_GF_MSK (1 << RATE_MCS_GF_POS)
#define RATE_MCS_ZLF_POS (20)
#define RATE_MCS_ZLF_MSK (1 << RATE_MCS_ZLF_POS)
#define RATE_MCS_HT_SOUNDING_POS (21)
#define RATE_MCS_HT_SOUNDING_MSK (1 << RATE_MCS_HT_SOUNDING_POS)
#define RATE_MCS_HT_NUMBER_EXT_LTF_POS (22)
#define RATE_MCS_HT_NUMBER_EXT_LTF_MSK (3 << RATE_MCS_HT_NUMBER_EXT_LTF_POS)
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#define POWER_TABLE_NUM_HT_OFDM_ENTRIES (32)  // for Kedron

#define MAX_SUPP_MCS_API_D_VER_1 (15)

// modified the max rate index from 76 which is the spec value to 31 which is the last "normal" rate
// index the next "crazy" rate codes are 32-HT_DUP and 33..76 Nss with different QAM per spatial
// stream. note the bc/rate-->time conversion doesn't handle the crazy rates.
//#define MAX_LEGAL_MCS_API_D_VER_1  (76)
#define MAX_LEGAL_MCS_API_D_VER_1 (31)
#define MAX_TX_MCS_API_D_VER_1 (31)

// two entries: one for 2 chains TX(index 1), one for single chain(index 0)
#define POWER_TABLE_NUM_CCK_ENTRIES_API_D_VER_1 (2)

#define POWER_TABLE_NUM_HT_OFDM_ENTRIES_API_D_VER_1 (24)  // MCSs 0-23

#define POWER_TABLE_3_STREAM_HT_OFDM_ENTRIES_API_D_VER_1 (24)  // MCSs 0-23
#define POWER_TABLE_2_STREAM_HT_OFDM_ENTRIES_API_D_VER_1 (16)  // MCSs 0-15
#define POWER_TABLE_1_STREAM_HT_OFDM_ENTRIES_API_D_VER_1 (8)   // MCSs 0-7

#define POWER_TABLE_TOTAL_ENTRIES_API_D_VER_1 \
  (POWER_TABLE_NUM_CCK_ENTRIES_API_D_VER_1 +  \
   POWER_TABLE_3_STREAM_HT_OFDM_ENTRIES_API_D_VER_1)  // 3 tx chain
#define POWER_TABLE_TOTAL_ENTRIES_API_D_VER_2 \
  (POWER_TABLE_NUM_CCK_ENTRIES_API_D_VER_1 +  \
   POWER_TABLE_2_STREAM_HT_OFDM_ENTRIES_API_D_VER_1)  // 2 tx chain
#define POWER_TABLE_TOTAL_ENTRIES_API_D_VER_3 \
  (POWER_TABLE_NUM_CCK_ENTRIES_API_D_VER_1 +  \
   POWER_TABLE_1_STREAM_HT_OFDM_ENTRIES_API_D_VER_1)  // 1 tx chain

/**
 * @ingroup apiCmdAllTypes
 * \brief rates enum
 *
 */
typedef enum _MCS_API_E_VER_1 {
  mcs_6m = MCS_6M,
  mcs_12m = MCS_12M,
  mcs_18m = MCS_18M,
  mcs_24m = MCS_24M,
  mcs_36m = MCS_36M,
  mcs_48m = MCS_48M,
  mcs_54m = MCS_54M,
  mcs_60m = MCS_60M,

  mcs_MIMO2_6m = MCS_MIMO2_6M,
  mcs_MIMO2_12m = MCS_MIMO2_12M,
  mcs_MIMO2_18m = MCS_MIMO2_18M,
  mcs_MIMO2_24m = MCS_MIMO2_24M,
  mcs_MIMO2_36m = MCS_MIMO2_36M,
  mcs_MIMO2_48m = MCS_MIMO2_48M,
  mcs_MIMO2_54m = MCS_MIMO2_54M,
  mcs_MIMO2_60m = MCS_MIMO2_60M,

  mcs_MIMO3_6m = MCS_MIMO3_6M,
  mcs_MIMO3_12m = MCS_MIMO3_12M,
  mcs_MIMO3_18m = MCS_MIMO3_18M,
  mcs_MIMO3_24m = MCS_MIMO3_24M,
  mcs_MIMO3_36m = MCS_MIMO3_36M,
  mcs_MIMO3_48m = MCS_MIMO3_48M,
  mcs_MIMO3_54m = MCS_MIMO3_54M,
  mcs_MIMO3_60m = MCS_MIMO3_60M,

  mcs_dup_6m = MCS_DUP_6M,

  mcs_MIMO2_mixed_16q_04q_39m = MCS_MIMO2_MIXED_16Q_04Q_39M,
  mcs_MIMO2_mixed_64q_04q_52m = MCS_MIMO2_MIXED_64Q_04Q_52M,
  mcs_MIMO2_mixed_64q_16q_65m = MCS_MIMO2_MIXED_64Q_16Q_65M,
  mcs_MIMO2_mixed_16q_04q_58m = MCS_MIMO2_MIXED_16Q_04Q_58M,
  mcs_MIMO2_mixed_64q_04q_78m = MCS_MIMO2_MIXED_64Q_04Q_78M,
  mcs_MIMO2_mixed_64q_16q_97m = MCS_MIMO2_MIXED_64Q_16Q_97M,

  mcs_MIMO3_mixed_16q_04q_04q_52m = MCS_MIMO3_MIXED_16Q_04Q_04Q_52M,
  mcs_MIMO3_mixed_16q_16q_04q_65m = MCS_MIMO3_MIXED_16Q_16Q_04Q_65M,
  mcs_MIMO3_mixed_64q_04q_04q_65m = MCS_MIMO3_MIXED_64Q_04Q_04Q_65M,
  mcs_MIMO3_mixed_64q_16q_04q_78m = MCS_MIMO3_MIXED_64Q_16Q_04Q_78M,
  mcs_MIMO3_mixed_64q_16q_16q_91m = MCS_MIMO3_MIXED_64Q_16Q_16Q_91M,
  mcs_MIMO3_mixed_64q_64q_04q_91m = MCS_MIMO3_MIXED_64Q_64Q_04Q_91M,
  mcs_MIMO3_mixed_64q_64q_16q_104m = MCS_MIMO3_MIXED_64Q_64Q_16Q_104M,
  mcs_MIMO3_mixed_16q_04q_04q_78m = MCS_MIMO3_MIXED_16Q_04Q_04Q_78M,
  mcs_MIMO3_mixed_16q_16q_04q_97m = MCS_MIMO3_MIXED_16Q_16Q_04Q_97M,
  mcs_MIMO3_mixed_64q_04q_04q_97m = MCS_MIMO3_MIXED_64Q_04Q_04Q_97M,
  mcs_MIMO3_mixed_64q_16q_04q_117m = MCS_MIMO3_MIXED_64Q_16Q_04Q_117M,
  mcs_MIMO3_mixed_64q_16q_16q_136m = MCS_MIMO3_MIXED_64Q_16Q_16Q_136M,
  mcs_MIMO3_mixed_64q_64q_04q_136m = MCS_MIMO3_MIXED_64Q_64Q_04Q_136M,
  mcs_MIMO3_mixed_64q_64q_16q_156m = MCS_MIMO3_MIXED_64Q_64Q_16Q_156M,

} MCS_API_E_VER_1;

/**
 * @ingroup apiCmdAllTypes
 * \brief mcs rates
 *
 *
 */
typedef struct _RATE_MCS_API_S_VER_1 {
  U08 rate;
  U08 flags;
  U16 ext_flags;
} __attribute__((packed)) RATE_MCS_API_S_VER_1;

/**
 * Rate representation, with dissection for individual bits
 */
/**
 * @ingroup apiCmdAllTypes
 * \brief mcs rate bits
 *
 *
 */
typedef struct RATE_MCS_BITS_API_S_VER_3 {
  unsigned int rate : 7;        /**< bit 6:0 Rate or MCS */
  unsigned int reserved1 : 1;   /**< bit 7 reserved */
  unsigned int ofdm_ht : 1;     /**< bit 8 OFDM-HT */
  unsigned int cck : 1;         /**< bit 9 CCK */
  unsigned int ofdm_he : 1;     /**< bit 10 OFDM-HE */
  unsigned int fat_channel : 2; /**< bit 12:11 FAT channel 20Mhz...160Mhz, for OFDMA this gives
                                   the full channel width vs. RU */
  unsigned int short_gi : 1;    /**< bit 13 short GI, for HT/VHT 0 - 0.8us, 1 - 0.4us, for HE-SU use
                                   for 5th LTF_GI for HE-SU use for 5th LTF_GI=3 -> 4xLTF+0.8 */
  unsigned int ant_a : 1;       /**< bit 14 chain A active */
  unsigned int ant_b : 1;       /**< bit 15 chain B active */
  unsigned int ant_c : 1;       /**< bit 16 chain C active */
  unsigned int stbc : 1;        /**< bit 17 STBC */
  unsigned int he_dcm : 1;    /**< bit 18 OFDM-HE dual carrier mode, this reduce the number of data
                                 tones by half (for all RUs) */
  unsigned int bf : 1;        /**< bit 19 beamforming*/
  unsigned int he_gi_ltf : 2; /**< bit 21:20 HE guard-interval and LTF
                                             HE SU  : 0 - 1xLTF+0.8, 1 - 2xLTF+0.8, 2 - 2xLTF+1.6,
                                 3 -    4xLTF+3.2, 3+short_gi - 4xLTF+0.8             HE MU  : 0 -
                                 4xLTF+0.8, 1 - 2xLTF+0.8, 2
                                 - 2xLTF+1.6, 3 - 4xLTF+3.2             HE TRIG: 0 - 1xLTF+1.6, 1
                                 - 2xLTF+1.6, 2 -    4xLTF+3.2*/
  unsigned int vht_he_type : 2;  /**< bit 23:22 VHT: 0 - SU, 2 - MU, HE: 0 - SU, 1 - SU_EXT_RANGE,
                                    2 - MU (RU gives data channel width), 3 - trig-base */
  unsigned int dup_channel : 2;  /**< bit 25:24 duplicate channel x1, x2, x4, x8*/
  unsigned int ofdm_vht : 1;     /**< bit 26 VHT */
  unsigned int ldpc : 1;         /**< bit 27 LDPC code */
  unsigned int he_er_106 : 1;    /**< bit 28 HE extended range use 102 data-tones (or 106 tones)*/
  unsigned int reserved3 : 1;    /**< bit 29 */
  unsigned int rts_required : 1; /**< bit 30 RTS reuired for this rate (uCode decision) */
  unsigned int cts_required : 1; /**< bit 31 CTS reuired for this rate (uCode decision) */

  // unsigned int gf:1;             /**< bit 10 green-field */
  // unsigned int stbc:2;           /**< bit 18:17 STBC */
  // unsigned int zlf:1;            /**< bit 20 ZLF (NDP) */
  // unsigned int sounding:1;       /**< bit 21 sounding packet*/
  // unsigned int num_of_ext_ss:2;  /**< bit 23:22 number of extended spatial streams for
  // sounding*/ unsigned int vht_mu:1;         /**< bit 28 VHT/HE Multi-user */
} __attribute__((packed)) RATE_MCS_BITS_API_S_VER_3;

/**
 * @ingroup apiCmdAllTypes
 * \brief Add group and description ...
 *
 *
 */
typedef union _RATE_MCS_API_U_VER_1 {
  RATE_MCS_API_S_VER_1 s;
#if !defined(SV_TOOL_PRECOMPILE_HEADERS)
  RATE_MCS_BITS_API_S_VER_3 bits;
#endif
  U32 rate_n_flags;
} __attribute__((packed)) RATE_MCS_API_U_VER_1;

/**
 * @ingroup apiCmdAllTypes
 * \brief rate struct
 *
 *
 */
typedef struct _RATE_MCS_API_S_VER_0 {
  U08 rate;
  U08 flags;
} __attribute__((packed)) RATE_MCS_API_S_VER_0;

#define IS_RATE_OFDM_API_M_VER_2(c_rate) ((((c_rate).rate_n_flags) & RATE_MCS_CCK_MSK) == 0)

#define IS_RATE_OFDM_LEGACY_API_M_VER_2(c_rate) \
  ((((c_rate).rate_n_flags) & (RATE_MCS_CCK_MSK | RATE_MCS_HT_MSK | RATE_MCS_VHT_MSK)) == 0)

#define IS_RATE_OFDM_HT_API_M_VER_2(c_rate) (((c_rate).rate_n_flags) & RATE_MCS_HT_MSK)

#define IS_RATE_OFDM_VHT_API_M_VER_3(c_rate) (((c_rate).rate_n_flags) & RATE_MCS_VHT_MSK)

#define IS_RATE_OFDM_HT_VHT_API_M_VER_3(c_rate) \
  (((c_rate).rate_n_flags) & (RATE_MCS_HT_MSK | RATE_MCS_VHT_MSK))

#define IS_RATE_OFDM_VHT_API_M_VER_2(c_rate) (FALSE)

#define IS_RATE_OFDM_HT_VHT_API_M_VER_2(c_rate) IS_RATE_OFDM_HT_API_M_VER_2(c_rate)

#define IS_RATE_CCK_API_M_VER_3(c_rate) (((c_rate).rate_n_flags) & RATE_MCS_CCK_MSK)

#define GET_ANT_CHAIN_API_M_VER_1(c_rate) \
  SHIFT_AND_MASK(c_rate.rate_n_flags, RATE_MCS_ANT_ABC_MSK, RATE_MCS_ANT_A_POS)

#define GET_ANT_CHAIN_NUM_API_M_VER_1(c_rate) \
  (g_ChainCfg2ChainNum[GET_ANT_CHAIN_API_M_VER_1(c_rate)])

// don't use for VHT
#define IS_RATE_STBC_PRESENT_API_M_VER_1(c_rate) (((c_rate.rate_n_flags) & RATE_MCS_STBC_MSK))

// don't use for VHT
#define GET_NUM_OF_STBC_SS_API_M_VER_1(c_rate) \
  SHIFT_AND_MASK((c_rate.rate_n_flags), RATE_MCS_STBC_MSK, RATE_MCS_STBC_POS)

// 0==>20MHz, 1==>40MHz
#define GET_BW_INDEX_API_M_VER_1(c_rate) \
  (((c_rate.rate_n_flags) & RATE_MCS_FAT_MSK_API_D_VER_1) >> RATE_MCS_FAT_POS)
// 0==>20MHz, 1==>40MHz, 2==>80MHz, 3==>160MHz
#define GET_BW_INDEX_API_M_VER_2(c_rate) \
  (((c_rate.rate_n_flags) & RATE_MCS_FAT_MSK_API_D_VER_2) >> RATE_MCS_FAT_POS)

// 0==>x1, 1==>x2
#define GET_DUP_INDEX_API_M_VER_1(c_rate) \
  (((c_rate.rate_n_flags) & RATE_MCS_DUP_MSK_API_D_VER_1) >> RATE_MCS_DUP_POS_API_D_VER_1)
// 0==>x1, 1==>x2, 2==>x4, 3==>x8
#define GET_DUP_INDEX_API_M_VER_2(c_rate) \
  (((c_rate.rate_n_flags) & RATE_MCS_DUP_MSK_API_D_VER_2) >> RATE_MCS_DUP_POS_API_D_VER_2)

// get channel width, either by using true wide channel or by duplicate
#define GET_CHANNEL_WIDTH_INDEX_API_M_VER_1(c_rate) \
  (GET_BW_INDEX_API_M_VER_1(c_rate) | GET_DUP_INDEX_API_M_VER_1(c_rate))
#define GET_CHANNEL_WIDTH_INDEX_API_M_VER_2(c_rate) \
  (GET_BW_INDEX_API_M_VER_2(c_rate) | GET_DUP_INDEX_API_M_VER_2(c_rate))

// 0==>normal GI, 1==>short GI
#define GET_GI_INDEX_API_M_VER_1(c_rate) \
  SHIFT_AND_MASK((c_rate.rate_n_flags), RATE_MCS_SGI_MSK, RATE_MCS_SGI_POS)

#define IS_RATE_OFDM_HT_FAT_API_M_VER_2(c_rate)                                  \
  (((c_rate.rate_n_flags) & (RATE_MCS_HT_MSK | RATE_MCS_FAT_MSK_API_D_VER_1)) == \
   (RATE_MCS_HT_MSK | RATE_MCS_FAT40))

#define GET_HT_MIMO_INDEX_API_M_VER_1(c_rate) \
  SHIFT_AND_MASK((c_rate.rate_n_flags), RATE_MCS_HT_MIMO_MSK, RATE_MCS_HT_MIMO_POS)

#define GET_NUM_OF_HT_SS_API_M_VER_1(c_rate) (GET_HT_MIMO_INDEX_API_M_VER_1(c_rate) + 1)

#define IS_RATE_OFDM_HT_MIMO_API_M_VER_2(c_rate) \
  (IS_RATE_OFDM_HT_API_M_VER_2(c_rate) && (GET_NUM_OF_HT_SS_API_M_VER_1(c_rate) > 1))

#define IS_RATE_OFDM_HT2x2MIMO_API_M_VER_1(c_rate) \
  (IS_RATE_OFDM_HT_API_M_VER_2(c_rate) && (GET_NUM_OF_HT_SS_API_M_VER_1(c_rate) == 2))

#define IS_RATE_OFDM_HT3x3MIMO_API_M_VER_1(c_rate) \
  (IS_RATE_OFDM_HT_API_M_VER_2(c_rate) && (GET_NUM_OF_HT_SS_API_M_VER_1(c_rate) == 3))

#define IS_RATE_OFDM_HT4x4MIMO_API_M_VER_1(c_rate) \
  (IS_RATE_OFDM_HT_API_M_VER_2(c_rate) && (GET_NUM_OF_HT_SS_API_M_VER_1(c_rate) == 4))

#define GET_HT_RATE_CODE_API_M_VER_1(c_rate) ((c_rate).rate_n_flags & RATE_MCS_HT_RATE_CODE_MSK)

#define IS_RATE_HT_STBC_SINGLE_SS_API_M_VER_1(c_rate)                 \
  (((c_rate.rate_n_flags) & (RATE_MCS_HT_MSK | RATE_MCS_STBC_MSK)) == \
   (RATE_MCS_HT_MSK | RATE_MCS_STBC_MSK))

// rate&flags cleanup, note extended HT-LTF not supported by DSP
#define GET_NUM_OF_HT_EXT_LTF_API_M_VER_1(c_rate) 0

#define GET_NUM_OF_HT_SPACE_TIME_STREAMS_API_M_VER_1(c_rate) \
  (GET_NUM_OF_HT_SS_API_M_VER_1(c_rate) + GET_NUM_OF_STBC_SS_API_M_VER_1(c_rate))

// check if supported rate the bad rate conditions are:
// 1. MCS is 32 but FAT is not set
// 2. SGI and GF are set w/o MIMO - removed, as support for GF was removed
// 3. Number of STBC SS is greater than 2
// 4. Number of STBC is 2 and number of SS isn't equals to 2
// 5. Legal MCS
#define IS_BAD_OFDM_HT_RATE_API_M_VER_2(rx_rate)                   \
  ((((rx_rate.s.rate) == MCS_DUP_6M) &&                            \
    (!((rx_rate.rate_n_flags) & RATE_MCS_FAT_MSK_API_D_VER_1))) || \
   (GET_NUM_OF_STBC_SS_API_M_VER_1(rx_rate) > 2) ||                \
   ((GET_NUM_OF_STBC_SS_API_M_VER_1(rx_rate) == 2) &&              \
    (!(IS_RATE_OFDM_HT2x2MIMO_API_M_VER_1(rx_rate)))) ||           \
   (IS_RATE_OFDM_HT_API_M_VER_2(rx_rate) && (rx_rate.s.rate > MAX_LEGAL_MCS_API_D_VER_1)))

// removed: GF support:
//  ((!(IS_RATE_OFDM_HT_MIMO_API_M_VER_2(rx_rate))) && (((rx_rate.rate_n_flags) & (RATE_MCS_GF_MSK |
//  RATE_MCS_SGI_MSK)) == (RATE_MCS_GF_MSK | RATE_MCS_SGI_MSK))) ||

#define IS_BAD_OFDM_HT_RATE_API_M_VER_3(rx_rate)                   \
  ((((rx_rate.s.rate) == MCS_DUP_6M) &&                            \
    (!((rx_rate.rate_n_flags) & RATE_MCS_FAT_MSK_API_D_VER_2))) || \
   (GET_NUM_OF_STBC_SS_API_M_VER_1(rx_rate) > 2) ||                \
   ((GET_NUM_OF_STBC_SS_API_M_VER_1(rx_rate) == 2) &&              \
    (!(IS_RATE_OFDM_HT2x2MIMO_API_M_VER_1(rx_rate)))) ||           \
   (IS_RATE_OFDM_HT_API_M_VER_2(rx_rate) && (rx_rate.s.rate > MAX_LEGAL_MCS_API_D_VER_1)))

#define IS_RATE_HT_HIGH_RATE_API_M_VER_1(c_rate)                     \
  (((c_rate.rate_n_flags) & (RATE_MCS_HT_MSK | RATE_MCS_CODE_MSK)) > \
   (RATE_MCS_HT_MSK | RATE_MCS_HT_MIMO2_MSK | MCS_24M_MSK))

// 0==>SISO, 1==>MIMO2, 2==>MIMO3, 3==>MIMO4
#define GET_VHT_MIMO_INDX_API_M_VER_1(c_rate) \
  SHIFT_AND_MASK(((c_rate).s.rate), RATE_MCS_VHT_MIMO_MSK, RATE_MCS_VHT_MIMO_POS)

// for Single-User number of Spatial-steams in SIG is actual number -1
// for Multi-User number of Spatial-steams in SIG is actual number
#define GET_NUM_OF_VHT_SS_API_M_VER_1(c_rate) (GET_VHT_MIMO_INDX_API_M_VER_1(c_rate) + 1)

#define GET_VHT_RATE_CODE_API_M_VER_1(c_rate) ((c_rate).rate_n_flags & RATE_MCS_VHT_RATE_CODE_MSK)

#define GET_HT_VHT_RATE_CODE_API_M_VER_1(c_rate)                             \
  IS_RATE_OFDM_HT_API_M_VER_2(c_rate) ? GET_HT_RATE_CODE_API_M_VER_1(c_rate) \
                                      : GET_VHT_RATE_CODE_API_M_VER_1(c_rate)

// for VHT (unlike HT) STBC may be turned off/on, thus with STBC on, the number of
// space-time-streams is doubled.
#define IS_VHT_STBC_PRESENT_API_M_VER_1(c_rate) (((c_rate.rate_n_flags) & RATE_MCS_STBC_MSK))

#define GET_NUM_OF_VHT_SPACE_TIME_STREAMS_API_M_VER_1(c_rate) \
  (GET_NUM_OF_VHT_SS_API_M_VER_1(c_rate)                      \
   << (IS_VHT_STBC_PRESENT_API_M_VER_1(c_rate) >> RATE_MCS_STBC_POS))

// get Mimo level for any rate, i.e. note legacy rate is SISO
// vht not supported
#define GET_MIMO_INDEX_API_M_VER_2(c_rate) \
  (IS_RATE_OFDM_HT_API_M_VER_2(c_rate) ? GET_HT_MIMO_INDEX_API_M_VER_1(c_rate) : SISO_INDX)

// LDPC rate
#define IS_RATE_OFDM_LDPC_API_M_VER_2(c_rate) ((c_rate).rate_n_flags & RATE_MCS_LDPC_MSK)

// beamformed frame indication
#define GET_BF_INDEX_API_M_VER_1(c_rate) \
  (((c_rate.rate_n_flags) & RATE_MCS_BF_MSK) >> RATE_MCS_BF_POS)

// VHT/HE MU
#define IS_RATE_VHT_MU_API_M_VER_1(c_rate)                                    \
  (((c_rate.rate_n_flags) & (RATE_MCS_VHT_MSK | RATE_MCS_VHT_HE_TYPE_MSK)) == \
   (RATE_MCS_VHT_MSK | (RATE_MCS_VHT_HE_MU << RATE_MCS_VHT_HE_TYPE_POS)))

// *************************************************************************
// *            HE definitions (currently w/o version)
// *************************************************************************
// rate is OFDM-HE
#define IS_RATE_OFDM_HE_API_M(c_rate) ((c_rate.rate_n_flags) & RATE_MCS_HE_MSK)
// rate is OFDM VHT/HE
#define IS_RATE_OFDM_VHT_HE_API_M(c_rate) \
  (((c_rate).rate_n_flags) & (RATE_MCS_VHT_MSK | RATE_MCS_HE_MSK))
// rate is OFDM HT/VHT/HE
#define IS_RATE_OFDM_HT_VHT_HE_API_M(c_rate) \
  ((c_rate) & (RATE_MCS_HT_MSK | RATE_MCS_VHT_MSK | RATE_MCS_HE_MSK))
// rate is OFDM HE and STBC (note should check no DCM, as STBC & DCM mark special GI/HE-LTF)
// basically don't support this combo for now.
#define IS_RATE_OFDM_HE_STBC_API_M(c_rate)                                                    \
  ((((c_rate.rate_n_flags) & (RATE_MCS_STBC_MSK | RATE_MCS_HE_MSK | RATE_MCS_HE_DCM_MSK))) == \
   (RATE_MCS_STBC_MSK | RATE_MCS_HE_MSK))
// number of space time streams
#define GET_NUM_OF_HE_SPACE_TIME_STREAMS_API_M(c_rate) \
  ((c_rate.rate_n_flags) & (RATE_MCS_STBC_MSK | RATE_MCS_VHT_MIMO_MSK)) ? 2 : 1
// rate is OFDM-HE w/ DCM (dual carrier mode)
#define IS_RATE_OFDM_HE_DCM_API_M(c_rate) (c_rate.rate_n_flags & RATE_MCS_HE_DCM_MSK)
#define GET_OFDM_HE_DCM_API_M(c_rate) \
  SHIFT_AND_MASK(c_rate.rate_n_flags, RATE_MCS_HE_DCM_MSK, RATE_MCS_HE_DCM_POS)
// rate is OFDM-HE ext-range using 106-tones (i.e. same as RU 8MHz 102 data-tones)
#define IS_RATE_OFDM_HE_ER_106_API_M(c_rate) (c_rate.rate_n_flags & RATE_MCS_HE_ER_106_MSK)
#define GET_OFDM_HE_ER_106_API_M(c_rate) \
  SHIFT_AND_MASK(c_rate.rate_n_flags, RATE_MCS_HE_ER_106_MSK, RATE_MCS_HE_ER_106_POS)
// get OFDM-HE HE-LTF size / GI size
#define GET_OFDM_HE_GI_LTF_INDX_API_M(c_rate) \
  SHIFT_AND_MASK(c_rate.rate_n_flags, RATE_MCS_HE_GI_LTF_MSK, RATE_MCS_HE_GI_LTF_POS)
// get OFDM-HE type: SU, extended-range, MU, TRIG
#define GET_OFDM_VHT_HE_TYPE_API_M(c_rate) \
  SHIFT_AND_MASK(c_rate.rate_n_flags, RATE_MCS_VHT_HE_TYPE_MSK, RATE_MCS_VHT_HE_TYPE_POS)
// check if OFDM-VHT/HE single-user
#define IS_RATE_OFDM_VHT_HE_SU_API_M(c_rate) \
  (GET_OFDM_VHT_HE_TYPE_API_M(c_rate) == RATE_MCS_VHT_HE_SU)
// check if OFDM-HE single-user extended range
#define IS_RATE_OFDM_HE_EXT_RANGE_API_M(c_rate) \
  (GET_OFDM_VHT_HE_TYPE_API_M(c_rate) == RATE_MCS_HE_EXT_RANGE)
// check if OFDM-HE trigger frame based
#define IS_RATE_OFDM_HE_TRIG_BASE_API_M(c_rate) \
  (GET_OFDM_VHT_HE_TYPE_API_M(c_rate) == RATE_MCS_HE_TRIG_BASE)
// check if rate is VHT/HE multi-user
#define IS_RATE_OFDM_VHT_HE_MU_API_M(c_rate) \
  (GET_OFDM_VHT_HE_TYPE_API_M(c_rate) == RATE_MCS_VHT_HE_MU)
// get the MCS index for HT/VHT/HE
#define GET_HT_VHT_HE_RATE_CODE_API_M(c_rate) GET_HT_VHT_RATE_CODE_API_M_VER_1(c_rate)

// vht supported
#define GET_MIMO_INDEX_API_M_VER_3(c_rate)     \
  (IS_RATE_OFDM_HT_API_M_VER_2(c_rate)         \
       ? GET_HT_MIMO_INDEX_API_M_VER_1(c_rate) \
       : IS_RATE_OFDM_VHT_HE_API_M(c_rate) ? GET_VHT_MIMO_INDX_API_M_VER_1(c_rate) : SISO_INDX)

/**@} GroupRates */

#endif  // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_MVM_API_RATES_H_
