1bfcc09ddSBjoern A. Zeeb // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2bfcc09ddSBjoern A. Zeeb /* 3*9af1bba4SBjoern A. Zeeb * Copyright (C) 2014, 2018-2020, 2023 Intel Corporation 4bfcc09ddSBjoern A. Zeeb * Copyright (C) 2014-2015 Intel Mobile Communications GmbH 5bfcc09ddSBjoern A. Zeeb * Copyright (C) 2016 Intel Deutschland GmbH 6bfcc09ddSBjoern A. Zeeb */ 7bfcc09ddSBjoern A. Zeeb #include <linux/module.h> 8bfcc09ddSBjoern A. Zeeb #include <linux/stringify.h> 9bfcc09ddSBjoern A. Zeeb #include "iwl-config.h" 10bfcc09ddSBjoern A. Zeeb 11bfcc09ddSBjoern A. Zeeb /* Highest firmware API version supported */ 12bfcc09ddSBjoern A. Zeeb #define IWL8000_UCODE_API_MAX 36 13bfcc09ddSBjoern A. Zeeb #define IWL8265_UCODE_API_MAX 36 14bfcc09ddSBjoern A. Zeeb 15bfcc09ddSBjoern A. Zeeb /* Lowest firmware API version supported */ 16bfcc09ddSBjoern A. Zeeb #define IWL8000_UCODE_API_MIN 22 17bfcc09ddSBjoern A. Zeeb #define IWL8265_UCODE_API_MIN 22 18bfcc09ddSBjoern A. Zeeb 19bfcc09ddSBjoern A. Zeeb /* NVM versions */ 20bfcc09ddSBjoern A. Zeeb #define IWL8000_NVM_VERSION 0x0a1d 21bfcc09ddSBjoern A. Zeeb 22bfcc09ddSBjoern A. Zeeb /* Memory offsets and lengths */ 23bfcc09ddSBjoern A. Zeeb #define IWL8260_DCCM_OFFSET 0x800000 24bfcc09ddSBjoern A. Zeeb #define IWL8260_DCCM_LEN 0x18000 25bfcc09ddSBjoern A. Zeeb #define IWL8260_DCCM2_OFFSET 0x880000 26bfcc09ddSBjoern A. Zeeb #define IWL8260_DCCM2_LEN 0x8000 27bfcc09ddSBjoern A. Zeeb #define IWL8260_SMEM_OFFSET 0x400000 28bfcc09ddSBjoern A. Zeeb #define IWL8260_SMEM_LEN 0x68000 29bfcc09ddSBjoern A. Zeeb 30*9af1bba4SBjoern A. Zeeb #define IWL8000_FW_PRE "iwlwifi-8000C" 31bfcc09ddSBjoern A. Zeeb #define IWL8000_MODULE_FIRMWARE(api) \ 32*9af1bba4SBjoern A. Zeeb IWL8000_FW_PRE "-" __stringify(api) ".ucode" 33bfcc09ddSBjoern A. Zeeb 34*9af1bba4SBjoern A. Zeeb #define IWL8265_FW_PRE "iwlwifi-8265" 35bfcc09ddSBjoern A. Zeeb #define IWL8265_MODULE_FIRMWARE(api) \ 36*9af1bba4SBjoern A. Zeeb IWL8265_FW_PRE "-" __stringify(api) ".ucode" 37bfcc09ddSBjoern A. Zeeb 38bfcc09ddSBjoern A. Zeeb #define DEFAULT_NVM_FILE_FAMILY_8000C "nvmData-8000C" 39bfcc09ddSBjoern A. Zeeb 40bfcc09ddSBjoern A. Zeeb static const struct iwl_base_params iwl8000_base_params = { 41bfcc09ddSBjoern A. Zeeb .eeprom_size = OTP_LOW_IMAGE_SIZE_32K, 42bfcc09ddSBjoern A. Zeeb .num_of_queues = 31, 43bfcc09ddSBjoern A. Zeeb .max_tfd_queue_size = 256, 44bfcc09ddSBjoern A. Zeeb .shadow_ram_support = true, 45bfcc09ddSBjoern A. Zeeb .led_compensation = 57, 46bfcc09ddSBjoern A. Zeeb .wd_timeout = IWL_LONG_WD_TIMEOUT, 47bfcc09ddSBjoern A. Zeeb .max_event_log_size = 512, 48bfcc09ddSBjoern A. Zeeb .shadow_reg_enable = true, 49bfcc09ddSBjoern A. Zeeb .pcie_l1_allowed = true, 50bfcc09ddSBjoern A. Zeeb }; 51bfcc09ddSBjoern A. Zeeb 52bfcc09ddSBjoern A. Zeeb static const struct iwl_ht_params iwl8000_ht_params = { 53bfcc09ddSBjoern A. Zeeb .stbc = true, 54bfcc09ddSBjoern A. Zeeb .ldpc = true, 55bfcc09ddSBjoern A. Zeeb .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ), 56bfcc09ddSBjoern A. Zeeb }; 57bfcc09ddSBjoern A. Zeeb 58bfcc09ddSBjoern A. Zeeb static const struct iwl_tt_params iwl8000_tt_params = { 59bfcc09ddSBjoern A. Zeeb .ct_kill_entry = 115, 60bfcc09ddSBjoern A. Zeeb .ct_kill_exit = 93, 61bfcc09ddSBjoern A. Zeeb .ct_kill_duration = 5, 62bfcc09ddSBjoern A. Zeeb .dynamic_smps_entry = 111, 63bfcc09ddSBjoern A. Zeeb .dynamic_smps_exit = 107, 64bfcc09ddSBjoern A. Zeeb .tx_protection_entry = 112, 65bfcc09ddSBjoern A. Zeeb .tx_protection_exit = 105, 66bfcc09ddSBjoern A. Zeeb .tx_backoff = { 67bfcc09ddSBjoern A. Zeeb {.temperature = 110, .backoff = 200}, 68bfcc09ddSBjoern A. Zeeb {.temperature = 111, .backoff = 600}, 69bfcc09ddSBjoern A. Zeeb {.temperature = 112, .backoff = 1200}, 70bfcc09ddSBjoern A. Zeeb {.temperature = 113, .backoff = 2000}, 71bfcc09ddSBjoern A. Zeeb {.temperature = 114, .backoff = 4000}, 72bfcc09ddSBjoern A. Zeeb }, 73bfcc09ddSBjoern A. Zeeb .support_ct_kill = true, 74bfcc09ddSBjoern A. Zeeb .support_dynamic_smps = true, 75bfcc09ddSBjoern A. Zeeb .support_tx_protection = true, 76bfcc09ddSBjoern A. Zeeb .support_tx_backoff = true, 77bfcc09ddSBjoern A. Zeeb }; 78bfcc09ddSBjoern A. Zeeb 79bfcc09ddSBjoern A. Zeeb #define IWL_DEVICE_8000_COMMON \ 80bfcc09ddSBjoern A. Zeeb .trans.device_family = IWL_DEVICE_FAMILY_8000, \ 81bfcc09ddSBjoern A. Zeeb .trans.base_params = &iwl8000_base_params, \ 82bfcc09ddSBjoern A. Zeeb .led_mode = IWL_LED_RF_STATE, \ 83bfcc09ddSBjoern A. Zeeb .nvm_hw_section_num = 10, \ 84bfcc09ddSBjoern A. Zeeb .features = NETIF_F_RXCSUM, \ 85bfcc09ddSBjoern A. Zeeb .non_shared_ant = ANT_A, \ 86bfcc09ddSBjoern A. Zeeb .dccm_offset = IWL8260_DCCM_OFFSET, \ 87bfcc09ddSBjoern A. Zeeb .dccm_len = IWL8260_DCCM_LEN, \ 88bfcc09ddSBjoern A. Zeeb .dccm2_offset = IWL8260_DCCM2_OFFSET, \ 89bfcc09ddSBjoern A. Zeeb .dccm2_len = IWL8260_DCCM2_LEN, \ 90bfcc09ddSBjoern A. Zeeb .smem_offset = IWL8260_SMEM_OFFSET, \ 91bfcc09ddSBjoern A. Zeeb .smem_len = IWL8260_SMEM_LEN, \ 92bfcc09ddSBjoern A. Zeeb .default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C, \ 93bfcc09ddSBjoern A. Zeeb .thermal_params = &iwl8000_tt_params, \ 94bfcc09ddSBjoern A. Zeeb .apmg_not_supported = true, \ 95bfcc09ddSBjoern A. Zeeb .nvm_type = IWL_NVM_EXT, \ 96bfcc09ddSBjoern A. Zeeb .dbgc_supported = true, \ 97bfcc09ddSBjoern A. Zeeb .min_umac_error_event_table = 0x800000 98bfcc09ddSBjoern A. Zeeb 99bfcc09ddSBjoern A. Zeeb #define IWL_DEVICE_8000 \ 100bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8000_COMMON, \ 101bfcc09ddSBjoern A. Zeeb .ucode_api_max = IWL8000_UCODE_API_MAX, \ 102bfcc09ddSBjoern A. Zeeb .ucode_api_min = IWL8000_UCODE_API_MIN \ 103bfcc09ddSBjoern A. Zeeb 104bfcc09ddSBjoern A. Zeeb #define IWL_DEVICE_8260 \ 105bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8000_COMMON, \ 106bfcc09ddSBjoern A. Zeeb .ucode_api_max = IWL8000_UCODE_API_MAX, \ 107bfcc09ddSBjoern A. Zeeb .ucode_api_min = IWL8000_UCODE_API_MIN \ 108bfcc09ddSBjoern A. Zeeb 109bfcc09ddSBjoern A. Zeeb #define IWL_DEVICE_8265 \ 110bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8000_COMMON, \ 111bfcc09ddSBjoern A. Zeeb .ucode_api_max = IWL8265_UCODE_API_MAX, \ 112bfcc09ddSBjoern A. Zeeb .ucode_api_min = IWL8265_UCODE_API_MIN \ 113bfcc09ddSBjoern A. Zeeb 114bfcc09ddSBjoern A. Zeeb const struct iwl_cfg iwl8260_2n_cfg = { 115bfcc09ddSBjoern A. Zeeb .name = "Intel(R) Dual Band Wireless N 8260", 116bfcc09ddSBjoern A. Zeeb .fw_name_pre = IWL8000_FW_PRE, 117bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8260, 118bfcc09ddSBjoern A. Zeeb .ht_params = &iwl8000_ht_params, 119bfcc09ddSBjoern A. Zeeb .nvm_ver = IWL8000_NVM_VERSION, 120bfcc09ddSBjoern A. Zeeb }; 121bfcc09ddSBjoern A. Zeeb 122bfcc09ddSBjoern A. Zeeb const struct iwl_cfg iwl8260_2ac_cfg = { 123bfcc09ddSBjoern A. Zeeb .name = "Intel(R) Dual Band Wireless AC 8260", 124bfcc09ddSBjoern A. Zeeb .fw_name_pre = IWL8000_FW_PRE, 125bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8260, 126bfcc09ddSBjoern A. Zeeb .ht_params = &iwl8000_ht_params, 127bfcc09ddSBjoern A. Zeeb .nvm_ver = IWL8000_NVM_VERSION, 128bfcc09ddSBjoern A. Zeeb }; 129bfcc09ddSBjoern A. Zeeb 130bfcc09ddSBjoern A. Zeeb const struct iwl_cfg iwl8265_2ac_cfg = { 131bfcc09ddSBjoern A. Zeeb .name = "Intel(R) Dual Band Wireless AC 8265", 132bfcc09ddSBjoern A. Zeeb .fw_name_pre = IWL8265_FW_PRE, 133bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8265, 134bfcc09ddSBjoern A. Zeeb .ht_params = &iwl8000_ht_params, 135bfcc09ddSBjoern A. Zeeb .nvm_ver = IWL8000_NVM_VERSION, 136bfcc09ddSBjoern A. Zeeb .vht_mu_mimo_supported = true, 137bfcc09ddSBjoern A. Zeeb }; 138bfcc09ddSBjoern A. Zeeb 139bfcc09ddSBjoern A. Zeeb const struct iwl_cfg iwl8275_2ac_cfg = { 140bfcc09ddSBjoern A. Zeeb .name = "Intel(R) Dual Band Wireless AC 8275", 141bfcc09ddSBjoern A. Zeeb .fw_name_pre = IWL8265_FW_PRE, 142bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8265, 143bfcc09ddSBjoern A. Zeeb .ht_params = &iwl8000_ht_params, 144bfcc09ddSBjoern A. Zeeb .nvm_ver = IWL8000_NVM_VERSION, 145bfcc09ddSBjoern A. Zeeb .vht_mu_mimo_supported = true, 146bfcc09ddSBjoern A. Zeeb }; 147bfcc09ddSBjoern A. Zeeb 148bfcc09ddSBjoern A. Zeeb const struct iwl_cfg iwl4165_2ac_cfg = { 149bfcc09ddSBjoern A. Zeeb .name = "Intel(R) Dual Band Wireless AC 4165", 150bfcc09ddSBjoern A. Zeeb .fw_name_pre = IWL8000_FW_PRE, 151bfcc09ddSBjoern A. Zeeb IWL_DEVICE_8000, 152bfcc09ddSBjoern A. Zeeb .ht_params = &iwl8000_ht_params, 153bfcc09ddSBjoern A. Zeeb .nvm_ver = IWL8000_NVM_VERSION, 154bfcc09ddSBjoern A. Zeeb }; 155bfcc09ddSBjoern A. Zeeb 156bfcc09ddSBjoern A. Zeeb MODULE_FIRMWARE(IWL8000_MODULE_FIRMWARE(IWL8000_UCODE_API_MAX)); 157bfcc09ddSBjoern A. Zeeb MODULE_FIRMWARE(IWL8265_MODULE_FIRMWARE(IWL8265_UCODE_API_MAX)); 158