1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2015-2017 Intel Deutschland GmbH
4 * Copyright (C) 2018-2022 Intel Corporation
6 #include <linux/module.h>
7 #include <linux/stringify.h>
8 #include "iwl-config.h"
10 #include "fw/api/txq.h"
12 /* Highest firmware API version supported */
13 #define IWL_22000_UCODE_API_MAX 78
15 /* Lowest firmware API version supported */
16 #define IWL_22000_UCODE_API_MIN 39
19 #define IWL_22000_NVM_VERSION 0x0a1d
21 /* Memory offsets and lengths */
22 #define IWL_22000_DCCM_OFFSET 0x800000 /* LMAC1 */
23 #define IWL_22000_DCCM_LEN 0x10000 /* LMAC1 */
24 #define IWL_22000_DCCM2_OFFSET 0x880000
25 #define IWL_22000_DCCM2_LEN 0x8000
26 #define IWL_22000_SMEM_OFFSET 0x400000
27 #define IWL_22000_SMEM_LEN 0xD0000
29 #define IWL_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-"
30 #define IWL_QNJ_B_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-"
31 #define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
32 #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
33 #define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
34 #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
35 #define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-"
36 #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
37 #define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"
38 #define IWL_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-"
39 #define IWL_SO_A_HR_B_FW_PRE "iwlwifi-so-a0-hr-b0-"
40 #define IWL_SO_A_GF_A_FW_PRE "iwlwifi-so-a0-gf-a0-"
41 #define IWL_TY_A_GF_A_FW_PRE "iwlwifi-ty-a0-gf-a0-"
42 #define IWL_SO_A_GF4_A_FW_PRE "iwlwifi-so-a0-gf4-a0-"
43 #define IWL_SO_A_MR_A_FW_PRE "iwlwifi-so-a0-mr-a0-"
44 #define IWL_SNJ_A_GF4_A_FW_PRE "iwlwifi-SoSnj-a0-gf4-a0-"
45 #define IWL_SNJ_A_GF_A_FW_PRE "iwlwifi-SoSnj-a0-gf-a0-"
46 #define IWL_SNJ_A_HR_B_FW_PRE "iwlwifi-SoSnj-a0-hr-b0-"
47 #define IWL_SNJ_A_JF_B_FW_PRE "iwlwifi-SoSnj-a0-jf-b0-"
48 #define IWL_MA_A_HR_B_FW_PRE "iwlwifi-ma-a0-hr-b0-"
49 #define IWL_MA_A_GF_A_FW_PRE "iwlwifi-ma-a0-gf-a0-"
50 #define IWL_MA_A_GF4_A_FW_PRE "iwlwifi-ma-a0-gf4-a0-"
51 #define IWL_MA_A_MR_A_FW_PRE "iwlwifi-ma-a0-mr-a0-"
52 #define IWL_MA_A_FM_A_FW_PRE "iwlwifi-ma-a0-fm-a0-"
53 #define IWL_MA_B_HR_B_FW_PRE "iwlwifi-ma-b0-hr-b0-"
54 #define IWL_MA_B_GF_A_FW_PRE "iwlwifi-ma-b0-gf-a0-"
55 #define IWL_MA_B_GF4_A_FW_PRE "iwlwifi-ma-b0-gf4-a0-"
56 #define IWL_MA_B_MR_A_FW_PRE "iwlwifi-ma-b0-mr-a0-"
57 #define IWL_MA_B_FM_A_FW_PRE "iwlwifi-ma-b0-fm-a0-"
58 #define IWL_SNJ_A_MR_A_FW_PRE "iwlwifi-SoSnj-a0-mr-a0-"
59 #define IWL_BZ_A_HR_A_FW_PRE "iwlwifi-bz-a0-hr-b0-"
60 #define IWL_BZ_A_HR_B_FW_PRE "iwlwifi-bz-a0-hr-b0-"
61 #define IWL_BZ_A_GF_A_FW_PRE "iwlwifi-bz-a0-gf-a0-"
62 #define IWL_BZ_A_GF4_A_FW_PRE "iwlwifi-bz-a0-gf4-a0-"
63 #define IWL_BZ_A_MR_A_FW_PRE "iwlwifi-bz-a0-mr-a0-"
64 #define IWL_BZ_A_FM_A_FW_PRE "iwlwifi-bz-a0-fm-a0-"
65 #define IWL_BZ_A_FM4_A_FW_PRE "iwlwifi-bz-a0-fm4-a0-"
66 #define IWL_BZ_A_FM_B_FW_PRE "iwlwifi-bz-a0-fm-b0-"
67 #define IWL_BZ_A_FM4_B_FW_PRE "iwlwifi-bz-a0-fm4-b0-"
68 #define IWL_GL_A_FM_A_FW_PRE "iwlwifi-gl-a0-fm-a0-"
69 #define IWL_GL_B_FM_B_FW_PRE "iwlwifi-gl-b0-fm-b0-"
70 #define IWL_BZ_Z_GF_A_FW_PRE "iwlwifi-bz-z0-gf-a0-"
71 #define IWL_BNJ_A_FM_A_FW_PRE "iwlwifi-BzBnj-a0-fm-a0-"
72 #define IWL_BNJ_A_FM4_A_FW_PRE "iwlwifi-BzBnj-a0-fm4-a0-"
73 #define IWL_BNJ_B_FM4_B_FW_PRE "iwlwifi-BzBnj-b0-fm4-b0-"
74 #define IWL_BNJ_A_GF_A_FW_PRE "iwlwifi-BzBnj-a0-gf-a0-"
75 #define IWL_BNJ_B_GF_A_FW_PRE "iwlwifi-BzBnj-b0-gf-a0-"
76 #define IWL_BNJ_A_GF4_A_FW_PRE "iwlwifi-BzBnj-a0-gf4-a0-"
77 #define IWL_BNJ_B_GF4_A_FW_PRE "iwlwifi-BzBnj-b0-gf4-a0-"
78 #define IWL_BNJ_A_HR_A_FW_PRE "iwlwifi-BzBnj-a0-hr-b0-"
79 #define IWL_BNJ_A_HR_B_FW_PRE "iwlwifi-BzBnj-a0-hr-b0-"
80 #define IWL_BNJ_B_HR_A_FW_PRE "iwlwifi-BzBnj-b0-hr-b0-"
81 #define IWL_BNJ_B_HR_B_FW_PRE "iwlwifi-BzBnj-b0-hr-b0-"
82 #define IWL_BNJ_B_FM_B_FW_PRE "iwlwifi-BzBnj-b0-fm-b0-"
85 #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
86 IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
87 #define IWL_QNJ_B_HR_B_MODULE_FIRMWARE(api) \
88 IWL_QNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
89 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
90 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
91 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
92 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
93 #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
94 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
95 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
96 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
97 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
98 IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
99 #define IWL_CC_A_MODULE_FIRMWARE(api) \
100 IWL_CC_A_FW_PRE __stringify(api) ".ucode"
101 #define IWL_SO_A_JF_B_MODULE_FIRMWARE(api) \
102 IWL_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
103 #define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
104 IWL_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
105 #define IWL_SO_A_GF_A_MODULE_FIRMWARE(api) \
106 IWL_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
107 #define IWL_TY_A_GF_A_MODULE_FIRMWARE(api) \
108 IWL_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
109 #define IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(api) \
110 IWL_SNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
111 #define IWL_SNJ_A_GF_A_MODULE_FIRMWARE(api) \
112 IWL_SNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
113 #define IWL_SNJ_A_HR_B_MODULE_FIRMWARE(api) \
114 IWL_SNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
115 #define IWL_SNJ_A_JF_B_MODULE_FIRMWARE(api) \
116 IWL_SNJ_A_JF_B_FW_PRE __stringify(api) ".ucode"
117 #define IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(api) \
118 IWL_MA_A_HR_B_FW_PRE __stringify(api) ".ucode"
119 #define IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(api) \
120 IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
121 #define IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(api) \
122 IWL_MA_A_GF4_A_FW_PRE __stringify(api) ".ucode"
123 #define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
124 IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
125 #define IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(api) \
126 IWL_MA_A_FM_A_FW_PRE __stringify(api) ".ucode"
127 #define IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(api) \
128 IWL_MA_B_HR_B_FW_PRE __stringify(api) ".ucode"
129 #define IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(api) \
130 IWL_MA_B_GF_A_FW_PRE __stringify(api) ".ucode"
131 #define IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(api) \
132 IWL_MA_B_GF4_A_FW_PRE __stringify(api) ".ucode"
133 #define IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(api) \
134 IWL_MA_B_MR_A_FW_PRE __stringify(api) ".ucode"
135 #define IWL_MA_B_FM_A_FW_MODULE_FIRMWARE(api) \
136 IWL_MA_B_FM_A_FW_PRE __stringify(api) ".ucode"
137 #define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
138 IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
139 #define IWL_BZ_A_HR_A_MODULE_FIRMWARE(api) \
140 IWL_BZ_A_HR_A_FW_PRE __stringify(api) ".ucode"
141 #define IWL_BZ_A_HR_B_MODULE_FIRMWARE(api) \
142 IWL_BZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
143 #define IWL_BZ_A_GF_A_MODULE_FIRMWARE(api) \
144 IWL_BZ_A_GF_A_FW_PRE __stringify(api) ".ucode"
145 #define IWL_BZ_A_GF4_A_MODULE_FIRMWARE(api) \
146 IWL_BZ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
147 #define IWL_BZ_A_MR_A_MODULE_FIRMWARE(api) \
148 IWL_BZ_A_MR_A_FW_PRE __stringify(api) ".ucode"
149 #define IWL_BZ_A_FM_A_MODULE_FIRMWARE(api) \
150 IWL_BZ_A_FM_A_FW_PRE __stringify(api) ".ucode"
151 #define IWL_BZ_A_FM4_A_MODULE_FIRMWARE(api) \
152 IWL_BZ_A_FM4_A_FW_PRE __stringify(api) ".ucode"
153 #define IWL_BZ_A_FM_B_MODULE_FIRMWARE(api) \
154 IWL_BZ_A_FM_B_FW_PRE __stringify(api) ".ucode"
155 #define IWL_BZ_A_FM4_B_MODULE_FIRMWARE(api) \
156 IWL_BZ_A_FM4_B_FW_PRE __stringify(api) ".ucode"
157 #define IWL_GL_A_FM_A_MODULE_FIRMWARE(api) \
158 IWL_GL_A_FM_A_FW_PRE __stringify(api) ".ucode"
159 #define IWL_GL_B_FM_B_MODULE_FIRMWARE(api) \
160 IWL_GL_B_FM_B_FW_PRE __stringify(api) ".ucode"
161 #define IWL_BNJ_A_FM_A_MODULE_FIRMWARE(api) \
162 IWL_BNJ_A_FM_A_FW_PRE __stringify(api) ".ucode"
163 #define IWL_BNJ_A_FM4_A_MODULE_FIRMWARE(api) \
164 IWL_BNJ_A_FM4_A_FW_PRE __stringify(api) ".ucode"
165 #define IWL_BNJ_B_FM4_B_MODULE_FIRMWARE(api) \
166 IWL_BNJ_B_FM4_B_FW_PRE __stringify(api) ".ucode"
167 #define IWL_BNJ_A_GF_A_MODULE_FIRMWARE(api) \
168 IWL_BNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
169 #define IWL_BNJ_B_GF_A_MODULE_FIRMWARE(api) \
170 IWL_BNJ_B_GF_A_FW_PRE __stringify(api) ".ucode"
171 #define IWL_BNJ_A_GF4_A_MODULE_FIRMWARE(api) \
172 IWL_BNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
173 #define IWL_BNJ_B_GF4_A_MODULE_FIRMWARE(api) \
174 IWL_BNJ_B_GF4_A_FW_PRE __stringify(api) ".ucode"
175 #define IWL_BNJ_A_HR_A_MODULE_FIRMWARE(api) \
176 IWL_BNJ_A_HR_A_FW_PRE __stringify(api) ".ucode"
177 #define IWL_BNJ_A_HR_B_MODULE_FIRMWARE(api) \
178 IWL_BNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
179 #define IWL_BNJ_B_HR_A_MODULE_FIRMWARE(api) \
180 IWL_BNJ_B_HR_A_FW_PRE __stringify(api) ".ucode"
181 #define IWL_BNJ_B_HR_B_MODULE_FIRMWARE(api) \
182 IWL_BNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
183 #define IWL_BNJ_B_FM_B_MODULE_FIRMWARE(api) \
184 IWL_BNJ_B_FM_B_FW_PRE __stringify(api) ".ucode"
186 static const struct iwl_base_params iwl_22000_base_params = {
187 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
188 .num_of_queues = 512,
189 .max_tfd_queue_size = 256,
190 .shadow_ram_support = true,
191 .led_compensation = 57,
192 .wd_timeout = IWL_LONG_WD_TIMEOUT,
193 .max_event_log_size = 512,
194 .shadow_reg_enable = true,
195 .pcie_l1_allowed = true,
198 static const struct iwl_base_params iwl_ax210_base_params = {
199 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
200 .num_of_queues = 512,
201 .max_tfd_queue_size = 65536,
202 .shadow_ram_support = true,
203 .led_compensation = 57,
204 .wd_timeout = IWL_LONG_WD_TIMEOUT,
205 .max_event_log_size = 512,
206 .shadow_reg_enable = true,
207 .pcie_l1_allowed = true,
210 static const struct iwl_ht_params iwl_22000_ht_params = {
213 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
214 BIT(NL80211_BAND_6GHZ),
217 static const struct iwl_ht_params iwl_gl_a_ht_params = {
218 .stbc = false, /* we explicitly disable STBC for GL step A */
220 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
221 BIT(NL80211_BAND_6GHZ),
224 #define IWL_DEVICE_22000_COMMON \
225 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
226 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
227 .led_mode = IWL_LED_RF_STATE, \
228 .nvm_hw_section_num = 10, \
229 .non_shared_ant = ANT_B, \
230 .dccm_offset = IWL_22000_DCCM_OFFSET, \
231 .dccm_len = IWL_22000_DCCM_LEN, \
232 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
233 .dccm2_len = IWL_22000_DCCM2_LEN, \
234 .smem_offset = IWL_22000_SMEM_OFFSET, \
235 .smem_len = IWL_22000_SMEM_LEN, \
236 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
237 .apmg_not_supported = true, \
238 .trans.mq_rx_supported = true, \
239 .vht_mu_mimo_supported = true, \
240 .mac_addr_from_csr = 0x380, \
241 .ht_params = &iwl_22000_ht_params, \
242 .nvm_ver = IWL_22000_NVM_VERSION, \
243 .trans.use_tfh = true, \
244 .trans.rf_id = true, \
245 .trans.gen2 = true, \
246 .nvm_type = IWL_NVM_EXT, \
247 .dbgc_supported = true, \
248 .min_umac_error_event_table = 0x400000, \
249 .d3_debug_data_base_addr = 0x401000, \
250 .d3_debug_data_length = 60 * 1024, \
253 .addr = LDBG_M2S_BUF_WPTR, \
254 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
257 .addr = LDBG_M2S_BUF_WRAP_CNT, \
258 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
262 #define IWL_DEVICE_22500 \
263 IWL_DEVICE_22000_COMMON, \
264 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
265 .trans.base_params = &iwl_22000_base_params, \
266 .gp2_reg_addr = 0xa02c68, \
269 .addr = MON_BUFF_WRPTR_VER2, \
270 .mask = 0xffffffff, \
273 .addr = MON_BUFF_CYCLE_CNT_VER2, \
274 .mask = 0xffffffff, \
278 #define IWL_DEVICE_AX210 \
279 IWL_DEVICE_22000_COMMON, \
280 .trans.umac_prph_offset = 0x300000, \
281 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
282 .trans.base_params = &iwl_ax210_base_params, \
283 .min_txq_size = 128, \
284 .gp2_reg_addr = 0xd02c68, \
285 .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_HE, \
288 .addr = DBGC_CUR_DBGBUF_STATUS, \
289 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
292 .addr = DBGC_DBGBUF_WRAP_AROUND, \
293 .mask = 0xffffffff, \
296 .addr = DBGC_CUR_DBGBUF_STATUS, \
297 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
301 #define IWL_DEVICE_BZ_COMMON \
302 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
303 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
304 .led_mode = IWL_LED_RF_STATE, \
305 .nvm_hw_section_num = 10, \
306 .non_shared_ant = ANT_B, \
307 .dccm_offset = IWL_22000_DCCM_OFFSET, \
308 .dccm_len = IWL_22000_DCCM_LEN, \
309 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
310 .dccm2_len = IWL_22000_DCCM2_LEN, \
311 .smem_offset = IWL_22000_SMEM_OFFSET, \
312 .smem_len = IWL_22000_SMEM_LEN, \
313 .apmg_not_supported = true, \
314 .trans.mq_rx_supported = true, \
315 .vht_mu_mimo_supported = true, \
316 .mac_addr_from_csr = 0x30, \
317 .nvm_ver = IWL_22000_NVM_VERSION, \
318 .trans.use_tfh = true, \
319 .trans.rf_id = true, \
320 .trans.gen2 = true, \
321 .nvm_type = IWL_NVM_EXT, \
322 .dbgc_supported = true, \
323 .min_umac_error_event_table = 0xD0000, \
324 .d3_debug_data_base_addr = 0x401000, \
325 .d3_debug_data_length = 60 * 1024, \
328 .addr = LDBG_M2S_BUF_WPTR, \
329 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
332 .addr = LDBG_M2S_BUF_WRAP_CNT, \
333 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
336 .trans.umac_prph_offset = 0x300000, \
337 .trans.device_family = IWL_DEVICE_FAMILY_BZ, \
338 .trans.base_params = &iwl_ax210_base_params, \
339 .min_txq_size = 128, \
340 .gp2_reg_addr = 0xd02c68, \
341 .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_EHT, \
344 .addr = DBGC_CUR_DBGBUF_STATUS, \
345 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
348 .addr = DBGC_DBGBUF_WRAP_AROUND, \
349 .mask = 0xffffffff, \
352 .addr = DBGC_CUR_DBGBUF_STATUS, \
353 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
358 .addr = DBGI_SRAM_FIFO_POINTERS, \
359 .mask = DBGI_SRAM_FIFO_POINTERS_WR_PTR_MSK, \
363 #define IWL_DEVICE_BZ \
364 IWL_DEVICE_BZ_COMMON, \
365 .ht_params = &iwl_22000_ht_params
367 #define IWL_DEVICE_GL_A \
368 IWL_DEVICE_BZ_COMMON, \
369 .ht_params = &iwl_gl_a_ht_params
371 const struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
372 .mq_rx_supported = true,
376 .device_family = IWL_DEVICE_FAMILY_22000,
377 .base_params = &iwl_22000_base_params,
380 const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
381 .mq_rx_supported = true,
385 .device_family = IWL_DEVICE_FAMILY_22000,
386 .base_params = &iwl_22000_base_params,
389 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
392 const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
393 .mq_rx_supported = true,
397 .device_family = IWL_DEVICE_FAMILY_22000,
398 .base_params = &iwl_22000_base_params,
400 .xtal_latency = 1820,
401 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
404 const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
405 .mq_rx_supported = true,
409 .device_family = IWL_DEVICE_FAMILY_22000,
410 .base_params = &iwl_22000_base_params,
412 .xtal_latency = 12000,
413 .low_latency_xtal = true,
414 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
417 const struct iwl_cfg_trans_params iwl_snj_trans_cfg = {
418 .mq_rx_supported = true,
422 .device_family = IWL_DEVICE_FAMILY_AX210,
423 .base_params = &iwl_ax210_base_params,
424 .umac_prph_offset = 0x300000,
427 const struct iwl_cfg_trans_params iwl_so_trans_cfg = {
428 .mq_rx_supported = true,
432 .device_family = IWL_DEVICE_FAMILY_AX210,
433 .base_params = &iwl_ax210_base_params,
434 .umac_prph_offset = 0x300000,
436 /* TODO: the following values need to be checked */
438 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
441 const struct iwl_cfg_trans_params iwl_so_long_latency_trans_cfg = {
442 .mq_rx_supported = true,
446 .device_family = IWL_DEVICE_FAMILY_AX210,
447 .base_params = &iwl_ax210_base_params,
448 .umac_prph_offset = 0x300000,
450 .low_latency_xtal = true,
451 .xtal_latency = 12000,
452 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
455 const struct iwl_cfg_trans_params iwl_so_long_latency_imr_trans_cfg = {
456 .mq_rx_supported = true,
460 .device_family = IWL_DEVICE_FAMILY_AX210,
461 .base_params = &iwl_ax210_base_params,
462 .umac_prph_offset = 0x300000,
464 .low_latency_xtal = true,
465 .xtal_latency = 12000,
466 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
471 * If the device doesn't support HE, no need to have that many buffers.
472 * 22000 devices can split multiple frames into a single RB, so fewer are
473 * needed; AX210 cannot (but use smaller RBs by default) - these sizes
474 * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
475 * additional overhead to account for processing time.
477 #define IWL_NUM_RBDS_NON_HE 512
478 #define IWL_NUM_RBDS_22000_HE 2048
479 #define IWL_NUM_RBDS_AX210_HE 4096
482 * All JF radio modules are part of the 9000 series, but the MAC part
483 * looks more like 22000. That's why this device is here, but called
486 const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
487 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
489 .num_rbds = IWL_NUM_RBDS_NON_HE,
492 const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
493 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
495 .num_rbds = IWL_NUM_RBDS_NON_HE,
498 const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
499 .fw_name_pre = IWL_QUZ_A_JF_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_NON_HE,
510 const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
511 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
514 * This device doesn't support receiving BlockAck with a large bitmap
515 * so we need to restrict the size of transmitted aggregation to the
516 * HT size; mac80211 would otherwise pick the HE max (256) by default.
518 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
519 .num_rbds = IWL_NUM_RBDS_NON_HE,
522 const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
523 .device_family = IWL_DEVICE_FAMILY_22000,
524 .base_params = &iwl_22000_base_params,
525 .mq_rx_supported = true,
529 .bisr_workaround = 1,
532 const struct iwl_cfg_trans_params iwl_ma_trans_cfg = {
533 .device_family = IWL_DEVICE_FAMILY_AX210,
534 .base_params = &iwl_ax210_base_params,
535 .mq_rx_supported = true,
540 .umac_prph_offset = 0x300000
543 const struct iwl_cfg_trans_params iwl_bz_trans_cfg = {
544 .device_family = IWL_DEVICE_FAMILY_BZ,
545 .base_params = &iwl_ax210_base_params,
546 .mq_rx_supported = true,
551 .umac_prph_offset = 0x300000,
552 .xtal_latency = 12000,
553 .low_latency_xtal = true,
554 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
557 const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
558 const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
559 const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
560 const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
561 const char iwl_ax204_name[] = "Intel(R) Wi-Fi 6 AX204 160MHz";
562 const char iwl_ax211_name[] = "Intel(R) Wi-Fi 6E AX211 160MHz";
563 const char iwl_ax221_name[] = "Intel(R) Wi-Fi 6E AX221 160MHz";
564 const char iwl_ax231_name[] = "Intel(R) Wi-Fi 6E AX231 160MHz";
565 const char iwl_ax411_name[] = "Intel(R) Wi-Fi 6E AX411 160MHz";
566 const char iwl_bz_name[] = "Intel(R) TBD Bz device";
568 const char iwl_ax200_killer_1650w_name[] =
569 "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
570 const char iwl_ax200_killer_1650x_name[] =
571 "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
572 const char iwl_ax201_killer_1650s_name[] =
573 "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
574 const char iwl_ax201_killer_1650i_name[] =
575 "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
576 const char iwl_ax210_killer_1675w_name[] =
577 "Killer(R) Wi-Fi 6E AX1675w 160MHz Wireless Network Adapter (210D2W)";
578 const char iwl_ax210_killer_1675x_name[] =
579 "Killer(R) Wi-Fi 6E AX1675x 160MHz Wireless Network Adapter (210NGW)";
580 const char iwl_ax211_killer_1675s_name[] =
581 "Killer(R) Wi-Fi 6E AX1675s 160MHz Wireless Network Adapter (211NGW)";
582 const char iwl_ax211_killer_1675i_name[] =
583 "Killer(R) Wi-Fi 6E AX1675i 160MHz Wireless Network Adapter (211NGW)";
584 const char iwl_ax411_killer_1690s_name[] =
585 "Killer(R) Wi-Fi 6E AX1690s 160MHz Wireless Network Adapter (411D2W)";
586 const char iwl_ax411_killer_1690i_name[] =
587 "Killer(R) Wi-Fi 6E AX1690i 160MHz Wireless Network Adapter (411NGW)";
589 const struct iwl_cfg iwl_qu_b0_hr1_b0 = {
590 .fw_name_pre = IWL_QU_B_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 .tx_with_siso_diversity = true,
599 .num_rbds = IWL_NUM_RBDS_22000_HE,
602 const struct iwl_cfg iwl_qu_b0_hr_b0 = {
603 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
606 * This device doesn't support receiving BlockAck with a large bitmap
607 * so we need to restrict the size of transmitted aggregation to the
608 * HT size; mac80211 would otherwise pick the HE max (256) by default.
610 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
611 .num_rbds = IWL_NUM_RBDS_22000_HE,
614 const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
615 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
616 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
619 * This device doesn't support receiving BlockAck with a large bitmap
620 * so we need to restrict the size of transmitted aggregation to the
621 * HT size; mac80211 would otherwise pick the HE max (256) by default.
623 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
624 .num_rbds = IWL_NUM_RBDS_22000_HE,
627 const struct iwl_cfg iwl_qu_c0_hr1_b0 = {
628 .fw_name_pre = IWL_QU_C_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 .tx_with_siso_diversity = true,
637 .num_rbds = IWL_NUM_RBDS_22000_HE,
640 const struct iwl_cfg iwl_qu_c0_hr_b0 = {
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 iwl_ax201_cfg_qu_c0_hr_b0 = {
653 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
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_quz_a0_hr1_b0 = {
666 .fw_name_pre = IWL_QUZ_A_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 .tx_with_siso_diversity = true,
675 .num_rbds = IWL_NUM_RBDS_22000_HE,
678 const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
679 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
680 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
683 * This device doesn't support receiving BlockAck with a large bitmap
684 * so we need to restrict the size of transmitted aggregation to the
685 * HT size; mac80211 would otherwise pick the HE max (256) by default.
687 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
688 .num_rbds = IWL_NUM_RBDS_22000_HE,
691 const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
692 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
693 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
696 * This device doesn't support receiving BlockAck with a large bitmap
697 * so we need to restrict the size of transmitted aggregation to the
698 * HT size; mac80211 would otherwise pick the HE max (256) by default.
700 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
701 .num_rbds = IWL_NUM_RBDS_22000_HE,
704 const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
705 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
706 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
709 * This device doesn't support receiving BlockAck with a large bitmap
710 * so we need to restrict the size of transmitted aggregation to the
711 * HT size; mac80211 would otherwise pick the HE max (256) by default.
713 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
714 .num_rbds = IWL_NUM_RBDS_22000_HE,
717 const struct iwl_cfg iwl_ax200_cfg_cc = {
718 .fw_name_pre = IWL_CC_A_FW_PRE,
721 * This device doesn't support receiving BlockAck with a large bitmap
722 * so we need to restrict the size of transmitted aggregation to the
723 * HT size; mac80211 would otherwise pick the HE max (256) by default.
725 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
726 .num_rbds = IWL_NUM_RBDS_22000_HE,
729 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
730 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
731 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
734 * This device doesn't support receiving BlockAck with a large bitmap
735 * so we need to restrict the size of transmitted aggregation to the
736 * HT size; mac80211 would otherwise pick the HE max (256) by default.
738 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
739 .num_rbds = IWL_NUM_RBDS_22000_HE,
742 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
743 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
744 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
747 * This device doesn't support receiving BlockAck with a large bitmap
748 * so we need to restrict the size of transmitted aggregation to the
749 * HT size; mac80211 would otherwise pick the HE max (256) by default.
751 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
752 .num_rbds = IWL_NUM_RBDS_22000_HE,
755 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
756 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
757 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
760 * This device doesn't support receiving BlockAck with a large bitmap
761 * so we need to restrict the size of transmitted aggregation to the
762 * HT size; mac80211 would otherwise pick the HE max (256) by default.
764 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
765 .num_rbds = IWL_NUM_RBDS_22000_HE,
768 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
769 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
770 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
773 * This device doesn't support receiving BlockAck with a large bitmap
774 * so we need to restrict the size of transmitted aggregation to the
775 * HT size; mac80211 would otherwise pick the HE max (256) by default.
777 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
778 .num_rbds = IWL_NUM_RBDS_22000_HE,
781 const struct iwl_cfg iwl_qnj_b0_hr_b0_cfg = {
782 .fw_name_pre = IWL_QNJ_B_HR_B_FW_PRE,
785 * This device doesn't support receiving BlockAck with a large bitmap
786 * so we need to restrict the size of transmitted aggregation to the
787 * HT size; mac80211 would otherwise pick the HE max (256) by default.
789 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
790 .num_rbds = IWL_NUM_RBDS_22000_HE,
793 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_b0 = {
794 .name = "Intel(R) Wireless-AC 9560 160MHz",
795 .fw_name_pre = IWL_SO_A_JF_B_FW_PRE,
797 .num_rbds = IWL_NUM_RBDS_NON_HE,
800 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
801 .name = iwl_ax211_name,
802 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
803 .uhb_supported = true,
805 .num_rbds = IWL_NUM_RBDS_AX210_HE,
808 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long = {
809 .name = iwl_ax211_name,
810 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
811 .uhb_supported = true,
813 .num_rbds = IWL_NUM_RBDS_AX210_HE,
814 .trans.xtal_latency = 12000,
815 .trans.low_latency_xtal = true,
818 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
819 .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
820 .fw_name_pre = IWL_TY_A_GF_A_FW_PRE,
821 .uhb_supported = true,
823 .num_rbds = IWL_NUM_RBDS_AX210_HE,
826 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
827 .name = iwl_ax411_name,
828 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
829 .uhb_supported = true,
831 .num_rbds = IWL_NUM_RBDS_AX210_HE,
834 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long = {
835 .name = iwl_ax411_name,
836 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
837 .uhb_supported = true,
839 .num_rbds = IWL_NUM_RBDS_AX210_HE,
840 .trans.xtal_latency = 12000,
841 .trans.low_latency_xtal = true,
844 const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
845 .name = iwl_ax411_name,
846 .fw_name_pre = IWL_SNJ_A_GF4_A_FW_PRE,
847 .uhb_supported = true,
849 .num_rbds = IWL_NUM_RBDS_AX210_HE,
852 const struct iwl_cfg iwlax211_cfg_snj_gf_a0 = {
853 .name = iwl_ax211_name,
854 .fw_name_pre = IWL_SNJ_A_GF_A_FW_PRE,
855 .uhb_supported = true,
857 .num_rbds = IWL_NUM_RBDS_AX210_HE,
860 const struct iwl_cfg iwl_cfg_snj_hr_b0 = {
861 .fw_name_pre = IWL_SNJ_A_HR_B_FW_PRE,
862 .uhb_supported = true,
864 .num_rbds = IWL_NUM_RBDS_AX210_HE,
867 const struct iwl_cfg iwl_cfg_snj_a0_jf_b0 = {
868 .fw_name_pre = IWL_SNJ_A_JF_B_FW_PRE,
869 .uhb_supported = true,
871 .num_rbds = IWL_NUM_RBDS_AX210_HE,
874 const struct iwl_cfg iwl_cfg_ma_a0_hr_b0 = {
875 .fw_name_pre = IWL_MA_A_HR_B_FW_PRE,
876 .uhb_supported = true,
878 .num_rbds = IWL_NUM_RBDS_AX210_HE,
881 const struct iwl_cfg iwl_cfg_ma_a0_gf_a0 = {
882 .fw_name_pre = IWL_MA_A_GF_A_FW_PRE,
883 .uhb_supported = true,
885 .num_rbds = IWL_NUM_RBDS_AX210_HE,
888 const struct iwl_cfg iwl_cfg_ma_a0_gf4_a0 = {
889 .fw_name_pre = IWL_MA_A_GF4_A_FW_PRE,
890 .uhb_supported = true,
892 .num_rbds = IWL_NUM_RBDS_AX210_HE,
895 const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
896 .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
897 .uhb_supported = true,
899 .num_rbds = IWL_NUM_RBDS_AX210_HE,
902 const struct iwl_cfg iwl_cfg_ma_a0_ms_a0 = {
903 .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
904 .uhb_supported = false,
906 .num_rbds = IWL_NUM_RBDS_AX210_HE,
909 const struct iwl_cfg iwl_cfg_ma_b0_fm_a0 = {
910 .fw_name_pre = IWL_MA_B_FM_A_FW_PRE,
911 .uhb_supported = true,
913 .num_rbds = IWL_NUM_RBDS_AX210_HE,
916 const struct iwl_cfg iwl_cfg_ma_b0_hr_b0 = {
917 .fw_name_pre = IWL_MA_B_HR_B_FW_PRE,
918 .uhb_supported = true,
920 .num_rbds = IWL_NUM_RBDS_AX210_HE,
923 const struct iwl_cfg iwl_cfg_ma_b0_gf_a0 = {
924 .fw_name_pre = IWL_MA_B_GF_A_FW_PRE,
925 .uhb_supported = true,
927 .num_rbds = IWL_NUM_RBDS_AX210_HE,
930 const struct iwl_cfg iwl_cfg_ma_b0_gf4_a0 = {
931 .fw_name_pre = IWL_MA_B_GF4_A_FW_PRE,
932 .uhb_supported = true,
934 .num_rbds = IWL_NUM_RBDS_AX210_HE,
937 const struct iwl_cfg iwl_cfg_ma_b0_mr_a0 = {
938 .fw_name_pre = IWL_MA_B_MR_A_FW_PRE,
939 .uhb_supported = true,
941 .num_rbds = IWL_NUM_RBDS_AX210_HE,
944 const struct iwl_cfg iwl_cfg_so_a0_ms_a0 = {
945 .fw_name_pre = IWL_SO_A_MR_A_FW_PRE,
946 .uhb_supported = false,
948 .num_rbds = IWL_NUM_RBDS_AX210_HE,
951 const struct iwl_cfg iwl_cfg_ma_a0_fm_a0 = {
952 .fw_name_pre = IWL_MA_A_FM_A_FW_PRE,
953 .uhb_supported = true,
955 .num_rbds = IWL_NUM_RBDS_AX210_HE,
958 const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
959 .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
960 .uhb_supported = true,
962 .num_rbds = IWL_NUM_RBDS_AX210_HE,
965 const struct iwl_cfg iwl_cfg_snj_a0_ms_a0 = {
966 .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
967 .uhb_supported = false,
969 .num_rbds = IWL_NUM_RBDS_AX210_HE,
972 const struct iwl_cfg iwl_cfg_so_a0_hr_a0 = {
973 .fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
975 .num_rbds = IWL_NUM_RBDS_AX210_HE,
978 const struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = {
979 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
982 * This device doesn't support receiving BlockAck with a large bitmap
983 * so we need to restrict the size of transmitted aggregation to the
984 * HT size; mac80211 would otherwise pick the HE max (256) by default.
986 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
987 .num_rbds = IWL_NUM_RBDS_22000_HE,
990 const struct iwl_cfg iwl_cfg_bz_a0_hr_a0 = {
991 .fw_name_pre = IWL_BZ_A_HR_A_FW_PRE,
992 .uhb_supported = true,
994 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
995 .num_rbds = IWL_NUM_RBDS_AX210_HE,
998 const struct iwl_cfg iwl_cfg_bz_a0_hr_b0 = {
999 .fw_name_pre = IWL_BZ_A_HR_B_FW_PRE,
1000 .uhb_supported = true,
1002 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1003 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1006 const struct iwl_cfg iwl_cfg_bz_a0_gf_a0 = {
1007 .fw_name_pre = IWL_BZ_A_GF_A_FW_PRE,
1008 .uhb_supported = true,
1010 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1011 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1014 const struct iwl_cfg iwl_cfg_bz_a0_gf4_a0 = {
1015 .fw_name_pre = IWL_BZ_A_GF4_A_FW_PRE,
1016 .uhb_supported = true,
1018 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1019 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1022 const struct iwl_cfg iwl_cfg_bz_a0_mr_a0 = {
1023 .fw_name_pre = IWL_BZ_A_MR_A_FW_PRE,
1024 .uhb_supported = true,
1026 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1027 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1030 const struct iwl_cfg iwl_cfg_bz_a0_fm_a0 = {
1031 .fw_name_pre = IWL_BZ_A_FM_A_FW_PRE,
1032 .uhb_supported = true,
1034 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1035 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1038 const struct iwl_cfg iwl_cfg_bz_a0_fm4_a0 = {
1039 .fw_name_pre = IWL_BZ_A_FM4_A_FW_PRE,
1040 .uhb_supported = true,
1042 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1043 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1046 const struct iwl_cfg iwl_cfg_bz_a0_fm_b0 = {
1047 .fw_name_pre = IWL_BZ_A_FM_B_FW_PRE,
1048 .uhb_supported = true,
1050 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1051 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1054 const struct iwl_cfg iwl_cfg_bz_a0_fm4_b0 = {
1055 .fw_name_pre = IWL_BZ_A_FM4_B_FW_PRE,
1056 .uhb_supported = true,
1058 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1059 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1062 const struct iwl_cfg iwl_cfg_gl_a0_fm_a0 = {
1063 .fw_name_pre = IWL_GL_A_FM_A_FW_PRE,
1064 .uhb_supported = true,
1066 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1067 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1070 const struct iwl_cfg iwl_cfg_gl_b0_fm_b0 = {
1071 .fw_name_pre = IWL_GL_B_FM_B_FW_PRE,
1072 .uhb_supported = true,
1074 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1075 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1078 const struct iwl_cfg iwl_cfg_bz_z0_gf_a0 = {
1079 .fw_name_pre = IWL_BZ_Z_GF_A_FW_PRE,
1080 .uhb_supported = true,
1082 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1083 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1086 const struct iwl_cfg iwl_cfg_bnj_a0_fm_a0 = {
1087 .fw_name_pre = IWL_BNJ_A_FM_A_FW_PRE,
1088 .uhb_supported = true,
1090 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1091 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1094 const struct iwl_cfg iwl_cfg_bnj_a0_fm4_a0 = {
1095 .fw_name_pre = IWL_BNJ_A_FM4_A_FW_PRE,
1096 .uhb_supported = true,
1098 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1099 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1102 const struct iwl_cfg iwl_cfg_bnj_b0_fm4_b0 = {
1103 .fw_name_pre = IWL_BNJ_B_FM4_B_FW_PRE,
1104 .uhb_supported = true,
1106 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1107 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1110 const struct iwl_cfg iwl_cfg_bnj_a0_gf_a0 = {
1111 .fw_name_pre = IWL_BNJ_A_GF_A_FW_PRE,
1112 .uhb_supported = true,
1114 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1115 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1118 const struct iwl_cfg iwl_cfg_bnj_b0_gf_a0 = {
1119 .fw_name_pre = IWL_BNJ_B_GF_A_FW_PRE,
1120 .uhb_supported = true,
1122 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1123 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1126 const struct iwl_cfg iwl_cfg_bnj_a0_gf4_a0 = {
1127 .fw_name_pre = IWL_BNJ_A_GF4_A_FW_PRE,
1128 .uhb_supported = true,
1130 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1131 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1134 const struct iwl_cfg iwl_cfg_bnj_b0_gf4_a0 = {
1135 .fw_name_pre = IWL_BNJ_B_GF4_A_FW_PRE,
1136 .uhb_supported = true,
1138 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1139 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1142 const struct iwl_cfg iwl_cfg_bnj_a0_hr_a0 = {
1143 .fw_name_pre = IWL_BNJ_A_HR_A_FW_PRE,
1144 .uhb_supported = true,
1146 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1147 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1150 const struct iwl_cfg iwl_cfg_bnj_a0_hr_b0 = {
1151 .fw_name_pre = IWL_BNJ_A_HR_B_FW_PRE,
1152 .uhb_supported = true,
1154 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1155 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1158 const struct iwl_cfg iwl_cfg_bnj_b0_hr_a0 = {
1159 .fw_name_pre = IWL_BNJ_B_HR_A_FW_PRE,
1160 .uhb_supported = true,
1162 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1163 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1166 const struct iwl_cfg iwl_cfg_bnj_b0_hr_b0 = {
1167 .fw_name_pre = IWL_BNJ_B_HR_B_FW_PRE,
1168 .uhb_supported = true,
1170 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1171 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1174 const struct iwl_cfg iwl_cfg_bnj_b0_fm_b0 = {
1175 .fw_name_pre = IWL_BNJ_B_FM_B_FW_PRE,
1176 .uhb_supported = true,
1178 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1179 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1181 MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1182 MODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1183 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1184 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1185 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1186 MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1187 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1188 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1189 MODULE_FIRMWARE(IWL_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1190 MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1191 MODULE_FIRMWARE(IWL_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1192 MODULE_FIRMWARE(IWL_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1193 MODULE_FIRMWARE(IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1194 MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1195 MODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1196 MODULE_FIRMWARE(IWL_SNJ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1197 MODULE_FIRMWARE(IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1198 MODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1199 MODULE_FIRMWARE(IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1200 MODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1201 MODULE_FIRMWARE(IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1202 MODULE_FIRMWARE(IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1203 MODULE_FIRMWARE(IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1204 MODULE_FIRMWARE(IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1205 MODULE_FIRMWARE(IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1206 MODULE_FIRMWARE(IWL_MA_B_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1207 MODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1208 MODULE_FIRMWARE(IWL_BZ_A_HR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1209 MODULE_FIRMWARE(IWL_BZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1210 MODULE_FIRMWARE(IWL_BZ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1211 MODULE_FIRMWARE(IWL_BZ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1212 MODULE_FIRMWARE(IWL_BZ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1213 MODULE_FIRMWARE(IWL_BZ_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1214 MODULE_FIRMWARE(IWL_BZ_A_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1215 MODULE_FIRMWARE(IWL_GL_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1216 MODULE_FIRMWARE(IWL_BNJ_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1217 MODULE_FIRMWARE(IWL_BNJ_A_FM4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1218 MODULE_FIRMWARE(IWL_BNJ_B_FM4_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1219 MODULE_FIRMWARE(IWL_BNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1220 MODULE_FIRMWARE(IWL_BNJ_B_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1221 MODULE_FIRMWARE(IWL_BNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1222 MODULE_FIRMWARE(IWL_BNJ_B_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1223 MODULE_FIRMWARE(IWL_BNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1224 MODULE_FIRMWARE(IWL_BNJ_B_HR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1225 MODULE_FIRMWARE(IWL_BNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1226 MODULE_FIRMWARE(IWL_BZ_A_FM4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1227 MODULE_FIRMWARE(IWL_BZ_A_FM4_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1228 MODULE_FIRMWARE(IWL_GL_B_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1229 MODULE_FIRMWARE(IWL_BNJ_B_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));