2020-12-10 00:06:03 +02:00
|
|
|
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
|
|
|
/*
|
|
|
|
* Copyright (C) 2015-2017 Intel Deutschland GmbH
|
2023-06-21 13:12:18 +03:00
|
|
|
* Copyright (C) 2018-2021, 2023 Intel Corporation
|
2020-12-10 00:06:03 +02:00
|
|
|
*/
|
2015-06-01 08:27:17 +03:00
|
|
|
#include <linux/module.h>
|
|
|
|
#include <linux/stringify.h>
|
|
|
|
#include "iwl-config.h"
|
2018-02-21 22:18:59 +02:00
|
|
|
#include "fw/file.h"
|
2019-07-23 12:34:49 +03:00
|
|
|
#include "iwl-prph.h"
|
2015-06-01 08:27:17 +03:00
|
|
|
|
|
|
|
/* Highest firmware API version supported */
|
2018-12-10 09:01:56 +01:00
|
|
|
#define IWL9000_UCODE_API_MAX 46
|
2015-06-01 08:27:17 +03:00
|
|
|
|
|
|
|
/* Lowest firmware API version supported */
|
2017-01-04 09:30:24 +02:00
|
|
|
#define IWL9000_UCODE_API_MIN 30
|
2015-06-01 08:27:17 +03:00
|
|
|
|
|
|
|
/* NVM versions */
|
|
|
|
#define IWL9000_NVM_VERSION 0x0a1d
|
|
|
|
|
|
|
|
/* Memory offsets and lengths */
|
|
|
|
#define IWL9000_DCCM_OFFSET 0x800000
|
|
|
|
#define IWL9000_DCCM_LEN 0x18000
|
|
|
|
#define IWL9000_DCCM2_OFFSET 0x880000
|
|
|
|
#define IWL9000_DCCM2_LEN 0x8000
|
|
|
|
#define IWL9000_SMEM_OFFSET 0x400000
|
|
|
|
#define IWL9000_SMEM_LEN 0x68000
|
|
|
|
|
2023-06-21 13:12:18 +03:00
|
|
|
#define IWL9000_FW_PRE "iwlwifi-9000-pu-b0-jf-b0"
|
|
|
|
#define IWL9260_FW_PRE "iwlwifi-9260-th-b0-jf-b0"
|
2018-10-04 14:28:02 +03:00
|
|
|
#define IWL9000_MODULE_FIRMWARE(api) \
|
2023-06-21 13:12:18 +03:00
|
|
|
IWL9000_FW_PRE "-" __stringify(api) ".ucode"
|
2018-10-04 14:28:02 +03:00
|
|
|
#define IWL9260_MODULE_FIRMWARE(api) \
|
2023-06-21 13:12:18 +03:00
|
|
|
IWL9260_FW_PRE "-" __stringify(api) ".ucode"
|
2015-06-01 08:27:17 +03:00
|
|
|
|
|
|
|
static const struct iwl_base_params iwl9000_base_params = {
|
2018-08-16 08:53:10 +03:00
|
|
|
.eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
|
2015-12-16 10:50:03 +02:00
|
|
|
.num_of_queues = 31,
|
2018-02-04 12:51:45 +02:00
|
|
|
.max_tfd_queue_size = 256,
|
2015-06-01 08:27:17 +03:00
|
|
|
.shadow_ram_support = true,
|
|
|
|
.led_compensation = 57,
|
|
|
|
.wd_timeout = IWL_LONG_WD_TIMEOUT,
|
|
|
|
.max_event_log_size = 512,
|
|
|
|
.shadow_reg_enable = true,
|
|
|
|
.pcie_l1_allowed = true,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct iwl_ht_params iwl9000_ht_params = {
|
|
|
|
.stbc = true,
|
|
|
|
.ldpc = true,
|
2016-04-12 15:56:15 +02:00
|
|
|
.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
|
2015-06-01 08:27:17 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
static const struct iwl_tt_params iwl9000_tt_params = {
|
|
|
|
.ct_kill_entry = 115,
|
|
|
|
.ct_kill_exit = 93,
|
|
|
|
.ct_kill_duration = 5,
|
|
|
|
.dynamic_smps_entry = 111,
|
|
|
|
.dynamic_smps_exit = 107,
|
|
|
|
.tx_protection_entry = 112,
|
|
|
|
.tx_protection_exit = 105,
|
|
|
|
.tx_backoff = {
|
|
|
|
{.temperature = 110, .backoff = 200},
|
|
|
|
{.temperature = 111, .backoff = 600},
|
|
|
|
{.temperature = 112, .backoff = 1200},
|
|
|
|
{.temperature = 113, .backoff = 2000},
|
|
|
|
{.temperature = 114, .backoff = 4000},
|
|
|
|
},
|
|
|
|
.support_ct_kill = true,
|
|
|
|
.support_dynamic_smps = true,
|
|
|
|
.support_tx_protection = true,
|
|
|
|
.support_tx_backoff = true,
|
|
|
|
};
|
|
|
|
|
|
|
|
#define IWL_DEVICE_9000 \
|
|
|
|
.ucode_api_max = IWL9000_UCODE_API_MAX, \
|
|
|
|
.ucode_api_min = IWL9000_UCODE_API_MIN, \
|
|
|
|
.led_mode = IWL_LED_RF_STATE, \
|
2018-08-16 09:01:31 +03:00
|
|
|
.nvm_hw_section_num = 10, \
|
2018-05-28 17:09:30 +03:00
|
|
|
.non_shared_ant = ANT_B, \
|
2015-06-01 08:27:17 +03:00
|
|
|
.dccm_offset = IWL9000_DCCM_OFFSET, \
|
|
|
|
.dccm_len = IWL9000_DCCM_LEN, \
|
|
|
|
.dccm2_offset = IWL9000_DCCM2_OFFSET, \
|
|
|
|
.dccm2_len = IWL9000_DCCM2_LEN, \
|
|
|
|
.smem_offset = IWL9000_SMEM_OFFSET, \
|
|
|
|
.smem_len = IWL9000_SMEM_LEN, \
|
2016-03-10 17:40:56 +02:00
|
|
|
.features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
|
2015-06-01 08:27:17 +03:00
|
|
|
.thermal_params = &iwl9000_tt_params, \
|
2015-12-23 15:10:03 +02:00
|
|
|
.apmg_not_supported = true, \
|
iwlwifi: allocate more receive buffers for HE devices
For HE-capable devices, we need to allocate more receive buffers as
there could be 256 frames aggregated into a single A-MPDU, and then
they might contain A-MSDUs as well. Until 22000 family, the devices
are able to put multiple frames into a single RB and the default RB
size is 4k, but starting from AX210 family this is no longer true.
On the other hand, those newer devices only use 2k receive buffers
(by default).
Modify the code and configuration to allocate an appropriate number
of RBs depending on the device capabilities:
* 4096 for AX210 HE devices, which use 2k buffers by default,
* 2048 for 22000 family devices which use 4k buffers by default,
* 512 for existing 9000 family devices, which doesn't really
change anything since that's the default before this patch,
* 512 also for AX210/22000 family devices that don't do HE.
Theoretically, for devices lower than AX210, we wouldn't have to
allocate that many RBs if the RB size was manually increased, but
to support that the code got more complex, and it didn't really
seem necessary as that's a use case for monitor mode only, where
hopefully the wasted memory isn't really much of a concern.
Note that AX210 devices actually support bigger than 12-bit VID,
which is required here as we want to allocate 4096 buffers plus
some for quick recycling, so adjust the code for that as well.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
2019-09-27 10:36:02 +02:00
|
|
|
.num_rbds = 512, \
|
2016-03-07 14:18:29 +02:00
|
|
|
.vht_mu_mimo_supported = true, \
|
2021-08-02 21:58:50 +03:00
|
|
|
.mac_addr_from_csr = 0x380, \
|
2017-09-04 14:40:06 +03:00
|
|
|
.nvm_type = IWL_NVM_EXT, \
|
2017-10-02 16:12:23 +03:00
|
|
|
.dbgc_supported = true, \
|
2017-10-22 15:58:26 +03:00
|
|
|
.min_umac_error_event_table = 0x800000, \
|
2018-01-29 11:05:37 +02:00
|
|
|
.d3_debug_data_base_addr = 0x401000, \
|
2018-08-09 13:51:08 +03:00
|
|
|
.d3_debug_data_length = 92 * 1024, \
|
|
|
|
.ht_params = &iwl9000_ht_params, \
|
|
|
|
.nvm_ver = IWL9000_NVM_VERSION, \
|
2019-07-23 12:34:49 +03:00
|
|
|
.mon_smem_regs = { \
|
|
|
|
.write_ptr = { \
|
|
|
|
.addr = LDBG_M2S_BUF_WPTR, \
|
|
|
|
.mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
|
|
|
|
}, \
|
|
|
|
.cycle_cnt = { \
|
|
|
|
.addr = LDBG_M2S_BUF_WRAP_CNT, \
|
|
|
|
.mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
|
|
|
|
}, \
|
|
|
|
}, \
|
|
|
|
.mon_dram_regs = { \
|
|
|
|
.write_ptr = { \
|
|
|
|
.addr = MON_BUFF_WRPTR_VER2, \
|
|
|
|
.mask = 0xffffffff, \
|
|
|
|
}, \
|
|
|
|
.cycle_cnt = { \
|
|
|
|
.addr = MON_BUFF_CYCLE_CNT_VER2, \
|
|
|
|
.mask = 0xffffffff, \
|
|
|
|
}, \
|
|
|
|
}
|
2018-08-09 13:51:08 +03:00
|
|
|
|
2019-10-10 16:30:11 +03:00
|
|
|
const struct iwl_cfg_trans_params iwl9000_trans_cfg = {
|
|
|
|
.device_family = IWL_DEVICE_FAMILY_9000,
|
|
|
|
.base_params = &iwl9000_base_params,
|
|
|
|
.mq_rx_supported = true,
|
|
|
|
.rf_id = true,
|
|
|
|
};
|
2015-06-01 08:27:17 +03:00
|
|
|
|
2019-11-04 12:31:22 +02:00
|
|
|
const struct iwl_cfg_trans_params iwl9560_trans_cfg = {
|
|
|
|
.device_family = IWL_DEVICE_FAMILY_9000,
|
|
|
|
.base_params = &iwl9000_base_params,
|
|
|
|
.mq_rx_supported = true,
|
|
|
|
.rf_id = true,
|
|
|
|
.integrated = true,
|
2020-10-08 18:12:38 +03:00
|
|
|
.xtal_latency = 650,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct iwl_cfg_trans_params iwl9560_long_latency_trans_cfg = {
|
|
|
|
.device_family = IWL_DEVICE_FAMILY_9000,
|
|
|
|
.base_params = &iwl9000_base_params,
|
|
|
|
.mq_rx_supported = true,
|
|
|
|
.rf_id = true,
|
|
|
|
.integrated = true,
|
|
|
|
.xtal_latency = 2820,
|
2019-11-04 12:31:22 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
const struct iwl_cfg_trans_params iwl9560_shared_clk_trans_cfg = {
|
|
|
|
.device_family = IWL_DEVICE_FAMILY_9000,
|
|
|
|
.base_params = &iwl9000_base_params,
|
|
|
|
.mq_rx_supported = true,
|
|
|
|
.rf_id = true,
|
|
|
|
.integrated = true,
|
2020-10-08 18:12:38 +03:00
|
|
|
.xtal_latency = 670,
|
2019-11-04 12:31:22 +02:00
|
|
|
.extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
|
2016-07-07 09:23:56 +03:00
|
|
|
};
|
|
|
|
|
2020-03-09 09:16:13 +02:00
|
|
|
const char iwl9162_name[] = "Intel(R) Wireless-AC 9162";
|
2020-03-09 09:16:07 +02:00
|
|
|
const char iwl9260_name[] = "Intel(R) Wireless-AC 9260";
|
2020-03-09 09:16:14 +02:00
|
|
|
const char iwl9260_1_name[] = "Intel(R) Wireless-AC 9260-1";
|
2020-03-09 09:16:07 +02:00
|
|
|
const char iwl9270_name[] = "Intel(R) Wireless-AC 9270";
|
|
|
|
const char iwl9461_name[] = "Intel(R) Wireless-AC 9461";
|
|
|
|
const char iwl9462_name[] = "Intel(R) Wireless-AC 9462";
|
|
|
|
const char iwl9560_name[] = "Intel(R) Wireless-AC 9560";
|
2020-03-09 09:16:13 +02:00
|
|
|
const char iwl9162_160_name[] = "Intel(R) Wireless-AC 9162 160MHz";
|
2019-10-10 18:29:26 +03:00
|
|
|
const char iwl9260_160_name[] = "Intel(R) Wireless-AC 9260 160MHz";
|
2020-03-09 09:16:10 +02:00
|
|
|
const char iwl9270_160_name[] = "Intel(R) Wireless-AC 9270 160MHz";
|
2020-03-09 09:16:12 +02:00
|
|
|
const char iwl9461_160_name[] = "Intel(R) Wireless-AC 9461 160MHz";
|
|
|
|
const char iwl9462_160_name[] = "Intel(R) Wireless-AC 9462 160MHz";
|
2019-10-10 18:29:26 +03:00
|
|
|
const char iwl9560_160_name[] = "Intel(R) Wireless-AC 9560 160MHz";
|
|
|
|
|
2020-03-09 09:16:07 +02:00
|
|
|
const char iwl9260_killer_1550_name[] =
|
2021-03-30 16:24:56 +03:00
|
|
|
"Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW) 160MHz";
|
2020-03-09 09:16:07 +02:00
|
|
|
const char iwl9560_killer_1550i_name[] =
|
|
|
|
"Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)";
|
2021-06-21 10:37:38 +03:00
|
|
|
const char iwl9560_killer_1550i_160_name[] =
|
|
|
|
"Killer(R) Wireless-AC 1550i Wireless Network Adapter (9560NGW) 160MHz";
|
2020-03-09 09:16:07 +02:00
|
|
|
const char iwl9560_killer_1550s_name[] =
|
|
|
|
"Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)";
|
2021-06-21 10:37:38 +03:00
|
|
|
const char iwl9560_killer_1550s_160_name[] =
|
|
|
|
"Killer(R) Wireless-AC 1550s Wireless Network Adapter (9560D2W) 160MHz";
|
2020-03-09 09:16:07 +02:00
|
|
|
|
2019-11-04 12:31:22 +02:00
|
|
|
const struct iwl_cfg iwl9260_2ac_cfg = {
|
|
|
|
.fw_name_pre = IWL9260_FW_PRE,
|
2017-11-15 18:28:04 +02:00
|
|
|
IWL_DEVICE_9000,
|
|
|
|
};
|
2018-02-21 22:18:59 +02:00
|
|
|
|
2019-11-04 12:31:22 +02:00
|
|
|
const struct iwl_cfg iwl9560_2ac_cfg_soc = {
|
2018-10-04 14:28:02 +03:00
|
|
|
.fw_name_pre = IWL9000_FW_PRE,
|
2018-07-17 13:43:56 +03:00
|
|
|
IWL_DEVICE_9000,
|
|
|
|
};
|
|
|
|
|
2018-10-04 14:28:02 +03:00
|
|
|
MODULE_FIRMWARE(IWL9000_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
|
|
|
|
MODULE_FIRMWARE(IWL9260_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
|