1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Indices for 802.11 a/b/g/n/ac 1-3 chain symmetric transmit rates 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Portions of this code are copyright (c) 2021 Cypress Semiconductor Corporation 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (C) 1999-2017, Broadcom Corporation 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Unless you and Broadcom execute a separate written software license 9*4882a593Smuzhiyun * agreement governing use of this software, this software is licensed to you 10*4882a593Smuzhiyun * under the terms of the GNU General Public License version 2 (the "GPL"), 11*4882a593Smuzhiyun * available at http://www.broadcom.com/licenses/GPLv2.php, with the 12*4882a593Smuzhiyun * following added to such license: 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * As a special exception, the copyright holders of this software give you 15*4882a593Smuzhiyun * permission to link this software with independent modules, and to copy and 16*4882a593Smuzhiyun * distribute the resulting executable under terms of your choice, provided that 17*4882a593Smuzhiyun * you also meet, for each linked independent module, the terms and conditions of 18*4882a593Smuzhiyun * the license of that module. An independent module is a module which is not 19*4882a593Smuzhiyun * derived from this software. The special exception does not apply to any 20*4882a593Smuzhiyun * modifications of the software. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * Notwithstanding the above, under no circumstances may you combine this 23*4882a593Smuzhiyun * software in any way with any other Broadcom software provided under a license 24*4882a593Smuzhiyun * other than the GPL, without Broadcom's express prior written consent. 25*4882a593Smuzhiyun * 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun * <<Broadcom-WL-IPTag/Open:>> 28*4882a593Smuzhiyun * 29*4882a593Smuzhiyun * $Id: bcmwifi_rates.h 697006 2017-05-01 19:13:40Z $ 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #ifndef _bcmwifi_rates_h_ 33*4882a593Smuzhiyun #define _bcmwifi_rates_h_ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #include <typedefs.h> 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #ifdef __cplusplus 38*4882a593Smuzhiyun extern "C" { 39*4882a593Smuzhiyun #endif /* __cplusplus */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define WL_RATESET_SZ_DSSS 4 42*4882a593Smuzhiyun #define WL_RATESET_SZ_OFDM 8 43*4882a593Smuzhiyun #define WL_RATESET_SZ_VHT_MCS 10 44*4882a593Smuzhiyun #define WL_RATESET_SZ_VHT_MCS_P 12 /* 10 VHT rates + 2 proprietary rates */ 45*4882a593Smuzhiyun #define WL_RATESET_SZ_HE_MCS 12 /* 12 HE rates (mcs 0-11) */ 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define WL_RATESET_SZ_HT_MCS 8 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define WL_RATESET_SZ_HT_IOCTL 8 /* MAC histogram, compatibility with wl utility */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #define WL_TX_CHAINS_MAX 4 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define WL_RATE_DISABLED (-128) /* Power value corresponding to unsupported rate */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* Transmit channel bandwidths */ 56*4882a593Smuzhiyun typedef enum wl_tx_bw { 57*4882a593Smuzhiyun WL_TX_BW_20, 58*4882a593Smuzhiyun WL_TX_BW_40, 59*4882a593Smuzhiyun WL_TX_BW_80, 60*4882a593Smuzhiyun WL_TX_BW_20IN40, 61*4882a593Smuzhiyun WL_TX_BW_20IN80, 62*4882a593Smuzhiyun WL_TX_BW_40IN80, 63*4882a593Smuzhiyun WL_TX_BW_160, 64*4882a593Smuzhiyun WL_TX_BW_20IN160, 65*4882a593Smuzhiyun WL_TX_BW_40IN160, 66*4882a593Smuzhiyun WL_TX_BW_80IN160, 67*4882a593Smuzhiyun WL_TX_BW_ALL, 68*4882a593Smuzhiyun WL_TX_BW_8080, 69*4882a593Smuzhiyun WL_TX_BW_8080CHAN2, 70*4882a593Smuzhiyun WL_TX_BW_20IN8080, 71*4882a593Smuzhiyun WL_TX_BW_40IN8080, 72*4882a593Smuzhiyun WL_TX_BW_80IN8080, 73*4882a593Smuzhiyun WL_TX_BW_2P5, 74*4882a593Smuzhiyun WL_TX_BW_5, 75*4882a593Smuzhiyun WL_TX_BW_10 76*4882a593Smuzhiyun } wl_tx_bw_t; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* 79*4882a593Smuzhiyun * Transmit modes. 80*4882a593Smuzhiyun * Not all modes are listed here, only those required for disambiguation. e.g. SPEXP is not listed 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun typedef enum wl_tx_mode { 83*4882a593Smuzhiyun WL_TX_MODE_NONE, 84*4882a593Smuzhiyun WL_TX_MODE_STBC, 85*4882a593Smuzhiyun WL_TX_MODE_CDD, 86*4882a593Smuzhiyun WL_TX_MODE_TXBF, 87*4882a593Smuzhiyun WL_NUM_TX_MODES 88*4882a593Smuzhiyun } wl_tx_mode_t; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* Number of transmit chains */ 91*4882a593Smuzhiyun typedef enum wl_tx_chains { 92*4882a593Smuzhiyun WL_TX_CHAINS_1 = 1, 93*4882a593Smuzhiyun WL_TX_CHAINS_2, 94*4882a593Smuzhiyun WL_TX_CHAINS_3, 95*4882a593Smuzhiyun WL_TX_CHAINS_4 96*4882a593Smuzhiyun } wl_tx_chains_t; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* Number of transmit streams */ 99*4882a593Smuzhiyun typedef enum wl_tx_nss { 100*4882a593Smuzhiyun WL_TX_NSS_1 = 1, 101*4882a593Smuzhiyun WL_TX_NSS_2, 102*4882a593Smuzhiyun WL_TX_NSS_3, 103*4882a593Smuzhiyun WL_TX_NSS_4 104*4882a593Smuzhiyun } wl_tx_nss_t; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* This enum maps each rate to a CLM index */ 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun typedef enum clm_rates { 109*4882a593Smuzhiyun /************ 110*4882a593Smuzhiyun * 1 chain * 111*4882a593Smuzhiyun ************ 112*4882a593Smuzhiyun */ 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun /* 1 Stream */ 115*4882a593Smuzhiyun WL_RATE_1X1_DSSS_1 = 0, 116*4882a593Smuzhiyun WL_RATE_1X1_DSSS_2 = 1, 117*4882a593Smuzhiyun WL_RATE_1X1_DSSS_5_5 = 2, 118*4882a593Smuzhiyun WL_RATE_1X1_DSSS_11 = 3, 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun WL_RATE_1X1_OFDM_6 = 4, 121*4882a593Smuzhiyun WL_RATE_1X1_OFDM_9 = 5, 122*4882a593Smuzhiyun WL_RATE_1X1_OFDM_12 = 6, 123*4882a593Smuzhiyun WL_RATE_1X1_OFDM_18 = 7, 124*4882a593Smuzhiyun WL_RATE_1X1_OFDM_24 = 8, 125*4882a593Smuzhiyun WL_RATE_1X1_OFDM_36 = 9, 126*4882a593Smuzhiyun WL_RATE_1X1_OFDM_48 = 10, 127*4882a593Smuzhiyun WL_RATE_1X1_OFDM_54 = 11, 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun WL_RATE_1X1_MCS0 = 12, 130*4882a593Smuzhiyun WL_RATE_1X1_MCS1 = 13, 131*4882a593Smuzhiyun WL_RATE_1X1_MCS2 = 14, 132*4882a593Smuzhiyun WL_RATE_1X1_MCS3 = 15, 133*4882a593Smuzhiyun WL_RATE_1X1_MCS4 = 16, 134*4882a593Smuzhiyun WL_RATE_1X1_MCS5 = 17, 135*4882a593Smuzhiyun WL_RATE_1X1_MCS6 = 18, 136*4882a593Smuzhiyun WL_RATE_1X1_MCS7 = 19, 137*4882a593Smuzhiyun WL_RATE_P_1X1_MCS87 = 20, 138*4882a593Smuzhiyun WL_RATE_P_1X1_MCS88 = 21, 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun WL_RATE_1X1_VHT0SS1 = 12, 141*4882a593Smuzhiyun WL_RATE_1X1_VHT1SS1 = 13, 142*4882a593Smuzhiyun WL_RATE_1X1_VHT2SS1 = 14, 143*4882a593Smuzhiyun WL_RATE_1X1_VHT3SS1 = 15, 144*4882a593Smuzhiyun WL_RATE_1X1_VHT4SS1 = 16, 145*4882a593Smuzhiyun WL_RATE_1X1_VHT5SS1 = 17, 146*4882a593Smuzhiyun WL_RATE_1X1_VHT6SS1 = 18, 147*4882a593Smuzhiyun WL_RATE_1X1_VHT7SS1 = 19, 148*4882a593Smuzhiyun WL_RATE_1X1_VHT8SS1 = 20, 149*4882a593Smuzhiyun WL_RATE_1X1_VHT9SS1 = 21, 150*4882a593Smuzhiyun WL_RATE_P_1X1_VHT10SS1 = 22, 151*4882a593Smuzhiyun WL_RATE_P_1X1_VHT11SS1 = 23, 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /************ 154*4882a593Smuzhiyun * 2 chains * 155*4882a593Smuzhiyun ************ 156*4882a593Smuzhiyun */ 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun /* 1 Stream expanded + 1 */ 159*4882a593Smuzhiyun WL_RATE_1X2_DSSS_1 = 24, 160*4882a593Smuzhiyun WL_RATE_1X2_DSSS_2 = 25, 161*4882a593Smuzhiyun WL_RATE_1X2_DSSS_5_5 = 26, 162*4882a593Smuzhiyun WL_RATE_1X2_DSSS_11 = 27, 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_6 = 28, 165*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_9 = 29, 166*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_12 = 30, 167*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_18 = 31, 168*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_24 = 32, 169*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_36 = 33, 170*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_48 = 34, 171*4882a593Smuzhiyun WL_RATE_1X2_CDD_OFDM_54 = 35, 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS0 = 36, 174*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS1 = 37, 175*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS2 = 38, 176*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS3 = 39, 177*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS4 = 40, 178*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS5 = 41, 179*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS6 = 42, 180*4882a593Smuzhiyun WL_RATE_1X2_CDD_MCS7 = 43, 181*4882a593Smuzhiyun WL_RATE_P_1X2_CDD_MCS87 = 44, 182*4882a593Smuzhiyun WL_RATE_P_1X2_CDD_MCS88 = 45, 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun WL_RATE_1X2_VHT0SS1 = 36, 185*4882a593Smuzhiyun WL_RATE_1X2_VHT1SS1 = 37, 186*4882a593Smuzhiyun WL_RATE_1X2_VHT2SS1 = 38, 187*4882a593Smuzhiyun WL_RATE_1X2_VHT3SS1 = 39, 188*4882a593Smuzhiyun WL_RATE_1X2_VHT4SS1 = 40, 189*4882a593Smuzhiyun WL_RATE_1X2_VHT5SS1 = 41, 190*4882a593Smuzhiyun WL_RATE_1X2_VHT6SS1 = 42, 191*4882a593Smuzhiyun WL_RATE_1X2_VHT7SS1 = 43, 192*4882a593Smuzhiyun WL_RATE_1X2_VHT8SS1 = 44, 193*4882a593Smuzhiyun WL_RATE_1X2_VHT9SS1 = 45, 194*4882a593Smuzhiyun WL_RATE_P_1X2_VHT10SS1 = 46, 195*4882a593Smuzhiyun WL_RATE_P_1X2_VHT11SS1 = 47, 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* 2 Streams */ 198*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS0 = 48, 199*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS1 = 49, 200*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS2 = 50, 201*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS3 = 51, 202*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS4 = 52, 203*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS5 = 53, 204*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS6 = 54, 205*4882a593Smuzhiyun WL_RATE_2X2_STBC_MCS7 = 55, 206*4882a593Smuzhiyun WL_RATE_P_2X2_STBC_MCS87 = 56, 207*4882a593Smuzhiyun WL_RATE_P_2X2_STBC_MCS88 = 57, 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT0SS1 = 48, 210*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT1SS1 = 49, 211*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT2SS1 = 50, 212*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT3SS1 = 51, 213*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT4SS1 = 52, 214*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT5SS1 = 53, 215*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT6SS1 = 54, 216*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT7SS1 = 55, 217*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT8SS1 = 56, 218*4882a593Smuzhiyun WL_RATE_2X2_STBC_VHT9SS1 = 57, 219*4882a593Smuzhiyun WL_RATE_P_2X2_STBC_VHT10SS1 = 58, 220*4882a593Smuzhiyun WL_RATE_P_2X2_STBC_VHT11SS1 = 59, 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS8 = 60, 223*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS9 = 61, 224*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS10 = 62, 225*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS11 = 63, 226*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS12 = 64, 227*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS13 = 65, 228*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS14 = 66, 229*4882a593Smuzhiyun WL_RATE_2X2_SDM_MCS15 = 67, 230*4882a593Smuzhiyun WL_RATE_P_2X2_SDM_MCS99 = 68, 231*4882a593Smuzhiyun WL_RATE_P_2X2_SDM_MCS100 = 69, 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun WL_RATE_2X2_VHT0SS2 = 60, 234*4882a593Smuzhiyun WL_RATE_2X2_VHT1SS2 = 61, 235*4882a593Smuzhiyun WL_RATE_2X2_VHT2SS2 = 62, 236*4882a593Smuzhiyun WL_RATE_2X2_VHT3SS2 = 63, 237*4882a593Smuzhiyun WL_RATE_2X2_VHT4SS2 = 64, 238*4882a593Smuzhiyun WL_RATE_2X2_VHT5SS2 = 65, 239*4882a593Smuzhiyun WL_RATE_2X2_VHT6SS2 = 66, 240*4882a593Smuzhiyun WL_RATE_2X2_VHT7SS2 = 67, 241*4882a593Smuzhiyun WL_RATE_2X2_VHT8SS2 = 68, 242*4882a593Smuzhiyun WL_RATE_2X2_VHT9SS2 = 69, 243*4882a593Smuzhiyun WL_RATE_P_2X2_VHT10SS2 = 70, 244*4882a593Smuzhiyun WL_RATE_P_2X2_VHT11SS2 = 71, 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun /**************************** 247*4882a593Smuzhiyun * TX Beamforming, 2 chains * 248*4882a593Smuzhiyun **************************** 249*4882a593Smuzhiyun */ 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun /* 1 Stream expanded + 1 */ 252*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_6 = 72, 253*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_9 = 73, 254*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_12 = 74, 255*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_18 = 75, 256*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_24 = 76, 257*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_36 = 77, 258*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_48 = 78, 259*4882a593Smuzhiyun WL_RATE_1X2_TXBF_OFDM_54 = 79, 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS0 = 80, 262*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS1 = 81, 263*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS2 = 82, 264*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS3 = 83, 265*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS4 = 84, 266*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS5 = 85, 267*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS6 = 86, 268*4882a593Smuzhiyun WL_RATE_1X2_TXBF_MCS7 = 87, 269*4882a593Smuzhiyun WL_RATE_P_1X2_TXBF_MCS87 = 88, 270*4882a593Smuzhiyun WL_RATE_P_1X2_TXBF_MCS88 = 89, 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT0SS1 = 80, 273*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT1SS1 = 81, 274*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT2SS1 = 82, 275*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT3SS1 = 83, 276*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT4SS1 = 84, 277*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT5SS1 = 85, 278*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT6SS1 = 86, 279*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT7SS1 = 87, 280*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT8SS1 = 88, 281*4882a593Smuzhiyun WL_RATE_1X2_TXBF_VHT9SS1 = 89, 282*4882a593Smuzhiyun WL_RATE_P_1X2_TXBF_VHT10SS1 = 90, 283*4882a593Smuzhiyun WL_RATE_P_1X2_TXBF_VHT11SS1 = 91, 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun /* 2 Streams */ 286*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS8 = 92, 287*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS9 = 93, 288*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS10 = 94, 289*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS11 = 95, 290*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS12 = 96, 291*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS13 = 97, 292*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS14 = 98, 293*4882a593Smuzhiyun WL_RATE_2X2_TXBF_SDM_MCS15 = 99, 294*4882a593Smuzhiyun WL_RATE_P_2X2_TXBF_SDM_MCS99 = 100, 295*4882a593Smuzhiyun WL_RATE_P_2X2_TXBF_SDM_MCS100 = 101, 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT0SS2 = 92, 298*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT1SS2 = 93, 299*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT2SS2 = 94, 300*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT3SS2 = 95, 301*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT4SS2 = 96, 302*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT5SS2 = 97, 303*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT6SS2 = 98, 304*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT7SS2 = 99, 305*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT8SS2 = 100, 306*4882a593Smuzhiyun WL_RATE_2X2_TXBF_VHT9SS2 = 101, 307*4882a593Smuzhiyun WL_RATE_P_2X2_TXBF_VHT10SS2 = 102, 308*4882a593Smuzhiyun WL_RATE_P_2X2_TXBF_VHT11SS2 = 103, 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun /************ 311*4882a593Smuzhiyun * 3 chains * 312*4882a593Smuzhiyun ************ 313*4882a593Smuzhiyun */ 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun /* 1 Stream expanded + 2 */ 316*4882a593Smuzhiyun WL_RATE_1X3_DSSS_1 = 104, 317*4882a593Smuzhiyun WL_RATE_1X3_DSSS_2 = 105, 318*4882a593Smuzhiyun WL_RATE_1X3_DSSS_5_5 = 106, 319*4882a593Smuzhiyun WL_RATE_1X3_DSSS_11 = 107, 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_6 = 108, 322*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_9 = 109, 323*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_12 = 110, 324*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_18 = 111, 325*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_24 = 112, 326*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_36 = 113, 327*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_48 = 114, 328*4882a593Smuzhiyun WL_RATE_1X3_CDD_OFDM_54 = 115, 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS0 = 116, 331*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS1 = 117, 332*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS2 = 118, 333*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS3 = 119, 334*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS4 = 120, 335*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS5 = 121, 336*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS6 = 122, 337*4882a593Smuzhiyun WL_RATE_1X3_CDD_MCS7 = 123, 338*4882a593Smuzhiyun WL_RATE_P_1X3_CDD_MCS87 = 124, 339*4882a593Smuzhiyun WL_RATE_P_1X3_CDD_MCS88 = 125, 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun WL_RATE_1X3_VHT0SS1 = 116, 342*4882a593Smuzhiyun WL_RATE_1X3_VHT1SS1 = 117, 343*4882a593Smuzhiyun WL_RATE_1X3_VHT2SS1 = 118, 344*4882a593Smuzhiyun WL_RATE_1X3_VHT3SS1 = 119, 345*4882a593Smuzhiyun WL_RATE_1X3_VHT4SS1 = 120, 346*4882a593Smuzhiyun WL_RATE_1X3_VHT5SS1 = 121, 347*4882a593Smuzhiyun WL_RATE_1X3_VHT6SS1 = 122, 348*4882a593Smuzhiyun WL_RATE_1X3_VHT7SS1 = 123, 349*4882a593Smuzhiyun WL_RATE_1X3_VHT8SS1 = 124, 350*4882a593Smuzhiyun WL_RATE_1X3_VHT9SS1 = 125, 351*4882a593Smuzhiyun WL_RATE_P_1X3_VHT10SS1 = 126, 352*4882a593Smuzhiyun WL_RATE_P_1X3_VHT11SS1 = 127, 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /* 2 Streams expanded + 1 */ 355*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS0 = 128, 356*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS1 = 129, 357*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS2 = 130, 358*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS3 = 131, 359*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS4 = 132, 360*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS5 = 133, 361*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS6 = 134, 362*4882a593Smuzhiyun WL_RATE_2X3_STBC_MCS7 = 135, 363*4882a593Smuzhiyun WL_RATE_P_2X3_STBC_MCS87 = 136, 364*4882a593Smuzhiyun WL_RATE_P_2X3_STBC_MCS88 = 137, 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT0SS1 = 128, 367*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT1SS1 = 129, 368*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT2SS1 = 130, 369*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT3SS1 = 131, 370*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT4SS1 = 132, 371*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT5SS1 = 133, 372*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT6SS1 = 134, 373*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT7SS1 = 135, 374*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT8SS1 = 136, 375*4882a593Smuzhiyun WL_RATE_2X3_STBC_VHT9SS1 = 137, 376*4882a593Smuzhiyun WL_RATE_P_2X3_STBC_VHT10SS1 = 138, 377*4882a593Smuzhiyun WL_RATE_P_2X3_STBC_VHT11SS1 = 139, 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS8 = 140, 380*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS9 = 141, 381*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS10 = 142, 382*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS11 = 143, 383*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS12 = 144, 384*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS13 = 145, 385*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS14 = 146, 386*4882a593Smuzhiyun WL_RATE_2X3_SDM_MCS15 = 147, 387*4882a593Smuzhiyun WL_RATE_P_2X3_SDM_MCS99 = 148, 388*4882a593Smuzhiyun WL_RATE_P_2X3_SDM_MCS100 = 149, 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun WL_RATE_2X3_VHT0SS2 = 140, 391*4882a593Smuzhiyun WL_RATE_2X3_VHT1SS2 = 141, 392*4882a593Smuzhiyun WL_RATE_2X3_VHT2SS2 = 142, 393*4882a593Smuzhiyun WL_RATE_2X3_VHT3SS2 = 143, 394*4882a593Smuzhiyun WL_RATE_2X3_VHT4SS2 = 144, 395*4882a593Smuzhiyun WL_RATE_2X3_VHT5SS2 = 145, 396*4882a593Smuzhiyun WL_RATE_2X3_VHT6SS2 = 146, 397*4882a593Smuzhiyun WL_RATE_2X3_VHT7SS2 = 147, 398*4882a593Smuzhiyun WL_RATE_2X3_VHT8SS2 = 148, 399*4882a593Smuzhiyun WL_RATE_2X3_VHT9SS2 = 149, 400*4882a593Smuzhiyun WL_RATE_P_2X3_VHT10SS2 = 150, 401*4882a593Smuzhiyun WL_RATE_P_2X3_VHT11SS2 = 151, 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* 3 Streams */ 404*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS16 = 152, 405*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS17 = 153, 406*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS18 = 154, 407*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS19 = 155, 408*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS20 = 156, 409*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS21 = 157, 410*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS22 = 158, 411*4882a593Smuzhiyun WL_RATE_3X3_SDM_MCS23 = 159, 412*4882a593Smuzhiyun WL_RATE_P_3X3_SDM_MCS101 = 160, 413*4882a593Smuzhiyun WL_RATE_P_3X3_SDM_MCS102 = 161, 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun WL_RATE_3X3_VHT0SS3 = 152, 416*4882a593Smuzhiyun WL_RATE_3X3_VHT1SS3 = 153, 417*4882a593Smuzhiyun WL_RATE_3X3_VHT2SS3 = 154, 418*4882a593Smuzhiyun WL_RATE_3X3_VHT3SS3 = 155, 419*4882a593Smuzhiyun WL_RATE_3X3_VHT4SS3 = 156, 420*4882a593Smuzhiyun WL_RATE_3X3_VHT5SS3 = 157, 421*4882a593Smuzhiyun WL_RATE_3X3_VHT6SS3 = 158, 422*4882a593Smuzhiyun WL_RATE_3X3_VHT7SS3 = 159, 423*4882a593Smuzhiyun WL_RATE_3X3_VHT8SS3 = 160, 424*4882a593Smuzhiyun WL_RATE_3X3_VHT9SS3 = 161, 425*4882a593Smuzhiyun WL_RATE_P_3X3_VHT10SS3 = 162, 426*4882a593Smuzhiyun WL_RATE_P_3X3_VHT11SS3 = 163, 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun /**************************** 429*4882a593Smuzhiyun * TX Beamforming, 3 chains * 430*4882a593Smuzhiyun **************************** 431*4882a593Smuzhiyun */ 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun /* 1 Stream expanded + 2 */ 434*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_6 = 164, 435*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_9 = 165, 436*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_12 = 166, 437*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_18 = 167, 438*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_24 = 168, 439*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_36 = 169, 440*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_48 = 170, 441*4882a593Smuzhiyun WL_RATE_1X3_TXBF_OFDM_54 = 171, 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS0 = 172, 444*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS1 = 173, 445*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS2 = 174, 446*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS3 = 175, 447*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS4 = 176, 448*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS5 = 177, 449*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS6 = 178, 450*4882a593Smuzhiyun WL_RATE_1X3_TXBF_MCS7 = 179, 451*4882a593Smuzhiyun WL_RATE_P_1X3_TXBF_MCS87 = 180, 452*4882a593Smuzhiyun WL_RATE_P_1X3_TXBF_MCS88 = 181, 453*4882a593Smuzhiyun 454*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT0SS1 = 172, 455*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT1SS1 = 173, 456*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT2SS1 = 174, 457*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT3SS1 = 175, 458*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT4SS1 = 176, 459*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT5SS1 = 177, 460*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT6SS1 = 178, 461*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT7SS1 = 179, 462*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT8SS1 = 180, 463*4882a593Smuzhiyun WL_RATE_1X3_TXBF_VHT9SS1 = 181, 464*4882a593Smuzhiyun WL_RATE_P_1X3_TXBF_VHT10SS1 = 182, 465*4882a593Smuzhiyun WL_RATE_P_1X3_TXBF_VHT11SS1 = 183, 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun /* 2 Streams expanded + 1 */ 468*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS8 = 184, 469*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS9 = 185, 470*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS10 = 186, 471*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS11 = 187, 472*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS12 = 188, 473*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS13 = 189, 474*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS14 = 190, 475*4882a593Smuzhiyun WL_RATE_2X3_TXBF_SDM_MCS15 = 191, 476*4882a593Smuzhiyun WL_RATE_P_2X3_TXBF_SDM_MCS99 = 192, 477*4882a593Smuzhiyun WL_RATE_P_2X3_TXBF_SDM_MCS100 = 193, 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT0SS2 = 184, 480*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT1SS2 = 185, 481*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT2SS2 = 186, 482*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT3SS2 = 187, 483*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT4SS2 = 188, 484*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT5SS2 = 189, 485*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT6SS2 = 190, 486*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT7SS2 = 191, 487*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT8SS2 = 192, 488*4882a593Smuzhiyun WL_RATE_2X3_TXBF_VHT9SS2 = 193, 489*4882a593Smuzhiyun WL_RATE_P_2X3_TXBF_VHT10SS2 = 194, 490*4882a593Smuzhiyun WL_RATE_P_2X3_TXBF_VHT11SS2 = 195, 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun /* 3 Streams */ 493*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS16 = 196, 494*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS17 = 197, 495*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS18 = 198, 496*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS19 = 199, 497*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS20 = 200, 498*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS21 = 201, 499*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS22 = 202, 500*4882a593Smuzhiyun WL_RATE_3X3_TXBF_SDM_MCS23 = 203, 501*4882a593Smuzhiyun WL_RATE_P_3X3_TXBF_SDM_MCS101 = 204, 502*4882a593Smuzhiyun WL_RATE_P_3X3_TXBF_SDM_MCS102 = 205, 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT0SS3 = 196, 505*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT1SS3 = 197, 506*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT2SS3 = 198, 507*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT3SS3 = 199, 508*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT4SS3 = 200, 509*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT5SS3 = 201, 510*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT6SS3 = 202, 511*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT7SS3 = 203, 512*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT8SS3 = 204, 513*4882a593Smuzhiyun WL_RATE_3X3_TXBF_VHT9SS3 = 205, 514*4882a593Smuzhiyun WL_RATE_P_3X3_TXBF_VHT10SS3 = 206, 515*4882a593Smuzhiyun WL_RATE_P_3X3_TXBF_VHT11SS3 = 207, 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun /************ 518*4882a593Smuzhiyun * 4 chains * 519*4882a593Smuzhiyun ************ 520*4882a593Smuzhiyun */ 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun /* 1 Stream expanded + 3 */ 523*4882a593Smuzhiyun WL_RATE_1X4_DSSS_1 = 208, 524*4882a593Smuzhiyun WL_RATE_1X4_DSSS_2 = 209, 525*4882a593Smuzhiyun WL_RATE_1X4_DSSS_5_5 = 210, 526*4882a593Smuzhiyun WL_RATE_1X4_DSSS_11 = 211, 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_6 = 212, 529*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_9 = 213, 530*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_12 = 214, 531*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_18 = 215, 532*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_24 = 216, 533*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_36 = 217, 534*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_48 = 218, 535*4882a593Smuzhiyun WL_RATE_1X4_CDD_OFDM_54 = 219, 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS0 = 220, 538*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS1 = 221, 539*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS2 = 222, 540*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS3 = 223, 541*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS4 = 224, 542*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS5 = 225, 543*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS6 = 226, 544*4882a593Smuzhiyun WL_RATE_1X4_CDD_MCS7 = 227, 545*4882a593Smuzhiyun WL_RATE_P_1X4_CDD_MCS87 = 228, 546*4882a593Smuzhiyun WL_RATE_P_1X4_CDD_MCS88 = 229, 547*4882a593Smuzhiyun 548*4882a593Smuzhiyun WL_RATE_1X4_VHT0SS1 = 220, 549*4882a593Smuzhiyun WL_RATE_1X4_VHT1SS1 = 221, 550*4882a593Smuzhiyun WL_RATE_1X4_VHT2SS1 = 222, 551*4882a593Smuzhiyun WL_RATE_1X4_VHT3SS1 = 223, 552*4882a593Smuzhiyun WL_RATE_1X4_VHT4SS1 = 224, 553*4882a593Smuzhiyun WL_RATE_1X4_VHT5SS1 = 225, 554*4882a593Smuzhiyun WL_RATE_1X4_VHT6SS1 = 226, 555*4882a593Smuzhiyun WL_RATE_1X4_VHT7SS1 = 227, 556*4882a593Smuzhiyun WL_RATE_1X4_VHT8SS1 = 228, 557*4882a593Smuzhiyun WL_RATE_1X4_VHT9SS1 = 229, 558*4882a593Smuzhiyun WL_RATE_P_1X4_VHT10SS1 = 230, 559*4882a593Smuzhiyun WL_RATE_P_1X4_VHT11SS1 = 231, 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun /* 2 Streams expanded + 2 */ 562*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS0 = 232, 563*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS1 = 233, 564*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS2 = 234, 565*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS3 = 235, 566*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS4 = 236, 567*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS5 = 237, 568*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS6 = 238, 569*4882a593Smuzhiyun WL_RATE_2X4_STBC_MCS7 = 239, 570*4882a593Smuzhiyun WL_RATE_P_2X4_STBC_MCS87 = 240, 571*4882a593Smuzhiyun WL_RATE_P_2X4_STBC_MCS88 = 241, 572*4882a593Smuzhiyun 573*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT0SS1 = 232, 574*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT1SS1 = 233, 575*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT2SS1 = 234, 576*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT3SS1 = 235, 577*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT4SS1 = 236, 578*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT5SS1 = 237, 579*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT6SS1 = 238, 580*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT7SS1 = 239, 581*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT8SS1 = 240, 582*4882a593Smuzhiyun WL_RATE_2X4_STBC_VHT9SS1 = 241, 583*4882a593Smuzhiyun WL_RATE_P_2X4_STBC_VHT10SS1 = 242, 584*4882a593Smuzhiyun WL_RATE_P_2X4_STBC_VHT11SS1 = 243, 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS8 = 244, 587*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS9 = 245, 588*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS10 = 246, 589*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS11 = 247, 590*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS12 = 248, 591*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS13 = 249, 592*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS14 = 250, 593*4882a593Smuzhiyun WL_RATE_2X4_SDM_MCS15 = 251, 594*4882a593Smuzhiyun WL_RATE_P_2X4_SDM_MCS99 = 252, 595*4882a593Smuzhiyun WL_RATE_P_2X4_SDM_MCS100 = 253, 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun WL_RATE_2X4_VHT0SS2 = 244, 598*4882a593Smuzhiyun WL_RATE_2X4_VHT1SS2 = 245, 599*4882a593Smuzhiyun WL_RATE_2X4_VHT2SS2 = 246, 600*4882a593Smuzhiyun WL_RATE_2X4_VHT3SS2 = 247, 601*4882a593Smuzhiyun WL_RATE_2X4_VHT4SS2 = 248, 602*4882a593Smuzhiyun WL_RATE_2X4_VHT5SS2 = 249, 603*4882a593Smuzhiyun WL_RATE_2X4_VHT6SS2 = 250, 604*4882a593Smuzhiyun WL_RATE_2X4_VHT7SS2 = 251, 605*4882a593Smuzhiyun WL_RATE_2X4_VHT8SS2 = 252, 606*4882a593Smuzhiyun WL_RATE_2X4_VHT9SS2 = 253, 607*4882a593Smuzhiyun WL_RATE_P_2X4_VHT10SS2 = 254, 608*4882a593Smuzhiyun WL_RATE_P_2X4_VHT11SS2 = 255, 609*4882a593Smuzhiyun 610*4882a593Smuzhiyun /* 3 Streams expanded + 1 */ 611*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS16 = 256, 612*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS17 = 257, 613*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS18 = 258, 614*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS19 = 259, 615*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS20 = 260, 616*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS21 = 261, 617*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS22 = 262, 618*4882a593Smuzhiyun WL_RATE_3X4_SDM_MCS23 = 263, 619*4882a593Smuzhiyun WL_RATE_P_3X4_SDM_MCS101 = 264, 620*4882a593Smuzhiyun WL_RATE_P_3X4_SDM_MCS102 = 265, 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun WL_RATE_3X4_VHT0SS3 = 256, 623*4882a593Smuzhiyun WL_RATE_3X4_VHT1SS3 = 257, 624*4882a593Smuzhiyun WL_RATE_3X4_VHT2SS3 = 258, 625*4882a593Smuzhiyun WL_RATE_3X4_VHT3SS3 = 259, 626*4882a593Smuzhiyun WL_RATE_3X4_VHT4SS3 = 260, 627*4882a593Smuzhiyun WL_RATE_3X4_VHT5SS3 = 261, 628*4882a593Smuzhiyun WL_RATE_3X4_VHT6SS3 = 262, 629*4882a593Smuzhiyun WL_RATE_3X4_VHT7SS3 = 263, 630*4882a593Smuzhiyun WL_RATE_3X4_VHT8SS3 = 264, 631*4882a593Smuzhiyun WL_RATE_3X4_VHT9SS3 = 265, 632*4882a593Smuzhiyun WL_RATE_P_3X4_VHT10SS3 = 266, 633*4882a593Smuzhiyun WL_RATE_P_3X4_VHT11SS3 = 267, 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun /* 4 Streams */ 636*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS24 = 268, 637*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS25 = 269, 638*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS26 = 270, 639*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS27 = 271, 640*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS28 = 272, 641*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS29 = 273, 642*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS30 = 274, 643*4882a593Smuzhiyun WL_RATE_4X4_SDM_MCS31 = 275, 644*4882a593Smuzhiyun WL_RATE_P_4X4_SDM_MCS103 = 276, 645*4882a593Smuzhiyun WL_RATE_P_4X4_SDM_MCS104 = 277, 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun WL_RATE_4X4_VHT0SS4 = 268, 648*4882a593Smuzhiyun WL_RATE_4X4_VHT1SS4 = 269, 649*4882a593Smuzhiyun WL_RATE_4X4_VHT2SS4 = 270, 650*4882a593Smuzhiyun WL_RATE_4X4_VHT3SS4 = 271, 651*4882a593Smuzhiyun WL_RATE_4X4_VHT4SS4 = 272, 652*4882a593Smuzhiyun WL_RATE_4X4_VHT5SS4 = 273, 653*4882a593Smuzhiyun WL_RATE_4X4_VHT6SS4 = 274, 654*4882a593Smuzhiyun WL_RATE_4X4_VHT7SS4 = 275, 655*4882a593Smuzhiyun WL_RATE_4X4_VHT8SS4 = 276, 656*4882a593Smuzhiyun WL_RATE_4X4_VHT9SS4 = 277, 657*4882a593Smuzhiyun WL_RATE_P_4X4_VHT10SS4 = 278, 658*4882a593Smuzhiyun WL_RATE_P_4X4_VHT11SS4 = 279, 659*4882a593Smuzhiyun 660*4882a593Smuzhiyun /**************************** 661*4882a593Smuzhiyun * TX Beamforming, 4 chains * 662*4882a593Smuzhiyun **************************** 663*4882a593Smuzhiyun */ 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun /* 1 Stream expanded + 3 */ 666*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_6 = 280, 667*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_9 = 281, 668*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_12 = 282, 669*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_18 = 283, 670*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_24 = 284, 671*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_36 = 285, 672*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_48 = 286, 673*4882a593Smuzhiyun WL_RATE_1X4_TXBF_OFDM_54 = 287, 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS0 = 288, 676*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS1 = 289, 677*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS2 = 290, 678*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS3 = 291, 679*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS4 = 292, 680*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS5 = 293, 681*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS6 = 294, 682*4882a593Smuzhiyun WL_RATE_1X4_TXBF_MCS7 = 295, 683*4882a593Smuzhiyun WL_RATE_P_1X4_TXBF_MCS87 = 296, 684*4882a593Smuzhiyun WL_RATE_P_1X4_TXBF_MCS88 = 297, 685*4882a593Smuzhiyun 686*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT0SS1 = 288, 687*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT1SS1 = 289, 688*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT2SS1 = 290, 689*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT3SS1 = 291, 690*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT4SS1 = 292, 691*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT5SS1 = 293, 692*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT6SS1 = 294, 693*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT7SS1 = 295, 694*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT8SS1 = 296, 695*4882a593Smuzhiyun WL_RATE_1X4_TXBF_VHT9SS1 = 297, 696*4882a593Smuzhiyun WL_RATE_P_1X4_TXBF_VHT10SS1 = 298, 697*4882a593Smuzhiyun WL_RATE_P_1X4_TXBF_VHT11SS1 = 299, 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun /* 2 Streams expanded + 2 */ 700*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS8 = 300, 701*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS9 = 301, 702*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS10 = 302, 703*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS11 = 303, 704*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS12 = 304, 705*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS13 = 305, 706*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS14 = 306, 707*4882a593Smuzhiyun WL_RATE_2X4_TXBF_SDM_MCS15 = 307, 708*4882a593Smuzhiyun WL_RATE_P_2X4_TXBF_SDM_MCS99 = 308, 709*4882a593Smuzhiyun WL_RATE_P_2X4_TXBF_SDM_MCS100 = 309, 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT0SS2 = 300, 712*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT1SS2 = 301, 713*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT2SS2 = 302, 714*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT3SS2 = 303, 715*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT4SS2 = 304, 716*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT5SS2 = 305, 717*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT6SS2 = 306, 718*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT7SS2 = 307, 719*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT8SS2 = 308, 720*4882a593Smuzhiyun WL_RATE_2X4_TXBF_VHT9SS2 = 309, 721*4882a593Smuzhiyun WL_RATE_P_2X4_TXBF_VHT10SS2 = 310, 722*4882a593Smuzhiyun WL_RATE_P_2X4_TXBF_VHT11SS2 = 311, 723*4882a593Smuzhiyun 724*4882a593Smuzhiyun /* 3 Streams expanded + 1 */ 725*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS16 = 312, 726*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS17 = 313, 727*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS18 = 314, 728*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS19 = 315, 729*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS20 = 316, 730*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS21 = 317, 731*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS22 = 318, 732*4882a593Smuzhiyun WL_RATE_3X4_TXBF_SDM_MCS23 = 319, 733*4882a593Smuzhiyun WL_RATE_P_3X4_TXBF_SDM_MCS101 = 320, 734*4882a593Smuzhiyun WL_RATE_P_3X4_TXBF_SDM_MCS102 = 321, 735*4882a593Smuzhiyun 736*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT0SS3 = 312, 737*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT1SS3 = 313, 738*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT2SS3 = 314, 739*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT3SS3 = 315, 740*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT4SS3 = 316, 741*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT5SS3 = 317, 742*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT6SS3 = 318, 743*4882a593Smuzhiyun WL_RATE_3X4_TXBF_VHT7SS3 = 319, 744*4882a593Smuzhiyun WL_RATE_P_3X4_TXBF_VHT8SS3 = 320, 745*4882a593Smuzhiyun WL_RATE_P_3X4_TXBF_VHT9SS3 = 321, 746*4882a593Smuzhiyun WL_RATE_P_3X4_TXBF_VHT10SS3 = 322, 747*4882a593Smuzhiyun WL_RATE_P_3X4_TXBF_VHT11SS3 = 323, 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun /* 4 Streams */ 750*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS24 = 324, 751*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS25 = 325, 752*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS26 = 326, 753*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS27 = 327, 754*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS28 = 328, 755*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS29 = 329, 756*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS30 = 330, 757*4882a593Smuzhiyun WL_RATE_4X4_TXBF_SDM_MCS31 = 331, 758*4882a593Smuzhiyun WL_RATE_P_4X4_TXBF_SDM_MCS103 = 332, 759*4882a593Smuzhiyun WL_RATE_P_4X4_TXBF_SDM_MCS104 = 333, 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT0SS4 = 324, 762*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT1SS4 = 325, 763*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT2SS4 = 326, 764*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT3SS4 = 327, 765*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT4SS4 = 328, 766*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT5SS4 = 329, 767*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT6SS4 = 330, 768*4882a593Smuzhiyun WL_RATE_4X4_TXBF_VHT7SS4 = 331, 769*4882a593Smuzhiyun WL_RATE_P_4X4_TXBF_VHT8SS4 = 332, 770*4882a593Smuzhiyun WL_RATE_P_4X4_TXBF_VHT9SS4 = 333, 771*4882a593Smuzhiyun WL_RATE_P_4X4_TXBF_VHT10SS4 = 334, 772*4882a593Smuzhiyun WL_RATE_P_4X4_TXBF_VHT11SS4 = 335 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun } clm_rates_t; 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun /* Number of rate codes */ 777*4882a593Smuzhiyun #define WL_NUMRATES 336 778*4882a593Smuzhiyun 779*4882a593Smuzhiyun /* MCS rates */ 780*4882a593Smuzhiyun #define WLC_MAX_VHT_MCS 11 /**< Std VHT MCS 0-9 plus prop VHT MCS 10-11 */ 781*4882a593Smuzhiyun #define WLC_MAX_HE_MCS 11 /**< Std HE MCS 0-11 */ 782*4882a593Smuzhiyun 783*4882a593Smuzhiyun /* Convert encoded rate value in plcp header to numerical rates in 500 KHz increments */ 784*4882a593Smuzhiyun #define OFDM_PHY2MAC_RATE(rlpt) plcp_ofdm_rate_tbl[(rlpt) & 0x7] 785*4882a593Smuzhiyun #define CCK_PHY2MAC_RATE(signal) ((signal)/5) 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun /* given a proprietary MCS, get number of spatial streams */ 788*4882a593Smuzhiyun #define GET_PROPRIETARY_11N_MCS_NSS(mcs) (1 + ((mcs) - 85) / 8) 789*4882a593Smuzhiyun 790*4882a593Smuzhiyun #define GET_11N_MCS_NSS(mcs) ((mcs) < 32 ? (1 + ((mcs) / 8)) : \ 791*4882a593Smuzhiyun ((mcs) == 32 ? 1 : GET_PROPRIETARY_11N_MCS_NSS(mcs))) 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun #define IS_PROPRIETARY_11N_MCS(mcs) FALSE 794*4882a593Smuzhiyun #define IS_PROPRIETARY_11N_SS_MCS(mcs) FALSE /**< is proprietary HT single stream MCS */ 795*4882a593Smuzhiyun 796*4882a593Smuzhiyun /* Store HE mcs map for all NSS in a compact form: 797*4882a593Smuzhiyun * 798*4882a593Smuzhiyun * bit[0:2] mcs code for NSS 1 799*4882a593Smuzhiyun * bit[3:5] mcs code for NSS 2 800*4882a593Smuzhiyun * ... 801*4882a593Smuzhiyun * bit[21:23] mcs code for NSS 8 802*4882a593Smuzhiyun */ 803*4882a593Smuzhiyun 804*4882a593Smuzhiyun /** 805*4882a593Smuzhiyun * 3 bits are used for encoding each NSS mcs map (HE MCS MAP is 24 bits) 806*4882a593Smuzhiyun */ 807*4882a593Smuzhiyun #define HE_CAP_MCS_CODE_NONE 7 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun /* macros to access above compact format */ 810*4882a593Smuzhiyun #define HE_CAP_MCS_NSS_SET_MASK 0x00ffffff /* Field is to be 24 bits long */ 811*4882a593Smuzhiyun #define HE_CAP_MCS_NSS_GET_SS_IDX(nss) (((nss)-1) * HE_CAP_MCS_CODE_SIZE) 812*4882a593Smuzhiyun #define HE_CAP_MCS_NSS_GET_MCS(nss, mcs_nss_map) \ 813*4882a593Smuzhiyun (((mcs_nss_map) >> HE_CAP_MCS_NSS_GET_SS_IDX(nss)) & HE_CAP_MCS_CODE_MASK) 814*4882a593Smuzhiyun #define HE_CAP_MCS_NSS_SET_MCS(nss, mcs_code, mcs_nss_map) \ 815*4882a593Smuzhiyun do { \ 816*4882a593Smuzhiyun (mcs_nss_map) &= (~(HE_CAP_MCS_CODE_MASK << HE_CAP_MCS_NSS_GET_SS_IDX(nss))); \ 817*4882a593Smuzhiyun (mcs_nss_map) |= (((mcs_code) & HE_CAP_MCS_CODE_MASK) << HE_CAP_MCS_NSS_GET_SS_IDX(nss)); \ 818*4882a593Smuzhiyun (mcs_nss_map) &= (HE_CAP_MCS_NSS_SET_MASK); \ 819*4882a593Smuzhiyun } while (0) 820*4882a593Smuzhiyun 821*4882a593Smuzhiyun extern const uint8 plcp_ofdm_rate_tbl[]; 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun uint8 wf_get_single_stream_mcs(uint mcs); 824*4882a593Smuzhiyun 825*4882a593Smuzhiyun uint8 wf_vht_plcp_to_rate(uint8 *plcp); 826*4882a593Smuzhiyun uint wf_mcs_to_rate(uint mcs, uint nss, uint bw, int sgi); 827*4882a593Smuzhiyun uint wf_he_mcs_to_rate(uint mcs, uint nss, uint bw, uint gi, bool dcm); 828*4882a593Smuzhiyun uint wf_mcs_to_Ndbps(uint mcs, uint nss, uint bw); 829*4882a593Smuzhiyun #ifdef __cplusplus 830*4882a593Smuzhiyun } 831*4882a593Smuzhiyun #endif /* __cplusplus */ 832*4882a593Smuzhiyun 833*4882a593Smuzhiyun #endif /* _bcmwifi_rates_h_ */ 834