cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

6000.c (11300B)


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