1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2015-2017 Intel Deutschland GmbH
4 * Copyright (C) 2018-2020 Intel Corporation
6 #include <linux/module.h>
7 #include <linux/stringify.h>
8 #include "iwl-config.h"
11 /* Highest firmware API version supported */
12 #define IWL_22000_UCODE_API_MAX 59
14 /* Lowest firmware API version supported */
15 #define IWL_22000_UCODE_API_MIN 39
18 #define IWL_22000_NVM_VERSION 0x0a1d
20 /* Memory offsets and lengths */
21 #define IWL_22000_DCCM_OFFSET 0x800000 /* LMAC1 */
22 #define IWL_22000_DCCM_LEN 0x10000 /* LMAC1 */
23 #define IWL_22000_DCCM2_OFFSET 0x880000
24 #define IWL_22000_DCCM2_LEN 0x8000
25 #define IWL_22000_SMEM_OFFSET 0x400000
26 #define IWL_22000_SMEM_LEN 0xD0000
28 #define IWL_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-"
29 #define IWL_QNJ_B_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-"
30 #define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
31 #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
32 #define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
33 #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
34 #define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-"
35 #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
36 #define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"
37 #define IWL_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-"
38 #define IWL_SO_A_HR_B_FW_PRE "iwlwifi-so-a0-hr-b0-"
39 #define IWL_SO_A_GF_A_FW_PRE "iwlwifi-so-a0-gf-a0-"
40 #define IWL_TY_A_GF_A_FW_PRE "iwlwifi-ty-a0-gf-a0-"
41 #define IWL_SO_A_GF4_A_FW_PRE "iwlwifi-so-a0-gf4-a0-"
42 #define IWL_SNJ_A_GF4_A_FW_PRE "iwlwifi-SoSnj-a0-gf4-a0-"
43 #define IWL_SNJ_A_GF_A_FW_PRE "iwlwifi-SoSnj-a0-gf-a0-"
44 #define IWL_SNJ_A_HR_B_FW_PRE "iwlwifi-SoSnj-a0-hr-b0-"
45 #define IWL_MA_A_GF_A_FW_PRE "iwlwifi-ma-a0-gf-a0-"
46 #define IWL_MA_A_MR_A_FW_PRE "iwlwifi-ma-a0-mr-a0-"
47 #define IWL_SNJ_A_MR_A_FW_PRE "iwlwifi-SoSnj-a0-mr-a0-"
49 #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
50 IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
51 #define IWL_QNJ_B_HR_B_MODULE_FIRMWARE(api) \
52 IWL_QNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
53 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
54 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
55 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
56 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
57 #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
58 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
59 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
60 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
61 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
62 IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
63 #define IWL_CC_A_MODULE_FIRMWARE(api) \
64 IWL_CC_A_FW_PRE __stringify(api) ".ucode"
65 #define IWL_SO_A_JF_B_MODULE_FIRMWARE(api) \
66 IWL_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
67 #define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
68 IWL_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
69 #define IWL_SO_A_GF_A_MODULE_FIRMWARE(api) \
70 IWL_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
71 #define IWL_TY_A_GF_A_MODULE_FIRMWARE(api) \
72 IWL_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
73 #define IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(api) \
74 IWL_SNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
75 #define IWL_SNJ_A_GF_A_MODULE_FIRMWARE(api) \
76 IWL_SNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
77 #define IWL_SNJ_A_HR_B_MODULE_FIRMWARE(api) \
78 IWL_SNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
79 #define IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(api) \
80 IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
81 #define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
82 IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
83 #define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
84 IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
86 static const struct iwl_base_params iwl_22000_base_params = {
87 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
89 .max_tfd_queue_size = 256,
90 .shadow_ram_support = true,
91 .led_compensation = 57,
92 .wd_timeout = IWL_LONG_WD_TIMEOUT,
93 .max_event_log_size = 512,
94 .shadow_reg_enable = true,
95 .pcie_l1_allowed = true,
98 static const struct iwl_base_params iwl_ax210_base_params = {
99 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
100 .num_of_queues = 512,
101 .max_tfd_queue_size = 65536,
102 .shadow_ram_support = true,
103 .led_compensation = 57,
104 .wd_timeout = IWL_LONG_WD_TIMEOUT,
105 .max_event_log_size = 512,
106 .shadow_reg_enable = true,
107 .pcie_l1_allowed = true,
110 static const struct iwl_ht_params iwl_22000_ht_params = {
113 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
114 BIT(NL80211_BAND_6GHZ),
117 #define IWL_DEVICE_22000_COMMON \
118 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
119 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
120 .led_mode = IWL_LED_RF_STATE, \
121 .nvm_hw_section_num = 10, \
122 .non_shared_ant = ANT_B, \
123 .dccm_offset = IWL_22000_DCCM_OFFSET, \
124 .dccm_len = IWL_22000_DCCM_LEN, \
125 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
126 .dccm2_len = IWL_22000_DCCM2_LEN, \
127 .smem_offset = IWL_22000_SMEM_OFFSET, \
128 .smem_len = IWL_22000_SMEM_LEN, \
129 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
130 .apmg_not_supported = true, \
131 .trans.mq_rx_supported = true, \
132 .vht_mu_mimo_supported = true, \
133 .mac_addr_from_csr = true, \
134 .ht_params = &iwl_22000_ht_params, \
135 .nvm_ver = IWL_22000_NVM_VERSION, \
136 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, \
137 .trans.use_tfh = true, \
138 .trans.rf_id = true, \
139 .trans.gen2 = true, \
140 .nvm_type = IWL_NVM_EXT, \
141 .dbgc_supported = true, \
142 .min_umac_error_event_table = 0x400000, \
143 .d3_debug_data_base_addr = 0x401000, \
144 .d3_debug_data_length = 60 * 1024, \
147 .addr = LDBG_M2S_BUF_WPTR, \
148 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
151 .addr = LDBG_M2S_BUF_WRAP_CNT, \
152 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
156 #define IWL_DEVICE_22500 \
157 IWL_DEVICE_22000_COMMON, \
158 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
159 .trans.base_params = &iwl_22000_base_params, \
160 .gp2_reg_addr = 0xa02c68, \
163 .addr = MON_BUFF_WRPTR_VER2, \
164 .mask = 0xffffffff, \
167 .addr = MON_BUFF_CYCLE_CNT_VER2, \
168 .mask = 0xffffffff, \
172 #define IWL_DEVICE_AX210 \
173 IWL_DEVICE_22000_COMMON, \
174 .trans.umac_prph_offset = 0x300000, \
175 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
176 .trans.base_params = &iwl_ax210_base_params, \
177 .min_txq_size = 128, \
178 .gp2_reg_addr = 0xd02c68, \
179 .min_256_ba_txq_size = 1024, \
182 .addr = DBGC_CUR_DBGBUF_STATUS, \
183 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
186 .addr = DBGC_DBGBUF_WRAP_AROUND, \
187 .mask = 0xffffffff, \
190 .addr = DBGC_CUR_DBGBUF_STATUS, \
191 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
195 const struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
196 .mq_rx_supported = true,
200 .device_family = IWL_DEVICE_FAMILY_22000,
201 .base_params = &iwl_22000_base_params,
204 const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
205 .mq_rx_supported = true,
209 .device_family = IWL_DEVICE_FAMILY_22000,
210 .base_params = &iwl_22000_base_params,
213 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
216 const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
217 .mq_rx_supported = true,
221 .device_family = IWL_DEVICE_FAMILY_22000,
222 .base_params = &iwl_22000_base_params,
224 .xtal_latency = 1820,
225 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
228 const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
229 .mq_rx_supported = true,
233 .device_family = IWL_DEVICE_FAMILY_22000,
234 .base_params = &iwl_22000_base_params,
236 .xtal_latency = 12000,
237 .low_latency_xtal = true,
238 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
242 * If the device doesn't support HE, no need to have that many buffers.
243 * 22000 devices can split multiple frames into a single RB, so fewer are
244 * needed; AX210 cannot (but use smaller RBs by default) - these sizes
245 * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
246 * additional overhead to account for processing time.
248 #define IWL_NUM_RBDS_NON_HE 512
249 #define IWL_NUM_RBDS_22000_HE 2048
250 #define IWL_NUM_RBDS_AX210_HE 4096
253 * All JF radio modules are part of the 9000 series, but the MAC part
254 * looks more like 22000. That's why this device is here, but called
257 const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
258 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
260 .num_rbds = IWL_NUM_RBDS_NON_HE,
263 const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
264 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
266 .num_rbds = IWL_NUM_RBDS_NON_HE,
269 const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
270 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
273 * This device doesn't support receiving BlockAck with a large bitmap
274 * so we need to restrict the size of transmitted aggregation to the
275 * HT size; mac80211 would otherwise pick the HE max (256) by default.
277 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
278 .num_rbds = IWL_NUM_RBDS_NON_HE,
281 const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
282 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
285 * This device doesn't support receiving BlockAck with a large bitmap
286 * so we need to restrict the size of transmitted aggregation to the
287 * HT size; mac80211 would otherwise pick the HE max (256) by default.
289 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
290 .num_rbds = IWL_NUM_RBDS_NON_HE,
293 const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
294 .device_family = IWL_DEVICE_FAMILY_22000,
295 .base_params = &iwl_22000_base_params,
296 .mq_rx_supported = true,
300 .bisr_workaround = 1,
303 const struct iwl_cfg_trans_params iwl_ma_trans_cfg = {
304 .device_family = IWL_DEVICE_FAMILY_AX210,
305 .base_params = &iwl_ax210_base_params,
306 .mq_rx_supported = true,
311 .umac_prph_offset = 0x300000
314 const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
315 const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
316 const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
317 const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
318 const char iwl_ax211_name[] = "Intel(R) Wi-Fi 6 AX211 160MHz";
319 const char iwl_ax411_name[] = "Intel(R) Wi-Fi 6 AX411 160MHz";
320 const char iwl_ma_name[] = "Intel(R) Wi-Fi 6";
322 const char iwl_ax200_killer_1650w_name[] =
323 "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
324 const char iwl_ax200_killer_1650x_name[] =
325 "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
326 const char iwl_ax201_killer_1650s_name[] =
327 "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
328 const char iwl_ax201_killer_1650i_name[] =
329 "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
331 const struct iwl_cfg iwl_qu_b0_hr1_b0 = {
332 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
335 * This device doesn't support receiving BlockAck with a large bitmap
336 * so we need to restrict the size of transmitted aggregation to the
337 * HT size; mac80211 would otherwise pick the HE max (256) by default.
339 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
340 .tx_with_siso_diversity = true,
341 .num_rbds = IWL_NUM_RBDS_22000_HE,
344 const struct iwl_cfg iwl_qu_b0_hr_b0 = {
345 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
348 * This device doesn't support receiving BlockAck with a large bitmap
349 * so we need to restrict the size of transmitted aggregation to the
350 * HT size; mac80211 would otherwise pick the HE max (256) by default.
352 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
353 .num_rbds = IWL_NUM_RBDS_22000_HE,
356 const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
357 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
358 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
361 * This device doesn't support receiving BlockAck with a large bitmap
362 * so we need to restrict the size of transmitted aggregation to the
363 * HT size; mac80211 would otherwise pick the HE max (256) by default.
365 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
366 .num_rbds = IWL_NUM_RBDS_22000_HE,
369 const struct iwl_cfg iwl_qu_c0_hr1_b0 = {
370 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
373 * This device doesn't support receiving BlockAck with a large bitmap
374 * so we need to restrict the size of transmitted aggregation to the
375 * HT size; mac80211 would otherwise pick the HE max (256) by default.
377 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
378 .tx_with_siso_diversity = true,
379 .num_rbds = IWL_NUM_RBDS_22000_HE,
382 const struct iwl_cfg iwl_qu_c0_hr_b0 = {
383 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
386 * This device doesn't support receiving BlockAck with a large bitmap
387 * so we need to restrict the size of transmitted aggregation to the
388 * HT size; mac80211 would otherwise pick the HE max (256) by default.
390 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
391 .num_rbds = IWL_NUM_RBDS_22000_HE,
394 const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
395 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
396 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
399 * This device doesn't support receiving BlockAck with a large bitmap
400 * so we need to restrict the size of transmitted aggregation to the
401 * HT size; mac80211 would otherwise pick the HE max (256) by default.
403 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
404 .num_rbds = IWL_NUM_RBDS_22000_HE,
407 const struct iwl_cfg iwl_quz_a0_hr1_b0 = {
408 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
411 * This device doesn't support receiving BlockAck with a large bitmap
412 * so we need to restrict the size of transmitted aggregation to the
413 * HT size; mac80211 would otherwise pick the HE max (256) by default.
415 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
416 .tx_with_siso_diversity = true,
417 .num_rbds = IWL_NUM_RBDS_22000_HE,
420 const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
421 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
422 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
425 * This device doesn't support receiving BlockAck with a large bitmap
426 * so we need to restrict the size of transmitted aggregation to the
427 * HT size; mac80211 would otherwise pick the HE max (256) by default.
429 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
430 .num_rbds = IWL_NUM_RBDS_22000_HE,
433 const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
434 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
435 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
438 * This device doesn't support receiving BlockAck with a large bitmap
439 * so we need to restrict the size of transmitted aggregation to the
440 * HT size; mac80211 would otherwise pick the HE max (256) by default.
442 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
443 .num_rbds = IWL_NUM_RBDS_22000_HE,
446 const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
447 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
448 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
451 * This device doesn't support receiving BlockAck with a large bitmap
452 * so we need to restrict the size of transmitted aggregation to the
453 * HT size; mac80211 would otherwise pick the HE max (256) by default.
455 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
456 .num_rbds = IWL_NUM_RBDS_22000_HE,
459 const struct iwl_cfg iwl_ax200_cfg_cc = {
460 .fw_name_pre = IWL_CC_A_FW_PRE,
463 * This device doesn't support receiving BlockAck with a large bitmap
464 * so we need to restrict the size of transmitted aggregation to the
465 * HT size; mac80211 would otherwise pick the HE max (256) by default.
467 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
468 .num_rbds = IWL_NUM_RBDS_22000_HE,
471 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
472 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
473 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
476 * This device doesn't support receiving BlockAck with a large bitmap
477 * so we need to restrict the size of transmitted aggregation to the
478 * HT size; mac80211 would otherwise pick the HE max (256) by default.
480 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
481 .num_rbds = IWL_NUM_RBDS_22000_HE,
484 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
485 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
486 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
489 * This device doesn't support receiving BlockAck with a large bitmap
490 * so we need to restrict the size of transmitted aggregation to the
491 * HT size; mac80211 would otherwise pick the HE max (256) by default.
493 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
494 .num_rbds = IWL_NUM_RBDS_22000_HE,
497 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
498 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
499 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
502 * This device doesn't support receiving BlockAck with a large bitmap
503 * so we need to restrict the size of transmitted aggregation to the
504 * HT size; mac80211 would otherwise pick the HE max (256) by default.
506 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
507 .num_rbds = IWL_NUM_RBDS_22000_HE,
510 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
511 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
512 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
515 * This device doesn't support receiving BlockAck with a large bitmap
516 * so we need to restrict the size of transmitted aggregation to the
517 * HT size; mac80211 would otherwise pick the HE max (256) by default.
519 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
520 .num_rbds = IWL_NUM_RBDS_22000_HE,
523 const struct iwl_cfg iwl_qnj_b0_hr_b0_cfg = {
524 .fw_name_pre = IWL_QNJ_B_HR_B_FW_PRE,
527 * This device doesn't support receiving BlockAck with a large bitmap
528 * so we need to restrict the size of transmitted aggregation to the
529 * HT size; mac80211 would otherwise pick the HE max (256) by default.
531 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
532 .num_rbds = IWL_NUM_RBDS_22000_HE,
535 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0 = {
536 .name = "Intel(R) Wireless-AC 9560 160MHz",
537 .fw_name_pre = IWL_SO_A_JF_B_FW_PRE,
539 .num_rbds = IWL_NUM_RBDS_NON_HE,
542 const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0 = {
543 .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
544 .fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
546 .num_rbds = IWL_NUM_RBDS_AX210_HE,
549 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
550 .name = iwl_ax211_name,
551 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
552 .uhb_supported = true,
554 .num_rbds = IWL_NUM_RBDS_AX210_HE,
557 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long = {
558 .name = iwl_ax211_name,
559 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
560 .uhb_supported = true,
562 .num_rbds = IWL_NUM_RBDS_AX210_HE,
563 .trans.xtal_latency = 12000,
564 .trans.low_latency_xtal = true,
567 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
568 .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
569 .fw_name_pre = IWL_TY_A_GF_A_FW_PRE,
570 .uhb_supported = true,
572 .num_rbds = IWL_NUM_RBDS_AX210_HE,
575 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
576 .name = iwl_ax411_name,
577 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
578 .uhb_supported = true,
580 .num_rbds = IWL_NUM_RBDS_AX210_HE,
583 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long = {
584 .name = iwl_ax411_name,
585 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
586 .uhb_supported = true,
588 .num_rbds = IWL_NUM_RBDS_AX210_HE,
589 .trans.xtal_latency = 12000,
590 .trans.low_latency_xtal = true,
593 const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
594 .name = iwl_ax411_name,
595 .fw_name_pre = IWL_SNJ_A_GF4_A_FW_PRE,
596 .uhb_supported = true,
598 .num_rbds = IWL_NUM_RBDS_AX210_HE,
601 const struct iwl_cfg iwlax211_cfg_snj_gf_a0 = {
602 .name = iwl_ax211_name,
603 .fw_name_pre = IWL_SNJ_A_GF_A_FW_PRE,
604 .uhb_supported = true,
606 .num_rbds = IWL_NUM_RBDS_AX210_HE,
609 const struct iwl_cfg iwlax201_cfg_snj_hr_b0 = {
610 .name = iwl_ax201_name,
611 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
612 .uhb_supported = true,
614 .num_rbds = IWL_NUM_RBDS_AX210_HE,
617 const struct iwl_cfg iwl_cfg_ma_a0_gf_a0 = {
618 .fw_name_pre = IWL_MA_A_GF_A_FW_PRE,
619 .uhb_supported = true,
621 .num_rbds = IWL_NUM_RBDS_AX210_HE,
624 const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
625 .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
626 .uhb_supported = true,
628 .num_rbds = IWL_NUM_RBDS_AX210_HE,
631 const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
632 .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
633 .uhb_supported = true,
635 .num_rbds = IWL_NUM_RBDS_AX210_HE,
638 MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
639 MODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
640 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
641 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
642 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
643 MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
644 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
645 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
646 MODULE_FIRMWARE(IWL_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
647 MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
648 MODULE_FIRMWARE(IWL_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
649 MODULE_FIRMWARE(IWL_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
650 MODULE_FIRMWARE(IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
651 MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
652 MODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
653 MODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
654 MODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
655 MODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));