18e99ea8dSJohannes Berg // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 28e99ea8dSJohannes Berg /* 3*31aeae24SJohannes Berg * Copyright (C) 2014, 2018-2020, 2023 Intel Corporation 48e99ea8dSJohannes Berg * Copyright (C) 2014-2015 Intel Mobile Communications GmbH 58e99ea8dSJohannes Berg * Copyright (C) 2016 Intel Deutschland GmbH 68e99ea8dSJohannes Berg */ 7650aaed3SJohannes Berg #include <linux/module.h> 8650aaed3SJohannes Berg #include <linux/stringify.h> 9650aaed3SJohannes Berg #include "iwl-config.h" 10650aaed3SJohannes Berg 11650aaed3SJohannes Berg /* Highest firmware API version supported */ 12a8707dddSLuca Coelho #define IWL8000_UCODE_API_MAX 36 13a8707dddSLuca Coelho #define IWL8265_UCODE_API_MAX 36 14650aaed3SJohannes Berg 15650aaed3SJohannes Berg /* Lowest firmware API version supported */ 16650aaed3SJohannes Berg #define IWL8000_UCODE_API_MIN 22 17650aaed3SJohannes Berg #define IWL8265_UCODE_API_MIN 22 18650aaed3SJohannes Berg 19650aaed3SJohannes Berg /* NVM versions */ 20650aaed3SJohannes Berg #define IWL8000_NVM_VERSION 0x0a1d 21650aaed3SJohannes Berg 22650aaed3SJohannes Berg /* Memory offsets and lengths */ 23650aaed3SJohannes Berg #define IWL8260_DCCM_OFFSET 0x800000 24650aaed3SJohannes Berg #define IWL8260_DCCM_LEN 0x18000 25650aaed3SJohannes Berg #define IWL8260_DCCM2_OFFSET 0x880000 26650aaed3SJohannes Berg #define IWL8260_DCCM2_LEN 0x8000 27650aaed3SJohannes Berg #define IWL8260_SMEM_OFFSET 0x400000 28650aaed3SJohannes Berg #define IWL8260_SMEM_LEN 0x68000 29650aaed3SJohannes Berg 30*31aeae24SJohannes Berg #define IWL8000_FW_PRE "iwlwifi-8000C" 31650aaed3SJohannes Berg #define IWL8000_MODULE_FIRMWARE(api) \ 32*31aeae24SJohannes Berg IWL8000_FW_PRE "-" __stringify(api) ".ucode" 33650aaed3SJohannes Berg 34*31aeae24SJohannes Berg #define IWL8265_FW_PRE "iwlwifi-8265" 35650aaed3SJohannes Berg #define IWL8265_MODULE_FIRMWARE(api) \ 36*31aeae24SJohannes Berg IWL8265_FW_PRE "-" __stringify(api) ".ucode" 37650aaed3SJohannes Berg 38650aaed3SJohannes Berg #define DEFAULT_NVM_FILE_FAMILY_8000C "nvmData-8000C" 39650aaed3SJohannes Berg 40650aaed3SJohannes Berg static const struct iwl_base_params iwl8000_base_params = { 413e2b49d6SLuca Coelho .eeprom_size = OTP_LOW_IMAGE_SIZE_32K, 42650aaed3SJohannes Berg .num_of_queues = 31, 437b3e42eaSGolan Ben Ami .max_tfd_queue_size = 256, 44650aaed3SJohannes Berg .shadow_ram_support = true, 45650aaed3SJohannes Berg .led_compensation = 57, 46650aaed3SJohannes Berg .wd_timeout = IWL_LONG_WD_TIMEOUT, 47650aaed3SJohannes Berg .max_event_log_size = 512, 48650aaed3SJohannes Berg .shadow_reg_enable = true, 49650aaed3SJohannes Berg .pcie_l1_allowed = true, 50650aaed3SJohannes Berg }; 51650aaed3SJohannes Berg 52650aaed3SJohannes Berg static const struct iwl_ht_params iwl8000_ht_params = { 53650aaed3SJohannes Berg .stbc = true, 54650aaed3SJohannes Berg .ldpc = true, 55650aaed3SJohannes Berg .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ), 56650aaed3SJohannes Berg }; 57650aaed3SJohannes Berg 58650aaed3SJohannes Berg static const struct iwl_tt_params iwl8000_tt_params = { 59650aaed3SJohannes Berg .ct_kill_entry = 115, 60650aaed3SJohannes Berg .ct_kill_exit = 93, 61650aaed3SJohannes Berg .ct_kill_duration = 5, 62650aaed3SJohannes Berg .dynamic_smps_entry = 111, 63650aaed3SJohannes Berg .dynamic_smps_exit = 107, 64650aaed3SJohannes Berg .tx_protection_entry = 112, 65650aaed3SJohannes Berg .tx_protection_exit = 105, 66650aaed3SJohannes Berg .tx_backoff = { 67650aaed3SJohannes Berg {.temperature = 110, .backoff = 200}, 68650aaed3SJohannes Berg {.temperature = 111, .backoff = 600}, 69650aaed3SJohannes Berg {.temperature = 112, .backoff = 1200}, 70650aaed3SJohannes Berg {.temperature = 113, .backoff = 2000}, 71650aaed3SJohannes Berg {.temperature = 114, .backoff = 4000}, 72650aaed3SJohannes Berg }, 73650aaed3SJohannes Berg .support_ct_kill = true, 74650aaed3SJohannes Berg .support_dynamic_smps = true, 75650aaed3SJohannes Berg .support_tx_protection = true, 76650aaed3SJohannes Berg .support_tx_backoff = true, 77650aaed3SJohannes Berg }; 78650aaed3SJohannes Berg 79650aaed3SJohannes Berg #define IWL_DEVICE_8000_COMMON \ 8079b6c8feSLuca Coelho .trans.device_family = IWL_DEVICE_FAMILY_8000, \ 8179b6c8feSLuca Coelho .trans.base_params = &iwl8000_base_params, \ 82650aaed3SJohannes Berg .led_mode = IWL_LED_RF_STATE, \ 834aeaccd6SLuca Coelho .nvm_hw_section_num = 10, \ 84650aaed3SJohannes Berg .features = NETIF_F_RXCSUM, \ 85650aaed3SJohannes Berg .non_shared_ant = ANT_A, \ 86650aaed3SJohannes Berg .dccm_offset = IWL8260_DCCM_OFFSET, \ 87650aaed3SJohannes Berg .dccm_len = IWL8260_DCCM_LEN, \ 88650aaed3SJohannes Berg .dccm2_offset = IWL8260_DCCM2_OFFSET, \ 89650aaed3SJohannes Berg .dccm2_len = IWL8260_DCCM2_LEN, \ 90650aaed3SJohannes Berg .smem_offset = IWL8260_SMEM_OFFSET, \ 91650aaed3SJohannes Berg .smem_len = IWL8260_SMEM_LEN, \ 92650aaed3SJohannes Berg .default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C, \ 93650aaed3SJohannes Berg .thermal_params = &iwl8000_tt_params, \ 94650aaed3SJohannes Berg .apmg_not_supported = true, \ 9544fd09daSChaya Rachel Ivgi .nvm_type = IWL_NVM_EXT, \ 963485e76eSLuca Coelho .dbgc_supported = true, \ 976dece0e9SLuca Coelho .min_umac_error_event_table = 0x800000 98650aaed3SJohannes Berg 99650aaed3SJohannes Berg #define IWL_DEVICE_8000 \ 100650aaed3SJohannes Berg IWL_DEVICE_8000_COMMON, \ 101650aaed3SJohannes Berg .ucode_api_max = IWL8000_UCODE_API_MAX, \ 102650aaed3SJohannes Berg .ucode_api_min = IWL8000_UCODE_API_MIN \ 103650aaed3SJohannes Berg 104650aaed3SJohannes Berg #define IWL_DEVICE_8260 \ 105650aaed3SJohannes Berg IWL_DEVICE_8000_COMMON, \ 106650aaed3SJohannes Berg .ucode_api_max = IWL8000_UCODE_API_MAX, \ 107650aaed3SJohannes Berg .ucode_api_min = IWL8000_UCODE_API_MIN \ 108650aaed3SJohannes Berg 109650aaed3SJohannes Berg #define IWL_DEVICE_8265 \ 110650aaed3SJohannes Berg IWL_DEVICE_8000_COMMON, \ 111650aaed3SJohannes Berg .ucode_api_max = IWL8265_UCODE_API_MAX, \ 112650aaed3SJohannes Berg .ucode_api_min = IWL8265_UCODE_API_MIN \ 113650aaed3SJohannes Berg 114650aaed3SJohannes Berg const struct iwl_cfg iwl8260_2n_cfg = { 115650aaed3SJohannes Berg .name = "Intel(R) Dual Band Wireless N 8260", 116650aaed3SJohannes Berg .fw_name_pre = IWL8000_FW_PRE, 117650aaed3SJohannes Berg IWL_DEVICE_8260, 118650aaed3SJohannes Berg .ht_params = &iwl8000_ht_params, 119650aaed3SJohannes Berg .nvm_ver = IWL8000_NVM_VERSION, 120650aaed3SJohannes Berg }; 121650aaed3SJohannes Berg 122650aaed3SJohannes Berg const struct iwl_cfg iwl8260_2ac_cfg = { 123650aaed3SJohannes Berg .name = "Intel(R) Dual Band Wireless AC 8260", 124650aaed3SJohannes Berg .fw_name_pre = IWL8000_FW_PRE, 125650aaed3SJohannes Berg IWL_DEVICE_8260, 126650aaed3SJohannes Berg .ht_params = &iwl8000_ht_params, 127650aaed3SJohannes Berg .nvm_ver = IWL8000_NVM_VERSION, 128650aaed3SJohannes Berg }; 129650aaed3SJohannes Berg 130650aaed3SJohannes Berg const struct iwl_cfg iwl8265_2ac_cfg = { 131650aaed3SJohannes Berg .name = "Intel(R) Dual Band Wireless AC 8265", 132650aaed3SJohannes Berg .fw_name_pre = IWL8265_FW_PRE, 133650aaed3SJohannes Berg IWL_DEVICE_8265, 134650aaed3SJohannes Berg .ht_params = &iwl8000_ht_params, 135650aaed3SJohannes Berg .nvm_ver = IWL8000_NVM_VERSION, 136650aaed3SJohannes Berg .vht_mu_mimo_supported = true, 137650aaed3SJohannes Berg }; 138650aaed3SJohannes Berg 139650aaed3SJohannes Berg const struct iwl_cfg iwl8275_2ac_cfg = { 140650aaed3SJohannes Berg .name = "Intel(R) Dual Band Wireless AC 8275", 141650aaed3SJohannes Berg .fw_name_pre = IWL8265_FW_PRE, 142650aaed3SJohannes Berg IWL_DEVICE_8265, 143650aaed3SJohannes Berg .ht_params = &iwl8000_ht_params, 144650aaed3SJohannes Berg .nvm_ver = IWL8000_NVM_VERSION, 145650aaed3SJohannes Berg .vht_mu_mimo_supported = true, 146650aaed3SJohannes Berg }; 147650aaed3SJohannes Berg 148650aaed3SJohannes Berg const struct iwl_cfg iwl4165_2ac_cfg = { 149650aaed3SJohannes Berg .name = "Intel(R) Dual Band Wireless AC 4165", 150650aaed3SJohannes Berg .fw_name_pre = IWL8000_FW_PRE, 151650aaed3SJohannes Berg IWL_DEVICE_8000, 152650aaed3SJohannes Berg .ht_params = &iwl8000_ht_params, 153650aaed3SJohannes Berg .nvm_ver = IWL8000_NVM_VERSION, 154650aaed3SJohannes Berg }; 155650aaed3SJohannes Berg 156650aaed3SJohannes Berg MODULE_FIRMWARE(IWL8000_MODULE_FIRMWARE(IWL8000_UCODE_API_MAX)); 157650aaed3SJohannes Berg MODULE_FIRMWARE(IWL8265_MODULE_FIRMWARE(IWL8265_UCODE_API_MAX)); 158