blob: 18eb46b4c9a58a810d4adc0502018dc4b91c3975 [file] [log] [blame]
/*
* This module does provides various mappings to or from the CLM rate indexes.
*
* Broadcom Proprietary and Confidential. Copyright (C) 2017,
* All Rights Reserved.
*
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom;
* the contents of this file may not be disclosed to third parties, copied
* or duplicated in any form, in whole or in part, without the prior
* written permission of Broadcom.
*
*
* <<Broadcom-WL-IPTag/Proprietary:>>
*/
/*FILE-CSTYLED*/
#ifndef _WLU_RATES_MATRIX_H_
#define _WLU_RATES_MATRIX_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include <bcmwifi_rates.h>
#include <wlioctl.h>
#include <typedefs.h>
#include <epivers.h>
#include <bcmutils.h>
#include <bcmendian.h>
#include <bcmwifi_channels.h>
#include <wlc_ppr.h>
#ifdef LINUX
#include <inttypes.h>
#endif
#include <miniopt.h>
#define WL_UNSUPPORTED_IDX 0xFFF
#define WLC_MAXMCS 102 /* Maximum valid mcs index */
#define IS_PROPRIETARY_11N_MCS(mcs) \
((mcs) == 87 || (mcs) == 88 || (mcs) == 99 || (mcs) == 100 || (mcs) == 101 || (mcs) == 102)
typedef enum clm_rate_group_id {
RATE_GROUP_ID_DSSS = 0,
RATE_GROUP_ID_OFDM,
RATE_GROUP_ID_MCS0_7,
RATE_GROUP_ID_VHT8_9SS1,
RATE_GROUP_ID_VHT10_11SS1,
RATE_GROUP_ID_DSSS_MULTI1,
RATE_GROUP_ID_OFDM_CDD1,
RATE_GROUP_ID_MCS0_7_CDD1,
RATE_GROUP_ID_VHT8_9SS1_CDD1,
RATE_GROUP_ID_VHT10_11SS1_CDD1,
RATE_GROUP_ID_MCS0_7_STBC,
RATE_GROUP_ID_VHT8_9SS1_STBC,
RATE_GROUP_ID_VHT10_11SS1_STBC,
RATE_GROUP_ID_MCS8_15,
RATE_GROUP_ID_VHT8_9SS2,
RATE_GROUP_ID_VHT10_11SS2,
RATE_GROUP_ID_DSSS_MULTI2,
RATE_GROUP_ID_OFDM_CDD2,
RATE_GROUP_ID_MCS0_7_CDD2,
RATE_GROUP_ID_VHT8_9SS1_CDD2,
RATE_GROUP_ID_VHT10_11SS1_CDD2,
RATE_GROUP_ID_MCS0_7_STBC_SPEXP1,
RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1,
RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP1,
RATE_GROUP_ID_MCS8_15_SPEXP1,
RATE_GROUP_ID_VHT8_9SS2_SPEXP1,
RATE_GROUP_ID_VHT10_11SS2_SPEXP1,
RATE_GROUP_ID_MCS16_23,
RATE_GROUP_ID_VHT8_9SS3,
RATE_GROUP_ID_VHT10_11SS3,
RATE_GROUP_ID_DSSS_MULTI3,
RATE_GROUP_ID_OFDM_CDD3,
RATE_GROUP_ID_MCS0_7_CDD3,
RATE_GROUP_ID_VHT8_9SS1_CDD3,
RATE_GROUP_ID_VHT10_11SS1_CDD3,
RATE_GROUP_ID_MCS0_7_STBC_SPEXP2,
RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP2,
RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP2,
RATE_GROUP_ID_MCS8_15_SPEXP2,
RATE_GROUP_ID_VHT8_9SS2_SPEXP2,
RATE_GROUP_ID_VHT10_11SS2_SPEXP2,
RATE_GROUP_ID_MCS16_23_SPEXP1,
RATE_GROUP_ID_VHT8_9SS3_SPEXP1,
RATE_GROUP_ID_VHT10_11SS3_SPEXP1,
RATE_GROUP_ID_MCS24_31,
RATE_GROUP_ID_VHT8_9SS4,
RATE_GROUP_ID_VHT10_11SS4,
RATE_GROUP_ID_OFDM_TXBF1,
RATE_GROUP_ID_MCS0_7_TXBF1,
RATE_GROUP_ID_VHT8_9SS1_TXBF1,
RATE_GROUP_ID_VHT10_11SS1_TXBF1,
RATE_GROUP_ID_MCS8_15_TXBF0,
RATE_GROUP_ID_VHT8_9SS2_TXBF0,
RATE_GROUP_ID_VHT10_11SS2_TXBF0,
RATE_GROUP_ID_OFDM_TXBF2,
RATE_GROUP_ID_MCS0_7_TXBF2,
RATE_GROUP_ID_VHT8_9SS1_TXBF2,
RATE_GROUP_ID_VHT10_11SS1_TXBF2,
RATE_GROUP_ID_MCS8_15_TXBF1,
RATE_GROUP_ID_VHT8_9SS2_TXBF1,
RATE_GROUP_ID_VHT10_11SS2_TXBF1,
RATE_GROUP_ID_MCS16_23_TXBF0,
RATE_GROUP_ID_VHT8_9SS3_TXBF0,
RATE_GROUP_ID_VHT10_11SS3_TXBF0,
RATE_GROUP_ID_OFDM_TXBF3,
RATE_GROUP_ID_MCS0_7_TXBF3,
RATE_GROUP_ID_VHT8_9SS1_TXBF3,
RATE_GROUP_ID_VHT10_11SS1_TXBF3,
RATE_GROUP_ID_MCS8_15_TXBF2,
RATE_GROUP_ID_VHT8_9SS2_TXBF2,
RATE_GROUP_ID_VHT10_11SS2_TXBF2,
RATE_GROUP_ID_MCS16_23_TXBF1,
RATE_GROUP_ID_VHT8_9SS3_TXBF1,
RATE_GROUP_ID_VHT10_11SS3_TXBF1,
RATE_GROUP_ID_MCS24_31_TXBF0,
RATE_GROUP_ID_VHT8_9SS4_TXBF0,
RATE_GROUP_ID_VHT10_11SS4_TXBF0,
RATE_GROUP_ID_COUNT
} clm_rate_group_id_t;
typedef enum reg_rate_index {
NO_RATE = -1,
DSSS1, DSSS2, DSSS5, DSSS11,
OFDM6, OFDM9, OFDM12, OFDM18,
OFDM24, OFDM36, OFDM48, OFDM54,
MCS0, MCS1, MCS2, MCS3,
MCS4, MCS5, MCS6, MCS7,
VHT8SS1, VHT9SS1,VHT10SS1, VHT11SS1,
DSSS1_MULTI1, DSSS2_MULTI1, DSSS5_MULTI1, DSSS11_MULTI1,
OFDM6_CDD1, OFDM9_CDD1, OFDM12_CDD1, OFDM18_CDD1,
OFDM24_CDD1, OFDM36_CDD1, OFDM48_CDD1, OFDM54_CDD1,
MCS0_CDD1, MCS1_CDD1, MCS2_CDD1, MCS3_CDD1,
MCS4_CDD1, MCS5_CDD1, MCS6_CDD1, MCS7_CDD1,
VHT8SS1_CDD1, VHT9SS1_CDD1, VHT10SS1_CDD1, VHT11SS1_CDD1,
MCS0_STBC, MCS1_STBC, MCS2_STBC, MCS3_STBC,
MCS4_STBC, MCS5_STBC, MCS6_STBC, MCS7_STBC,
VHT8SS1_STBC, VHT9SS1_STBC, VHT10SS1_STBC, VHT11SS1_STBC,
MCS8, MCS9, MCS10, MCS11,
MCS12, MCS13, MCS14, MCS15,
VHT8SS2, VHT9SS2, VHT10SS2, VHT11SS2,
DSSS1_MULTI2, DSSS2_MULTI2, DSSS5_MULTI2, DSSS11_MULTI2,
OFDM6_CDD2, OFDM9_CDD2, OFDM12_CDD2, OFDM18_CDD2,
OFDM24_CDD2, OFDM36_CDD2, OFDM48_CDD2, OFDM54_CDD2,
MCS0_CDD2, MCS1_CDD2, MCS2_CDD2, MCS3_CDD2,
MCS4_CDD2, MCS5_CDD2, MCS6_CDD2, MCS7_CDD2,
VHT8SS1_CDD2, VHT9SS1_CDD2, VHT10SS1_CDD2, VHT11SS1_CDD2,
MCS0_STBC_SPEXP1, MCS1_STBC_SPEXP1, MCS2_STBC_SPEXP1, MCS3_STBC_SPEXP1,
MCS4_STBC_SPEXP1, MCS5_STBC_SPEXP1, MCS6_STBC_SPEXP1, MCS7_STBC_SPEXP1,
VHT8SS1_STBC_SPEXP1, VHT9SS1_STBC_SPEXP1, VHT10SS1_STBC_SPEXP1, VHT11SS1_STBC_SPEXP1,
MCS8_SPEXP1, MCS9_SPEXP1, MCS10_SPEXP1, MCS11_SPEXP1,
MCS12_SPEXP1, MCS13_SPEXP1, MCS14_SPEXP1, MCS15_SPEXP1,
VHT8SS2_SPEXP1, VHT9SS2_SPEXP1, VHT10SS2_SPEXP1, VHT11SS2_SPEXP1,
MCS16, MCS17, MCS18, MCS19,
MCS20, MCS21, MCS22, MCS23,
VHT8SS3, VHT9SS3, VHT10SS3, VHT11SS3,
DSSS1_MULTI3, DSSS2_MULTI3, DSSS5_MULTI3, DSSS11_MULTI3,
OFDM6_CDD3, OFDM9_CDD3, OFDM12_CDD3, OFDM18_CDD3,
OFDM24_CDD3, OFDM36_CDD3, OFDM48_CDD3, OFDM54_CDD3,
MCS0_CDD3, MCS1_CDD3, MCS2_CDD3, MCS3_CDD3,
MCS4_CDD3, MCS5_CDD3, MCS6_CDD3, MCS7_CDD3,
VHT8SS1_CDD3, VHT9SS1_CDD3, VHT10SS1_CDD3, VHT11SS1_CDD3,
MCS0_STBC_SPEXP2, MCS1_STBC_SPEXP2, MCS2_STBC_SPEXP2, MCS3_STBC_SPEXP2,
MCS4_STBC_SPEXP2, MCS5_STBC_SPEXP2, MCS6_STBC_SPEXP2, MCS7_STBC_SPEXP2,
VHT8SS1_STBC_SPEXP2, VHT9SS1_STBC_SPEXP2, VHT10SS1_STBC_SPEXP2, VHT11SS1_STBC_SPEXP2,
MCS8_SPEXP2, MCS9_SPEXP2, MCS10_SPEXP2, MCS11_SPEXP2,
MCS12_SPEXP2, MCS13_SPEXP2, MCS14_SPEXP2, MCS15_SPEXP2,
VHT8SS2_SPEXP2, VHT9SS2_SPEXP2, VHT10SS2_SPEXP2, VHT11SS2_SPEXP2,
MCS16_SPEXP1, MCS17_SPEXP1, MCS18_SPEXP1, MCS19_SPEXP1,
MCS20_SPEXP1, MCS21_SPEXP1, MCS22_SPEXP1, MCS23_SPEXP1,
VHT8SS3_SPEXP1, VHT9SS3_SPEXP1, VHT10SS3_SPEXP1, VHT11SS3_SPEXP1,
MCS24, MCS25, MCS26, MCS27,
MCS28, MCS29, MCS30, MCS31,
VHT8SS4, VHT9SS4, VHT10SS4, VHT11SS4,
OFDM6_TXBF1, OFDM9_TXBF1, OFDM12_TXBF1, OFDM18_TXBF1,
OFDM24_TXBF1, OFDM36_TXBF1, OFDM48_TXBF1, OFDM54_TXBF1,
MCS0_TXBF1, MCS1_TXBF1, MCS2_TXBF1, MCS3_TXBF1,
MCS4_TXBF1, MCS5_TXBF1, MCS6_TXBF1, MCS7_TXBF1,
VHT8SS1_TXBF1, VHT9SS1_TXBF1, VHT10SS1_TXBF1, VHT11SS1_TXBF1,
MCS8_TXBF0, MCS9_TXBF0, MCS10_TXBF0, MCS11_TXBF0,
MCS12_TXBF0, MCS13_TXBF0, MCS14_TXBF0, MCS15_TXBF0,
VHT8SS2_TXBF0, VHT9SS2_TXBF0, VHT10SS2_TXBF0, VHT11SS2_TXBF0,
OFDM6_TXBF2, OFDM9_TXBF2, OFDM12_TXBF2, OFDM18_TXBF2,
OFDM24_TXBF2, OFDM36_TXBF2, OFDM48_TXBF2, OFDM54_TXBF2,
MCS0_TXBF2, MCS1_TXBF2, MCS2_TXBF2, MCS3_TXBF2,
MCS4_TXBF2, MCS5_TXBF2, MCS6_TXBF2, MCS7_TXBF2,
VHT8SS1_TXBF2, VHT9SS1_TXBF2, VHT10SS1_TXBF2, VHT11SS1_TXBF2,
MCS8_TXBF1, MCS9_TXBF1, MCS10_TXBF1, MCS11_TXBF1,
MCS12_TXBF1, MCS13_TXBF1, MCS14_TXBF1, MCS15_TXBF1,
VHT8SS2_TXBF1, VHT9SS2_TXBF1, VHT10SS2_TXBF1, VHT11SS2_TXBF1,
MCS16_TXBF0, MCS17_TXBF0, MCS18_TXBF0, MCS19_TXBF0,
MCS20_TXBF0, MCS21_TXBF0, MCS22_TXBF0, MCS23_TXBF0,
VHT8SS3_TXBF0, VHT9SS3_TXBF0, VHT10SS3_TXBF0, VHT11SS3_TXBF0,
OFDM6_TXBF3, OFDM9_TXBF3, OFDM12_TXBF3, OFDM18_TXBF3,
OFDM24_TXBF3, OFDM36_TXBF3, OFDM48_TXBF3, OFDM54_TXBF3,
MCS0_TXBF3, MCS1_TXBF3, MCS2_TXBF3, MCS3_TXBF3,
MCS4_TXBF3, MCS5_TXBF3, MCS6_TXBF3, MCS7_TXBF3,
VHT8SS1_TXBF3, VHT9SS1_TXBF3, VHT10SS1_TXBF3, VHT11SS1_TXBF3,
MCS8_TXBF2, MCS9_TXBF2, MCS10_TXBF2, MCS11_TXBF2,
MCS12_TXBF2, MCS13_TXBF2, MCS14_TXBF2, MCS15_TXBF2,
VHT8SS2_TXBF2, VHT9SS2_TXBF2, VHT10SS2_TXBF2, VHT11SS2_TXBF2,
MCS16_TXBF1, MCS17_TXBF1, MCS18_TXBF1, MCS19_TXBF1,
MCS20_TXBF1, MCS21_TXBF1, MCS22_TXBF1, MCS23_TXBF1,
VHT8SS3_TXBF1, VHT9SS3_TXBF1, VHT10SS3_TXBF1, VHT11SS3_TXBF1,
MCS24_TXBF0, MCS25_TXBF0, MCS26_TXBF0, MCS27_TXBF0,
MCS28_TXBF0, MCS29_TXBF0, MCS30_TXBF0, MCS31_TXBF0,
VHT8SS4_TXBF0, VHT9SS4_TXBF0, VHT10SS4_TXBF0, VHT11SS4_TXBF0,
} reg_rate_index_t;
typedef enum ppr_rate_type {
PPR_RATE_DSSS,
PPR_RATE_OFDM,
PPR_RATE_HT,
PPR_RATE_VHT,
} ppr_rate_type_t;
typedef struct ppr_tbl {
char label[23];
clm_rate_group_id_t id;
// clm_rates_t rate;
} ppr_tbl_t;
typedef struct ppr_group {
clm_rate_group_id_t id;
wl_tx_chains_t chain;
wl_tx_mode_t mode;
wl_tx_nss_t nss;
ppr_rate_type_t rate_type;
reg_rate_index_t first_rate;
} ppr_group_t;
static const ppr_group_t ppr_group_table[] = {
/*group id chains mode nss rate type offset-first*/
{RATE_GROUP_ID_DSSS, WL_TX_CHAINS_1, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_DSSS, DSSS1},
{RATE_GROUP_ID_OFDM, WL_TX_CHAINS_1, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6},
{RATE_GROUP_ID_MCS0_7, WL_TX_CHAINS_1, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_VHT, MCS0},
{RATE_GROUP_ID_VHT8_9SS1, WL_TX_CHAINS_1, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_VHT, MCS0},
{RATE_GROUP_ID_VHT10_11SS1, WL_TX_CHAINS_1, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_VHT, MCS0},
{RATE_GROUP_ID_DSSS_MULTI1, WL_TX_CHAINS_2, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_DSSS, DSSS1_MULTI1},
{RATE_GROUP_ID_OFDM_CDD1, WL_TX_CHAINS_2, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6_CDD1},
{RATE_GROUP_ID_MCS0_7_CDD1, WL_TX_CHAINS_2, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD1},
{RATE_GROUP_ID_VHT8_9SS1_CDD1, WL_TX_CHAINS_2, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD1},
{RATE_GROUP_ID_VHT10_11SS1_CDD1, WL_TX_CHAINS_2, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD1},
{RATE_GROUP_ID_MCS0_7_STBC, WL_TX_CHAINS_2, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC},
{RATE_GROUP_ID_VHT8_9SS1_STBC, WL_TX_CHAINS_2, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC},
{RATE_GROUP_ID_VHT10_11SS1_STBC, WL_TX_CHAINS_2, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC},
{RATE_GROUP_ID_MCS8_15, WL_TX_CHAINS_2, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8},
{RATE_GROUP_ID_VHT8_9SS2, WL_TX_CHAINS_2, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8},
{RATE_GROUP_ID_VHT10_11SS2, WL_TX_CHAINS_2, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8},
{RATE_GROUP_ID_DSSS_MULTI2, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_DSSS, DSSS1_MULTI2},
{RATE_GROUP_ID_OFDM_CDD2, WL_TX_CHAINS_3, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6_CDD2},
{RATE_GROUP_ID_MCS0_7_CDD2, WL_TX_CHAINS_3, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD2},
{RATE_GROUP_ID_VHT8_9SS1_CDD2, WL_TX_CHAINS_3, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD2},
{RATE_GROUP_ID_VHT10_11SS1_CDD2, WL_TX_CHAINS_3, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD2},
{RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_TX_CHAINS_3, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC_SPEXP1},
{RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1, WL_TX_CHAINS_3, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC_SPEXP1},
{RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP1, WL_TX_CHAINS_3, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC_SPEXP1},
{RATE_GROUP_ID_MCS8_15_SPEXP1, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_SPEXP1},
{RATE_GROUP_ID_VHT8_9SS2_SPEXP1, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_SPEXP1},
{RATE_GROUP_ID_VHT10_11SS2_SPEXP1, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_SPEXP1},
{RATE_GROUP_ID_MCS16_23, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_3, PPR_RATE_VHT, MCS16},
{RATE_GROUP_ID_VHT8_9SS3, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_3, PPR_RATE_VHT, MCS16},
{RATE_GROUP_ID_VHT10_11SS3, WL_TX_CHAINS_3, WL_TX_MODE_NONE, WL_TX_NSS_3, PPR_RATE_VHT, MCS16},
{RATE_GROUP_ID_DSSS_MULTI3, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_1, PPR_RATE_DSSS, DSSS1_MULTI3},
{RATE_GROUP_ID_OFDM_CDD3, WL_TX_CHAINS_4, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6_CDD3},
{RATE_GROUP_ID_MCS0_7_CDD3, WL_TX_CHAINS_4, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD3},
{RATE_GROUP_ID_VHT8_9SS1_CDD3, WL_TX_CHAINS_4, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD3},
{RATE_GROUP_ID_VHT10_11SS1_CDD3, WL_TX_CHAINS_4, WL_TX_MODE_CDD, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_CDD3},
{RATE_GROUP_ID_MCS0_7_STBC_SPEXP2, WL_TX_CHAINS_4, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC_SPEXP2},
{RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP2, WL_TX_CHAINS_4, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC_SPEXP2},
{RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP2, WL_TX_CHAINS_4, WL_TX_MODE_STBC, WL_TX_NSS_2, PPR_RATE_VHT, MCS0_STBC_SPEXP2},
{RATE_GROUP_ID_MCS8_15_SPEXP2, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_SPEXP2},
{RATE_GROUP_ID_VHT8_9SS2_SPEXP2, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_SPEXP2},
{RATE_GROUP_ID_VHT10_11SS2_SPEXP2, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_SPEXP2},
{RATE_GROUP_ID_MCS16_23_SPEXP1, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_SPEXP1},
{RATE_GROUP_ID_VHT8_9SS3_SPEXP1, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_SPEXP1},
{RATE_GROUP_ID_VHT10_11SS3_SPEXP1, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_SPEXP1},
{RATE_GROUP_ID_MCS24_31, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_4, PPR_RATE_VHT, MCS24},
{RATE_GROUP_ID_VHT8_9SS4, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_4, PPR_RATE_VHT, MCS24},
{RATE_GROUP_ID_VHT10_11SS4, WL_TX_CHAINS_4, WL_TX_MODE_NONE, WL_TX_NSS_4, PPR_RATE_VHT, MCS24},
{RATE_GROUP_ID_OFDM_TXBF1, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6_TXBF1},
{RATE_GROUP_ID_MCS0_7_TXBF1, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF1},
{RATE_GROUP_ID_VHT8_9SS1_TXBF1, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF1},
{RATE_GROUP_ID_VHT10_11SS1_TXBF1, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF1},
{RATE_GROUP_ID_MCS8_15_TXBF0, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF0},
{RATE_GROUP_ID_VHT8_9SS2_TXBF0, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF0},
{RATE_GROUP_ID_VHT10_11SS2_TXBF0, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF0},
{RATE_GROUP_ID_OFDM_TXBF2, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6_TXBF2},
{RATE_GROUP_ID_MCS0_7_TXBF2, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF2},
{RATE_GROUP_ID_VHT8_9SS1_TXBF2, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF2},
{RATE_GROUP_ID_VHT10_11SS1_TXBF2, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF2},
{RATE_GROUP_ID_MCS8_15_TXBF1, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF1},
{RATE_GROUP_ID_VHT8_9SS2_TXBF1, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF1},
{RATE_GROUP_ID_VHT10_11SS2_TXBF1, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF1},
{RATE_GROUP_ID_MCS16_23_TXBF0, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_TXBF0},
{RATE_GROUP_ID_VHT8_9SS3_TXBF0, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_TXBF0},
{RATE_GROUP_ID_VHT10_11SS3_TXBF0, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_TXBF0},
{RATE_GROUP_ID_OFDM_TXBF3, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_OFDM, OFDM6_TXBF3},
{RATE_GROUP_ID_MCS0_7_TXBF3, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF3},
{RATE_GROUP_ID_VHT8_9SS1_TXBF3, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF3},
{RATE_GROUP_ID_VHT10_11SS1_TXBF3, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_1, PPR_RATE_VHT, MCS0_TXBF3},
{RATE_GROUP_ID_MCS8_15_TXBF2, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF2},
{RATE_GROUP_ID_VHT8_9SS2_TXBF2, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF2},
{RATE_GROUP_ID_VHT10_11SS2_TXBF2, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_VHT, MCS8_TXBF2},
{RATE_GROUP_ID_MCS16_23_TXBF1, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_TXBF1},
{RATE_GROUP_ID_VHT8_9SS3_TXBF1, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_TXBF1},
{RATE_GROUP_ID_VHT10_11SS3_TXBF1, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_VHT, MCS16_TXBF1},
{RATE_GROUP_ID_MCS24_31_TXBF0, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_4, PPR_RATE_VHT, MCS24_TXBF0},
{RATE_GROUP_ID_VHT8_9SS4_TXBF0, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_4, PPR_RATE_VHT, MCS24_TXBF0},
{RATE_GROUP_ID_VHT10_11SS4_TXBF0, WL_TX_CHAINS_4, WL_TX_MODE_TXBF, WL_TX_NSS_4, PPR_RATE_VHT, MCS24_TXBF0},
};
static const ppr_tbl_t ppr_table[] = {
/* Label Rate Group ID */
{"DSSS1", RATE_GROUP_ID_DSSS},
{"DSSS2", RATE_GROUP_ID_DSSS},
{"DSSS5", RATE_GROUP_ID_DSSS},
{"DSSS11", RATE_GROUP_ID_DSSS},
{"OFDM6", RATE_GROUP_ID_OFDM},
{"OFDM9", RATE_GROUP_ID_OFDM},
{"OFDM12", RATE_GROUP_ID_OFDM},
{"OFDM18", RATE_GROUP_ID_OFDM},
{"OFDM24", RATE_GROUP_ID_OFDM},
{"OFDM36", RATE_GROUP_ID_OFDM},
{"OFDM48", RATE_GROUP_ID_OFDM},
{"OFDM54", RATE_GROUP_ID_OFDM},
{"MCS0", RATE_GROUP_ID_MCS0_7},
{"MCS1", RATE_GROUP_ID_MCS0_7},
{"MCS2", RATE_GROUP_ID_MCS0_7},
{"MCS3", RATE_GROUP_ID_MCS0_7},
{"MCS4", RATE_GROUP_ID_MCS0_7},
{"MCS5", RATE_GROUP_ID_MCS0_7},
{"MCS6", RATE_GROUP_ID_MCS0_7},
{"MCS7", RATE_GROUP_ID_MCS0_7},
{"VHT8SS1", RATE_GROUP_ID_VHT8_9SS1},
{"VHT9SS1", RATE_GROUP_ID_VHT8_9SS1},
{"VHT10SS1", RATE_GROUP_ID_VHT10_11SS1},
{"VHT11SS1", RATE_GROUP_ID_VHT10_11SS1},
{"DSSS1_MULTI1", RATE_GROUP_ID_DSSS_MULTI1},
{"DSSS2_MULTI1", RATE_GROUP_ID_DSSS_MULTI1},
{"DSSS5_MULTI1", RATE_GROUP_ID_DSSS_MULTI1},
{"DSSS11_MULTI1", RATE_GROUP_ID_DSSS_MULTI1},
{"OFDM6_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM9_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM12_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM18_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM24_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM36_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM48_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"OFDM54_CDD1", RATE_GROUP_ID_OFDM_CDD1},
{"MCS0_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS1_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS2_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS3_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS4_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS5_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS6_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"MCS7_CDD1", RATE_GROUP_ID_MCS0_7_CDD1},
{"VHT8SS1_CDD1", RATE_GROUP_ID_VHT8_9SS1_CDD1},
{"VHT9SS1_CDD1", RATE_GROUP_ID_VHT8_9SS1_CDD1},
{"VHT10SS1_CDD1", RATE_GROUP_ID_VHT10_11SS1_CDD1},
{"VHT11SS1_CDD1", RATE_GROUP_ID_VHT10_11SS1_CDD1},
{"MCS0_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS1_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS2_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS3_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS4_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS5_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS6_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"MCS7_STBC", RATE_GROUP_ID_MCS0_7_STBC},
{"VHT8SS1_STBC", RATE_GROUP_ID_VHT8_9SS1_STBC},
{"VHT9SS1_STBC", RATE_GROUP_ID_VHT8_9SS1_STBC},
{"VHT10SS1_STBC", RATE_GROUP_ID_VHT10_11SS1_STBC},
{"VHT11SS1_STBC", RATE_GROUP_ID_VHT10_11SS1_STBC},
{"MCS8", RATE_GROUP_ID_MCS8_15},
{"MCS9", RATE_GROUP_ID_MCS8_15},
{"MCS10", RATE_GROUP_ID_MCS8_15},
{"MCS11", RATE_GROUP_ID_MCS8_15},
{"MCS12", RATE_GROUP_ID_MCS8_15},
{"MCS13", RATE_GROUP_ID_MCS8_15},
{"MCS14", RATE_GROUP_ID_MCS8_15},
{"MCS15", RATE_GROUP_ID_MCS8_15},
{"VHT8SS2", RATE_GROUP_ID_VHT8_9SS2},
{"VHT9SS2", RATE_GROUP_ID_VHT8_9SS2},
{"VHT10SS2", RATE_GROUP_ID_VHT10_11SS2},
{"VHT11SS2", RATE_GROUP_ID_VHT10_11SS2},
{"DSSS1_MULTI2", RATE_GROUP_ID_DSSS_MULTI2},
{"DSSS2_MULTI2", RATE_GROUP_ID_DSSS_MULTI2},
{"DSSS5_MULTI2", RATE_GROUP_ID_DSSS_MULTI2},
{"DSSS11_MULTI2", RATE_GROUP_ID_DSSS_MULTI2},
{"OFDM6_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM9_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM12_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM18_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM24_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM36_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM48_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"OFDM54_CDD2", RATE_GROUP_ID_OFDM_CDD2},
{"MCS0_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS1_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS2_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS3_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS4_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS5_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS6_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"MCS7_CDD2", RATE_GROUP_ID_MCS0_7_CDD2},
{"VHT8SS1_CDD2", RATE_GROUP_ID_VHT8_9SS1_CDD2},
{"VHT9SS1_CDD2", RATE_GROUP_ID_VHT8_9SS1_CDD2},
{"VHT10SS1_CDD2", RATE_GROUP_ID_VHT10_11SS1_CDD2},
{"VHT11SS1_CDD2", RATE_GROUP_ID_VHT10_11SS1_CDD2},
{"MCS0_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS1_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS2_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS3_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS4_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS5_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS6_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"MCS7_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1},
{"VHT8SS1_STBC_SPEXP1", RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1},
{"VHT9SS1_STBC_SPEXP1", RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1},
{"VHT10SS1_STBC_SPEXP1", RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP1},
{"VHT11SS1_STBC_SPEXP1", RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP1},
{"MCS8_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS9_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS10_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS11_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS12_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS13_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS14_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"MCS15_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1},
{"VHT8SS2_SPEXP1", RATE_GROUP_ID_VHT8_9SS2_SPEXP1},
{"VHT9SS2_SPEXP1", RATE_GROUP_ID_VHT8_9SS2_SPEXP1},
{"VHT10SS2_SPEXP1", RATE_GROUP_ID_VHT10_11SS2_SPEXP1},
{"VHT11SS2_SPEXP1", RATE_GROUP_ID_VHT10_11SS2_SPEXP1},
{"MCS16", RATE_GROUP_ID_MCS16_23},
{"MCS17", RATE_GROUP_ID_MCS16_23},
{"MCS18", RATE_GROUP_ID_MCS16_23},
{"MCS19", RATE_GROUP_ID_MCS16_23},
{"MCS20", RATE_GROUP_ID_MCS16_23},
{"MCS21", RATE_GROUP_ID_MCS16_23},
{"MCS22", RATE_GROUP_ID_MCS16_23},
{"MCS23", RATE_GROUP_ID_MCS16_23},
{"VHT8SS3", RATE_GROUP_ID_VHT8_9SS3},
{"VHT9SS3", RATE_GROUP_ID_VHT8_9SS3},
{"VHT10SS3", RATE_GROUP_ID_VHT10_11SS3},
{"VHT11SS3", RATE_GROUP_ID_VHT10_11SS3},
{"DSSS1_MULTI3", RATE_GROUP_ID_DSSS_MULTI3},
{"DSSS2_MULTI3", RATE_GROUP_ID_DSSS_MULTI3},
{"DSSS5_MULTI3", RATE_GROUP_ID_DSSS_MULTI3},
{"DSSS11_MULTI3", RATE_GROUP_ID_DSSS_MULTI3},
{"OFDM6_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM9_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM12_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM18_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM24_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM36_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM48_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"OFDM54_CDD3", RATE_GROUP_ID_OFDM_CDD3},
{"MCS0_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS1_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS2_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS3_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS4_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS5_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS6_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"MCS7_CDD3", RATE_GROUP_ID_MCS0_7_CDD3},
{"VHT8SS1_CDD3", RATE_GROUP_ID_VHT8_9SS1_CDD3},
{"VHT9SS1_CDD3", RATE_GROUP_ID_VHT8_9SS1_CDD3},
{"VHT10SS1_CDD3", RATE_GROUP_ID_VHT10_11SS1_CDD3},
{"VHT11SS1_CDD3", RATE_GROUP_ID_VHT10_11SS1_CDD3},
{"MCS0_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS1_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS2_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS3_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS4_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS5_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS6_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"MCS7_STBC_SPEXP2", RATE_GROUP_ID_MCS0_7_STBC_SPEXP2},
{"VHT8SS1_STBC_SPEXP2", RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP2},
{"VHT9SS1_STBC_SPEXP2", RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP2},
{"VHT10SS1_STBC_SPEXP2", RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP2},
{"VHT11SS1_STBC_SPEXP2", RATE_GROUP_ID_VHT10_11SS1_STBC_SPEXP2},
{"MCS8_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS9_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS10_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS11_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS12_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS13_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS14_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"MCS15_SPEXP2", RATE_GROUP_ID_MCS8_15_SPEXP2},
{"VHT8SS2_SPEXP2", RATE_GROUP_ID_VHT8_9SS2_SPEXP2},
{"VHT9SS2_SPEXP2", RATE_GROUP_ID_VHT8_9SS2_SPEXP2},
{"VHT10SS2_SPEXP2", RATE_GROUP_ID_VHT10_11SS2_SPEXP2},
{"VHT11SS2_SPEXP2", RATE_GROUP_ID_VHT10_11SS2_SPEXP2},
{"MCS16_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS17_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS18_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS19_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS20_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS21_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS22_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"MCS23_SPEXP1", RATE_GROUP_ID_MCS16_23},
{"VHT8SS3_SPEXP1", RATE_GROUP_ID_VHT8_9SS3},
{"VHT9SS3_SPEXP1", RATE_GROUP_ID_VHT8_9SS3},
{"VHT10SS3_SPEXP1", RATE_GROUP_ID_VHT10_11SS3},
{"VHT11SS3_SPEXP1", RATE_GROUP_ID_VHT10_11SS3},
{"MCS24", RATE_GROUP_ID_MCS24_31},
{"MCS25", RATE_GROUP_ID_MCS24_31},
{"MCS26", RATE_GROUP_ID_MCS24_31},
{"MCS27", RATE_GROUP_ID_MCS24_31},
{"MCS28", RATE_GROUP_ID_MCS24_31},
{"MCS29", RATE_GROUP_ID_MCS24_31},
{"MCS30", RATE_GROUP_ID_MCS24_31},
{"MCS31", RATE_GROUP_ID_MCS24_31},
{"VHT8SS4", RATE_GROUP_ID_VHT8_9SS4},
{"VHT9SS4", RATE_GROUP_ID_VHT8_9SS4},
{"VHT10SS4", RATE_GROUP_ID_VHT10_11SS4},
{"VHT11SS4", RATE_GROUP_ID_VHT10_11SS4},
{"OFDM6_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM9_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM12_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM18_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM24_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM36_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM48_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"OFDM54_TXBF1", RATE_GROUP_ID_OFDM_TXBF1},
{"MCS0_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS1_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS2_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS3_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS4_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS5_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS6_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"MCS7_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1},
{"VHT8SS1_TXBF1", RATE_GROUP_ID_VHT8_9SS1_TXBF1},
{"VHT9SS1_TXBF1", RATE_GROUP_ID_VHT8_9SS1_TXBF1},
{"VHT10SS1_TXBF1", RATE_GROUP_ID_VHT10_11SS1_TXBF1},
{"VHT11SS1_TXBF1", RATE_GROUP_ID_VHT10_11SS1_TXBF1},
{"MCS8_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS9_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS10_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS11_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS12_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS13_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS14_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"MCS15_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0},
{"VHT8SS2_TXBF0", RATE_GROUP_ID_VHT8_9SS2_TXBF0},
{"VHT9SS2_TXBF0", RATE_GROUP_ID_VHT8_9SS2_TXBF0},
{"VHT10SS2_TXBF0", RATE_GROUP_ID_VHT10_11SS2_TXBF0},
{"VHT11SS2_TXBF0", RATE_GROUP_ID_VHT10_11SS2_TXBF0},
{"OFDM6_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM9_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM12_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM18_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM24_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM36_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM48_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"OFDM54_TXBF2", RATE_GROUP_ID_OFDM_TXBF2},
{"MCS0_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS1_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS2_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS3_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS4_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS5_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS6_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"MCS7_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2},
{"VHT8SS1_TXBF2", RATE_GROUP_ID_VHT8_9SS1_TXBF2},
{"VHT9SS1_TXBF2", RATE_GROUP_ID_VHT8_9SS1_TXBF2},
{"VHT10SS1_TXBF2", RATE_GROUP_ID_VHT10_11SS1_TXBF2},
{"VHT11SS1_TXBF2", RATE_GROUP_ID_VHT10_11SS1_TXBF2},
{"MCS8_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS9_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS10_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS11_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS12_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS13_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS14_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"MCS15_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1},
{"VHT8SS2_TXBF1", RATE_GROUP_ID_VHT8_9SS2_TXBF1},
{"VHT9SS2_TXBF1", RATE_GROUP_ID_VHT8_9SS2_TXBF1},
{"VHT10SS2_TXBF1", RATE_GROUP_ID_VHT10_11SS2_TXBF1},
{"VHT11SS2_TXBF1", RATE_GROUP_ID_VHT10_11SS2_TXBF1},
{"MCS16_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS17_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS18_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS19_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS20_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS21_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS22_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"MCS23_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0},
{"VHT8SS3_TXBF0", RATE_GROUP_ID_VHT8_9SS3_TXBF0},
{"VHT9SS3_TXBF0", RATE_GROUP_ID_VHT8_9SS3_TXBF0},
{"VHT10SS3_TXBF0", RATE_GROUP_ID_VHT10_11SS3_TXBF0},
{"VHT11SS3_TXBF0", RATE_GROUP_ID_VHT10_11SS3_TXBF0},
{"OFDM6_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM9_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM12_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM18_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM24_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM36_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM48_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"OFDM54_TXBF3", RATE_GROUP_ID_OFDM_TXBF3},
{"MCS0_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS1_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS2_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS3_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS4_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS5_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS6_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"MCS7_TXBF3", RATE_GROUP_ID_MCS0_7_TXBF3},
{"VHT8SS1_TXBF3", RATE_GROUP_ID_VHT8_9SS1_TXBF3},
{"VHT9SS1_TXBF3", RATE_GROUP_ID_VHT8_9SS1_TXBF3},
{"VHT10SS1_TXBF3", RATE_GROUP_ID_VHT10_11SS1_TXBF3},
{"VHT11SS1_TXBF3", RATE_GROUP_ID_VHT10_11SS1_TXBF3},
{"MCS8_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS9_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS10_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS11_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS12_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS13_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS14_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"MCS15_TXBF2", RATE_GROUP_ID_MCS8_15_TXBF2},
{"VHT8SS2_TXBF2", RATE_GROUP_ID_VHT8_9SS2_TXBF2},
{"VHT9SS2_TXBF2", RATE_GROUP_ID_VHT8_9SS2_TXBF2},
{"VHT10SS2_TXBF2", RATE_GROUP_ID_VHT10_11SS2_TXBF2},
{"VHT11SS2_TXBF2", RATE_GROUP_ID_VHT10_11SS2_TXBF2},
{"MCS16_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS17_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS18_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS19_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS20_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS21_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS22_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"MCS23_TXBF1", RATE_GROUP_ID_MCS16_23_TXBF1},
{"VHT8SS3_TXBF1", RATE_GROUP_ID_VHT8_9SS3_TXBF1},
{"VHT9SS3_TXBF1", RATE_GROUP_ID_VHT8_9SS3_TXBF1},
{"VHT10SS3_TXBF1", RATE_GROUP_ID_VHT10_11SS3_TXBF1},
{"VHT11SS3_TXBF1", RATE_GROUP_ID_VHT10_11SS3_TXBF1},
{"MCS24_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS25_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS26_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS27_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS28_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS29_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS30_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"MCS31_TXBF0", RATE_GROUP_ID_MCS24_31_TXBF0},
{"VHT8SS4_TXBF0", RATE_GROUP_ID_VHT8_9SS4_TXBF0},
{"VHT9SS4_TXBF0", RATE_GROUP_ID_VHT8_9SS4_TXBF0},
{"VHT10SS4_TXBF0", RATE_GROUP_ID_VHT10_11SS4_TXBF0},
{"VHT11SS4_TXBF0", RATE_GROUP_ID_VHT10_11SS4_TXBF0},
};
#define MHZ_TO_HALF_MHZ 2
const char *get_clm_rate_group_label(int rategroup);
const char *get_reg_rate_string_from_ratespec(int ratespec);
reg_rate_index_t get_reg_rate_index_from_ratespec(int ratespec);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _WLU_RATES_MATRIX_H_ */