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