| /* |
| * This module does provides various mappings to or from the CLM rate indexes. |
| * |
| * Copyright (C) 2016, Broadcom Corporation |
| * All Rights Reserved. |
| * |
| * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation; |
| * 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 Corporation. |
| */ |
| /*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> |
| |
| #include <inttypes.h> |
| #include <miniopt.h> |
| |
| #define WL_UNSUPPORTED_IDX 0xFFF |
| |
| 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_DSSS_MULTI1, |
| RATE_GROUP_ID_OFDM_CDD1, |
| RATE_GROUP_ID_MCS0_7_CDD1, |
| RATE_GROUP_ID_VHT8_9SS1_CDD1, |
| RATE_GROUP_ID_MCS0_7_STBC, |
| RATE_GROUP_ID_VHT8_9SS1_STBC, |
| RATE_GROUP_ID_MCS8_15, |
| RATE_GROUP_ID_VHT8_9SS2, |
| 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_MCS0_7_STBC_SPEXP1, |
| RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1, |
| RATE_GROUP_ID_MCS8_15_SPEXP1, |
| RATE_GROUP_ID_VHT8_9SS2_SPEXP1, |
| RATE_GROUP_ID_MCS16_23, |
| RATE_GROUP_ID_VHT8_9SS3, |
| RATE_GROUP_ID_OFDM_TXBF1, |
| RATE_GROUP_ID_MCS0_7_TXBF1, |
| RATE_GROUP_ID_VHT8_9SS1_TXBF1, |
| RATE_GROUP_ID_MCS8_15_TXBF0, |
| RATE_GROUP_ID_OFDM_TXBF2, |
| RATE_GROUP_ID_MCS0_7_TXBF2, |
| RATE_GROUP_ID_VHT8_9SS1_TXBF2, |
| RATE_GROUP_ID_MCS8_15_TXBF1, |
| RATE_GROUP_ID_VHT8_9SS2_TXBF1, |
| RATE_GROUP_ID_MCS16_23_TXBF0, |
| RATE_GROUP_ID_COUNT |
| } clm_rate_group_id_t; |
| |
| |
| typedef struct { |
| char label[23]; |
| uint8 chains; |
| clm_rate_group_id_t id; |
| clm_rates_t rate; |
| uint bw20ssl; |
| uint bw20n; |
| uint bw20ht; |
| uint bw40ssl; |
| uint bw40n; |
| uint bw40ht; |
| uint bw20in40ssl; |
| uint bw20in40n; |
| uint bw20in40ht; |
| uint bw80ssl; |
| uint bw80n; |
| uint bw80ht; |
| uint bw20in80ssl; |
| uint bw20in80n; |
| uint bw20in80ht; |
| uint bw40in80ssl; |
| uint bw40in80n; |
| uint bw40in80ht; |
| } clm_rate_matrix_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, |
| 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, |
| MCS0_STBC, MCS1_STBC, MCS2_STBC, MCS3_STBC, |
| MCS4_STBC, MCS5_STBC, MCS6_STBC, MCS7_STBC, |
| VHT8SS1_STBC, VHT9SS1_STBC, |
| MCS8, MCS9, MCS10, MCS11, |
| MCS12, MCS13, MCS14, MCS15, |
| VHT8SS2, VHT9SS2, |
| 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, |
| 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, |
| MCS8_SPEXP1, MCS9_SPEXP1, MCS10_SPEXP1, MCS11_SPEXP1, |
| MCS12_SPEXP1, MCS13_SPEXP1, MCS14_SPEXP1, MCS15_SPEXP1, |
| VHT8SS2_SPEXP1, VHT9SS2_SPEXP1, |
| MCS16, MCS17, MCS18, MCS19, |
| MCS20, MCS21, MCS22, MCS23, |
| VHT8SS3, VHT9SS3, |
| 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, |
| MCS8_TXBF0, MCS9_TXBF0, MCS10_TXBF0, MCS11_TXBF0, |
| MCS12_TXBF0, MCS13_TXBF0, MCS14_TXBF0, MCS15_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, |
| MCS8_TXBF1, MCS9_TXBF1, MCS10_TXBF1, MCS11_TXBF1, |
| MCS12_TXBF1, MCS13_TXBF1, MCS14_TXBF1, MCS15_TXBF1, |
| VHT8SS2_TXBF1, VHT9SS2_TXBF1, |
| MCS16_TXBF0, MCS17_TXBF0, MCS18_TXBF0, MCS19_TXBF0, |
| MCS20_TXBF0, MCS21_TXBF0, MCS22_TXBF0, MCS23_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_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_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_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_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_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_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_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_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_MCS8_15_TXBF0, WL_TX_CHAINS_2, WL_TX_MODE_TXBF, WL_TX_NSS_2, PPR_RATE_HT, 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_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_MCS16_23_TXBF0, WL_TX_CHAINS_3, WL_TX_MODE_TXBF, WL_TX_NSS_3, PPR_RATE_HT, MCS16_TXBF0}, |
| }; |
| |
| static const ppr_tbl_t ppr_table[] = { |
| /* Label Rate Group ID CLM index*/ |
| {"DSSS1", RATE_GROUP_ID_DSSS, WL_RATE_1X1_DSSS_1}, |
| {"DSSS2", RATE_GROUP_ID_DSSS, WL_RATE_1X1_DSSS_2}, |
| {"DSSS5", RATE_GROUP_ID_DSSS, WL_RATE_1X1_DSSS_5_5}, |
| {"DSSS11", RATE_GROUP_ID_DSSS, WL_RATE_1X1_DSSS_11}, |
| {"OFDM6", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_6}, |
| {"OFDM9", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_9}, |
| {"OFDM12", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_12}, |
| {"OFDM18", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_18}, |
| {"OFDM24", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_24}, |
| {"OFDM36", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_36}, |
| {"OFDM48", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_48}, |
| {"OFDM54", RATE_GROUP_ID_OFDM, WL_RATE_1X1_OFDM_54}, |
| {"MCS0", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS0}, |
| {"MCS1", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS1}, |
| {"MCS2", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS2}, |
| {"MCS3", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS3}, |
| {"MCS4", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS4}, |
| {"MCS5", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS5}, |
| {"MCS6", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS6}, |
| {"MCS7", RATE_GROUP_ID_MCS0_7, WL_RATE_1X1_MCS7}, |
| {"VHT8SS1", RATE_GROUP_ID_VHT8_9SS1, WL_RATE_1X1_VHT8SS1}, |
| {"VHT9SS1", RATE_GROUP_ID_VHT8_9SS1, WL_RATE_1X1_VHT9SS1}, |
| {"DSSS1_MULTI1", RATE_GROUP_ID_DSSS_MULTI1, WL_RATE_1X2_DSSS_1}, |
| {"DSSS2_MULTI1", RATE_GROUP_ID_DSSS_MULTI1, WL_RATE_1X2_DSSS_2}, |
| {"DSSS5_MULTI1", RATE_GROUP_ID_DSSS_MULTI1, WL_RATE_1X2_DSSS_5_5}, |
| {"DSSS11_MULTI1", RATE_GROUP_ID_DSSS_MULTI1, WL_RATE_1X2_DSSS_11}, |
| {"OFDM6_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_6}, |
| {"OFDM9_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_9}, |
| {"OFDM12_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_12,}, |
| {"OFDM18_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_18,}, |
| {"OFDM24_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_24,}, |
| {"OFDM36_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_36,}, |
| {"OFDM48_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_48,}, |
| {"OFDM54_CDD1", RATE_GROUP_ID_OFDM_CDD1, WL_RATE_1X2_CDD_OFDM_54,}, |
| {"MCS0_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS0}, |
| {"MCS1_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS1}, |
| {"MCS2_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS2}, |
| {"MCS3_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS3}, |
| {"MCS4_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS4}, |
| {"MCS5_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS5}, |
| {"MCS6_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS6}, |
| {"MCS7_CDD1", RATE_GROUP_ID_MCS0_7_CDD1, WL_RATE_1X2_CDD_MCS7}, |
| {"VHT8SS1_CDD1", RATE_GROUP_ID_VHT8_9SS1_CDD1, WL_RATE_1X2_VHT8SS1}, |
| {"VHT9SS1_CDD1", RATE_GROUP_ID_VHT8_9SS1_CDD1, WL_RATE_1X2_VHT9SS1}, |
| {"MCS0_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS0}, |
| {"MCS1_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS1}, |
| {"MCS2_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS2}, |
| {"MCS3_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS3}, |
| {"MCS4_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS4}, |
| {"MCS5_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS5}, |
| {"MCS6_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS6}, |
| {"MCS7_STBC", RATE_GROUP_ID_MCS0_7_STBC, WL_RATE_2X2_STBC_MCS7}, |
| {"VHT8SS1_STBC", RATE_GROUP_ID_VHT8_9SS1_STBC, WL_RATE_2X2_STBC_VHT8SS1}, |
| {"VHT9SS1_STBC", RATE_GROUP_ID_VHT8_9SS1_STBC, WL_RATE_2X2_STBC_VHT9SS1}, |
| {"MCS8", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS8}, |
| {"MCS9", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS9}, |
| {"MCS10", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS10}, |
| {"MCS11", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS11}, |
| {"MCS12", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS12}, |
| {"MCS13", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS13}, |
| {"MCS14", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS14}, |
| {"MCS15", RATE_GROUP_ID_MCS8_15, WL_RATE_2X2_SDM_MCS15}, |
| {"VHT8SS2", RATE_GROUP_ID_VHT8_9SS2, WL_RATE_2X2_VHT8SS2}, |
| {"VHT9SS2", RATE_GROUP_ID_VHT8_9SS2, WL_RATE_2X2_VHT9SS2}, |
| {"DSSS1_MULTI2", RATE_GROUP_ID_DSSS_MULTI2, WL_RATE_1X3_DSSS_1}, |
| {"DSSS2_MULTI2", RATE_GROUP_ID_DSSS_MULTI2, WL_RATE_1X3_DSSS_2}, |
| {"DSSS5_MULTI2", RATE_GROUP_ID_DSSS_MULTI2, WL_RATE_1X3_DSSS_5_5}, |
| {"DSSS11_MULTI2", RATE_GROUP_ID_DSSS_MULTI2, WL_RATE_1X3_DSSS_11}, |
| {"OFDM6_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_6}, |
| {"OFDM9_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_9}, |
| {"OFDM12_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_12}, |
| {"OFDM18_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_18}, |
| {"OFDM24_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_24}, |
| {"OFDM36_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_36}, |
| {"OFDM48_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_48}, |
| {"OFDM54_CDD2", RATE_GROUP_ID_OFDM_CDD2, WL_RATE_1X3_CDD_OFDM_54}, |
| {"MCS0_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS0}, |
| {"MCS1_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS1}, |
| {"MCS2_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS2}, |
| {"MCS3_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS3}, |
| {"MCS4_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS4}, |
| {"MCS5_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS5}, |
| {"MCS6_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS6}, |
| {"MCS7_CDD2", RATE_GROUP_ID_MCS0_7_CDD2, WL_RATE_1X3_CDD_MCS7}, |
| {"VHT8SS1_CDD2", RATE_GROUP_ID_VHT8_9SS1_CDD2, WL_RATE_1X3_VHT8SS1}, |
| {"VHT9SS1_CDD2", RATE_GROUP_ID_VHT8_9SS1_CDD2, WL_RATE_1X3_VHT9SS1}, |
| {"MCS0_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS0}, |
| {"MCS1_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS1}, |
| {"MCS2_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS2}, |
| {"MCS3_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS3}, |
| {"MCS4_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS4}, |
| {"MCS5_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS5}, |
| {"MCS6_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS6}, |
| {"MCS7_STBC_SPEXP1", RATE_GROUP_ID_MCS0_7_STBC_SPEXP1, WL_RATE_2X3_STBC_MCS7}, |
| {"VHT8SS1_STBC_SPEXP1", RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1, WL_RATE_2X3_STBC_VHT8SS1}, |
| {"VHT9SS1_STBC_SPEXP1", RATE_GROUP_ID_VHT8_9SS1_STBC_SPEXP1, WL_RATE_2X3_STBC_VHT9SS1}, |
| {"MCS8_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS8}, |
| {"MCS9_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS9}, |
| {"MCS10_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS10}, |
| {"MCS11_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS11}, |
| {"MCS12_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS12}, |
| {"MCS13_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS13}, |
| {"MCS14_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS14}, |
| {"MCS15_SPEXP1", RATE_GROUP_ID_MCS8_15_SPEXP1, WL_RATE_2X3_SDM_MCS15}, |
| {"VHT8SS2_SPEXP1", RATE_GROUP_ID_VHT8_9SS2_SPEXP1, WL_RATE_2X3_VHT8SS2}, |
| {"VHT9SS2_SPEXP1", RATE_GROUP_ID_VHT8_9SS2_SPEXP1, WL_RATE_2X3_VHT9SS2}, |
| {"MCS16", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS16}, |
| {"MCS17", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS17}, |
| {"MCS18", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS18}, |
| {"MCS19", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS19}, |
| {"MCS20", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS20}, |
| {"MCS21", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS21}, |
| {"MCS22", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS22}, |
| {"MCS23", RATE_GROUP_ID_MCS16_23, WL_RATE_3X3_SDM_MCS23}, |
| {"VHT8SS3", RATE_GROUP_ID_VHT8_9SS3, WL_RATE_3X3_VHT8SS3}, |
| {"VHT9SS3", RATE_GROUP_ID_VHT8_9SS3, WL_RATE_3X3_VHT9SS3}, |
| {"OFDM6_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_6}, |
| {"OFDM9_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_9}, |
| {"OFDM12_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_12}, |
| {"OFDM18_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_18}, |
| {"OFDM24_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_24}, |
| {"OFDM36_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_36}, |
| {"OFDM48_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_48}, |
| {"OFDM54_TXBF1", RATE_GROUP_ID_OFDM_TXBF1, WL_RATE_1X2_TXBF_OFDM_54}, |
| {"MCS0_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS0}, |
| {"MCS1_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS1}, |
| {"MCS2_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS1}, |
| {"MCS3_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS3}, |
| {"MCS4_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS4}, |
| {"MCS5_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS5}, |
| {"MCS6_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS6}, |
| {"MCS7_TXBF1", RATE_GROUP_ID_MCS0_7_TXBF1, WL_RATE_1X2_TXBF_MCS7}, |
| {"VHT8SS1_TXBF1", RATE_GROUP_ID_VHT8_9SS1_TXBF1, WL_RATE_1X2_TXBF_VHT8SS1}, |
| {"VHT9SS1_TXBF1", RATE_GROUP_ID_VHT8_9SS1_TXBF1, WL_RATE_1X2_TXBF_VHT9SS1}, |
| {"MCS8_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS8}, |
| {"MCS9_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS9}, |
| {"MCS10_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS10}, |
| {"MCS11_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS11}, |
| {"MCS12_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS12}, |
| {"MCS13_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS13}, |
| {"MCS14_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS14}, |
| {"MCS15_TXBF0", RATE_GROUP_ID_MCS8_15_TXBF0, WL_RATE_2X2_TXBF_SDM_MCS15}, |
| {"OFDM6_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_6}, |
| {"OFDM9_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_9}, |
| {"OFDM12_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_12}, |
| {"OFDM18_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_18}, |
| {"OFDM24_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_24}, |
| {"OFDM36_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_36}, |
| {"OFDM48_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_48}, |
| {"OFDM54_TXBF2", RATE_GROUP_ID_OFDM_TXBF2, WL_RATE_1X3_TXBF_OFDM_54}, |
| {"MCS0_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS0}, |
| {"MCS1_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS1}, |
| {"MCS2_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS2}, |
| {"MCS3_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS3}, |
| {"MCS4_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS4}, |
| {"MCS5_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS5}, |
| {"MCS6_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS6}, |
| {"MCS7_TXBF2", RATE_GROUP_ID_MCS0_7_TXBF2, WL_RATE_1X3_TXBF_MCS7}, |
| {"VHT8SS1_TXBF2", RATE_GROUP_ID_VHT8_9SS1_TXBF2, WL_RATE_1X3_TXBF_VHT8SS1}, |
| {"VHT9SS1_TXBF2", RATE_GROUP_ID_VHT8_9SS1_TXBF2, WL_RATE_1X3_TXBF_VHT9SS1}, |
| {"MCS8_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS8}, |
| {"MCS9_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS9}, |
| {"MCS10_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS10}, |
| {"MCS11_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS11}, |
| {"MCS12_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS12}, |
| {"MCS13_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS13}, |
| {"MCS14_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS14}, |
| {"MCS15_TXBF1", RATE_GROUP_ID_MCS8_15_TXBF1, WL_RATE_2X3_TXBF_SDM_MCS15}, |
| {"VHT8SS2_TXBF1", RATE_GROUP_ID_VHT8_9SS2_TXBF1, WL_RATE_2X3_TXBF_VHT8SS2}, |
| {"VHT9SS2_TXBF1", RATE_GROUP_ID_VHT8_9SS2_TXBF1, WL_RATE_2X3_TXBF_VHT9SS2}, |
| {"MCS16_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS16}, |
| {"MCS17_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS17}, |
| {"MCS18_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS18}, |
| {"MCS19_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS19}, |
| {"MCS20_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS20}, |
| {"MCS21_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS21}, |
| {"MCS22_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS22}, |
| {"MCS23_TXBF0", RATE_GROUP_ID_MCS16_23_TXBF0, WL_RATE_3X3_TXBF_SDM_MCS23}, |
| }; |
| |
| #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_ */ |