1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2015-2017 Intel Deutschland GmbH
4 * Copyright (C) 2018-2023 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 81
14 #define IWL_22500_UCODE_API_MAX 77
16 /* Lowest firmware API version supported */
17 #define IWL_22000_UCODE_API_MIN 39
20 #define IWL_22000_NVM_VERSION 0x0a1d
22 /* Memory offsets and lengths */
23 #define IWL_22000_DCCM_OFFSET 0x800000 /* LMAC1 */
24 #define IWL_22000_DCCM_LEN 0x10000 /* LMAC1 */
25 #define IWL_22000_DCCM2_OFFSET 0x880000
26 #define IWL_22000_DCCM2_LEN 0x8000
27 #define IWL_22000_SMEM_OFFSET 0x400000
28 #define IWL_22000_SMEM_LEN 0xD0000
30 #define IWL_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-"
31 #define IWL_QNJ_B_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-"
32 #define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
33 #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
34 #define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
35 #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
36 #define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-"
37 #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
38 #define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"
39 #define IWL_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-"
40 #define IWL_SO_A_HR_B_FW_PRE "iwlwifi-so-a0-hr-b0-"
41 #define IWL_SO_A_GF_A_FW_PRE "iwlwifi-so-a0-gf-a0-"
42 #define IWL_TY_A_GF_A_FW_PRE "iwlwifi-ty-a0-gf-a0-"
43 #define IWL_SO_A_GF4_A_FW_PRE "iwlwifi-so-a0-gf4-a0-"
44 #define IWL_SO_A_MR_A_FW_PRE "iwlwifi-so-a0-mr-a0-"
45 #define IWL_SNJ_A_GF4_A_FW_PRE "iwlwifi-SoSnj-a0-gf4-a0-"
46 #define IWL_SNJ_A_GF_A_FW_PRE "iwlwifi-SoSnj-a0-gf-a0-"
47 #define IWL_SNJ_A_HR_B_FW_PRE "iwlwifi-SoSnj-a0-hr-b0-"
48 #define IWL_SNJ_A_JF_B_FW_PRE "iwlwifi-SoSnj-a0-jf-b0-"
49 #define IWL_MA_A_HR_B_FW_PRE "iwlwifi-ma-a0-hr-b0-"
50 #define IWL_MA_A_GF_A_FW_PRE "iwlwifi-ma-a0-gf-a0-"
51 #define IWL_MA_A_GF4_A_FW_PRE "iwlwifi-ma-a0-gf4-a0-"
52 #define IWL_MA_A_MR_A_FW_PRE "iwlwifi-ma-a0-mr-a0-"
53 #define IWL_MA_A_FM_A_FW_PRE "iwlwifi-ma-a0-fm-a0-"
54 #define IWL_MA_B_HR_B_FW_PRE "iwlwifi-ma-b0-hr-b0-"
55 #define IWL_MA_B_GF_A_FW_PRE "iwlwifi-ma-b0-gf-a0-"
56 #define IWL_MA_B_GF4_A_FW_PRE "iwlwifi-ma-b0-gf4-a0-"
57 #define IWL_MA_B_MR_A_FW_PRE "iwlwifi-ma-b0-mr-a0-"
58 #define IWL_MA_B_FM_A_FW_PRE "iwlwifi-ma-b0-fm-a0-"
59 #define IWL_SNJ_A_MR_A_FW_PRE "iwlwifi-SoSnj-a0-mr-a0-"
60 #define IWL_BZ_A_HR_A_FW_PRE "iwlwifi-bz-a0-hr-b0-"
61 #define IWL_BZ_A_HR_B_FW_PRE "iwlwifi-bz-a0-hr-b0-"
62 #define IWL_BZ_A_GF_A_FW_PRE "iwlwifi-bz-a0-gf-a0-"
63 #define IWL_BZ_A_GF4_A_FW_PRE "iwlwifi-bz-a0-gf4-a0-"
64 #define IWL_BZ_A_MR_A_FW_PRE "iwlwifi-bz-a0-mr-a0-"
65 #define IWL_BZ_A_FM_A_FW_PRE "iwlwifi-bz-a0-fm-a0-"
66 #define IWL_BZ_A_FM4_A_FW_PRE "iwlwifi-bz-a0-fm4-a0-"
67 #define IWL_BZ_A_FM_B_FW_PRE "iwlwifi-bz-a0-fm-b0-"
68 #define IWL_BZ_A_FM_C_FW_PRE "iwlwifi-bz-a0-fm-c0-"
69 #define IWL_BZ_A_FM4_B_FW_PRE "iwlwifi-bz-a0-fm4-b0-"
70 #define IWL_BZ_B_GF_A_FW_PRE "iwlwifi-bz-b0-gf-a0-"
71 #define IWL_BZ_B_GF4_A_FW_PRE "iwlwifi-bz-b0-gf4-a0-"
72 #define IWL_BZ_B_FM_B_FW_PRE "iwlwifi-bz-b0-fm-b0-"
73 #define IWL_BZ_B_FM4_B_FW_PRE "iwlwifi-bz-b0-fm4-b0-"
74 #define IWL_GL_A_FM_A_FW_PRE "iwlwifi-gl-a0-fm-a0-"
75 #define IWL_GL_B_FM_B_FW_PRE "iwlwifi-gl-b0-fm-b0-"
76 #define IWL_GL_C_FM_C_FW_PRE "iwlwifi-gl-c0-fm-c0-"
78 #define IWL_BZ_Z_GF_A_FW_PRE "iwlwifi-bz-z0-gf-a0-"
79 #define IWL_BNJ_A_FM_A_FW_PRE "iwlwifi-BzBnj-a0-fm-a0-"
80 #define IWL_BNJ_A_FM4_A_FW_PRE "iwlwifi-BzBnj-a0-fm4-a0-"
81 #define IWL_BNJ_B_FM4_B_FW_PRE "iwlwifi-BzBnj-b0-fm4-b0-"
82 #define IWL_BNJ_A_GF_A_FW_PRE "iwlwifi-BzBnj-a0-gf-a0-"
83 #define IWL_BNJ_B_GF_A_FW_PRE "iwlwifi-BzBnj-b0-gf-a0-"
84 #define IWL_BNJ_A_GF4_A_FW_PRE "iwlwifi-BzBnj-a0-gf4-a0-"
85 #define IWL_BNJ_B_GF4_A_FW_PRE "iwlwifi-BzBnj-b0-gf4-a0-"
86 #define IWL_BNJ_A_HR_A_FW_PRE "iwlwifi-BzBnj-a0-hr-b0-"
87 #define IWL_BNJ_A_HR_B_FW_PRE "iwlwifi-BzBnj-a0-hr-b0-"
88 #define IWL_BNJ_B_HR_A_FW_PRE "iwlwifi-BzBnj-b0-hr-b0-"
89 #define IWL_BNJ_B_HR_B_FW_PRE "iwlwifi-BzBnj-b0-hr-b0-"
90 #define IWL_BNJ_B_FM_B_FW_PRE "iwlwifi-BzBnj-b0-fm-b0-"
92 #define IWL_SC_A_FM_B_FW_PRE "iwlwifi-sc-a0-fm-b0-"
93 #define IWL_SC_A_FM_C_FW_PRE "iwlwifi-sc-a0-fm-c0-"
94 #define IWL_SC_A_HR_A_FW_PRE "iwlwifi-sc-a0-hr-b0-"
95 #define IWL_SC_A_HR_B_FW_PRE "iwlwifi-sc-a0-hr-b0-"
96 #define IWL_SC_A_GF_A_FW_PRE "iwlwifi-sc-a0-gf-a0-"
97 #define IWL_SC_A_GF4_A_FW_PRE "iwlwifi-sc-a0-gf4-a0-"
98 #define IWL_SC_A_WH_A_FW_PRE "iwlwifi-sc-a0-wh-a0-"
100 #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
101 IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
102 #define IWL_QNJ_B_HR_B_MODULE_FIRMWARE(api) \
103 IWL_QNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
104 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
105 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
106 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
107 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
108 #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
109 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
110 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
111 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
112 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
113 IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
114 #define IWL_CC_A_MODULE_FIRMWARE(api) \
115 IWL_CC_A_FW_PRE __stringify(api) ".ucode"
116 #define IWL_SO_A_JF_B_MODULE_FIRMWARE(api) \
117 IWL_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
118 #define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
119 IWL_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
120 #define IWL_SO_A_GF_A_MODULE_FIRMWARE(api) \
121 IWL_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
122 #define IWL_TY_A_GF_A_MODULE_FIRMWARE(api) \
123 IWL_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
124 #define IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(api) \
125 IWL_SNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
126 #define IWL_SNJ_A_GF_A_MODULE_FIRMWARE(api) \
127 IWL_SNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
128 #define IWL_SNJ_A_HR_B_MODULE_FIRMWARE(api) \
129 IWL_SNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
130 #define IWL_SNJ_A_JF_B_MODULE_FIRMWARE(api) \
131 IWL_SNJ_A_JF_B_FW_PRE __stringify(api) ".ucode"
132 #define IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(api) \
133 IWL_MA_A_HR_B_FW_PRE __stringify(api) ".ucode"
134 #define IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(api) \
135 IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
136 #define IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(api) \
137 IWL_MA_A_GF4_A_FW_PRE __stringify(api) ".ucode"
138 #define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
139 IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
140 #define IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(api) \
141 IWL_MA_A_FM_A_FW_PRE __stringify(api) ".ucode"
142 #define IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(api) \
143 IWL_MA_B_HR_B_FW_PRE __stringify(api) ".ucode"
144 #define IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(api) \
145 IWL_MA_B_GF_A_FW_PRE __stringify(api) ".ucode"
146 #define IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(api) \
147 IWL_MA_B_GF4_A_FW_PRE __stringify(api) ".ucode"
148 #define IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(api) \
149 IWL_MA_B_MR_A_FW_PRE __stringify(api) ".ucode"
150 #define IWL_MA_B_FM_A_FW_MODULE_FIRMWARE(api) \
151 IWL_MA_B_FM_A_FW_PRE __stringify(api) ".ucode"
152 #define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
153 IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
154 #define IWL_BZ_A_HR_A_MODULE_FIRMWARE(api) \
155 IWL_BZ_A_HR_A_FW_PRE __stringify(api) ".ucode"
156 #define IWL_BZ_A_HR_B_MODULE_FIRMWARE(api) \
157 IWL_BZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
158 #define IWL_BZ_A_GF_A_MODULE_FIRMWARE(api) \
159 IWL_BZ_A_GF_A_FW_PRE __stringify(api) ".ucode"
160 #define IWL_BZ_A_GF4_A_MODULE_FIRMWARE(api) \
161 IWL_BZ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
162 #define IWL_BZ_A_MR_A_MODULE_FIRMWARE(api) \
163 IWL_BZ_A_MR_A_FW_PRE __stringify(api) ".ucode"
164 #define IWL_BZ_A_FM_A_MODULE_FIRMWARE(api) \
165 IWL_BZ_A_FM_A_FW_PRE __stringify(api) ".ucode"
166 #define IWL_BZ_A_FM4_A_MODULE_FIRMWARE(api) \
167 IWL_BZ_A_FM4_A_FW_PRE __stringify(api) ".ucode"
168 #define IWL_BZ_A_FM_B_MODULE_FIRMWARE(api) \
169 IWL_BZ_A_FM_B_FW_PRE __stringify(api) ".ucode"
170 #define IWL_BZ_A_FM_C_MODULE_FIRMWARE(api) \
171 IWL_BZ_A_FM_C_FW_PRE __stringify(api) ".ucode"
172 #define IWL_BZ_A_FM4_B_MODULE_FIRMWARE(api) \
173 IWL_BZ_A_FM4_B_FW_PRE __stringify(api) ".ucode"
174 #define IWL_BZ_B_GF_A_MODULE_FIRMWARE(api) \
175 IWL_BZ_B_GF_A_FW_PRE __stringify(api) ".ucode"
176 #define IWL_BZ_B_GF4_A_MODULE_FIRMWARE(api) \
177 IWL_BZ_B_GF4_A_FW_PRE __stringify(api) ".ucode"
178 #define IWL_BZ_B_FM_B_MODULE_FIRMWARE(api) \
179 IWL_BZ_B_FM_B_FW_PRE __stringify(api) ".ucode"
180 #define IWL_BZ_B_FM4_B_MODULE_FIRMWARE(api) \
181 IWL_BZ_B_FM4_B_FW_PRE __stringify(api) ".ucode"
182 #define IWL_GL_A_FM_A_MODULE_FIRMWARE(api) \
183 IWL_GL_A_FM_A_FW_PRE __stringify(api) ".ucode"
184 #define IWL_GL_B_FM_B_MODULE_FIRMWARE(api) \
185 IWL_GL_B_FM_B_FW_PRE __stringify(api) ".ucode"
186 #define IWL_GL_C_FM_C_MODULE_FIRMWARE(api) \
187 IWL_GL_C_FM_C_FW_PRE __stringify(api) ".ucode"
188 #define IWL_BNJ_A_FM_A_MODULE_FIRMWARE(api) \
189 IWL_BNJ_A_FM_A_FW_PRE __stringify(api) ".ucode"
190 #define IWL_BNJ_A_FM4_A_MODULE_FIRMWARE(api) \
191 IWL_BNJ_A_FM4_A_FW_PRE __stringify(api) ".ucode"
192 #define IWL_BNJ_B_FM4_B_MODULE_FIRMWARE(api) \
193 IWL_BNJ_B_FM4_B_FW_PRE __stringify(api) ".ucode"
194 #define IWL_BNJ_A_GF_A_MODULE_FIRMWARE(api) \
195 IWL_BNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
196 #define IWL_BNJ_B_GF_A_MODULE_FIRMWARE(api) \
197 IWL_BNJ_B_GF_A_FW_PRE __stringify(api) ".ucode"
198 #define IWL_BNJ_A_GF4_A_MODULE_FIRMWARE(api) \
199 IWL_BNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
200 #define IWL_BNJ_B_GF4_A_MODULE_FIRMWARE(api) \
201 IWL_BNJ_B_GF4_A_FW_PRE __stringify(api) ".ucode"
203 #define IWL_BNJ_A_HR_A_MODULE_FIRMWARE(api) \
204 IWL_BNJ_A_HR_A_FW_PRE __stringify(api) ".ucode"
205 #define IWL_BNJ_A_HR_B_MODULE_FIRMWARE(api) \
206 IWL_BNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
207 #define IWL_BNJ_B_HR_A_MODULE_FIRMWARE(api) \
208 IWL_BNJ_B_HR_A_FW_PRE __stringify(api) ".ucode"
209 #define IWL_BNJ_B_HR_B_MODULE_FIRMWARE(api) \
210 IWL_BNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
211 #define IWL_BNJ_B_FM_B_MODULE_FIRMWARE(api) \
212 IWL_BNJ_B_FM_B_FW_PRE __stringify(api) ".ucode"
213 #define IWL_SC_A_FM_B_FW_MODULE_FIRMWARE(api) \
214 IWL_SC_A_FM_B_FW_PRE __stringify(api) ".ucode"
215 #define IWL_SC_A_FM_C_FW_MODULE_FIRMWARE(api) \
216 IWL_SC_A_FM_C_FW_PRE __stringify(api) ".ucode"
217 #define IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(api) \
218 IWL_SC_A_HR_A_FW_PRE __stringify(api) ".ucode"
219 #define IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(api) \
220 IWL_SC_A_HR_B_FW_PRE __stringify(api) ".ucode"
221 #define IWL_SC_A_GF_A_FW_MODULE_FIRMWARE(api) \
222 IWL_SC_A_GF_A_FW_PRE __stringify(api) ".ucode"
223 #define IWL_SC_A_GF4_A_FW_MODULE_FIRMWARE(api) \
224 IWL_SC_A_GF4_A_FW_PRE __stringify(api) ".ucode"
225 #define IWL_SC_A_WH_A_FW_MODULE_FIRMWARE(api) \
226 IWL_SC_A_WH_A_FW_PRE __stringify(api) ".ucode"
228 static const struct iwl_base_params iwl_22000_base_params = {
229 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
230 .num_of_queues = 512,
231 .max_tfd_queue_size = 256,
232 .shadow_ram_support = true,
233 .led_compensation = 57,
234 .wd_timeout = IWL_LONG_WD_TIMEOUT,
235 .max_event_log_size = 512,
236 .shadow_reg_enable = true,
237 .pcie_l1_allowed = true,
240 static const struct iwl_base_params iwl_ax210_base_params = {
241 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
242 .num_of_queues = 512,
243 .max_tfd_queue_size = 65536,
244 .shadow_ram_support = true,
245 .led_compensation = 57,
246 .wd_timeout = IWL_LONG_WD_TIMEOUT,
247 .max_event_log_size = 512,
248 .shadow_reg_enable = true,
249 .pcie_l1_allowed = true,
252 static const struct iwl_ht_params iwl_22000_ht_params = {
255 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
256 BIT(NL80211_BAND_6GHZ),
259 static const struct iwl_ht_params iwl_gl_a_ht_params = {
260 .stbc = false, /* we explicitly disable STBC for GL step A */
262 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
263 BIT(NL80211_BAND_6GHZ),
266 #define IWL_DEVICE_22000_COMMON \
267 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
268 .led_mode = IWL_LED_RF_STATE, \
269 .nvm_hw_section_num = 10, \
270 .non_shared_ant = ANT_B, \
271 .dccm_offset = IWL_22000_DCCM_OFFSET, \
272 .dccm_len = IWL_22000_DCCM_LEN, \
273 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
274 .dccm2_len = IWL_22000_DCCM2_LEN, \
275 .smem_offset = IWL_22000_SMEM_OFFSET, \
276 .smem_len = IWL_22000_SMEM_LEN, \
277 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
278 .apmg_not_supported = true, \
279 .trans.mq_rx_supported = true, \
280 .vht_mu_mimo_supported = true, \
281 .mac_addr_from_csr = 0x380, \
282 .ht_params = &iwl_22000_ht_params, \
283 .nvm_ver = IWL_22000_NVM_VERSION, \
284 .trans.use_tfh = true, \
285 .trans.rf_id = true, \
286 .trans.gen2 = true, \
287 .nvm_type = IWL_NVM_EXT, \
288 .dbgc_supported = true, \
289 .min_umac_error_event_table = 0x400000, \
290 .d3_debug_data_base_addr = 0x401000, \
291 .d3_debug_data_length = 60 * 1024, \
294 .addr = LDBG_M2S_BUF_WPTR, \
295 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
298 .addr = LDBG_M2S_BUF_WRAP_CNT, \
299 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
303 #define IWL_DEVICE_22500 \
304 IWL_DEVICE_22000_COMMON, \
305 .ucode_api_max = IWL_22500_UCODE_API_MAX, \
306 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
307 .trans.base_params = &iwl_22000_base_params, \
308 .gp2_reg_addr = 0xa02c68, \
311 .addr = MON_BUFF_WRPTR_VER2, \
312 .mask = 0xffffffff, \
315 .addr = MON_BUFF_CYCLE_CNT_VER2, \
316 .mask = 0xffffffff, \
320 #define IWL_DEVICE_AX210 \
321 IWL_DEVICE_22000_COMMON, \
322 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
323 .trans.umac_prph_offset = 0x300000, \
324 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
325 .trans.base_params = &iwl_ax210_base_params, \
326 .min_txq_size = 128, \
327 .gp2_reg_addr = 0xd02c68, \
328 .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_HE, \
331 .addr = DBGC_CUR_DBGBUF_STATUS, \
332 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
335 .addr = DBGC_DBGBUF_WRAP_AROUND, \
336 .mask = 0xffffffff, \
339 .addr = DBGC_CUR_DBGBUF_STATUS, \
340 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
344 #define IWL_DEVICE_BZ_COMMON \
345 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
346 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
347 .led_mode = IWL_LED_RF_STATE, \
348 .nvm_hw_section_num = 10, \
349 .non_shared_ant = ANT_B, \
350 .dccm_offset = IWL_22000_DCCM_OFFSET, \
351 .dccm_len = IWL_22000_DCCM_LEN, \
352 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
353 .dccm2_len = IWL_22000_DCCM2_LEN, \
354 .smem_offset = IWL_22000_SMEM_OFFSET, \
355 .smem_len = IWL_22000_SMEM_LEN, \
356 .apmg_not_supported = true, \
357 .trans.mq_rx_supported = true, \
358 .vht_mu_mimo_supported = true, \
359 .mac_addr_from_csr = 0x30, \
360 .nvm_ver = IWL_22000_NVM_VERSION, \
361 .trans.use_tfh = true, \
362 .trans.rf_id = true, \
363 .trans.gen2 = true, \
364 .nvm_type = IWL_NVM_EXT, \
365 .dbgc_supported = true, \
366 .min_umac_error_event_table = 0xD0000, \
367 .d3_debug_data_base_addr = 0x401000, \
368 .d3_debug_data_length = 60 * 1024, \
371 .addr = LDBG_M2S_BUF_WPTR, \
372 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
375 .addr = LDBG_M2S_BUF_WRAP_CNT, \
376 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
379 .trans.umac_prph_offset = 0x300000, \
380 .trans.device_family = IWL_DEVICE_FAMILY_BZ, \
381 .trans.base_params = &iwl_ax210_base_params, \
382 .min_txq_size = 128, \
383 .gp2_reg_addr = 0xd02c68, \
384 .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_EHT, \
387 .addr = DBGC_CUR_DBGBUF_STATUS, \
388 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
391 .addr = DBGC_DBGBUF_WRAP_AROUND, \
392 .mask = 0xffffffff, \
395 .addr = DBGC_CUR_DBGBUF_STATUS, \
396 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
401 .addr = DBGI_SRAM_FIFO_POINTERS, \
402 .mask = DBGI_SRAM_FIFO_POINTERS_WR_PTR_MSK, \
406 #define IWL_DEVICE_BZ \
407 IWL_DEVICE_BZ_COMMON, \
408 .ht_params = &iwl_22000_ht_params
410 #define IWL_DEVICE_GL_A \
411 IWL_DEVICE_BZ_COMMON, \
412 .ht_params = &iwl_gl_a_ht_params
414 #define IWL_DEVICE_SC \
415 IWL_DEVICE_BZ_COMMON, \
416 .ht_params = &iwl_22000_ht_params
418 const struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
419 .mq_rx_supported = true,
423 .device_family = IWL_DEVICE_FAMILY_22000,
424 .base_params = &iwl_22000_base_params,
427 const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
428 .mq_rx_supported = true,
432 .device_family = IWL_DEVICE_FAMILY_22000,
433 .base_params = &iwl_22000_base_params,
436 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
439 const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
440 .mq_rx_supported = true,
444 .device_family = IWL_DEVICE_FAMILY_22000,
445 .base_params = &iwl_22000_base_params,
447 .xtal_latency = 1820,
448 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
451 const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
452 .mq_rx_supported = true,
456 .device_family = IWL_DEVICE_FAMILY_22000,
457 .base_params = &iwl_22000_base_params,
459 .xtal_latency = 12000,
460 .low_latency_xtal = true,
461 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
464 const struct iwl_cfg_trans_params iwl_snj_trans_cfg = {
465 .mq_rx_supported = true,
469 .device_family = IWL_DEVICE_FAMILY_AX210,
470 .base_params = &iwl_ax210_base_params,
471 .umac_prph_offset = 0x300000,
474 const struct iwl_cfg_trans_params iwl_so_trans_cfg = {
475 .mq_rx_supported = true,
479 .device_family = IWL_DEVICE_FAMILY_AX210,
480 .base_params = &iwl_ax210_base_params,
481 .umac_prph_offset = 0x300000,
483 /* TODO: the following values need to be checked */
485 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
488 const struct iwl_cfg_trans_params iwl_so_long_latency_trans_cfg = {
489 .mq_rx_supported = true,
493 .device_family = IWL_DEVICE_FAMILY_AX210,
494 .base_params = &iwl_ax210_base_params,
495 .umac_prph_offset = 0x300000,
497 .low_latency_xtal = true,
498 .xtal_latency = 12000,
499 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
502 const struct iwl_cfg_trans_params iwl_so_long_latency_imr_trans_cfg = {
503 .mq_rx_supported = true,
507 .device_family = IWL_DEVICE_FAMILY_AX210,
508 .base_params = &iwl_ax210_base_params,
509 .umac_prph_offset = 0x300000,
511 .low_latency_xtal = true,
512 .xtal_latency = 12000,
513 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
518 * If the device doesn't support HE, no need to have that many buffers.
519 * 22000 devices can split multiple frames into a single RB, so fewer are
520 * needed; AX210 cannot (but use smaller RBs by default) - these sizes
521 * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
522 * additional overhead to account for processing time.
524 #define IWL_NUM_RBDS_NON_HE 512
525 #define IWL_NUM_RBDS_22000_HE 2048
526 #define IWL_NUM_RBDS_AX210_HE 4096
529 * All JF radio modules are part of the 9000 series, but the MAC part
530 * looks more like 22000. That's why this device is here, but called
533 const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
534 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
536 .num_rbds = IWL_NUM_RBDS_NON_HE,
539 const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
540 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
542 .num_rbds = IWL_NUM_RBDS_NON_HE,
545 const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
546 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
549 * This device doesn't support receiving BlockAck with a large bitmap
550 * so we need to restrict the size of transmitted aggregation to the
551 * HT size; mac80211 would otherwise pick the HE max (256) by default.
553 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
554 .num_rbds = IWL_NUM_RBDS_NON_HE,
557 const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
558 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
561 * This device doesn't support receiving BlockAck with a large bitmap
562 * so we need to restrict the size of transmitted aggregation to the
563 * HT size; mac80211 would otherwise pick the HE max (256) by default.
565 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
566 .num_rbds = IWL_NUM_RBDS_NON_HE,
569 const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
570 .device_family = IWL_DEVICE_FAMILY_22000,
571 .base_params = &iwl_22000_base_params,
572 .mq_rx_supported = true,
576 .bisr_workaround = 1,
579 const struct iwl_cfg_trans_params iwl_ma_trans_cfg = {
580 .device_family = IWL_DEVICE_FAMILY_AX210,
581 .base_params = &iwl_ax210_base_params,
582 .mq_rx_supported = true,
587 .umac_prph_offset = 0x300000
590 const struct iwl_cfg_trans_params iwl_bz_trans_cfg = {
591 .device_family = IWL_DEVICE_FAMILY_BZ,
592 .base_params = &iwl_ax210_base_params,
593 .mq_rx_supported = true,
598 .umac_prph_offset = 0x300000,
599 .xtal_latency = 12000,
600 .low_latency_xtal = true,
601 .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
604 const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
605 const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
606 const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
607 const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
608 const char iwl_ax204_name[] = "Intel(R) Wi-Fi 6 AX204 160MHz";
609 const char iwl_ax211_name[] = "Intel(R) Wi-Fi 6E AX211 160MHz";
610 const char iwl_ax221_name[] = "Intel(R) Wi-Fi 6E AX221 160MHz";
611 const char iwl_ax231_name[] = "Intel(R) Wi-Fi 6E AX231 160MHz";
612 const char iwl_ax411_name[] = "Intel(R) Wi-Fi 6E AX411 160MHz";
613 const char iwl_bz_name[] = "Intel(R) TBD Bz device";
614 const char iwl_sc_name[] = "Intel(R) TBD Sc device";
616 const char iwl_ax200_killer_1650w_name[] =
617 "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
618 const char iwl_ax200_killer_1650x_name[] =
619 "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
620 const char iwl_ax201_killer_1650s_name[] =
621 "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
622 const char iwl_ax201_killer_1650i_name[] =
623 "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
624 const char iwl_ax210_killer_1675w_name[] =
625 "Killer(R) Wi-Fi 6E AX1675w 160MHz Wireless Network Adapter (210D2W)";
626 const char iwl_ax210_killer_1675x_name[] =
627 "Killer(R) Wi-Fi 6E AX1675x 160MHz Wireless Network Adapter (210NGW)";
628 const char iwl_ax211_killer_1675s_name[] =
629 "Killer(R) Wi-Fi 6E AX1675s 160MHz Wireless Network Adapter (211NGW)";
630 const char iwl_ax211_killer_1675i_name[] =
631 "Killer(R) Wi-Fi 6E AX1675i 160MHz Wireless Network Adapter (211NGW)";
632 const char iwl_ax411_killer_1690s_name[] =
633 "Killer(R) Wi-Fi 6E AX1690s 160MHz Wireless Network Adapter (411D2W)";
634 const char iwl_ax411_killer_1690i_name[] =
635 "Killer(R) Wi-Fi 6E AX1690i 160MHz Wireless Network Adapter (411NGW)";
637 const struct iwl_cfg iwl_qu_b0_hr1_b0 = {
638 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
641 * This device doesn't support receiving BlockAck with a large bitmap
642 * so we need to restrict the size of transmitted aggregation to the
643 * HT size; mac80211 would otherwise pick the HE max (256) by default.
645 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
646 .tx_with_siso_diversity = true,
647 .num_rbds = IWL_NUM_RBDS_22000_HE,
650 const struct iwl_cfg iwl_qu_b0_hr_b0 = {
651 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
654 * This device doesn't support receiving BlockAck with a large bitmap
655 * so we need to restrict the size of transmitted aggregation to the
656 * HT size; mac80211 would otherwise pick the HE max (256) by default.
658 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
659 .num_rbds = IWL_NUM_RBDS_22000_HE,
662 const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
663 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
664 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
667 * This device doesn't support receiving BlockAck with a large bitmap
668 * so we need to restrict the size of transmitted aggregation to the
669 * HT size; mac80211 would otherwise pick the HE max (256) by default.
671 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
672 .num_rbds = IWL_NUM_RBDS_22000_HE,
675 const struct iwl_cfg iwl_qu_c0_hr1_b0 = {
676 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
679 * This device doesn't support receiving BlockAck with a large bitmap
680 * so we need to restrict the size of transmitted aggregation to the
681 * HT size; mac80211 would otherwise pick the HE max (256) by default.
683 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
684 .tx_with_siso_diversity = true,
685 .num_rbds = IWL_NUM_RBDS_22000_HE,
688 const struct iwl_cfg iwl_qu_c0_hr_b0 = {
689 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
692 * This device doesn't support receiving BlockAck with a large bitmap
693 * so we need to restrict the size of transmitted aggregation to the
694 * HT size; mac80211 would otherwise pick the HE max (256) by default.
696 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
697 .num_rbds = IWL_NUM_RBDS_22000_HE,
700 const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
701 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
702 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
705 * This device doesn't support receiving BlockAck with a large bitmap
706 * so we need to restrict the size of transmitted aggregation to the
707 * HT size; mac80211 would otherwise pick the HE max (256) by default.
709 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
710 .num_rbds = IWL_NUM_RBDS_22000_HE,
713 const struct iwl_cfg iwl_quz_a0_hr1_b0 = {
714 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
717 * This device doesn't support receiving BlockAck with a large bitmap
718 * so we need to restrict the size of transmitted aggregation to the
719 * HT size; mac80211 would otherwise pick the HE max (256) by default.
721 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
722 .tx_with_siso_diversity = true,
723 .num_rbds = IWL_NUM_RBDS_22000_HE,
726 const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
727 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
728 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
731 * This device doesn't support receiving BlockAck with a large bitmap
732 * so we need to restrict the size of transmitted aggregation to the
733 * HT size; mac80211 would otherwise pick the HE max (256) by default.
735 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
736 .num_rbds = IWL_NUM_RBDS_22000_HE,
739 const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
740 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
741 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
744 * This device doesn't support receiving BlockAck with a large bitmap
745 * so we need to restrict the size of transmitted aggregation to the
746 * HT size; mac80211 would otherwise pick the HE max (256) by default.
748 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
749 .num_rbds = IWL_NUM_RBDS_22000_HE,
752 const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
753 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
754 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
757 * This device doesn't support receiving BlockAck with a large bitmap
758 * so we need to restrict the size of transmitted aggregation to the
759 * HT size; mac80211 would otherwise pick the HE max (256) by default.
761 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
762 .num_rbds = IWL_NUM_RBDS_22000_HE,
765 const struct iwl_cfg iwl_ax200_cfg_cc = {
766 .fw_name_pre = IWL_CC_A_FW_PRE,
769 * This device doesn't support receiving BlockAck with a large bitmap
770 * so we need to restrict the size of transmitted aggregation to the
771 * HT size; mac80211 would otherwise pick the HE max (256) by default.
773 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
774 .num_rbds = IWL_NUM_RBDS_22000_HE,
777 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
778 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
779 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
782 * This device doesn't support receiving BlockAck with a large bitmap
783 * so we need to restrict the size of transmitted aggregation to the
784 * HT size; mac80211 would otherwise pick the HE max (256) by default.
786 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
787 .num_rbds = IWL_NUM_RBDS_22000_HE,
790 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
791 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
792 .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
795 * This device doesn't support receiving BlockAck with a large bitmap
796 * so we need to restrict the size of transmitted aggregation to the
797 * HT size; mac80211 would otherwise pick the HE max (256) by default.
799 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
800 .num_rbds = IWL_NUM_RBDS_22000_HE,
803 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
804 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
805 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
808 * This device doesn't support receiving BlockAck with a large bitmap
809 * so we need to restrict the size of transmitted aggregation to the
810 * HT size; mac80211 would otherwise pick the HE max (256) by default.
812 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
813 .num_rbds = IWL_NUM_RBDS_22000_HE,
816 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
817 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
818 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
821 * This device doesn't support receiving BlockAck with a large bitmap
822 * so we need to restrict the size of transmitted aggregation to the
823 * HT size; mac80211 would otherwise pick the HE max (256) by default.
825 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
826 .num_rbds = IWL_NUM_RBDS_22000_HE,
829 const struct iwl_cfg iwl_qnj_b0_hr_b0_cfg = {
830 .fw_name_pre = IWL_QNJ_B_HR_B_FW_PRE,
833 * This device doesn't support receiving BlockAck with a large bitmap
834 * so we need to restrict the size of transmitted aggregation to the
835 * HT size; mac80211 would otherwise pick the HE max (256) by default.
837 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
838 .num_rbds = IWL_NUM_RBDS_22000_HE,
841 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_b0 = {
842 .name = "Intel(R) Wireless-AC 9560 160MHz",
843 .fw_name_pre = IWL_SO_A_JF_B_FW_PRE,
845 .num_rbds = IWL_NUM_RBDS_NON_HE,
848 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
849 .name = iwl_ax211_name,
850 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
851 .uhb_supported = true,
853 .num_rbds = IWL_NUM_RBDS_AX210_HE,
856 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long = {
857 .name = iwl_ax211_name,
858 .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
859 .uhb_supported = true,
861 .num_rbds = IWL_NUM_RBDS_AX210_HE,
862 .trans.xtal_latency = 12000,
863 .trans.low_latency_xtal = true,
866 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
867 .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
868 .fw_name_pre = IWL_TY_A_GF_A_FW_PRE,
869 .uhb_supported = true,
871 .num_rbds = IWL_NUM_RBDS_AX210_HE,
874 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
875 .name = iwl_ax411_name,
876 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
877 .uhb_supported = true,
879 .num_rbds = IWL_NUM_RBDS_AX210_HE,
882 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long = {
883 .name = iwl_ax411_name,
884 .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
885 .uhb_supported = true,
887 .num_rbds = IWL_NUM_RBDS_AX210_HE,
888 .trans.xtal_latency = 12000,
889 .trans.low_latency_xtal = true,
892 const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
893 .name = iwl_ax411_name,
894 .fw_name_pre = IWL_SNJ_A_GF4_A_FW_PRE,
895 .uhb_supported = true,
897 .num_rbds = IWL_NUM_RBDS_AX210_HE,
900 const struct iwl_cfg iwlax211_cfg_snj_gf_a0 = {
901 .name = iwl_ax211_name,
902 .fw_name_pre = IWL_SNJ_A_GF_A_FW_PRE,
903 .uhb_supported = true,
905 .num_rbds = IWL_NUM_RBDS_AX210_HE,
908 const struct iwl_cfg iwl_cfg_snj_hr_b0 = {
909 .fw_name_pre = IWL_SNJ_A_HR_B_FW_PRE,
910 .uhb_supported = true,
912 .num_rbds = IWL_NUM_RBDS_AX210_HE,
915 const struct iwl_cfg iwl_cfg_snj_a0_jf_b0 = {
916 .fw_name_pre = IWL_SNJ_A_JF_B_FW_PRE,
917 .uhb_supported = true,
919 .num_rbds = IWL_NUM_RBDS_AX210_HE,
922 const struct iwl_cfg iwl_cfg_ma_a0_hr_b0 = {
923 .fw_name_pre = IWL_MA_A_HR_B_FW_PRE,
924 .uhb_supported = true,
926 .num_rbds = IWL_NUM_RBDS_AX210_HE,
929 const struct iwl_cfg iwl_cfg_ma_a0_gf_a0 = {
930 .fw_name_pre = IWL_MA_A_GF_A_FW_PRE,
931 .uhb_supported = true,
933 .num_rbds = IWL_NUM_RBDS_AX210_HE,
936 const struct iwl_cfg iwl_cfg_ma_a0_gf4_a0 = {
937 .fw_name_pre = IWL_MA_A_GF4_A_FW_PRE,
938 .uhb_supported = true,
940 .num_rbds = IWL_NUM_RBDS_AX210_HE,
943 const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
944 .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
945 .uhb_supported = true,
947 .num_rbds = IWL_NUM_RBDS_AX210_HE,
950 const struct iwl_cfg iwl_cfg_ma_a0_ms_a0 = {
951 .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
952 .uhb_supported = false,
954 .num_rbds = IWL_NUM_RBDS_AX210_HE,
957 const struct iwl_cfg iwl_cfg_ma_b0_fm_a0 = {
958 .fw_name_pre = IWL_MA_B_FM_A_FW_PRE,
959 .uhb_supported = true,
961 .num_rbds = IWL_NUM_RBDS_AX210_HE,
964 const struct iwl_cfg iwl_cfg_ma_b0_hr_b0 = {
965 .fw_name_pre = IWL_MA_B_HR_B_FW_PRE,
966 .uhb_supported = true,
968 .num_rbds = IWL_NUM_RBDS_AX210_HE,
971 const struct iwl_cfg iwl_cfg_ma_b0_gf_a0 = {
972 .fw_name_pre = IWL_MA_B_GF_A_FW_PRE,
973 .uhb_supported = true,
975 .num_rbds = IWL_NUM_RBDS_AX210_HE,
978 const struct iwl_cfg iwl_cfg_ma_b0_gf4_a0 = {
979 .fw_name_pre = IWL_MA_B_GF4_A_FW_PRE,
980 .uhb_supported = true,
982 .num_rbds = IWL_NUM_RBDS_AX210_HE,
985 const struct iwl_cfg iwl_cfg_ma_b0_mr_a0 = {
986 .fw_name_pre = IWL_MA_B_MR_A_FW_PRE,
987 .uhb_supported = true,
989 .num_rbds = IWL_NUM_RBDS_AX210_HE,
992 const struct iwl_cfg iwl_cfg_so_a0_ms_a0 = {
993 .fw_name_pre = IWL_SO_A_MR_A_FW_PRE,
994 .uhb_supported = false,
996 .num_rbds = IWL_NUM_RBDS_AX210_HE,
999 const struct iwl_cfg iwl_cfg_ma_a0_fm_a0 = {
1000 .fw_name_pre = IWL_MA_A_FM_A_FW_PRE,
1001 .uhb_supported = true,
1003 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1006 const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
1007 .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
1008 .uhb_supported = true,
1010 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1013 const struct iwl_cfg iwl_cfg_snj_a0_ms_a0 = {
1014 .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
1015 .uhb_supported = false,
1017 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1020 const struct iwl_cfg iwl_cfg_so_a0_hr_a0 = {
1021 .fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
1023 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1026 const struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = {
1027 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
1030 * This device doesn't support receiving BlockAck with a large bitmap
1031 * so we need to restrict the size of transmitted aggregation to the
1032 * HT size; mac80211 would otherwise pick the HE max (256) by default.
1034 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1035 .num_rbds = IWL_NUM_RBDS_22000_HE,
1038 const struct iwl_cfg iwl_cfg_bz_a0_hr_a0 = {
1039 .fw_name_pre = IWL_BZ_A_HR_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_hr_b0 = {
1047 .fw_name_pre = IWL_BZ_A_HR_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_gf_a0 = {
1055 .fw_name_pre = IWL_BZ_A_GF_A_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_bz_a0_gf4_a0 = {
1063 .fw_name_pre = IWL_BZ_A_GF4_A_FW_PRE,
1064 .uhb_supported = true,
1066 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1067 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1070 const struct iwl_cfg iwl_cfg_bz_b0_gf_a0 = {
1071 .fw_name_pre = IWL_BZ_B_GF_A_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_b0_gf4_a0 = {
1079 .fw_name_pre = IWL_BZ_B_GF4_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_bz_a0_mr_a0 = {
1087 .fw_name_pre = IWL_BZ_A_MR_A_FW_PRE,
1088 .uhb_supported = true,
1090 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1091 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1094 const struct iwl_cfg iwl_cfg_bz_a0_fm_a0 = {
1095 .fw_name_pre = IWL_BZ_A_FM_A_FW_PRE,
1096 .uhb_supported = true,
1098 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1099 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1102 const struct iwl_cfg iwl_cfg_bz_a0_fm4_a0 = {
1103 .fw_name_pre = IWL_BZ_A_FM4_A_FW_PRE,
1104 .uhb_supported = true,
1106 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1107 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1110 const struct iwl_cfg iwl_cfg_bz_a0_fm_b0 = {
1111 .fw_name_pre = IWL_BZ_A_FM_B_FW_PRE,
1112 .uhb_supported = true,
1114 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1115 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1118 const struct iwl_cfg iwl_cfg_bz_a0_fm_c0 = {
1119 .fw_name_pre = IWL_BZ_A_FM_C_FW_PRE,
1120 .uhb_supported = true,
1122 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1123 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1126 const struct iwl_cfg iwl_cfg_bz_a0_fm4_b0 = {
1127 .fw_name_pre = IWL_BZ_A_FM4_B_FW_PRE,
1128 .uhb_supported = true,
1130 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1131 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1134 const struct iwl_cfg iwl_cfg_bz_b0_fm_b0 = {
1135 .fw_name_pre = IWL_BZ_B_FM_B_FW_PRE,
1136 .uhb_supported = true,
1138 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1139 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1142 const struct iwl_cfg iwl_cfg_bz_b0_fm4_b0 = {
1143 .fw_name_pre = IWL_BZ_B_FM4_B_FW_PRE,
1144 .uhb_supported = true,
1146 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1147 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1150 const struct iwl_cfg iwl_cfg_gl_a0_fm_a0 = {
1151 .fw_name_pre = IWL_GL_A_FM_A_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_gl_b0_fm_b0 = {
1159 .fw_name_pre = IWL_GL_B_FM_B_FW_PRE,
1160 .uhb_supported = true,
1162 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1163 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1166 const struct iwl_cfg iwl_cfg_gl_c0_fm_c0 = {
1167 .fw_name_pre = IWL_GL_C_FM_C_FW_PRE,
1168 .uhb_supported = true,
1170 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1171 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1174 const struct iwl_cfg iwl_cfg_bz_z0_gf_a0 = {
1175 .fw_name_pre = IWL_BZ_Z_GF_A_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,
1182 const struct iwl_cfg iwl_cfg_bnj_a0_fm_a0 = {
1183 .fw_name_pre = IWL_BNJ_A_FM_A_FW_PRE,
1184 .uhb_supported = true,
1186 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1187 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1190 const struct iwl_cfg iwl_cfg_bnj_a0_fm4_a0 = {
1191 .fw_name_pre = IWL_BNJ_A_FM4_A_FW_PRE,
1192 .uhb_supported = true,
1194 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1195 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1198 const struct iwl_cfg iwl_cfg_bnj_b0_fm4_b0 = {
1199 .fw_name_pre = IWL_BNJ_B_FM4_B_FW_PRE,
1200 .uhb_supported = true,
1202 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1203 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1206 const struct iwl_cfg iwl_cfg_bnj_a0_gf_a0 = {
1207 .fw_name_pre = IWL_BNJ_A_GF_A_FW_PRE,
1208 .uhb_supported = true,
1210 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1211 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1214 const struct iwl_cfg iwl_cfg_bnj_b0_gf_a0 = {
1215 .fw_name_pre = IWL_BNJ_B_GF_A_FW_PRE,
1216 .uhb_supported = true,
1218 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1219 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1222 const struct iwl_cfg iwl_cfg_bnj_a0_gf4_a0 = {
1223 .fw_name_pre = IWL_BNJ_A_GF4_A_FW_PRE,
1224 .uhb_supported = true,
1226 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1227 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1230 const struct iwl_cfg iwl_cfg_bnj_b0_gf4_a0 = {
1231 .fw_name_pre = IWL_BNJ_B_GF4_A_FW_PRE,
1232 .uhb_supported = true,
1234 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1235 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1238 const struct iwl_cfg iwl_cfg_bnj_a0_hr_a0 = {
1239 .fw_name_pre = IWL_BNJ_A_HR_A_FW_PRE,
1240 .uhb_supported = true,
1242 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1243 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1246 const struct iwl_cfg iwl_cfg_bnj_a0_hr_b0 = {
1247 .fw_name_pre = IWL_BNJ_A_HR_B_FW_PRE,
1248 .uhb_supported = true,
1250 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1251 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1254 const struct iwl_cfg iwl_cfg_bnj_b0_hr_a0 = {
1255 .fw_name_pre = IWL_BNJ_B_HR_A_FW_PRE,
1256 .uhb_supported = true,
1258 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1259 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1262 const struct iwl_cfg iwl_cfg_bnj_b0_hr_b0 = {
1263 .fw_name_pre = IWL_BNJ_B_HR_B_FW_PRE,
1264 .uhb_supported = true,
1266 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1267 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1270 const struct iwl_cfg iwl_cfg_bnj_b0_fm_b0 = {
1271 .fw_name_pre = IWL_BNJ_B_FM_B_FW_PRE,
1272 .uhb_supported = true,
1274 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1275 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1278 const struct iwl_cfg iwl_cfg_sc_a0_fm_b0 = {
1279 .fw_name_pre = IWL_SC_A_FM_B_FW_PRE,
1280 .uhb_supported = true,
1282 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1283 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1286 const struct iwl_cfg iwl_cfg_sc_a0_fm_c0 = {
1287 .fw_name_pre = IWL_SC_A_FM_C_FW_PRE,
1288 .uhb_supported = true,
1290 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1291 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1294 const struct iwl_cfg iwl_cfg_sc_a0_hr_a0 = {
1295 .fw_name_pre = IWL_SC_A_HR_A_FW_PRE,
1296 .uhb_supported = true,
1298 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1299 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1302 const struct iwl_cfg iwl_cfg_sc_a0_hr_b0 = {
1303 .fw_name_pre = IWL_SC_A_HR_B_FW_PRE,
1304 .uhb_supported = true,
1306 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1307 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1310 const struct iwl_cfg iwl_cfg_sc_a0_gf_a0 = {
1311 .fw_name_pre = IWL_SC_A_GF_A_FW_PRE,
1312 .uhb_supported = true,
1314 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1315 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1318 const struct iwl_cfg iwl_cfg_sc_a0_gf4_a0 = {
1319 .fw_name_pre = IWL_SC_A_GF4_A_FW_PRE,
1320 .uhb_supported = true,
1322 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1323 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1326 const struct iwl_cfg iwl_cfg_sc_a0_wh_a0 = {
1327 .fw_name_pre = IWL_SC_A_WH_A_FW_PRE,
1328 .uhb_supported = true,
1330 .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1331 .num_rbds = IWL_NUM_RBDS_AX210_HE,
1334 MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1335 MODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1336 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1337 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1338 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1339 MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1340 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1341 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1342 MODULE_FIRMWARE(IWL_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1343 MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1344 MODULE_FIRMWARE(IWL_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1345 MODULE_FIRMWARE(IWL_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1346 MODULE_FIRMWARE(IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1347 MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1348 MODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1349 MODULE_FIRMWARE(IWL_SNJ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1350 MODULE_FIRMWARE(IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1351 MODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1352 MODULE_FIRMWARE(IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1353 MODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1354 MODULE_FIRMWARE(IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1355 MODULE_FIRMWARE(IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1356 MODULE_FIRMWARE(IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1357 MODULE_FIRMWARE(IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1358 MODULE_FIRMWARE(IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1359 MODULE_FIRMWARE(IWL_MA_B_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1360 MODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1361 MODULE_FIRMWARE(IWL_BZ_A_HR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1362 MODULE_FIRMWARE(IWL_BZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1363 MODULE_FIRMWARE(IWL_BZ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1364 MODULE_FIRMWARE(IWL_BZ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1365 MODULE_FIRMWARE(IWL_BZ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1366 MODULE_FIRMWARE(IWL_BZ_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1367 MODULE_FIRMWARE(IWL_BZ_A_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1368 MODULE_FIRMWARE(IWL_BZ_A_FM_C_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1369 MODULE_FIRMWARE(IWL_GL_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1370 MODULE_FIRMWARE(IWL_BNJ_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1371 MODULE_FIRMWARE(IWL_BNJ_A_FM4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1372 MODULE_FIRMWARE(IWL_BNJ_B_FM4_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1373 MODULE_FIRMWARE(IWL_BNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1374 MODULE_FIRMWARE(IWL_BNJ_B_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1375 MODULE_FIRMWARE(IWL_BNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1376 MODULE_FIRMWARE(IWL_BNJ_B_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1377 MODULE_FIRMWARE(IWL_BNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1378 MODULE_FIRMWARE(IWL_BNJ_B_HR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1379 MODULE_FIRMWARE(IWL_BNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1380 MODULE_FIRMWARE(IWL_BZ_A_FM4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1381 MODULE_FIRMWARE(IWL_BZ_A_FM4_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1382 MODULE_FIRMWARE(IWL_GL_B_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1383 MODULE_FIRMWARE(IWL_GL_C_FM_C_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1384 MODULE_FIRMWARE(IWL_BNJ_B_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1385 MODULE_FIRMWARE(IWL_SC_A_FM_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1386 MODULE_FIRMWARE(IWL_SC_A_FM_C_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1387 MODULE_FIRMWARE(IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1388 MODULE_FIRMWARE(IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1389 MODULE_FIRMWARE(IWL_SC_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1390 MODULE_FIRMWARE(IWL_SC_A_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1391 MODULE_FIRMWARE(IWL_SC_A_WH_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));