162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2015-2017 Intel Deutschland GmbH 462306a36Sopenharmony_ci * Copyright (C) 2018-2023 Intel Corporation 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#include <linux/module.h> 762306a36Sopenharmony_ci#include <linux/stringify.h> 862306a36Sopenharmony_ci#include "iwl-config.h" 962306a36Sopenharmony_ci#include "iwl-prph.h" 1062306a36Sopenharmony_ci#include "fw/api/txq.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* Highest firmware API version supported */ 1362306a36Sopenharmony_ci#define IWL_22000_UCODE_API_MAX 77 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* Lowest firmware API version supported */ 1662306a36Sopenharmony_ci#define IWL_22000_UCODE_API_MIN 50 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* NVM versions */ 1962306a36Sopenharmony_ci#define IWL_22000_NVM_VERSION 0x0a1d 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* Memory offsets and lengths */ 2262306a36Sopenharmony_ci#define IWL_22000_DCCM_OFFSET 0x800000 /* LMAC1 */ 2362306a36Sopenharmony_ci#define IWL_22000_DCCM_LEN 0x10000 /* LMAC1 */ 2462306a36Sopenharmony_ci#define IWL_22000_DCCM2_OFFSET 0x880000 2562306a36Sopenharmony_ci#define IWL_22000_DCCM2_LEN 0x8000 2662306a36Sopenharmony_ci#define IWL_22000_SMEM_OFFSET 0x400000 2762306a36Sopenharmony_ci#define IWL_22000_SMEM_LEN 0xD0000 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define IWL_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0" 3062306a36Sopenharmony_ci#define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0" 3162306a36Sopenharmony_ci#define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0" 3262306a36Sopenharmony_ci#define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0" 3362306a36Sopenharmony_ci#define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0" 3462306a36Sopenharmony_ci#define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0" 3562306a36Sopenharmony_ci#define IWL_CC_A_FW_PRE "iwlwifi-cc-a0" 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \ 3862306a36Sopenharmony_ci IWL_QU_B_HR_B_FW_PRE "-" __stringify(api) ".ucode" 3962306a36Sopenharmony_ci#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \ 4062306a36Sopenharmony_ci IWL_QUZ_A_HR_B_FW_PRE "-" __stringify(api) ".ucode" 4162306a36Sopenharmony_ci#define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \ 4262306a36Sopenharmony_ci IWL_QUZ_A_JF_B_FW_PRE "-" __stringify(api) ".ucode" 4362306a36Sopenharmony_ci#define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \ 4462306a36Sopenharmony_ci IWL_QU_C_HR_B_FW_PRE "-" __stringify(api) ".ucode" 4562306a36Sopenharmony_ci#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \ 4662306a36Sopenharmony_ci IWL_QU_B_JF_B_FW_PRE "-" __stringify(api) ".ucode" 4762306a36Sopenharmony_ci#define IWL_CC_A_MODULE_FIRMWARE(api) \ 4862306a36Sopenharmony_ci IWL_CC_A_FW_PRE "-" __stringify(api) ".ucode" 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistatic const struct iwl_base_params iwl_22000_base_params = { 5162306a36Sopenharmony_ci .eeprom_size = OTP_LOW_IMAGE_SIZE_32K, 5262306a36Sopenharmony_ci .num_of_queues = 512, 5362306a36Sopenharmony_ci .max_tfd_queue_size = 256, 5462306a36Sopenharmony_ci .shadow_ram_support = true, 5562306a36Sopenharmony_ci .led_compensation = 57, 5662306a36Sopenharmony_ci .wd_timeout = IWL_LONG_WD_TIMEOUT, 5762306a36Sopenharmony_ci .max_event_log_size = 512, 5862306a36Sopenharmony_ci .shadow_reg_enable = true, 5962306a36Sopenharmony_ci .pcie_l1_allowed = true, 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciconst struct iwl_ht_params iwl_22000_ht_params = { 6362306a36Sopenharmony_ci .stbc = true, 6462306a36Sopenharmony_ci .ldpc = true, 6562306a36Sopenharmony_ci .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) | 6662306a36Sopenharmony_ci BIT(NL80211_BAND_6GHZ), 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci#define IWL_DEVICE_22000_COMMON \ 7062306a36Sopenharmony_ci .ucode_api_min = IWL_22000_UCODE_API_MIN, \ 7162306a36Sopenharmony_ci .led_mode = IWL_LED_RF_STATE, \ 7262306a36Sopenharmony_ci .nvm_hw_section_num = 10, \ 7362306a36Sopenharmony_ci .non_shared_ant = ANT_B, \ 7462306a36Sopenharmony_ci .dccm_offset = IWL_22000_DCCM_OFFSET, \ 7562306a36Sopenharmony_ci .dccm_len = IWL_22000_DCCM_LEN, \ 7662306a36Sopenharmony_ci .dccm2_offset = IWL_22000_DCCM2_OFFSET, \ 7762306a36Sopenharmony_ci .dccm2_len = IWL_22000_DCCM2_LEN, \ 7862306a36Sopenharmony_ci .smem_offset = IWL_22000_SMEM_OFFSET, \ 7962306a36Sopenharmony_ci .smem_len = IWL_22000_SMEM_LEN, \ 8062306a36Sopenharmony_ci .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \ 8162306a36Sopenharmony_ci .apmg_not_supported = true, \ 8262306a36Sopenharmony_ci .trans.mq_rx_supported = true, \ 8362306a36Sopenharmony_ci .vht_mu_mimo_supported = true, \ 8462306a36Sopenharmony_ci .mac_addr_from_csr = 0x380, \ 8562306a36Sopenharmony_ci .ht_params = &iwl_22000_ht_params, \ 8662306a36Sopenharmony_ci .nvm_ver = IWL_22000_NVM_VERSION, \ 8762306a36Sopenharmony_ci .trans.rf_id = true, \ 8862306a36Sopenharmony_ci .trans.gen2 = true, \ 8962306a36Sopenharmony_ci .nvm_type = IWL_NVM_EXT, \ 9062306a36Sopenharmony_ci .dbgc_supported = true, \ 9162306a36Sopenharmony_ci .min_umac_error_event_table = 0x400000, \ 9262306a36Sopenharmony_ci .d3_debug_data_base_addr = 0x401000, \ 9362306a36Sopenharmony_ci .d3_debug_data_length = 60 * 1024, \ 9462306a36Sopenharmony_ci .mon_smem_regs = { \ 9562306a36Sopenharmony_ci .write_ptr = { \ 9662306a36Sopenharmony_ci .addr = LDBG_M2S_BUF_WPTR, \ 9762306a36Sopenharmony_ci .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \ 9862306a36Sopenharmony_ci }, \ 9962306a36Sopenharmony_ci .cycle_cnt = { \ 10062306a36Sopenharmony_ci .addr = LDBG_M2S_BUF_WRAP_CNT, \ 10162306a36Sopenharmony_ci .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \ 10262306a36Sopenharmony_ci }, \ 10362306a36Sopenharmony_ci } 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#define IWL_DEVICE_22500 \ 10662306a36Sopenharmony_ci IWL_DEVICE_22000_COMMON, \ 10762306a36Sopenharmony_ci .ucode_api_max = IWL_22000_UCODE_API_MAX, \ 10862306a36Sopenharmony_ci .trans.device_family = IWL_DEVICE_FAMILY_22000, \ 10962306a36Sopenharmony_ci .trans.base_params = &iwl_22000_base_params, \ 11062306a36Sopenharmony_ci .gp2_reg_addr = 0xa02c68, \ 11162306a36Sopenharmony_ci .mon_dram_regs = { \ 11262306a36Sopenharmony_ci .write_ptr = { \ 11362306a36Sopenharmony_ci .addr = MON_BUFF_WRPTR_VER2, \ 11462306a36Sopenharmony_ci .mask = 0xffffffff, \ 11562306a36Sopenharmony_ci }, \ 11662306a36Sopenharmony_ci .cycle_cnt = { \ 11762306a36Sopenharmony_ci .addr = MON_BUFF_CYCLE_CNT_VER2, \ 11862306a36Sopenharmony_ci .mask = 0xffffffff, \ 11962306a36Sopenharmony_ci }, \ 12062306a36Sopenharmony_ci } 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qu_trans_cfg = { 12362306a36Sopenharmony_ci .mq_rx_supported = true, 12462306a36Sopenharmony_ci .rf_id = true, 12562306a36Sopenharmony_ci .gen2 = true, 12662306a36Sopenharmony_ci .device_family = IWL_DEVICE_FAMILY_22000, 12762306a36Sopenharmony_ci .base_params = &iwl_22000_base_params, 12862306a36Sopenharmony_ci .integrated = true, 12962306a36Sopenharmony_ci .xtal_latency = 500, 13062306a36Sopenharmony_ci .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US, 13162306a36Sopenharmony_ci}; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = { 13462306a36Sopenharmony_ci .mq_rx_supported = true, 13562306a36Sopenharmony_ci .rf_id = true, 13662306a36Sopenharmony_ci .gen2 = true, 13762306a36Sopenharmony_ci .device_family = IWL_DEVICE_FAMILY_22000, 13862306a36Sopenharmony_ci .base_params = &iwl_22000_base_params, 13962306a36Sopenharmony_ci .integrated = true, 14062306a36Sopenharmony_ci .xtal_latency = 1820, 14162306a36Sopenharmony_ci .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US, 14262306a36Sopenharmony_ci}; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = { 14562306a36Sopenharmony_ci .mq_rx_supported = true, 14662306a36Sopenharmony_ci .rf_id = true, 14762306a36Sopenharmony_ci .gen2 = true, 14862306a36Sopenharmony_ci .device_family = IWL_DEVICE_FAMILY_22000, 14962306a36Sopenharmony_ci .base_params = &iwl_22000_base_params, 15062306a36Sopenharmony_ci .integrated = true, 15162306a36Sopenharmony_ci .xtal_latency = 12000, 15262306a36Sopenharmony_ci .low_latency_xtal = true, 15362306a36Sopenharmony_ci .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US, 15462306a36Sopenharmony_ci}; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci/* 15762306a36Sopenharmony_ci * If the device doesn't support HE, no need to have that many buffers. 15862306a36Sopenharmony_ci * 22000 devices can split multiple frames into a single RB, so fewer are 15962306a36Sopenharmony_ci * needed; AX210 cannot (but use smaller RBs by default) - these sizes 16062306a36Sopenharmony_ci * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with 16162306a36Sopenharmony_ci * additional overhead to account for processing time. 16262306a36Sopenharmony_ci */ 16362306a36Sopenharmony_ci#define IWL_NUM_RBDS_NON_HE 512 16462306a36Sopenharmony_ci#define IWL_NUM_RBDS_22000_HE 2048 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci/* 16762306a36Sopenharmony_ci * All JF radio modules are part of the 9000 series, but the MAC part 16862306a36Sopenharmony_ci * looks more like 22000. That's why this device is here, but called 16962306a36Sopenharmony_ci * 9560 nevertheless. 17062306a36Sopenharmony_ci */ 17162306a36Sopenharmony_ciconst struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = { 17262306a36Sopenharmony_ci .fw_name_pre = IWL_QU_B_JF_B_FW_PRE, 17362306a36Sopenharmony_ci IWL_DEVICE_22500, 17462306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_NON_HE, 17562306a36Sopenharmony_ci}; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ciconst struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = { 17862306a36Sopenharmony_ci .fw_name_pre = IWL_QU_C_JF_B_FW_PRE, 17962306a36Sopenharmony_ci IWL_DEVICE_22500, 18062306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_NON_HE, 18162306a36Sopenharmony_ci}; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ciconst struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = { 18462306a36Sopenharmony_ci .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE, 18562306a36Sopenharmony_ci IWL_DEVICE_22500, 18662306a36Sopenharmony_ci /* 18762306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 18862306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 18962306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 19062306a36Sopenharmony_ci */ 19162306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 19262306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_NON_HE, 19362306a36Sopenharmony_ci}; 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_ax200_trans_cfg = { 19662306a36Sopenharmony_ci .device_family = IWL_DEVICE_FAMILY_22000, 19762306a36Sopenharmony_ci .base_params = &iwl_22000_base_params, 19862306a36Sopenharmony_ci .mq_rx_supported = true, 19962306a36Sopenharmony_ci .rf_id = true, 20062306a36Sopenharmony_ci .gen2 = true, 20162306a36Sopenharmony_ci .bisr_workaround = 1, 20262306a36Sopenharmony_ci}; 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ciconst char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101"; 20562306a36Sopenharmony_ciconst char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz"; 20662306a36Sopenharmony_ciconst char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz"; 20762306a36Sopenharmony_ciconst char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203"; 20862306a36Sopenharmony_ciconst char iwl_ax204_name[] = "Intel(R) Wi-Fi 6 AX204 160MHz"; 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ciconst char iwl_ax200_killer_1650w_name[] = 21162306a36Sopenharmony_ci "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)"; 21262306a36Sopenharmony_ciconst char iwl_ax200_killer_1650x_name[] = 21362306a36Sopenharmony_ci "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)"; 21462306a36Sopenharmony_ciconst char iwl_ax201_killer_1650s_name[] = 21562306a36Sopenharmony_ci "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)"; 21662306a36Sopenharmony_ciconst char iwl_ax201_killer_1650i_name[] = 21762306a36Sopenharmony_ci "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)"; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ciconst struct iwl_cfg iwl_qu_b0_hr1_b0 = { 22062306a36Sopenharmony_ci .fw_name_pre = IWL_QU_B_HR_B_FW_PRE, 22162306a36Sopenharmony_ci IWL_DEVICE_22500, 22262306a36Sopenharmony_ci /* 22362306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 22462306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 22562306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 22662306a36Sopenharmony_ci */ 22762306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 22862306a36Sopenharmony_ci .tx_with_siso_diversity = true, 22962306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 23062306a36Sopenharmony_ci}; 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciconst struct iwl_cfg iwl_qu_b0_hr_b0 = { 23362306a36Sopenharmony_ci .fw_name_pre = IWL_QU_B_HR_B_FW_PRE, 23462306a36Sopenharmony_ci IWL_DEVICE_22500, 23562306a36Sopenharmony_ci /* 23662306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 23762306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 23862306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 23962306a36Sopenharmony_ci */ 24062306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 24162306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 24262306a36Sopenharmony_ci}; 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ciconst struct iwl_cfg iwl_ax201_cfg_qu_hr = { 24562306a36Sopenharmony_ci .name = "Intel(R) Wi-Fi 6 AX201 160MHz", 24662306a36Sopenharmony_ci .fw_name_pre = IWL_QU_B_HR_B_FW_PRE, 24762306a36Sopenharmony_ci IWL_DEVICE_22500, 24862306a36Sopenharmony_ci /* 24962306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 25062306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 25162306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 25262306a36Sopenharmony_ci */ 25362306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 25462306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 25562306a36Sopenharmony_ci}; 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ciconst struct iwl_cfg iwl_qu_c0_hr1_b0 = { 25862306a36Sopenharmony_ci .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, 25962306a36Sopenharmony_ci IWL_DEVICE_22500, 26062306a36Sopenharmony_ci /* 26162306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 26262306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 26362306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 26462306a36Sopenharmony_ci */ 26562306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 26662306a36Sopenharmony_ci .tx_with_siso_diversity = true, 26762306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 26862306a36Sopenharmony_ci}; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ciconst struct iwl_cfg iwl_qu_c0_hr_b0 = { 27162306a36Sopenharmony_ci .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, 27262306a36Sopenharmony_ci IWL_DEVICE_22500, 27362306a36Sopenharmony_ci /* 27462306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 27562306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 27662306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 27762306a36Sopenharmony_ci */ 27862306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 27962306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 28062306a36Sopenharmony_ci}; 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ciconst struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = { 28362306a36Sopenharmony_ci .name = "Intel(R) Wi-Fi 6 AX201 160MHz", 28462306a36Sopenharmony_ci .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, 28562306a36Sopenharmony_ci IWL_DEVICE_22500, 28662306a36Sopenharmony_ci /* 28762306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 28862306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 28962306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 29062306a36Sopenharmony_ci */ 29162306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 29262306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 29362306a36Sopenharmony_ci}; 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ciconst struct iwl_cfg iwl_quz_a0_hr1_b0 = { 29662306a36Sopenharmony_ci .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 29762306a36Sopenharmony_ci IWL_DEVICE_22500, 29862306a36Sopenharmony_ci /* 29962306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 30062306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 30162306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 30262306a36Sopenharmony_ci */ 30362306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 30462306a36Sopenharmony_ci .tx_with_siso_diversity = true, 30562306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 30662306a36Sopenharmony_ci}; 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ciconst struct iwl_cfg iwl_ax201_cfg_quz_hr = { 30962306a36Sopenharmony_ci .name = "Intel(R) Wi-Fi 6 AX201 160MHz", 31062306a36Sopenharmony_ci .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 31162306a36Sopenharmony_ci IWL_DEVICE_22500, 31262306a36Sopenharmony_ci /* 31362306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 31462306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 31562306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 31662306a36Sopenharmony_ci */ 31762306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 31862306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 31962306a36Sopenharmony_ci}; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_ciconst struct iwl_cfg iwl_ax1650s_cfg_quz_hr = { 32262306a36Sopenharmony_ci .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)", 32362306a36Sopenharmony_ci .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 32462306a36Sopenharmony_ci IWL_DEVICE_22500, 32562306a36Sopenharmony_ci /* 32662306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 32762306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 32862306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 32962306a36Sopenharmony_ci */ 33062306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 33162306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 33262306a36Sopenharmony_ci}; 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ciconst struct iwl_cfg iwl_ax1650i_cfg_quz_hr = { 33562306a36Sopenharmony_ci .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)", 33662306a36Sopenharmony_ci .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 33762306a36Sopenharmony_ci IWL_DEVICE_22500, 33862306a36Sopenharmony_ci /* 33962306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 34062306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 34162306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 34262306a36Sopenharmony_ci */ 34362306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 34462306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 34562306a36Sopenharmony_ci}; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ciconst struct iwl_cfg iwl_ax200_cfg_cc = { 34862306a36Sopenharmony_ci .fw_name_pre = IWL_CC_A_FW_PRE, 34962306a36Sopenharmony_ci IWL_DEVICE_22500, 35062306a36Sopenharmony_ci /* 35162306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 35262306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 35362306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 35462306a36Sopenharmony_ci */ 35562306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 35662306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 35762306a36Sopenharmony_ci}; 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ciconst struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = { 36062306a36Sopenharmony_ci .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)", 36162306a36Sopenharmony_ci .fw_name_pre = IWL_QU_B_HR_B_FW_PRE, 36262306a36Sopenharmony_ci IWL_DEVICE_22500, 36362306a36Sopenharmony_ci /* 36462306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 36562306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 36662306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 36762306a36Sopenharmony_ci */ 36862306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 36962306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 37062306a36Sopenharmony_ci}; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ciconst struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = { 37362306a36Sopenharmony_ci .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)", 37462306a36Sopenharmony_ci .fw_name_pre = IWL_QU_B_HR_B_FW_PRE, 37562306a36Sopenharmony_ci IWL_DEVICE_22500, 37662306a36Sopenharmony_ci /* 37762306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 37862306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 37962306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 38062306a36Sopenharmony_ci */ 38162306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 38262306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 38362306a36Sopenharmony_ci}; 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ciconst struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = { 38662306a36Sopenharmony_ci .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)", 38762306a36Sopenharmony_ci .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, 38862306a36Sopenharmony_ci IWL_DEVICE_22500, 38962306a36Sopenharmony_ci /* 39062306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 39162306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 39262306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 39362306a36Sopenharmony_ci */ 39462306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 39562306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 39662306a36Sopenharmony_ci}; 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ciconst struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = { 39962306a36Sopenharmony_ci .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)", 40062306a36Sopenharmony_ci .fw_name_pre = IWL_QU_C_HR_B_FW_PRE, 40162306a36Sopenharmony_ci IWL_DEVICE_22500, 40262306a36Sopenharmony_ci /* 40362306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 40462306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 40562306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 40662306a36Sopenharmony_ci */ 40762306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 40862306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 40962306a36Sopenharmony_ci}; 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ciconst struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = { 41262306a36Sopenharmony_ci .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 41362306a36Sopenharmony_ci IWL_DEVICE_22500, 41462306a36Sopenharmony_ci /* 41562306a36Sopenharmony_ci * This device doesn't support receiving BlockAck with a large bitmap 41662306a36Sopenharmony_ci * so we need to restrict the size of transmitted aggregation to the 41762306a36Sopenharmony_ci * HT size; mac80211 would otherwise pick the HE max (256) by default. 41862306a36Sopenharmony_ci */ 41962306a36Sopenharmony_ci .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 42062306a36Sopenharmony_ci .num_rbds = IWL_NUM_RBDS_22000_HE, 42162306a36Sopenharmony_ci}; 42262306a36Sopenharmony_ci 42362306a36Sopenharmony_ciMODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 42462306a36Sopenharmony_ciMODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 42562306a36Sopenharmony_ciMODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 42662306a36Sopenharmony_ciMODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 42762306a36Sopenharmony_ciMODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 42862306a36Sopenharmony_ciMODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 429