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

7000.c (8858B)


      1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
      2/*
      3 * Copyright (C) 2012-2014, 2018-2020 Intel Corporation
      4 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
      5 * Copyright (C) 2015 Intel Deutschland GmbH
      6 */
      7#include <linux/module.h>
      8#include <linux/stringify.h>
      9#include "iwl-config.h"
     10
     11/* Highest firmware API version supported */
     12#define IWL7260_UCODE_API_MAX	17
     13#define IWL7265_UCODE_API_MAX	17
     14#define IWL7265D_UCODE_API_MAX	29
     15#define IWL3168_UCODE_API_MAX	29
     16
     17/* Lowest firmware API version supported */
     18#define IWL7260_UCODE_API_MIN	17
     19#define IWL7265_UCODE_API_MIN	17
     20#define IWL7265D_UCODE_API_MIN	22
     21#define IWL3168_UCODE_API_MIN	22
     22
     23/* NVM versions */
     24#define IWL7260_NVM_VERSION		0x0a1d
     25#define IWL3160_NVM_VERSION		0x709
     26#define IWL3165_NVM_VERSION		0x709
     27#define IWL3168_NVM_VERSION		0xd01
     28#define IWL7265_NVM_VERSION		0x0a1d
     29#define IWL7265D_NVM_VERSION		0x0c11
     30
     31/* DCCM offsets and lengths */
     32#define IWL7000_DCCM_OFFSET		0x800000
     33#define IWL7260_DCCM_LEN		0x14000
     34#define IWL3160_DCCM_LEN		0x10000
     35#define IWL7265_DCCM_LEN		0x17A00
     36
     37#define IWL7260_FW_PRE "iwlwifi-7260-"
     38#define IWL7260_MODULE_FIRMWARE(api) IWL7260_FW_PRE __stringify(api) ".ucode"
     39
     40#define IWL3160_FW_PRE "iwlwifi-3160-"
     41#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode"
     42
     43#define IWL3168_FW_PRE "iwlwifi-3168-"
     44#define IWL3168_MODULE_FIRMWARE(api) IWL3168_FW_PRE __stringify(api) ".ucode"
     45
     46#define IWL7265_FW_PRE "iwlwifi-7265-"
     47#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode"
     48
     49#define IWL7265D_FW_PRE "iwlwifi-7265D-"
     50#define IWL7265D_MODULE_FIRMWARE(api) IWL7265D_FW_PRE __stringify(api) ".ucode"
     51
     52static const struct iwl_base_params iwl7000_base_params = {
     53	.eeprom_size = OTP_LOW_IMAGE_SIZE_16K,
     54	.num_of_queues = 31,
     55	.max_tfd_queue_size = 256,
     56	.shadow_ram_support = true,
     57	.led_compensation = 57,
     58	.wd_timeout = IWL_LONG_WD_TIMEOUT,
     59	.max_event_log_size = 512,
     60	.shadow_reg_enable = true,
     61	.pcie_l1_allowed = true,
     62	.apmg_wake_up_wa = true,
     63};
     64
     65static const struct iwl_tt_params iwl7000_high_temp_tt_params = {
     66	.ct_kill_entry = 118,
     67	.ct_kill_exit = 96,
     68	.ct_kill_duration = 5,
     69	.dynamic_smps_entry = 114,
     70	.dynamic_smps_exit = 110,
     71	.tx_protection_entry = 114,
     72	.tx_protection_exit = 108,
     73	.tx_backoff = {
     74		{.temperature = 112, .backoff = 300},
     75		{.temperature = 113, .backoff = 800},
     76		{.temperature = 114, .backoff = 1500},
     77		{.temperature = 115, .backoff = 3000},
     78		{.temperature = 116, .backoff = 5000},
     79		{.temperature = 117, .backoff = 10000},
     80	},
     81	.support_ct_kill = true,
     82	.support_dynamic_smps = true,
     83	.support_tx_protection = true,
     84	.support_tx_backoff = true,
     85};
     86
     87static const struct iwl_ht_params iwl7000_ht_params = {
     88	.stbc = true,
     89	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
     90};
     91
     92#define IWL_DEVICE_7000_COMMON					\
     93	.trans.device_family = IWL_DEVICE_FAMILY_7000,		\
     94	.trans.base_params = &iwl7000_base_params,		\
     95	.led_mode = IWL_LED_RF_STATE,				\
     96	.nvm_hw_section_num = 0,				\
     97	.non_shared_ant = ANT_A,				\
     98	.dccm_offset = IWL7000_DCCM_OFFSET
     99
    100#define IWL_DEVICE_7000						\
    101	IWL_DEVICE_7000_COMMON,					\
    102	.ucode_api_max = IWL7260_UCODE_API_MAX,			\
    103	.ucode_api_min = IWL7260_UCODE_API_MIN
    104
    105#define IWL_DEVICE_7005						\
    106	IWL_DEVICE_7000_COMMON,					\
    107	.ucode_api_max = IWL7265_UCODE_API_MAX,			\
    108	.ucode_api_min = IWL7265_UCODE_API_MIN
    109
    110#define IWL_DEVICE_3008						\
    111	IWL_DEVICE_7000_COMMON,					\
    112	.ucode_api_max = IWL3168_UCODE_API_MAX,			\
    113	.ucode_api_min = IWL3168_UCODE_API_MIN
    114
    115#define IWL_DEVICE_7005D					\
    116	IWL_DEVICE_7000_COMMON,					\
    117	.ucode_api_max = IWL7265D_UCODE_API_MAX,		\
    118	.ucode_api_min = IWL7265D_UCODE_API_MIN
    119
    120const struct iwl_cfg iwl7260_2ac_cfg = {
    121	.name = "Intel(R) Dual Band Wireless AC 7260",
    122	.fw_name_pre = IWL7260_FW_PRE,
    123	IWL_DEVICE_7000,
    124	.ht_params = &iwl7000_ht_params,
    125	.nvm_ver = IWL7260_NVM_VERSION,
    126	.host_interrupt_operation_mode = true,
    127	.lp_xtal_workaround = true,
    128	.dccm_len = IWL7260_DCCM_LEN,
    129};
    130
    131const struct iwl_cfg iwl7260_2ac_cfg_high_temp = {
    132	.name = "Intel(R) Dual Band Wireless AC 7260",
    133	.fw_name_pre = IWL7260_FW_PRE,
    134	IWL_DEVICE_7000,
    135	.ht_params = &iwl7000_ht_params,
    136	.nvm_ver = IWL7260_NVM_VERSION,
    137	.high_temp = true,
    138	.host_interrupt_operation_mode = true,
    139	.lp_xtal_workaround = true,
    140	.dccm_len = IWL7260_DCCM_LEN,
    141	.thermal_params = &iwl7000_high_temp_tt_params,
    142};
    143
    144const struct iwl_cfg iwl7260_2n_cfg = {
    145	.name = "Intel(R) Dual Band Wireless N 7260",
    146	.fw_name_pre = IWL7260_FW_PRE,
    147	IWL_DEVICE_7000,
    148	.ht_params = &iwl7000_ht_params,
    149	.nvm_ver = IWL7260_NVM_VERSION,
    150	.host_interrupt_operation_mode = true,
    151	.lp_xtal_workaround = true,
    152	.dccm_len = IWL7260_DCCM_LEN,
    153};
    154
    155const struct iwl_cfg iwl7260_n_cfg = {
    156	.name = "Intel(R) Wireless N 7260",
    157	.fw_name_pre = IWL7260_FW_PRE,
    158	IWL_DEVICE_7000,
    159	.ht_params = &iwl7000_ht_params,
    160	.nvm_ver = IWL7260_NVM_VERSION,
    161	.host_interrupt_operation_mode = true,
    162	.lp_xtal_workaround = true,
    163	.dccm_len = IWL7260_DCCM_LEN,
    164};
    165
    166const struct iwl_cfg iwl3160_2ac_cfg = {
    167	.name = "Intel(R) Dual Band Wireless AC 3160",
    168	.fw_name_pre = IWL3160_FW_PRE,
    169	IWL_DEVICE_7000,
    170	.ht_params = &iwl7000_ht_params,
    171	.nvm_ver = IWL3160_NVM_VERSION,
    172	.host_interrupt_operation_mode = true,
    173	.dccm_len = IWL3160_DCCM_LEN,
    174};
    175
    176const struct iwl_cfg iwl3160_2n_cfg = {
    177	.name = "Intel(R) Dual Band Wireless N 3160",
    178	.fw_name_pre = IWL3160_FW_PRE,
    179	IWL_DEVICE_7000,
    180	.ht_params = &iwl7000_ht_params,
    181	.nvm_ver = IWL3160_NVM_VERSION,
    182	.host_interrupt_operation_mode = true,
    183	.dccm_len = IWL3160_DCCM_LEN,
    184};
    185
    186const struct iwl_cfg iwl3160_n_cfg = {
    187	.name = "Intel(R) Wireless N 3160",
    188	.fw_name_pre = IWL3160_FW_PRE,
    189	IWL_DEVICE_7000,
    190	.ht_params = &iwl7000_ht_params,
    191	.nvm_ver = IWL3160_NVM_VERSION,
    192	.host_interrupt_operation_mode = true,
    193	.dccm_len = IWL3160_DCCM_LEN,
    194};
    195
    196static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = {
    197	{.pwr = 1600, .backoff = 0},
    198	{.pwr = 1300, .backoff = 467},
    199	{.pwr = 900,  .backoff = 1900},
    200	{.pwr = 800, .backoff = 2630},
    201	{.pwr = 700, .backoff = 3720},
    202	{.pwr = 600, .backoff = 5550},
    203	{.pwr = 500, .backoff = 9350},
    204	{0},
    205};
    206
    207static const struct iwl_ht_params iwl7265_ht_params = {
    208	.stbc = true,
    209	.ldpc = true,
    210	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
    211};
    212
    213const struct iwl_cfg iwl3165_2ac_cfg = {
    214	.name = "Intel(R) Dual Band Wireless AC 3165",
    215	.fw_name_pre = IWL7265D_FW_PRE,
    216	IWL_DEVICE_7005D,
    217	.ht_params = &iwl7000_ht_params,
    218	.nvm_ver = IWL3165_NVM_VERSION,
    219	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    220	.dccm_len = IWL7265_DCCM_LEN,
    221};
    222
    223const struct iwl_cfg iwl3168_2ac_cfg = {
    224	.name = "Intel(R) Dual Band Wireless AC 3168",
    225	.fw_name_pre = IWL3168_FW_PRE,
    226	IWL_DEVICE_3008,
    227	.ht_params = &iwl7000_ht_params,
    228	.nvm_ver = IWL3168_NVM_VERSION,
    229	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    230	.dccm_len = IWL7265_DCCM_LEN,
    231	.nvm_type = IWL_NVM_SDP,
    232};
    233
    234const struct iwl_cfg iwl7265_2ac_cfg = {
    235	.name = "Intel(R) Dual Band Wireless AC 7265",
    236	.fw_name_pre = IWL7265_FW_PRE,
    237	IWL_DEVICE_7005,
    238	.ht_params = &iwl7265_ht_params,
    239	.nvm_ver = IWL7265_NVM_VERSION,
    240	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    241	.dccm_len = IWL7265_DCCM_LEN,
    242};
    243
    244const struct iwl_cfg iwl7265_2n_cfg = {
    245	.name = "Intel(R) Dual Band Wireless N 7265",
    246	.fw_name_pre = IWL7265_FW_PRE,
    247	IWL_DEVICE_7005,
    248	.ht_params = &iwl7265_ht_params,
    249	.nvm_ver = IWL7265_NVM_VERSION,
    250	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    251	.dccm_len = IWL7265_DCCM_LEN,
    252};
    253
    254const struct iwl_cfg iwl7265_n_cfg = {
    255	.name = "Intel(R) Wireless N 7265",
    256	.fw_name_pre = IWL7265_FW_PRE,
    257	IWL_DEVICE_7005,
    258	.ht_params = &iwl7265_ht_params,
    259	.nvm_ver = IWL7265_NVM_VERSION,
    260	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    261	.dccm_len = IWL7265_DCCM_LEN,
    262};
    263
    264const struct iwl_cfg iwl7265d_2ac_cfg = {
    265	.name = "Intel(R) Dual Band Wireless AC 7265",
    266	.fw_name_pre = IWL7265D_FW_PRE,
    267	IWL_DEVICE_7005D,
    268	.ht_params = &iwl7265_ht_params,
    269	.nvm_ver = IWL7265D_NVM_VERSION,
    270	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    271	.dccm_len = IWL7265_DCCM_LEN,
    272};
    273
    274const struct iwl_cfg iwl7265d_2n_cfg = {
    275	.name = "Intel(R) Dual Band Wireless N 7265",
    276	.fw_name_pre = IWL7265D_FW_PRE,
    277	IWL_DEVICE_7005D,
    278	.ht_params = &iwl7265_ht_params,
    279	.nvm_ver = IWL7265D_NVM_VERSION,
    280	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    281	.dccm_len = IWL7265_DCCM_LEN,
    282};
    283
    284const struct iwl_cfg iwl7265d_n_cfg = {
    285	.name = "Intel(R) Wireless N 7265",
    286	.fw_name_pre = IWL7265D_FW_PRE,
    287	IWL_DEVICE_7005D,
    288	.ht_params = &iwl7265_ht_params,
    289	.nvm_ver = IWL7265D_NVM_VERSION,
    290	.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
    291	.dccm_len = IWL7265_DCCM_LEN,
    292};
    293
    294MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_MAX));
    295MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL7260_UCODE_API_MAX));
    296MODULE_FIRMWARE(IWL3168_MODULE_FIRMWARE(IWL3168_UCODE_API_MAX));
    297MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7265_UCODE_API_MAX));
    298MODULE_FIRMWARE(IWL7265D_MODULE_FIRMWARE(IWL7265D_UCODE_API_MAX));