root/drivers/net/wireless/intel/iwlwifi/cfg/6000.c

/* [<][>][^][v][top][bottom][index][help] */
   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /******************************************************************************
   3  *
   4  * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved.
   5  * Copyright(c) 2018 - 2019 Intel Corporation
   6  *
   7  * Contact Information:
   8  *  Intel Linux Wireless <linuxwifi@intel.com>
   9  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  10  *
  11  *****************************************************************************/
  12 
  13 #include <linux/module.h>
  14 #include <linux/stringify.h>
  15 #include "iwl-config.h"
  16 #include "iwl-agn-hw.h"
  17 #include "dvm/commands.h" /* needed for BT for now */
  18 
  19 /* Highest firmware API version supported */
  20 #define IWL6000_UCODE_API_MAX 6
  21 #define IWL6050_UCODE_API_MAX 5
  22 #define IWL6000G2_UCODE_API_MAX 6
  23 #define IWL6035_UCODE_API_MAX 6
  24 
  25 /* Lowest firmware API version supported */
  26 #define IWL6000_UCODE_API_MIN 4
  27 #define IWL6050_UCODE_API_MIN 4
  28 #define IWL6000G2_UCODE_API_MIN 5
  29 #define IWL6035_UCODE_API_MIN 6
  30 
  31 /* EEPROM versions */
  32 #define EEPROM_6000_TX_POWER_VERSION    (4)
  33 #define EEPROM_6000_EEPROM_VERSION      (0x423)
  34 #define EEPROM_6050_TX_POWER_VERSION    (4)
  35 #define EEPROM_6050_EEPROM_VERSION      (0x532)
  36 #define EEPROM_6150_TX_POWER_VERSION    (6)
  37 #define EEPROM_6150_EEPROM_VERSION      (0x553)
  38 #define EEPROM_6005_TX_POWER_VERSION    (6)
  39 #define EEPROM_6005_EEPROM_VERSION      (0x709)
  40 #define EEPROM_6030_TX_POWER_VERSION    (6)
  41 #define EEPROM_6030_EEPROM_VERSION      (0x709)
  42 #define EEPROM_6035_TX_POWER_VERSION    (6)
  43 #define EEPROM_6035_EEPROM_VERSION      (0x753)
  44 
  45 #define IWL6000_FW_PRE "iwlwifi-6000-"
  46 #define IWL6000_MODULE_FIRMWARE(api) IWL6000_FW_PRE __stringify(api) ".ucode"
  47 
  48 #define IWL6050_FW_PRE "iwlwifi-6050-"
  49 #define IWL6050_MODULE_FIRMWARE(api) IWL6050_FW_PRE __stringify(api) ".ucode"
  50 
  51 #define IWL6005_FW_PRE "iwlwifi-6000g2a-"
  52 #define IWL6005_MODULE_FIRMWARE(api) IWL6005_FW_PRE __stringify(api) ".ucode"
  53 
  54 #define IWL6030_FW_PRE "iwlwifi-6000g2b-"
  55 #define IWL6030_MODULE_FIRMWARE(api) IWL6030_FW_PRE __stringify(api) ".ucode"
  56 
  57 static const struct iwl_base_params iwl6000_base_params = {
  58         .eeprom_size = OTP_LOW_IMAGE_SIZE_2K,
  59         .num_of_queues = IWLAGN_NUM_QUEUES,
  60         .max_tfd_queue_size = 256,
  61         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
  62         .shadow_ram_support = true,
  63         .led_compensation = 51,
  64         .wd_timeout = IWL_DEF_WD_TIMEOUT,
  65         .max_event_log_size = 512,
  66         .shadow_reg_enable = false, /* TODO: fix bugs using this feature */
  67         .scd_chain_ext_wa = true,
  68 };
  69 
  70 static const struct iwl_base_params iwl6050_base_params = {
  71         .eeprom_size = OTP_LOW_IMAGE_SIZE_2K,
  72         .num_of_queues = IWLAGN_NUM_QUEUES,
  73         .max_tfd_queue_size = 256,
  74         .max_ll_items = OTP_MAX_LL_ITEMS_6x50,
  75         .shadow_ram_support = true,
  76         .led_compensation = 51,
  77         .wd_timeout = IWL_DEF_WD_TIMEOUT,
  78         .max_event_log_size = 1024,
  79         .shadow_reg_enable = false, /* TODO: fix bugs using this feature */
  80         .scd_chain_ext_wa = true,
  81 };
  82 
  83 static const struct iwl_base_params iwl6000_g2_base_params = {
  84         .eeprom_size = OTP_LOW_IMAGE_SIZE_2K,
  85         .num_of_queues = IWLAGN_NUM_QUEUES,
  86         .max_tfd_queue_size = 256,
  87         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
  88         .shadow_ram_support = true,
  89         .led_compensation = 57,
  90         .wd_timeout = IWL_LONG_WD_TIMEOUT,
  91         .max_event_log_size = 512,
  92         .shadow_reg_enable = false, /* TODO: fix bugs using this feature */
  93         .scd_chain_ext_wa = true,
  94 };
  95 
  96 static const struct iwl_ht_params iwl6000_ht_params = {
  97         .ht_greenfield_support = true,
  98         .use_rts_for_aggregation = true, /* use rts/cts protection */
  99         .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
 100 };
 101 
 102 static const struct iwl_eeprom_params iwl6000_eeprom_params = {
 103         .regulatory_bands = {
 104                 EEPROM_REG_BAND_1_CHANNELS,
 105                 EEPROM_REG_BAND_2_CHANNELS,
 106                 EEPROM_REG_BAND_3_CHANNELS,
 107                 EEPROM_REG_BAND_4_CHANNELS,
 108                 EEPROM_REG_BAND_5_CHANNELS,
 109                 EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
 110                 EEPROM_REG_BAND_52_HT40_CHANNELS
 111         },
 112         .enhanced_txpower = true,
 113 };
 114 
 115 #define IWL_DEVICE_6005                                         \
 116         .fw_name_pre = IWL6005_FW_PRE,                          \
 117         .ucode_api_max = IWL6000G2_UCODE_API_MAX,               \
 118         .ucode_api_min = IWL6000G2_UCODE_API_MIN,               \
 119         .trans.device_family = IWL_DEVICE_FAMILY_6005,          \
 120         .max_inst_size = IWL60_RTC_INST_SIZE,                   \
 121         .max_data_size = IWL60_RTC_DATA_SIZE,                   \
 122         .nvm_ver = EEPROM_6005_EEPROM_VERSION,          \
 123         .nvm_calib_ver = EEPROM_6005_TX_POWER_VERSION,  \
 124         .trans.base_params = &iwl6000_g2_base_params,           \
 125         .eeprom_params = &iwl6000_eeprom_params,                \
 126         .led_mode = IWL_LED_RF_STATE,                           \
 127         .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,    \
 128         .trans.csr = &iwl_csr_v1
 129 
 130 const struct iwl_cfg iwl6005_2agn_cfg = {
 131         .name = "Intel(R) Centrino(R) Advanced-N 6205 AGN",
 132         IWL_DEVICE_6005,
 133         .ht_params = &iwl6000_ht_params,
 134 };
 135 
 136 const struct iwl_cfg iwl6005_2abg_cfg = {
 137         .name = "Intel(R) Centrino(R) Advanced-N 6205 ABG",
 138         IWL_DEVICE_6005,
 139 };
 140 
 141 const struct iwl_cfg iwl6005_2bg_cfg = {
 142         .name = "Intel(R) Centrino(R) Advanced-N 6205 BG",
 143         IWL_DEVICE_6005,
 144 };
 145 
 146 const struct iwl_cfg iwl6005_2agn_sff_cfg = {
 147         .name = "Intel(R) Centrino(R) Advanced-N 6205S AGN",
 148         IWL_DEVICE_6005,
 149         .ht_params = &iwl6000_ht_params,
 150 };
 151 
 152 const struct iwl_cfg iwl6005_2agn_d_cfg = {
 153         .name = "Intel(R) Centrino(R) Advanced-N 6205D AGN",
 154         IWL_DEVICE_6005,
 155         .ht_params = &iwl6000_ht_params,
 156 };
 157 
 158 const struct iwl_cfg iwl6005_2agn_mow1_cfg = {
 159         .name = "Intel(R) Centrino(R) Advanced-N 6206 AGN",
 160         IWL_DEVICE_6005,
 161         .ht_params = &iwl6000_ht_params,
 162 };
 163 
 164 const struct iwl_cfg iwl6005_2agn_mow2_cfg = {
 165         .name = "Intel(R) Centrino(R) Advanced-N 6207 AGN",
 166         IWL_DEVICE_6005,
 167         .ht_params = &iwl6000_ht_params,
 168 };
 169 
 170 #define IWL_DEVICE_6030                                         \
 171         .fw_name_pre = IWL6030_FW_PRE,                          \
 172         .ucode_api_max = IWL6000G2_UCODE_API_MAX,               \
 173         .ucode_api_min = IWL6000G2_UCODE_API_MIN,               \
 174         .trans.device_family = IWL_DEVICE_FAMILY_6030,          \
 175         .max_inst_size = IWL60_RTC_INST_SIZE,                   \
 176         .max_data_size = IWL60_RTC_DATA_SIZE,                   \
 177         .nvm_ver = EEPROM_6030_EEPROM_VERSION,          \
 178         .nvm_calib_ver = EEPROM_6030_TX_POWER_VERSION,  \
 179         .trans.base_params = &iwl6000_g2_base_params,           \
 180         .eeprom_params = &iwl6000_eeprom_params,                \
 181         .led_mode = IWL_LED_RF_STATE,                           \
 182         .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,    \
 183         .trans.csr = &iwl_csr_v1
 184 
 185 const struct iwl_cfg iwl6030_2agn_cfg = {
 186         .name = "Intel(R) Centrino(R) Advanced-N 6230 AGN",
 187         IWL_DEVICE_6030,
 188         .ht_params = &iwl6000_ht_params,
 189 };
 190 
 191 const struct iwl_cfg iwl6030_2abg_cfg = {
 192         .name = "Intel(R) Centrino(R) Advanced-N 6230 ABG",
 193         IWL_DEVICE_6030,
 194 };
 195 
 196 const struct iwl_cfg iwl6030_2bgn_cfg = {
 197         .name = "Intel(R) Centrino(R) Advanced-N 6230 BGN",
 198         IWL_DEVICE_6030,
 199         .ht_params = &iwl6000_ht_params,
 200 };
 201 
 202 const struct iwl_cfg iwl6030_2bg_cfg = {
 203         .name = "Intel(R) Centrino(R) Advanced-N 6230 BG",
 204         IWL_DEVICE_6030,
 205 };
 206 
 207 #define IWL_DEVICE_6035                                         \
 208         .fw_name_pre = IWL6030_FW_PRE,                          \
 209         .ucode_api_max = IWL6035_UCODE_API_MAX,                 \
 210         .ucode_api_min = IWL6035_UCODE_API_MIN,                 \
 211         .trans.device_family = IWL_DEVICE_FAMILY_6030,          \
 212         .max_inst_size = IWL60_RTC_INST_SIZE,                   \
 213         .max_data_size = IWL60_RTC_DATA_SIZE,                   \
 214         .nvm_ver = EEPROM_6030_EEPROM_VERSION,          \
 215         .nvm_calib_ver = EEPROM_6030_TX_POWER_VERSION,  \
 216         .trans.base_params = &iwl6000_g2_base_params,           \
 217         .eeprom_params = &iwl6000_eeprom_params,                \
 218         .led_mode = IWL_LED_RF_STATE,                           \
 219         .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,    \
 220         .trans.csr = &iwl_csr_v1
 221 
 222 const struct iwl_cfg iwl6035_2agn_cfg = {
 223         .name = "Intel(R) Centrino(R) Advanced-N 6235 AGN",
 224         IWL_DEVICE_6035,
 225         .ht_params = &iwl6000_ht_params,
 226 };
 227 
 228 const struct iwl_cfg iwl6035_2agn_sff_cfg = {
 229         .name = "Intel(R) Centrino(R) Ultimate-N 6235 AGN",
 230         IWL_DEVICE_6035,
 231         .ht_params = &iwl6000_ht_params,
 232 };
 233 
 234 const struct iwl_cfg iwl1030_bgn_cfg = {
 235         .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN",
 236         IWL_DEVICE_6030,
 237         .ht_params = &iwl6000_ht_params,
 238 };
 239 
 240 const struct iwl_cfg iwl1030_bg_cfg = {
 241         .name = "Intel(R) Centrino(R) Wireless-N 1030 BG",
 242         IWL_DEVICE_6030,
 243 };
 244 
 245 const struct iwl_cfg iwl130_bgn_cfg = {
 246         .name = "Intel(R) Centrino(R) Wireless-N 130 BGN",
 247         IWL_DEVICE_6030,
 248         .ht_params = &iwl6000_ht_params,
 249         .rx_with_siso_diversity = true,
 250 };
 251 
 252 const struct iwl_cfg iwl130_bg_cfg = {
 253         .name = "Intel(R) Centrino(R) Wireless-N 130 BG",
 254         IWL_DEVICE_6030,
 255         .rx_with_siso_diversity = true,
 256 };
 257 
 258 /*
 259  * "i": Internal configuration, use internal Power Amplifier
 260  */
 261 #define IWL_DEVICE_6000i                                        \
 262         .fw_name_pre = IWL6000_FW_PRE,                          \
 263         .ucode_api_max = IWL6000_UCODE_API_MAX,                 \
 264         .ucode_api_min = IWL6000_UCODE_API_MIN,                 \
 265         .trans.device_family = IWL_DEVICE_FAMILY_6000i,         \
 266         .max_inst_size = IWL60_RTC_INST_SIZE,                   \
 267         .max_data_size = IWL60_RTC_DATA_SIZE,                   \
 268         .valid_tx_ant = ANT_BC,         /* .cfg overwrite */    \
 269         .valid_rx_ant = ANT_BC,         /* .cfg overwrite */    \
 270         .nvm_ver = EEPROM_6000_EEPROM_VERSION,          \
 271         .nvm_calib_ver = EEPROM_6000_TX_POWER_VERSION,  \
 272         .trans.base_params = &iwl6000_base_params,              \
 273         .eeprom_params = &iwl6000_eeprom_params,                \
 274         .led_mode = IWL_LED_BLINK,                              \
 275         .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,    \
 276         .trans.csr = &iwl_csr_v1
 277 
 278 const struct iwl_cfg iwl6000i_2agn_cfg = {
 279         .name = "Intel(R) Centrino(R) Advanced-N 6200 AGN",
 280         IWL_DEVICE_6000i,
 281         .ht_params = &iwl6000_ht_params,
 282 };
 283 
 284 const struct iwl_cfg iwl6000i_2abg_cfg = {
 285         .name = "Intel(R) Centrino(R) Advanced-N 6200 ABG",
 286         IWL_DEVICE_6000i,
 287 };
 288 
 289 const struct iwl_cfg iwl6000i_2bg_cfg = {
 290         .name = "Intel(R) Centrino(R) Advanced-N 6200 BG",
 291         IWL_DEVICE_6000i,
 292 };
 293 
 294 #define IWL_DEVICE_6050                                         \
 295         .fw_name_pre = IWL6050_FW_PRE,                          \
 296         .ucode_api_max = IWL6050_UCODE_API_MAX,                 \
 297         .ucode_api_min = IWL6050_UCODE_API_MIN,                 \
 298         .trans.device_family = IWL_DEVICE_FAMILY_6050,          \
 299         .max_inst_size = IWL60_RTC_INST_SIZE,                   \
 300         .max_data_size = IWL60_RTC_DATA_SIZE,                   \
 301         .valid_tx_ant = ANT_AB,         /* .cfg overwrite */    \
 302         .valid_rx_ant = ANT_AB,         /* .cfg overwrite */    \
 303         .nvm_ver = EEPROM_6050_EEPROM_VERSION,          \
 304         .nvm_calib_ver = EEPROM_6050_TX_POWER_VERSION,  \
 305         .trans.base_params = &iwl6050_base_params,              \
 306         .eeprom_params = &iwl6000_eeprom_params,                \
 307         .led_mode = IWL_LED_BLINK,                              \
 308         .internal_wimax_coex = true,                            \
 309         .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,    \
 310         .trans.csr = &iwl_csr_v1
 311 
 312 const struct iwl_cfg iwl6050_2agn_cfg = {
 313         .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN",
 314         IWL_DEVICE_6050,
 315         .ht_params = &iwl6000_ht_params,
 316 };
 317 
 318 const struct iwl_cfg iwl6050_2abg_cfg = {
 319         .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG",
 320         IWL_DEVICE_6050,
 321 };
 322 
 323 #define IWL_DEVICE_6150                                         \
 324         .fw_name_pre = IWL6050_FW_PRE,                          \
 325         .ucode_api_max = IWL6050_UCODE_API_MAX,                 \
 326         .ucode_api_min = IWL6050_UCODE_API_MIN,                 \
 327         .trans.device_family = IWL_DEVICE_FAMILY_6150,          \
 328         .max_inst_size = IWL60_RTC_INST_SIZE,                   \
 329         .max_data_size = IWL60_RTC_DATA_SIZE,                   \
 330         .nvm_ver = EEPROM_6150_EEPROM_VERSION,          \
 331         .nvm_calib_ver = EEPROM_6150_TX_POWER_VERSION,  \
 332         .trans.base_params = &iwl6050_base_params,              \
 333         .eeprom_params = &iwl6000_eeprom_params,                \
 334         .led_mode = IWL_LED_BLINK,                              \
 335         .internal_wimax_coex = true,                            \
 336         .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,    \
 337         .trans.csr = &iwl_csr_v1
 338 
 339 const struct iwl_cfg iwl6150_bgn_cfg = {
 340         .name = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BGN",
 341         IWL_DEVICE_6150,
 342         .ht_params = &iwl6000_ht_params,
 343 };
 344 
 345 const struct iwl_cfg iwl6150_bg_cfg = {
 346         .name = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BG",
 347         IWL_DEVICE_6150,
 348 };
 349 
 350 const struct iwl_cfg iwl6000_3agn_cfg = {
 351         .name = "Intel(R) Centrino(R) Ultimate-N 6300 AGN",
 352         .fw_name_pre = IWL6000_FW_PRE,
 353         .ucode_api_max = IWL6000_UCODE_API_MAX,
 354         .ucode_api_min = IWL6000_UCODE_API_MIN,
 355         .trans.device_family = IWL_DEVICE_FAMILY_6000,
 356         .max_inst_size = IWL60_RTC_INST_SIZE,
 357         .max_data_size = IWL60_RTC_DATA_SIZE,
 358         .nvm_ver = EEPROM_6000_EEPROM_VERSION,
 359         .nvm_calib_ver = EEPROM_6000_TX_POWER_VERSION,
 360         .trans.base_params = &iwl6000_base_params,
 361         .eeprom_params = &iwl6000_eeprom_params,
 362         .ht_params = &iwl6000_ht_params,
 363         .led_mode = IWL_LED_BLINK,
 364         .trans.csr = &iwl_csr_v1,
 365 };
 366 
 367 MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
 368 MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX));
 369 MODULE_FIRMWARE(IWL6005_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
 370 MODULE_FIRMWARE(IWL6030_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));

/* [<][>][^][v][top][bottom][index][help] */