Path: blob/main/sys/contrib/dev/iwlwifi/cfg/7000.c
48372 views
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause1/*2* Copyright (C) 2012-2014, 2018-2020, 2023, 2025 Intel Corporation3* Copyright (C) 2013-2014 Intel Mobile Communications GmbH4* Copyright (C) 2015 Intel Deutschland GmbH5*/6#include <linux/module.h>7#include <linux/stringify.h>8#include "iwl-config.h"910/* Highest firmware API version supported */11#define IWL7260_UCODE_API_MAX 1712#define IWL7265_UCODE_API_MAX 1713#define IWL7265D_UCODE_API_MAX 2914#define IWL3168_UCODE_API_MAX 291516/* Lowest firmware API version supported */17#define IWL7260_UCODE_API_MIN 1718#define IWL7265_UCODE_API_MIN 1719#define IWL7265D_UCODE_API_MIN 2220#define IWL3168_UCODE_API_MIN 222122/* NVM versions */23#define IWL7260_NVM_VERSION 0x0a1d24#define IWL3160_NVM_VERSION 0x70925#define IWL3165_NVM_VERSION 0x70926#define IWL3168_NVM_VERSION 0xd0127#define IWL7265_NVM_VERSION 0x0a1d28#define IWL7265D_NVM_VERSION 0x0c112930/* DCCM offsets and lengths */31#define IWL7000_DCCM_OFFSET 0x80000032#define IWL7260_DCCM_LEN 0x1400033#define IWL3160_DCCM_LEN 0x1000034#define IWL7265_DCCM_LEN 0x17A003536#define IWL7260_FW_PRE "iwlwifi-7260"37#define IWL7260_MODULE_FIRMWARE(api) IWL7260_FW_PRE "-" __stringify(api) ".ucode"3839#define IWL3160_FW_PRE "iwlwifi-3160"40#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE "-" __stringify(api) ".ucode"4142#define IWL3168_FW_PRE "iwlwifi-3168"43#define IWL3168_MODULE_FIRMWARE(api) IWL3168_FW_PRE "-" __stringify(api) ".ucode"4445#define IWL7265_FW_PRE "iwlwifi-7265"46#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE "-" __stringify(api) ".ucode"4748#define IWL7265D_FW_PRE "iwlwifi-7265D"49#define IWL7265D_MODULE_FIRMWARE(api) IWL7265D_FW_PRE "-" __stringify(api) ".ucode"5051static const struct iwl_family_base_params iwl7000_base = {52.eeprom_size = OTP_LOW_IMAGE_SIZE_16K,53.num_of_queues = 31,54.max_tfd_queue_size = 256,55.shadow_ram_support = true,56.led_compensation = 57,57.wd_timeout = IWL_LONG_WD_TIMEOUT,58.max_event_log_size = 512,59.shadow_reg_enable = true,60.pcie_l1_allowed = true,61.apmg_wake_up_wa = true,62.nvm_hw_section_num = 0,63};6465static 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};8687const struct iwl_mac_cfg iwl7000_mac_cfg = {88.device_family = IWL_DEVICE_FAMILY_7000,89.base = &iwl7000_base,90};9192#define IWL_DEVICE_7000_COMMON \93.led_mode = IWL_LED_RF_STATE, \94.non_shared_ant = ANT_A, \95.dccm_offset = IWL7000_DCCM_OFFSET9697#define IWL_DEVICE_7000 \98IWL_DEVICE_7000_COMMON, \99.ucode_api_max = IWL7260_UCODE_API_MAX, \100.ucode_api_min = IWL7260_UCODE_API_MIN101102#define IWL_DEVICE_7005 \103IWL_DEVICE_7000_COMMON, \104.ucode_api_max = IWL7265_UCODE_API_MAX, \105.ucode_api_min = IWL7265_UCODE_API_MIN106107#define IWL_DEVICE_3008 \108IWL_DEVICE_7000_COMMON, \109.ucode_api_max = IWL3168_UCODE_API_MAX, \110.ucode_api_min = IWL3168_UCODE_API_MIN111112#define IWL_DEVICE_7005D \113IWL_DEVICE_7000_COMMON, \114.ucode_api_max = IWL7265D_UCODE_API_MAX, \115.ucode_api_min = IWL7265D_UCODE_API_MIN116117const char iwl7260_2ac_name[] = "Intel(R) Dual Band Wireless AC 7260";118const char iwl7260_2n_name[] = "Intel(R) Dual Band Wireless N 7260";119const char iwl7260_n_name[] = "Intel(R) Wireless N 7260";120const char iwl3160_2ac_name[] = "Intel(R) Dual Band Wireless AC 3160";121const char iwl3160_2n_name[] = "Intel(R) Dual Band Wireless N 3160";122const char iwl3160_n_name[] = "Intel(R) Wireless N 3160";123const char iwl3165_2ac_name[] = "Intel(R) Dual Band Wireless-AC 3165";124const char iwl3168_2ac_name[] = "Intel(R) Dual Band Wireless-AC 3168";125const char iwl7265_2ac_name[] = "Intel(R) Dual Band Wireless-AC 7265";126const char iwl7265_2n_name[] = "Intel(R) Dual Band Wireless-N 7265";127const char iwl7265_n_name[] = "Intel(R) Wireless-N 7265";128129const struct iwl_rf_cfg iwl7260_cfg = {130.fw_name_pre = IWL7260_FW_PRE,131IWL_DEVICE_7000,132.ht_params = {133.stbc = true,134.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),135},136.nvm_ver = IWL7260_NVM_VERSION,137.host_interrupt_operation_mode = true,138.lp_xtal_workaround = true,139.dccm_len = IWL7260_DCCM_LEN,140};141142const struct iwl_rf_cfg iwl7260_high_temp_cfg = {143.fw_name_pre = IWL7260_FW_PRE,144IWL_DEVICE_7000,145.ht_params = {146.stbc = true,147.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),148},149.nvm_ver = IWL7260_NVM_VERSION,150.host_interrupt_operation_mode = true,151.lp_xtal_workaround = true,152.dccm_len = IWL7260_DCCM_LEN,153.thermal_params = &iwl7000_high_temp_tt_params,154};155156const struct iwl_rf_cfg iwl3160_cfg = {157.fw_name_pre = IWL3160_FW_PRE,158IWL_DEVICE_7000,159.ht_params = {160.stbc = true,161.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),162},163.nvm_ver = IWL3160_NVM_VERSION,164.host_interrupt_operation_mode = true,165.dccm_len = IWL3160_DCCM_LEN,166};167168static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = {169{.pwr = 1600, .backoff = 0},170{.pwr = 1300, .backoff = 467},171{.pwr = 900, .backoff = 1900},172{.pwr = 800, .backoff = 2630},173{.pwr = 700, .backoff = 3720},174{.pwr = 600, .backoff = 5550},175{.pwr = 500, .backoff = 9350},176{0},177};178179const struct iwl_rf_cfg iwl3165_2ac_cfg = {180.fw_name_pre = IWL7265D_FW_PRE,181IWL_DEVICE_7005D,182.ht_params = {183.stbc = true,184.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),185},186.nvm_ver = IWL3165_NVM_VERSION,187.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,188.dccm_len = IWL7265_DCCM_LEN,189};190191const struct iwl_rf_cfg iwl3168_2ac_cfg = {192.fw_name_pre = IWL3168_FW_PRE,193IWL_DEVICE_3008,194.ht_params = {195.stbc = true,196.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),197},198.nvm_ver = IWL3168_NVM_VERSION,199.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,200.dccm_len = IWL7265_DCCM_LEN,201.nvm_type = IWL_NVM_SDP,202};203204const struct iwl_rf_cfg iwl7265_cfg = {205.fw_name_pre = IWL7265_FW_PRE,206IWL_DEVICE_7005,207.ht_params = {208.stbc = true,209.ldpc = true,210.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),211},212.nvm_ver = IWL7265_NVM_VERSION,213.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,214.dccm_len = IWL7265_DCCM_LEN,215};216217const struct iwl_rf_cfg iwl7265d_cfg = {218.fw_name_pre = IWL7265D_FW_PRE,219IWL_DEVICE_7005D,220.ht_params = {221.stbc = true,222.ldpc = true,223.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),224},225.nvm_ver = IWL7265D_NVM_VERSION,226.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,227.dccm_len = IWL7265_DCCM_LEN,228};229230MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_MAX));231MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL7260_UCODE_API_MAX));232MODULE_FIRMWARE(IWL3168_MODULE_FIRMWARE(IWL3168_UCODE_API_MAX));233MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7265_UCODE_API_MAX));234MODULE_FIRMWARE(IWL7265D_MODULE_FIRMWARE(IWL7265D_UCODE_API_MAX));235236237