1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2015-2017 Intel Deutschland GmbH
4 * Copyright (C) 2018-2021 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 66
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_SNJ_A_JF_B_FW_PRE "iwlwifi-SoSnj-a0-jf-b0-"
46 #define IWL_MA_A_HR_B_FW_PRE "iwlwifi-ma-a0-hr-b0-"
47 #define IWL_MA_A_GF_A_FW_PRE "iwlwifi-ma-a0-gf-a0-"
48 #define IWL_MA_A_GF4_A_FW_PRE "iwlwifi-ma-a0-gf4-a0-"
49 #define IWL_MA_A_MR_A_FW_PRE "iwlwifi-ma-a0-mr-a0-"
50 #define IWL_MA_A_FM_A_FW_PRE "iwlwifi-ma-a0-fm-a0-"
51 #define IWL_SNJ_A_MR_A_FW_PRE "iwlwifi-SoSnj-a0-mr-a0-"
52 #define IWL_BZ_A_HR_B_FW_PRE "iwlwifi-bz-a0-hr-b0-"
53 #define IWL_BZ_A_GF_A_FW_PRE "iwlwifi-bz-a0-gf-a0-"
54 #define IWL_BZ_A_GF4_A_FW_PRE "iwlwifi-bz-a0-gf4-a0-"
55 #define IWL_BZ_A_MR_A_FW_PRE "iwlwifi-bz-a0-mr-a0-"
57 #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
58 IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
59 #define IWL_QNJ_B_HR_B_MODULE_FIRMWARE(api) \
60 IWL_QNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
61 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
62 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
63 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
64 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
65 #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
66 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
67 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
68 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
69 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
70 IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
71 #define IWL_CC_A_MODULE_FIRMWARE(api) \
72 IWL_CC_A_FW_PRE __stringify(api) ".ucode"
73 #define IWL_SO_A_JF_B_MODULE_FIRMWARE(api) \
74 IWL_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
75 #define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
76 IWL_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
77 #define IWL_SO_A_GF_A_MODULE_FIRMWARE(api) \
78 IWL_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
79 #define IWL_TY_A_GF_A_MODULE_FIRMWARE(api) \
80 IWL_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
81 #define IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(api) \
82 IWL_SNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
83 #define IWL_SNJ_A_GF_A_MODULE_FIRMWARE(api) \
84 IWL_SNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
85 #define IWL_SNJ_A_HR_B_MODULE_FIRMWARE(api) \
86 IWL_SNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
87 #define IWL_SNJ_A_JF_B_MODULE_FIRMWARE(api) \
88 IWL_SNJ_A_JF_B_FW_PRE __stringify(api) ".ucode"
89 #define IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(api) \
90 IWL_MA_A_HR_B_FW_PRE __stringify(api) ".ucode"
91 #define IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(api) \
92 IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
93 #define IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(api) \
94 IWL_MA_A_GF4_A_FW_PRE __stringify(api) ".ucode"
95 #define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
96 IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
97 #define IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(api) \
98 IWL_MA_A_FM_A_FW_PRE __stringify(api) ".ucode"
99 #define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
100 IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
101 #define IWL_BZ_A_HR_B_MODULE_FIRMWARE(api) \
102 IWL_BZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
103 #define IWL_BZ_A_GF_A_MODULE_FIRMWARE(api) \
104 IWL_BZ_A_GF_A_FW_PRE __stringify(api) ".ucode"
105 #define IWL_BZ_A_GF4_A_MODULE_FIRMWARE(api) \
106 IWL_BZ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
107 #define IWL_BZ_A_MR_A_MODULE_FIRMWARE(api) \
108 IWL_BZ_A_MR_A_FW_PRE __stringify(api) ".ucode"
110 static const struct iwl_base_params iwl_22000_base_params = {
111 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
112 .num_of_queues = 512,
113 .max_tfd_queue_size = 256,
114 .shadow_ram_support = true,
115 .led_compensation = 57,
116 .wd_timeout = IWL_LONG_WD_TIMEOUT,
117 .max_event_log_size = 512,
118 .shadow_reg_enable = true,
119 .pcie_l1_allowed = true,
122 static const struct iwl_base_params iwl_ax210_base_params = {
123 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
124 .num_of_queues = 512,
125 .max_tfd_queue_size = 65536,
126 .shadow_ram_support = true,
127 .led_compensation = 57,
128 .wd_timeout = IWL_LONG_WD_TIMEOUT,
129 .max_event_log_size = 512,
130 .shadow_reg_enable = true,
131 .pcie_l1_allowed = true,
134 static const struct iwl_ht_params iwl_22000_ht_params = {
137 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
138 BIT(NL80211_BAND_6GHZ),
141 #define IWL_DEVICE_22000_COMMON \
142 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
143 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
144 .led_mode = IWL_LED_RF_STATE, \
145 .nvm_hw_section_num = 10, \
146 .non_shared_ant = ANT_B, \
147 .dccm_offset = IWL_22000_DCCM_OFFSET, \
148 .dccm_len = IWL_22000_DCCM_LEN, \
149 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
150 .dccm2_len = IWL_22000_DCCM2_LEN, \
151 .smem_offset = IWL_22000_SMEM_OFFSET, \
152 .smem_len = IWL_22000_SMEM_LEN, \
153 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
154 .apmg_not_supported = true, \
155 .trans.mq_rx_supported = true, \
156 .vht_mu_mimo_supported = true, \
157 .mac_addr_from_csr = 0x380, \
158 .ht_params = &iwl_22000_ht_params, \
159 .nvm_ver = IWL_22000_NVM_VERSION, \
160 .trans.use_tfh = true, \
161 .trans.rf_id = true, \
162 .trans.gen2 = true, \
163 .nvm_type = IWL_NVM_EXT, \
164 .dbgc_supported = true, \
165 .min_umac_error_event_table = 0x400000, \
166 .d3_debug_data_base_addr = 0x401000, \
167 .d3_debug_data_length = 60 * 1024, \
170 .addr = LDBG_M2S_BUF_WPTR, \
171 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
174 .addr = LDBG_M2S_BUF_WRAP_CNT, \
175 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
179 #define IWL_DEVICE_22500 \
180 IWL_DEVICE_22000_COMMON, \
181 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
182 .trans.base_params = &iwl_22000_base_params, \
183 .gp2_reg_addr = 0xa02c68, \
186 .addr = MON_BUFF_WRPTR_VER2, \
187 .mask = 0xffffffff, \
190 .addr = MON_BUFF_CYCLE_CNT_VER2, \
191 .mask = 0xffffffff, \
195 #define IWL_DEVICE_AX210 \
196 IWL_DEVICE_22000_COMMON, \
197 .trans.umac_prph_offset = 0x300000, \
198 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
199 .trans.base_params = &iwl_ax210_base_params, \
200 .min_txq_size = 128, \
201 .gp2_reg_addr = 0xd02c68, \
202 .min_256_ba_txq_size = 1024, \
205 .addr = DBGC_CUR_DBGBUF_STATUS, \
206 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
209 .addr = DBGC_DBGBUF_WRAP_AROUND, \
210 .mask = 0xffffffff, \
213 .addr = DBGC_CUR_DBGBUF_STATUS, \
214 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
218 #define IWL_DEVICE_BZ_COMMON \
219 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
220 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
221 .led_mode = IWL_LED_RF_STATE, \
222 .nvm_hw_section_num = 10, \
223 .non_shared_ant = ANT_B, \
224 .dccm_offset = IWL_22000_DCCM_OFFSET, \
225 .dccm_len = IWL_22000_DCCM_LEN, \
226 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
227 .dccm2_len = IWL_22000_DCCM2_LEN, \
228 .smem_offset = IWL_22000_SMEM_OFFSET, \
229 .smem_len = IWL_22000_SMEM_LEN, \
230 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
231 .apmg_not_supported = true, \
232 .trans.mq_rx_supported = true, \
233 .vht_mu_mimo_supported = true, \
234 .mac_addr_from_csr = 0x30, \
235 .ht_params = &iwl_22000_ht_params, \
236 .nvm_ver = IWL_22000_NVM_VERSION, \
237 .trans.use_tfh = true, \
238 .trans.rf_id = true, \
239 .trans.gen2 = true, \
240 .nvm_type = IWL_NVM_EXT, \
241 .dbgc_supported = true, \
242 .min_umac_error_event_table = 0x400000, \
243 .d3_debug_data_base_addr = 0x401000, \
244 .d3_debug_data_length = 60 * 1024, \
247 .addr = LDBG_M2S_BUF_WPTR, \
248 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
251 .addr = LDBG_M2S_BUF_WRAP_CNT, \
252 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
256 #define IWL_DEVICE_BZ \
257 IWL_DEVICE_BZ_COMMON, \
258 .trans.umac_prph_offset = 0x300000, \
259 .trans.device_family = IWL_DEVICE_FAMILY_BZ, \
260 .trans.base_params = &iwl_ax210_base_params, \
261 .min_txq_size = 128, \
262 .gp2_reg_addr = 0xd02c68, \
263 .min_256_ba_txq_size = 1024, \
266 .addr = DBGC_CUR_DBGBUF_STATUS, \
267 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
270 .addr = DBGC_DBGBUF_WRAP_AROUND, \
271 .mask = 0xffffffff, \
274 .addr = DBGC_CUR_DBGBUF_STATUS, \
275 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
279 const struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
280 .mq_rx_supported = true,
284 .device_family = IWL_DEVICE_FAMILY_22000,
285 .base_params = &iwl_22000_base_params,
288 const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
289 .mq_rx_supported = true,
293 .device_family = IWL_DEVICE_FAMILY_22000,
294 .base_params = &iwl_22000_base_params,
297 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
300 const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
301 .mq_rx_supported = true,
305 .device_family = IWL_DEVICE_FAMILY_22000,
306 .base_params = &iwl_22000_base_params,
308 .xtal_latency = 1820,
309 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
312 const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
313 .mq_rx_supported = true,
317 .device_family = IWL_DEVICE_FAMILY_22000,
318 .base_params = &iwl_22000_base_params,
320 .xtal_latency = 12000,
321 .low_latency_xtal = true,
322 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
325 const struct iwl_cfg_trans_params iwl_snj_trans_cfg = {
326 .mq_rx_supported = true,
330 .device_family = IWL_DEVICE_FAMILY_AX210,
331 .base_params = &iwl_ax210_base_params,
332 .umac_prph_offset = 0x300000,
335 const struct iwl_cfg_trans_params iwl_so_trans_cfg = {
336 .mq_rx_supported = true,
340 .device_family = IWL_DEVICE_FAMILY_AX210,
341 .base_params = &iwl_ax210_base_params,
342 .umac_prph_offset = 0x300000,
344 /* TODO: the following values need to be checked */
346 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
349 const struct iwl_cfg_trans_params iwl_so_long_latency_trans_cfg = {
350 .mq_rx_supported = true,
354 .device_family = IWL_DEVICE_FAMILY_AX210,
355 .base_params = &iwl_ax210_base_params,
356 .umac_prph_offset = 0x300000,
358 /* TODO: the following values need to be checked */
359 .xtal_latency = 12000,
360 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
364 * If the device doesn't support HE, no need to have that many buffers.
365 * 22000 devices can split multiple frames into a single RB, so fewer are
366 * needed; AX210 cannot (but use smaller RBs by default) - these sizes
367 * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
368 * additional overhead to account for processing time.
370 #define IWL_NUM_RBDS_NON_HE 512
371 #define IWL_NUM_RBDS_22000_HE 2048
372 #define IWL_NUM_RBDS_AX210_HE 4096
375 * All JF radio modules are part of the 9000 series, but the MAC part
376 * looks more like 22000. That's why this device is here, but called
379 const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
380 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
382 .num_rbds = IWL_NUM_RBDS_NON_HE,
385 const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
386 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
388 .num_rbds = IWL_NUM_RBDS_NON_HE,
391 const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
392 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
395 * This device doesn't support receiving BlockAck with a large bitmap
396 * so we need to restrict the size of transmitted aggregation to the
397 * HT size; mac80211 would otherwise pick the HE max (256) by default.
399 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
400 .num_rbds = IWL_NUM_RBDS_NON_HE,
403 const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
404 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
407 * This device doesn't support receiving BlockAck with a large bitmap
408 * so we need to restrict the size of transmitted aggregation to the
409 * HT size; mac80211 would otherwise pick the HE max (256) by default.
411 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
412 .num_rbds = IWL_NUM_RBDS_NON_HE,
415 const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
416 .device_family = IWL_DEVICE_FAMILY_22000,
417 .base_params = &iwl_22000_base_params,
418 .mq_rx_supported = true,
422 .bisr_workaround = 1,
425 const struct iwl_cfg_trans_params iwl_ma_trans_cfg = {
426 .device_family = IWL_DEVICE_FAMILY_AX210,
427 .base_params = &iwl_ax210_base_params,
428 .mq_rx_supported = true,
433 .umac_prph_offset = 0x300000
436 const struct iwl_cfg_trans_params iwl_bz_trans_cfg = {
437 .device_family = IWL_DEVICE_FAMILY_BZ,
438 .base_params = &iwl_ax210_base_params,
439 .mq_rx_supported = true,
444 .umac_prph_offset = 0x300000,
445 .xtal_latency = 12000,
446 .low_latency_xtal = true,
447 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
450 const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
451 const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
452 const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
453 const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
454 const char iwl_ax211_name[] = "Intel(R) Wi-Fi 6E AX211 160MHz";
455 const char iwl_ax221_name[] = "Intel(R) Wi-Fi 6E AX221 160MHz";
456 const char iwl_ax231_name[] = "Intel(R) Wi-Fi 6E AX231 160MHz";
457 const char iwl_ax411_name[] = "Intel(R) Wi-Fi 6E AX411 160MHz";
458 const char iwl_bz_name[] = "Intel(R) TBD Bz device";
460 const char iwl_ax200_killer_1650w_name[] =
461 "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
462 const char iwl_ax200_killer_1650x_name[] =
463 "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
464 const char iwl_ax201_killer_1650s_name[] =
465 "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
466 const char iwl_ax201_killer_1650i_name[] =
467 "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
468 const char iwl_ax210_killer_1675w_name[] =
469 "Killer(R) Wi-Fi 6E AX1675w 160MHz Wireless Network Adapter (210D2W)";
470 const char iwl_ax210_killer_1675x_name[] =
471 "Killer(R) Wi-Fi 6E AX1675x 160MHz Wireless Network Adapter (210NGW)";
473 const struct iwl_cfg iwl_qu_b0_hr1_b0 = {
474 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
477 * This device doesn't support receiving BlockAck with a large bitmap
478 * so we need to restrict the size of transmitted aggregation to the
479 * HT size; mac80211 would otherwise pick the HE max (256) by default.
481 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
482 .tx_with_siso_diversity = true,
483 .num_rbds = IWL_NUM_RBDS_22000_HE,
486 const struct iwl_cfg iwl_qu_b0_hr_b0 = {
487 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
490 * This device doesn't support receiving BlockAck with a large bitmap
491 * so we need to restrict the size of transmitted aggregation to the
492 * HT size; mac80211 would otherwise pick the HE max (256) by default.
494 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
495 .num_rbds = IWL_NUM_RBDS_22000_HE,
498 const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
499 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
500 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
503 * This device doesn't support receiving BlockAck with a large bitmap
504 * so we need to restrict the size of transmitted aggregation to the
505 * HT size; mac80211 would otherwise pick the HE max (256) by default.
507 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
508 .num_rbds = IWL_NUM_RBDS_22000_HE,
511 const struct iwl_cfg iwl_qu_c0_hr1_b0 = {
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 .tx_with_siso_diversity = true,
521 .num_rbds = IWL_NUM_RBDS_22000_HE,
524 const struct iwl_cfg iwl_qu_c0_hr_b0 = {
525 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
528 * This device doesn't support receiving BlockAck with a large bitmap
529 * so we need to restrict the size of transmitted aggregation to the
530 * HT size; mac80211 would otherwise pick the HE max (256) by default.
532 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
533 .num_rbds = IWL_NUM_RBDS_22000_HE,
536 const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
537 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
538 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
541 * This device doesn't support receiving BlockAck with a large bitmap
542 * so we need to restrict the size of transmitted aggregation to the
543 * HT size; mac80211 would otherwise pick the HE max (256) by default.
545 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
546 .num_rbds = IWL_NUM_RBDS_22000_HE,
549 const struct iwl_cfg iwl_quz_a0_hr1_b0 = {
550 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
553 * This device doesn't support receiving BlockAck with a large bitmap
554 * so we need to restrict the size of transmitted aggregation to the
555 * HT size; mac80211 would otherwise pick the HE max (256) by default.
557 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
558 .tx_with_siso_diversity = true,
559 .num_rbds = IWL_NUM_RBDS_22000_HE,
562 const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
563 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
564 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
567 * This device doesn't support receiving BlockAck with a large bitmap
568 * so we need to restrict the size of transmitted aggregation to the
569 * HT size; mac80211 would otherwise pick the HE max (256) by default.
571 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
572 .num_rbds = IWL_NUM_RBDS_22000_HE,
575 const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
576 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
577 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
580 * This device doesn't support receiving BlockAck with a large bitmap
581 * so we need to restrict the size of transmitted aggregation to the
582 * HT size; mac80211 would otherwise pick the HE max (256) by default.
584 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
585 .num_rbds = IWL_NUM_RBDS_22000_HE,
588 const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
589 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
590 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
593 * This device doesn't support receiving BlockAck with a large bitmap
594 * so we need to restrict the size of transmitted aggregation to the
595 * HT size; mac80211 would otherwise pick the HE max (256) by default.
597 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
598 .num_rbds = IWL_NUM_RBDS_22000_HE,
601 const struct iwl_cfg iwl_ax200_cfg_cc = {
602 .fw_name_pre = IWL_CC_A_FW_PRE,
605 * This device doesn't support receiving BlockAck with a large bitmap
606 * so we need to restrict the size of transmitted aggregation to the
607 * HT size; mac80211 would otherwise pick the HE max (256) by default.
609 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
610 .num_rbds = IWL_NUM_RBDS_22000_HE,
613 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
614 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
615 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
618 * This device doesn't support receiving BlockAck with a large bitmap
619 * so we need to restrict the size of transmitted aggregation to the
620 * HT size; mac80211 would otherwise pick the HE max (256) by default.
622 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
623 .num_rbds = IWL_NUM_RBDS_22000_HE,
626 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
627 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
628 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
631 * This device doesn't support receiving BlockAck with a large bitmap
632 * so we need to restrict the size of transmitted aggregation to the
633 * HT size; mac80211 would otherwise pick the HE max (256) by default.
635 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
636 .num_rbds = IWL_NUM_RBDS_22000_HE,
639 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
640 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
641 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
644 * This device doesn't support receiving BlockAck with a large bitmap
645 * so we need to restrict the size of transmitted aggregation to the
646 * HT size; mac80211 would otherwise pick the HE max (256) by default.
648 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
649 .num_rbds = IWL_NUM_RBDS_22000_HE,
652 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
653 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
654 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
657 * This device doesn't support receiving BlockAck with a large bitmap
658 * so we need to restrict the size of transmitted aggregation to the
659 * HT size; mac80211 would otherwise pick the HE max (256) by default.
661 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
662 .num_rbds = IWL_NUM_RBDS_22000_HE,
665 const struct iwl_cfg iwl_qnj_b0_hr_b0_cfg = {
666 .fw_name_pre = IWL_QNJ_B_HR_B_FW_PRE,
669 * This device doesn't support receiving BlockAck with a large bitmap
670 * so we need to restrict the size of transmitted aggregation to the
671 * HT size; mac80211 would otherwise pick the HE max (256) by default.
673 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
674 .num_rbds = IWL_NUM_RBDS_22000_HE,
677 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_b0 = {
678 .name = "Intel(R) Wireless-AC 9560 160MHz",
679 .fw_name_pre = IWL_SO_A_JF_B_FW_PRE,
681 .num_rbds = IWL_NUM_RBDS_NON_HE,
684 const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0 = {
685 .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
686 .fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
688 .num_rbds = IWL_NUM_RBDS_AX210_HE,
691 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
692 .name = iwl_ax211_name,
693 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
694 .uhb_supported = true,
696 .num_rbds = IWL_NUM_RBDS_AX210_HE,
699 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long = {
700 .name = iwl_ax211_name,
701 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
702 .uhb_supported = true,
704 .num_rbds = IWL_NUM_RBDS_AX210_HE,
705 .trans.xtal_latency = 12000,
706 .trans.low_latency_xtal = true,
709 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
710 .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
711 .fw_name_pre = IWL_TY_A_GF_A_FW_PRE,
712 .uhb_supported = true,
714 .num_rbds = IWL_NUM_RBDS_AX210_HE,
717 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
718 .name = iwl_ax411_name,
719 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
720 .uhb_supported = true,
722 .num_rbds = IWL_NUM_RBDS_AX210_HE,
725 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long = {
726 .name = iwl_ax411_name,
727 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
728 .uhb_supported = true,
730 .num_rbds = IWL_NUM_RBDS_AX210_HE,
731 .trans.xtal_latency = 12000,
732 .trans.low_latency_xtal = true,
735 const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
736 .name = iwl_ax411_name,
737 .fw_name_pre = IWL_SNJ_A_GF4_A_FW_PRE,
738 .uhb_supported = true,
740 .num_rbds = IWL_NUM_RBDS_AX210_HE,
743 const struct iwl_cfg iwlax211_cfg_snj_gf_a0 = {
744 .name = iwl_ax211_name,
745 .fw_name_pre = IWL_SNJ_A_GF_A_FW_PRE,
746 .uhb_supported = true,
748 .num_rbds = IWL_NUM_RBDS_AX210_HE,
751 const struct iwl_cfg iwl_cfg_snj_hr_b0 = {
752 .fw_name_pre = IWL_SNJ_A_HR_B_FW_PRE,
753 .uhb_supported = true,
755 .num_rbds = IWL_NUM_RBDS_AX210_HE,
758 const struct iwl_cfg iwl_cfg_snj_a0_jf_b0 = {
759 .fw_name_pre = IWL_SNJ_A_JF_B_FW_PRE,
760 .uhb_supported = true,
762 .num_rbds = IWL_NUM_RBDS_AX210_HE,
765 const struct iwl_cfg iwl_cfg_ma_a0_hr_b0 = {
766 .fw_name_pre = IWL_MA_A_HR_B_FW_PRE,
767 .uhb_supported = true,
769 .num_rbds = IWL_NUM_RBDS_AX210_HE,
772 const struct iwl_cfg iwl_cfg_ma_a0_gf_a0 = {
773 .fw_name_pre = IWL_MA_A_GF_A_FW_PRE,
774 .uhb_supported = true,
776 .num_rbds = IWL_NUM_RBDS_AX210_HE,
779 const struct iwl_cfg iwl_cfg_ma_a0_gf4_a0 = {
780 .fw_name_pre = IWL_MA_A_GF4_A_FW_PRE,
781 .uhb_supported = true,
783 .num_rbds = IWL_NUM_RBDS_AX210_HE,
786 const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
787 .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
788 .uhb_supported = true,
790 .num_rbds = IWL_NUM_RBDS_AX210_HE,
793 const struct iwl_cfg iwl_cfg_ma_a0_fm_a0 = {
794 .fw_name_pre = IWL_MA_A_FM_A_FW_PRE,
795 .uhb_supported = true,
797 .num_rbds = IWL_NUM_RBDS_AX210_HE,
800 const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
801 .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
802 .uhb_supported = true,
804 .num_rbds = IWL_NUM_RBDS_AX210_HE,
807 const struct iwl_cfg iwl_cfg_so_a0_hr_a0 = {
808 .fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
810 .num_rbds = IWL_NUM_RBDS_AX210_HE,
813 const struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = {
814 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
817 * This device doesn't support receiving BlockAck with a large bitmap
818 * so we need to restrict the size of transmitted aggregation to the
819 * HT size; mac80211 would otherwise pick the HE max (256) by default.
821 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
822 .num_rbds = IWL_NUM_RBDS_22000_HE,
825 const struct iwl_cfg iwl_cfg_bz_a0_hr_b0 = {
826 .fw_name_pre = IWL_BZ_A_HR_B_FW_PRE,
827 .uhb_supported = true,
829 .num_rbds = IWL_NUM_RBDS_AX210_HE,
832 const struct iwl_cfg iwl_cfg_bz_a0_gf_a0 = {
833 .fw_name_pre = IWL_BZ_A_GF_A_FW_PRE,
834 .uhb_supported = true,
836 .num_rbds = IWL_NUM_RBDS_AX210_HE,
839 const struct iwl_cfg iwl_cfg_bz_a0_gf4_a0 = {
840 .fw_name_pre = IWL_BZ_A_GF4_A_FW_PRE,
841 .uhb_supported = true,
843 .num_rbds = IWL_NUM_RBDS_AX210_HE,
846 const struct iwl_cfg iwl_cfg_bz_a0_mr_a0 = {
847 .fw_name_pre = IWL_BZ_A_MR_A_FW_PRE,
848 .uhb_supported = true,
850 .num_rbds = IWL_NUM_RBDS_AX210_HE,
853 MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
854 MODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
855 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
856 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
857 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
858 MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
859 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
860 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
861 MODULE_FIRMWARE(IWL_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
862 MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
863 MODULE_FIRMWARE(IWL_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
864 MODULE_FIRMWARE(IWL_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
865 MODULE_FIRMWARE(IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
866 MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
867 MODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
868 MODULE_FIRMWARE(IWL_SNJ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
869 MODULE_FIRMWARE(IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
870 MODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
871 MODULE_FIRMWARE(IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
872 MODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
873 MODULE_FIRMWARE(IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
874 MODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
875 MODULE_FIRMWARE(IWL_BZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
876 MODULE_FIRMWARE(IWL_BZ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
877 MODULE_FIRMWARE(IWL_BZ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
878 MODULE_FIRMWARE(IWL_BZ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));