Merge wireless into wireless-next
[platform/kernel/linux-rpi.git] / drivers / net / wireless / intel / iwlwifi / cfg / 22000.c
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /*
3  * Copyright (C) 2015-2017 Intel Deutschland GmbH
4  * Copyright (C) 2018-2022 Intel Corporation
5  */
6 #include <linux/module.h>
7 #include <linux/stringify.h>
8 #include "iwl-config.h"
9 #include "iwl-prph.h"
10 #include "fw/api/txq.h"
11
12 /* Highest firmware API version supported */
13 #define IWL_22000_UCODE_API_MAX 78
14 #define IWL_22500_UCODE_API_MAX 77
15
16 /* Lowest firmware API version supported */
17 #define IWL_22000_UCODE_API_MIN 39
18
19 /* NVM versions */
20 #define IWL_22000_NVM_VERSION           0x0a1d
21
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
29
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_FM4_B_FW_PRE           "iwlwifi-bz-a0-fm4-b0-"
69 #define IWL_GL_A_FM_A_FW_PRE            "iwlwifi-gl-a0-fm-a0-"
70 #define IWL_GL_B_FM_B_FW_PRE            "iwlwifi-gl-b0-fm-b0-"
71 #define IWL_BZ_Z_GF_A_FW_PRE            "iwlwifi-bz-z0-gf-a0-"
72 #define IWL_BNJ_A_FM_A_FW_PRE           "iwlwifi-BzBnj-a0-fm-a0-"
73 #define IWL_BNJ_A_FM4_A_FW_PRE          "iwlwifi-BzBnj-a0-fm4-a0-"
74 #define IWL_BNJ_B_FM4_B_FW_PRE          "iwlwifi-BzBnj-b0-fm4-b0-"
75 #define IWL_BNJ_A_GF_A_FW_PRE           "iwlwifi-BzBnj-a0-gf-a0-"
76 #define IWL_BNJ_B_GF_A_FW_PRE           "iwlwifi-BzBnj-b0-gf-a0-"
77 #define IWL_BNJ_A_GF4_A_FW_PRE          "iwlwifi-BzBnj-a0-gf4-a0-"
78 #define IWL_BNJ_B_GF4_A_FW_PRE          "iwlwifi-BzBnj-b0-gf4-a0-"
79 #define IWL_BNJ_A_HR_A_FW_PRE           "iwlwifi-BzBnj-a0-hr-b0-"
80 #define IWL_BNJ_A_HR_B_FW_PRE           "iwlwifi-BzBnj-a0-hr-b0-"
81 #define IWL_BNJ_B_HR_A_FW_PRE           "iwlwifi-BzBnj-b0-hr-b0-"
82 #define IWL_BNJ_B_HR_B_FW_PRE           "iwlwifi-BzBnj-b0-hr-b0-"
83 #define IWL_BNJ_B_FM_B_FW_PRE           "iwlwifi-BzBnj-b0-fm-b0-"
84
85
86 #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
87         IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
88 #define IWL_QNJ_B_HR_B_MODULE_FIRMWARE(api)     \
89         IWL_QNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
90 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
91         IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
92 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
93         IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
94 #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
95         IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
96 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
97         IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
98 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api)             \
99         IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
100 #define IWL_CC_A_MODULE_FIRMWARE(api)                   \
101         IWL_CC_A_FW_PRE __stringify(api) ".ucode"
102 #define IWL_SO_A_JF_B_MODULE_FIRMWARE(api) \
103         IWL_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
104 #define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
105         IWL_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
106 #define IWL_SO_A_GF_A_MODULE_FIRMWARE(api) \
107         IWL_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
108 #define IWL_TY_A_GF_A_MODULE_FIRMWARE(api) \
109         IWL_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
110 #define IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(api) \
111         IWL_SNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
112 #define IWL_SNJ_A_GF_A_MODULE_FIRMWARE(api) \
113         IWL_SNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
114 #define IWL_SNJ_A_HR_B_MODULE_FIRMWARE(api) \
115         IWL_SNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
116 #define IWL_SNJ_A_JF_B_MODULE_FIRMWARE(api) \
117         IWL_SNJ_A_JF_B_FW_PRE __stringify(api) ".ucode"
118 #define IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(api)           \
119         IWL_MA_A_HR_B_FW_PRE __stringify(api) ".ucode"
120 #define IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(api)           \
121         IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
122 #define IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(api)          \
123         IWL_MA_A_GF4_A_FW_PRE __stringify(api) ".ucode"
124 #define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
125         IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
126 #define IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(api)           \
127         IWL_MA_A_FM_A_FW_PRE __stringify(api) ".ucode"
128 #define IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(api)           \
129         IWL_MA_B_HR_B_FW_PRE __stringify(api) ".ucode"
130 #define IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(api)           \
131         IWL_MA_B_GF_A_FW_PRE __stringify(api) ".ucode"
132 #define IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(api)          \
133         IWL_MA_B_GF4_A_FW_PRE __stringify(api) ".ucode"
134 #define IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(api) \
135         IWL_MA_B_MR_A_FW_PRE __stringify(api) ".ucode"
136 #define IWL_MA_B_FM_A_FW_MODULE_FIRMWARE(api)           \
137         IWL_MA_B_FM_A_FW_PRE __stringify(api) ".ucode"
138 #define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
139         IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
140 #define IWL_BZ_A_HR_A_MODULE_FIRMWARE(api) \
141         IWL_BZ_A_HR_A_FW_PRE __stringify(api) ".ucode"
142 #define IWL_BZ_A_HR_B_MODULE_FIRMWARE(api) \
143         IWL_BZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
144 #define IWL_BZ_A_GF_A_MODULE_FIRMWARE(api) \
145         IWL_BZ_A_GF_A_FW_PRE __stringify(api) ".ucode"
146 #define IWL_BZ_A_GF4_A_MODULE_FIRMWARE(api) \
147         IWL_BZ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
148 #define IWL_BZ_A_MR_A_MODULE_FIRMWARE(api) \
149         IWL_BZ_A_MR_A_FW_PRE __stringify(api) ".ucode"
150 #define IWL_BZ_A_FM_A_MODULE_FIRMWARE(api) \
151         IWL_BZ_A_FM_A_FW_PRE __stringify(api) ".ucode"
152 #define IWL_BZ_A_FM4_A_MODULE_FIRMWARE(api) \
153         IWL_BZ_A_FM4_A_FW_PRE __stringify(api) ".ucode"
154 #define IWL_BZ_A_FM_B_MODULE_FIRMWARE(api) \
155         IWL_BZ_A_FM_B_FW_PRE __stringify(api) ".ucode"
156 #define IWL_BZ_A_FM4_B_MODULE_FIRMWARE(api) \
157         IWL_BZ_A_FM4_B_FW_PRE __stringify(api) ".ucode"
158 #define IWL_GL_A_FM_A_MODULE_FIRMWARE(api) \
159         IWL_GL_A_FM_A_FW_PRE __stringify(api) ".ucode"
160 #define IWL_GL_B_FM_B_MODULE_FIRMWARE(api) \
161         IWL_GL_B_FM_B_FW_PRE __stringify(api) ".ucode"
162 #define IWL_BNJ_A_FM_A_MODULE_FIRMWARE(api) \
163         IWL_BNJ_A_FM_A_FW_PRE __stringify(api) ".ucode"
164 #define IWL_BNJ_A_FM4_A_MODULE_FIRMWARE(api) \
165         IWL_BNJ_A_FM4_A_FW_PRE __stringify(api) ".ucode"
166 #define IWL_BNJ_B_FM4_B_MODULE_FIRMWARE(api) \
167         IWL_BNJ_B_FM4_B_FW_PRE __stringify(api) ".ucode"
168 #define IWL_BNJ_A_GF_A_MODULE_FIRMWARE(api) \
169         IWL_BNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
170 #define IWL_BNJ_B_GF_A_MODULE_FIRMWARE(api) \
171         IWL_BNJ_B_GF_A_FW_PRE __stringify(api) ".ucode"
172 #define IWL_BNJ_A_GF4_A_MODULE_FIRMWARE(api) \
173         IWL_BNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
174 #define IWL_BNJ_B_GF4_A_MODULE_FIRMWARE(api) \
175         IWL_BNJ_B_GF4_A_FW_PRE __stringify(api) ".ucode"
176 #define IWL_BNJ_A_HR_A_MODULE_FIRMWARE(api) \
177         IWL_BNJ_A_HR_A_FW_PRE __stringify(api) ".ucode"
178 #define IWL_BNJ_A_HR_B_MODULE_FIRMWARE(api) \
179         IWL_BNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
180 #define IWL_BNJ_B_HR_A_MODULE_FIRMWARE(api) \
181         IWL_BNJ_B_HR_A_FW_PRE __stringify(api) ".ucode"
182 #define IWL_BNJ_B_HR_B_MODULE_FIRMWARE(api) \
183         IWL_BNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
184 #define IWL_BNJ_B_FM_B_MODULE_FIRMWARE(api) \
185         IWL_BNJ_B_FM_B_FW_PRE __stringify(api) ".ucode"
186
187 static const struct iwl_base_params iwl_22000_base_params = {
188         .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
189         .num_of_queues = 512,
190         .max_tfd_queue_size = 256,
191         .shadow_ram_support = true,
192         .led_compensation = 57,
193         .wd_timeout = IWL_LONG_WD_TIMEOUT,
194         .max_event_log_size = 512,
195         .shadow_reg_enable = true,
196         .pcie_l1_allowed = true,
197 };
198
199 static const struct iwl_base_params iwl_ax210_base_params = {
200         .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
201         .num_of_queues = 512,
202         .max_tfd_queue_size = 65536,
203         .shadow_ram_support = true,
204         .led_compensation = 57,
205         .wd_timeout = IWL_LONG_WD_TIMEOUT,
206         .max_event_log_size = 512,
207         .shadow_reg_enable = true,
208         .pcie_l1_allowed = true,
209 };
210
211 static const struct iwl_ht_params iwl_22000_ht_params = {
212         .stbc = true,
213         .ldpc = true,
214         .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
215                       BIT(NL80211_BAND_6GHZ),
216 };
217
218 static const struct iwl_ht_params iwl_gl_a_ht_params = {
219         .stbc = false, /* we explicitly disable STBC for GL step A */
220         .ldpc = true,
221         .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
222                       BIT(NL80211_BAND_6GHZ),
223 };
224
225 #define IWL_DEVICE_22000_COMMON                                         \
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,                              \
251         .mon_smem_regs = {                                              \
252                 .write_ptr = {                                          \
253                         .addr = LDBG_M2S_BUF_WPTR,                      \
254                         .mask = LDBG_M2S_BUF_WPTR_VAL_MSK,              \
255         },                                                              \
256                 .cycle_cnt = {                                          \
257                         .addr = LDBG_M2S_BUF_WRAP_CNT,                  \
258                         .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK,          \
259                 },                                                      \
260         }
261
262 #define IWL_DEVICE_22500                                                \
263         IWL_DEVICE_22000_COMMON,                                        \
264         .ucode_api_max = IWL_22500_UCODE_API_MAX,                       \
265         .trans.device_family = IWL_DEVICE_FAMILY_22000,                 \
266         .trans.base_params = &iwl_22000_base_params,                    \
267         .gp2_reg_addr = 0xa02c68,                                       \
268         .mon_dram_regs = {                                              \
269                 .write_ptr = {                                          \
270                         .addr = MON_BUFF_WRPTR_VER2,                    \
271                         .mask = 0xffffffff,                             \
272                 },                                                      \
273                 .cycle_cnt = {                                          \
274                         .addr = MON_BUFF_CYCLE_CNT_VER2,                \
275                         .mask = 0xffffffff,                             \
276                 },                                                      \
277         }
278
279 #define IWL_DEVICE_AX210                                                \
280         IWL_DEVICE_22000_COMMON,                                        \
281         .ucode_api_max = IWL_22000_UCODE_API_MAX,                       \
282         .trans.umac_prph_offset = 0x300000,                             \
283         .trans.device_family = IWL_DEVICE_FAMILY_AX210,                 \
284         .trans.base_params = &iwl_ax210_base_params,                    \
285         .min_txq_size = 128,                                            \
286         .gp2_reg_addr = 0xd02c68,                                       \
287         .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_HE,           \
288         .mon_dram_regs = {                                              \
289                 .write_ptr = {                                          \
290                         .addr = DBGC_CUR_DBGBUF_STATUS,                 \
291                         .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK,      \
292                 },                                                      \
293                 .cycle_cnt = {                                          \
294                         .addr = DBGC_DBGBUF_WRAP_AROUND,                \
295                         .mask = 0xffffffff,                             \
296                 },                                                      \
297                 .cur_frag = {                                           \
298                         .addr = DBGC_CUR_DBGBUF_STATUS,                 \
299                         .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK,         \
300                 },                                                      \
301         }
302
303 #define IWL_DEVICE_BZ_COMMON                                            \
304         .ucode_api_max = IWL_22000_UCODE_API_MAX,                       \
305         .ucode_api_min = IWL_22000_UCODE_API_MIN,                       \
306         .led_mode = IWL_LED_RF_STATE,                                   \
307         .nvm_hw_section_num = 10,                                       \
308         .non_shared_ant = ANT_B,                                        \
309         .dccm_offset = IWL_22000_DCCM_OFFSET,                           \
310         .dccm_len = IWL_22000_DCCM_LEN,                                 \
311         .dccm2_offset = IWL_22000_DCCM2_OFFSET,                         \
312         .dccm2_len = IWL_22000_DCCM2_LEN,                               \
313         .smem_offset = IWL_22000_SMEM_OFFSET,                           \
314         .smem_len = IWL_22000_SMEM_LEN,                                 \
315         .apmg_not_supported = true,                                     \
316         .trans.mq_rx_supported = true,                                  \
317         .vht_mu_mimo_supported = true,                                  \
318         .mac_addr_from_csr = 0x30,                                      \
319         .nvm_ver = IWL_22000_NVM_VERSION,                               \
320         .trans.use_tfh = true,                                          \
321         .trans.rf_id = true,                                            \
322         .trans.gen2 = true,                                             \
323         .nvm_type = IWL_NVM_EXT,                                        \
324         .dbgc_supported = true,                                         \
325         .min_umac_error_event_table = 0xD0000,                          \
326         .d3_debug_data_base_addr = 0x401000,                            \
327         .d3_debug_data_length = 60 * 1024,                              \
328         .mon_smem_regs = {                                              \
329                 .write_ptr = {                                          \
330                         .addr = LDBG_M2S_BUF_WPTR,                      \
331                         .mask = LDBG_M2S_BUF_WPTR_VAL_MSK,              \
332         },                                                              \
333                 .cycle_cnt = {                                          \
334                         .addr = LDBG_M2S_BUF_WRAP_CNT,                  \
335                         .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK,          \
336                 },                                                      \
337         },                                                              \
338         .trans.umac_prph_offset = 0x300000,                             \
339         .trans.device_family = IWL_DEVICE_FAMILY_BZ,                    \
340         .trans.base_params = &iwl_ax210_base_params,                    \
341         .min_txq_size = 128,                                            \
342         .gp2_reg_addr = 0xd02c68,                                       \
343         .min_ba_txq_size = IWL_DEFAULT_QUEUE_SIZE_EHT,                  \
344         .mon_dram_regs = {                                              \
345                 .write_ptr = {                                          \
346                         .addr = DBGC_CUR_DBGBUF_STATUS,                 \
347                         .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK,      \
348                 },                                                      \
349                 .cycle_cnt = {                                          \
350                         .addr = DBGC_DBGBUF_WRAP_AROUND,                \
351                         .mask = 0xffffffff,                             \
352                 },                                                      \
353                 .cur_frag = {                                           \
354                         .addr = DBGC_CUR_DBGBUF_STATUS,                 \
355                         .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK,         \
356                 },                                                      \
357         },                                                              \
358         .mon_dbgi_regs = {                                              \
359                 .write_ptr = {                                          \
360                         .addr = DBGI_SRAM_FIFO_POINTERS,                \
361                         .mask = DBGI_SRAM_FIFO_POINTERS_WR_PTR_MSK,     \
362                 },                                                      \
363         }
364
365 #define IWL_DEVICE_BZ                                                   \
366         IWL_DEVICE_BZ_COMMON,                                           \
367         .ht_params = &iwl_22000_ht_params
368
369 #define IWL_DEVICE_GL_A                                                 \
370         IWL_DEVICE_BZ_COMMON,                                           \
371         .ht_params = &iwl_gl_a_ht_params
372
373 const struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
374         .mq_rx_supported = true,
375         .use_tfh = true,
376         .rf_id = true,
377         .gen2 = true,
378         .device_family = IWL_DEVICE_FAMILY_22000,
379         .base_params = &iwl_22000_base_params,
380 };
381
382 const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
383         .mq_rx_supported = true,
384         .use_tfh = true,
385         .rf_id = true,
386         .gen2 = true,
387         .device_family = IWL_DEVICE_FAMILY_22000,
388         .base_params = &iwl_22000_base_params,
389         .integrated = true,
390         .xtal_latency = 500,
391         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
392 };
393
394 const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
395         .mq_rx_supported = true,
396         .use_tfh = true,
397         .rf_id = true,
398         .gen2 = true,
399         .device_family = IWL_DEVICE_FAMILY_22000,
400         .base_params = &iwl_22000_base_params,
401         .integrated = true,
402         .xtal_latency = 1820,
403         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
404 };
405
406 const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
407         .mq_rx_supported = true,
408         .use_tfh = true,
409         .rf_id = true,
410         .gen2 = true,
411         .device_family = IWL_DEVICE_FAMILY_22000,
412         .base_params = &iwl_22000_base_params,
413         .integrated = true,
414         .xtal_latency = 12000,
415         .low_latency_xtal = true,
416         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
417 };
418
419 const struct iwl_cfg_trans_params iwl_snj_trans_cfg = {
420         .mq_rx_supported = true,
421         .use_tfh = true,
422         .rf_id = true,
423         .gen2 = true,
424         .device_family = IWL_DEVICE_FAMILY_AX210,
425         .base_params = &iwl_ax210_base_params,
426         .umac_prph_offset = 0x300000,
427 };
428
429 const struct iwl_cfg_trans_params iwl_so_trans_cfg = {
430         .mq_rx_supported = true,
431         .use_tfh = true,
432         .rf_id = true,
433         .gen2 = true,
434         .device_family = IWL_DEVICE_FAMILY_AX210,
435         .base_params = &iwl_ax210_base_params,
436         .umac_prph_offset = 0x300000,
437         .integrated = true,
438         /* TODO: the following values need to be checked */
439         .xtal_latency = 500,
440         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
441 };
442
443 const struct iwl_cfg_trans_params iwl_so_long_latency_trans_cfg = {
444         .mq_rx_supported = true,
445         .use_tfh = true,
446         .rf_id = true,
447         .gen2 = true,
448         .device_family = IWL_DEVICE_FAMILY_AX210,
449         .base_params = &iwl_ax210_base_params,
450         .umac_prph_offset = 0x300000,
451         .integrated = true,
452         .low_latency_xtal = true,
453         .xtal_latency = 12000,
454         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
455 };
456
457 const struct iwl_cfg_trans_params iwl_so_long_latency_imr_trans_cfg = {
458         .mq_rx_supported = true,
459         .use_tfh = true,
460         .rf_id = true,
461         .gen2 = true,
462         .device_family = IWL_DEVICE_FAMILY_AX210,
463         .base_params = &iwl_ax210_base_params,
464         .umac_prph_offset = 0x300000,
465         .integrated = true,
466         .low_latency_xtal = true,
467         .xtal_latency = 12000,
468         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
469         .imr_enabled = true,
470 };
471
472 /*
473  * If the device doesn't support HE, no need to have that many buffers.
474  * 22000 devices can split multiple frames into a single RB, so fewer are
475  * needed; AX210 cannot (but use smaller RBs by default) - these sizes
476  * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
477  * additional overhead to account for processing time.
478  */
479 #define IWL_NUM_RBDS_NON_HE             512
480 #define IWL_NUM_RBDS_22000_HE           2048
481 #define IWL_NUM_RBDS_AX210_HE           4096
482
483 /*
484  * All JF radio modules are part of the 9000 series, but the MAC part
485  * looks more like 22000.  That's why this device is here, but called
486  * 9560 nevertheless.
487  */
488 const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
489         .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
490         IWL_DEVICE_22500,
491         .num_rbds = IWL_NUM_RBDS_NON_HE,
492 };
493
494 const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
495         .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
496         IWL_DEVICE_22500,
497         .num_rbds = IWL_NUM_RBDS_NON_HE,
498 };
499
500 const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
501         .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
502         IWL_DEVICE_22500,
503         /*
504          * This device doesn't support receiving BlockAck with a large bitmap
505          * so we need to restrict the size of transmitted aggregation to the
506          * HT size; mac80211 would otherwise pick the HE max (256) by default.
507          */
508         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
509         .num_rbds = IWL_NUM_RBDS_NON_HE,
510 };
511
512 const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
513         .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
514         IWL_DEVICE_22500,
515         /*
516          * This device doesn't support receiving BlockAck with a large bitmap
517          * so we need to restrict the size of transmitted aggregation to the
518          * HT size; mac80211 would otherwise pick the HE max (256) by default.
519          */
520         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
521         .num_rbds = IWL_NUM_RBDS_NON_HE,
522 };
523
524 const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
525         .device_family = IWL_DEVICE_FAMILY_22000,
526         .base_params = &iwl_22000_base_params,
527         .mq_rx_supported = true,
528         .use_tfh = true,
529         .rf_id = true,
530         .gen2 = true,
531         .bisr_workaround = 1,
532 };
533
534 const struct iwl_cfg_trans_params iwl_ma_trans_cfg = {
535         .device_family = IWL_DEVICE_FAMILY_AX210,
536         .base_params = &iwl_ax210_base_params,
537         .mq_rx_supported = true,
538         .use_tfh = true,
539         .rf_id = true,
540         .gen2 = true,
541         .integrated = true,
542         .umac_prph_offset = 0x300000
543 };
544
545 const struct iwl_cfg_trans_params iwl_bz_trans_cfg = {
546         .device_family = IWL_DEVICE_FAMILY_BZ,
547         .base_params = &iwl_ax210_base_params,
548         .mq_rx_supported = true,
549         .use_tfh = true,
550         .rf_id = true,
551         .gen2 = true,
552         .integrated = true,
553         .umac_prph_offset = 0x300000,
554         .xtal_latency = 12000,
555         .low_latency_xtal = true,
556         .ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
557 };
558
559 const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
560 const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
561 const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
562 const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
563 const char iwl_ax204_name[] = "Intel(R) Wi-Fi 6 AX204 160MHz";
564 const char iwl_ax211_name[] = "Intel(R) Wi-Fi 6E AX211 160MHz";
565 const char iwl_ax221_name[] = "Intel(R) Wi-Fi 6E AX221 160MHz";
566 const char iwl_ax231_name[] = "Intel(R) Wi-Fi 6E AX231 160MHz";
567 const char iwl_ax411_name[] = "Intel(R) Wi-Fi 6E AX411 160MHz";
568 const char iwl_bz_name[] = "Intel(R) TBD Bz device";
569
570 const char iwl_ax200_killer_1650w_name[] =
571         "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
572 const char iwl_ax200_killer_1650x_name[] =
573         "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
574 const char iwl_ax201_killer_1650s_name[] =
575         "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
576 const char iwl_ax201_killer_1650i_name[] =
577         "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
578 const char iwl_ax210_killer_1675w_name[] =
579         "Killer(R) Wi-Fi 6E AX1675w 160MHz Wireless Network Adapter (210D2W)";
580 const char iwl_ax210_killer_1675x_name[] =
581         "Killer(R) Wi-Fi 6E AX1675x 160MHz Wireless Network Adapter (210NGW)";
582 const char iwl_ax211_killer_1675s_name[] =
583         "Killer(R) Wi-Fi 6E AX1675s 160MHz Wireless Network Adapter (211NGW)";
584 const char iwl_ax211_killer_1675i_name[] =
585         "Killer(R) Wi-Fi 6E AX1675i 160MHz Wireless Network Adapter (211NGW)";
586 const char iwl_ax411_killer_1690s_name[] =
587         "Killer(R) Wi-Fi 6E AX1690s 160MHz Wireless Network Adapter (411D2W)";
588 const char iwl_ax411_killer_1690i_name[] =
589         "Killer(R) Wi-Fi 6E AX1690i 160MHz Wireless Network Adapter (411NGW)";
590
591 const struct iwl_cfg iwl_qu_b0_hr1_b0 = {
592         .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
593         IWL_DEVICE_22500,
594         /*
595          * This device doesn't support receiving BlockAck with a large bitmap
596          * so we need to restrict the size of transmitted aggregation to the
597          * HT size; mac80211 would otherwise pick the HE max (256) by default.
598          */
599         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
600         .tx_with_siso_diversity = true,
601         .num_rbds = IWL_NUM_RBDS_22000_HE,
602 };
603
604 const struct iwl_cfg iwl_qu_b0_hr_b0 = {
605         .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
606         IWL_DEVICE_22500,
607         /*
608          * This device doesn't support receiving BlockAck with a large bitmap
609          * so we need to restrict the size of transmitted aggregation to the
610          * HT size; mac80211 would otherwise pick the HE max (256) by default.
611          */
612         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
613         .num_rbds = IWL_NUM_RBDS_22000_HE,
614 };
615
616 const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
617         .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
618         .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
619         IWL_DEVICE_22500,
620         /*
621          * This device doesn't support receiving BlockAck with a large bitmap
622          * so we need to restrict the size of transmitted aggregation to the
623          * HT size; mac80211 would otherwise pick the HE max (256) by default.
624          */
625         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
626         .num_rbds = IWL_NUM_RBDS_22000_HE,
627 };
628
629 const struct iwl_cfg iwl_qu_c0_hr1_b0 = {
630         .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
631         IWL_DEVICE_22500,
632         /*
633          * This device doesn't support receiving BlockAck with a large bitmap
634          * so we need to restrict the size of transmitted aggregation to the
635          * HT size; mac80211 would otherwise pick the HE max (256) by default.
636          */
637         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
638         .tx_with_siso_diversity = true,
639         .num_rbds = IWL_NUM_RBDS_22000_HE,
640 };
641
642 const struct iwl_cfg iwl_qu_c0_hr_b0 = {
643         .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
644         IWL_DEVICE_22500,
645         /*
646          * This device doesn't support receiving BlockAck with a large bitmap
647          * so we need to restrict the size of transmitted aggregation to the
648          * HT size; mac80211 would otherwise pick the HE max (256) by default.
649          */
650         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
651         .num_rbds = IWL_NUM_RBDS_22000_HE,
652 };
653
654 const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
655         .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
656         .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
657         IWL_DEVICE_22500,
658         /*
659          * This device doesn't support receiving BlockAck with a large bitmap
660          * so we need to restrict the size of transmitted aggregation to the
661          * HT size; mac80211 would otherwise pick the HE max (256) by default.
662          */
663         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
664         .num_rbds = IWL_NUM_RBDS_22000_HE,
665 };
666
667 const struct iwl_cfg iwl_quz_a0_hr1_b0 = {
668         .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
669         IWL_DEVICE_22500,
670         /*
671          * This device doesn't support receiving BlockAck with a large bitmap
672          * so we need to restrict the size of transmitted aggregation to the
673          * HT size; mac80211 would otherwise pick the HE max (256) by default.
674          */
675         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
676         .tx_with_siso_diversity = true,
677         .num_rbds = IWL_NUM_RBDS_22000_HE,
678 };
679
680 const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
681         .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
682         .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
683         IWL_DEVICE_22500,
684         /*
685          * This device doesn't support receiving BlockAck with a large bitmap
686          * so we need to restrict the size of transmitted aggregation to the
687          * HT size; mac80211 would otherwise pick the HE max (256) by default.
688          */
689         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
690         .num_rbds = IWL_NUM_RBDS_22000_HE,
691 };
692
693 const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
694         .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
695         .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
696         IWL_DEVICE_22500,
697         /*
698          * This device doesn't support receiving BlockAck with a large bitmap
699          * so we need to restrict the size of transmitted aggregation to the
700          * HT size; mac80211 would otherwise pick the HE max (256) by default.
701          */
702         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
703         .num_rbds = IWL_NUM_RBDS_22000_HE,
704 };
705
706 const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
707         .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
708         .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
709         IWL_DEVICE_22500,
710         /*
711          * This device doesn't support receiving BlockAck with a large bitmap
712          * so we need to restrict the size of transmitted aggregation to the
713          * HT size; mac80211 would otherwise pick the HE max (256) by default.
714          */
715         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
716         .num_rbds = IWL_NUM_RBDS_22000_HE,
717 };
718
719 const struct iwl_cfg iwl_ax200_cfg_cc = {
720         .fw_name_pre = IWL_CC_A_FW_PRE,
721         IWL_DEVICE_22500,
722         /*
723          * This device doesn't support receiving BlockAck with a large bitmap
724          * so we need to restrict the size of transmitted aggregation to the
725          * HT size; mac80211 would otherwise pick the HE max (256) by default.
726          */
727         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
728         .num_rbds = IWL_NUM_RBDS_22000_HE,
729 };
730
731 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
732         .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
733         .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
734         IWL_DEVICE_22500,
735         /*
736          * This device doesn't support receiving BlockAck with a large bitmap
737          * so we need to restrict the size of transmitted aggregation to the
738          * HT size; mac80211 would otherwise pick the HE max (256) by default.
739          */
740         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
741         .num_rbds = IWL_NUM_RBDS_22000_HE,
742 };
743
744 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
745         .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
746         .fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
747         IWL_DEVICE_22500,
748         /*
749          * This device doesn't support receiving BlockAck with a large bitmap
750          * so we need to restrict the size of transmitted aggregation to the
751          * HT size; mac80211 would otherwise pick the HE max (256) by default.
752          */
753         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
754         .num_rbds = IWL_NUM_RBDS_22000_HE,
755 };
756
757 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
758         .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
759         .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
760         IWL_DEVICE_22500,
761         /*
762          * This device doesn't support receiving BlockAck with a large bitmap
763          * so we need to restrict the size of transmitted aggregation to the
764          * HT size; mac80211 would otherwise pick the HE max (256) by default.
765          */
766         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
767         .num_rbds = IWL_NUM_RBDS_22000_HE,
768 };
769
770 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
771         .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
772         .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
773         IWL_DEVICE_22500,
774         /*
775          * This device doesn't support receiving BlockAck with a large bitmap
776          * so we need to restrict the size of transmitted aggregation to the
777          * HT size; mac80211 would otherwise pick the HE max (256) by default.
778          */
779         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
780         .num_rbds = IWL_NUM_RBDS_22000_HE,
781 };
782
783 const struct iwl_cfg iwl_qnj_b0_hr_b0_cfg = {
784         .fw_name_pre = IWL_QNJ_B_HR_B_FW_PRE,
785         IWL_DEVICE_22500,
786         /*
787          * This device doesn't support receiving BlockAck with a large bitmap
788          * so we need to restrict the size of transmitted aggregation to the
789          * HT size; mac80211 would otherwise pick the HE max (256) by default.
790          */
791         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
792         .num_rbds = IWL_NUM_RBDS_22000_HE,
793 };
794
795 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_b0 = {
796         .name = "Intel(R) Wireless-AC 9560 160MHz",
797         .fw_name_pre = IWL_SO_A_JF_B_FW_PRE,
798         IWL_DEVICE_AX210,
799         .num_rbds = IWL_NUM_RBDS_NON_HE,
800 };
801
802 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
803         .name = iwl_ax211_name,
804         .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
805         .uhb_supported = true,
806         IWL_DEVICE_AX210,
807         .num_rbds = IWL_NUM_RBDS_AX210_HE,
808 };
809
810 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long = {
811         .name = iwl_ax211_name,
812         .fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
813         .uhb_supported = true,
814         IWL_DEVICE_AX210,
815         .num_rbds = IWL_NUM_RBDS_AX210_HE,
816         .trans.xtal_latency = 12000,
817         .trans.low_latency_xtal = true,
818 };
819
820 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
821         .name = "Intel(R) Wi-Fi 6 AX210 160MHz",
822         .fw_name_pre = IWL_TY_A_GF_A_FW_PRE,
823         .uhb_supported = true,
824         IWL_DEVICE_AX210,
825         .num_rbds = IWL_NUM_RBDS_AX210_HE,
826 };
827
828 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
829         .name = iwl_ax411_name,
830         .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
831         .uhb_supported = true,
832         IWL_DEVICE_AX210,
833         .num_rbds = IWL_NUM_RBDS_AX210_HE,
834 };
835
836 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long = {
837         .name = iwl_ax411_name,
838         .fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
839         .uhb_supported = true,
840         IWL_DEVICE_AX210,
841         .num_rbds = IWL_NUM_RBDS_AX210_HE,
842         .trans.xtal_latency = 12000,
843         .trans.low_latency_xtal = true,
844 };
845
846 const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
847         .name = iwl_ax411_name,
848         .fw_name_pre = IWL_SNJ_A_GF4_A_FW_PRE,
849         .uhb_supported = true,
850         IWL_DEVICE_AX210,
851         .num_rbds = IWL_NUM_RBDS_AX210_HE,
852 };
853
854 const struct iwl_cfg iwlax211_cfg_snj_gf_a0 = {
855         .name = iwl_ax211_name,
856         .fw_name_pre = IWL_SNJ_A_GF_A_FW_PRE,
857         .uhb_supported = true,
858         IWL_DEVICE_AX210,
859         .num_rbds = IWL_NUM_RBDS_AX210_HE,
860 };
861
862 const struct iwl_cfg iwl_cfg_snj_hr_b0 = {
863         .fw_name_pre = IWL_SNJ_A_HR_B_FW_PRE,
864         .uhb_supported = true,
865         IWL_DEVICE_AX210,
866         .num_rbds = IWL_NUM_RBDS_AX210_HE,
867 };
868
869 const struct iwl_cfg iwl_cfg_snj_a0_jf_b0 = {
870         .fw_name_pre = IWL_SNJ_A_JF_B_FW_PRE,
871         .uhb_supported = true,
872         IWL_DEVICE_AX210,
873         .num_rbds = IWL_NUM_RBDS_AX210_HE,
874 };
875
876 const struct iwl_cfg iwl_cfg_ma_a0_hr_b0 = {
877         .fw_name_pre = IWL_MA_A_HR_B_FW_PRE,
878         .uhb_supported = true,
879         IWL_DEVICE_AX210,
880         .num_rbds = IWL_NUM_RBDS_AX210_HE,
881 };
882
883 const struct iwl_cfg iwl_cfg_ma_a0_gf_a0 = {
884         .fw_name_pre = IWL_MA_A_GF_A_FW_PRE,
885         .uhb_supported = true,
886         IWL_DEVICE_AX210,
887         .num_rbds = IWL_NUM_RBDS_AX210_HE,
888 };
889
890 const struct iwl_cfg iwl_cfg_ma_a0_gf4_a0 = {
891         .fw_name_pre = IWL_MA_A_GF4_A_FW_PRE,
892         .uhb_supported = true,
893         IWL_DEVICE_AX210,
894         .num_rbds = IWL_NUM_RBDS_AX210_HE,
895 };
896
897 const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
898         .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
899         .uhb_supported = true,
900         IWL_DEVICE_AX210,
901         .num_rbds = IWL_NUM_RBDS_AX210_HE,
902 };
903
904 const struct iwl_cfg iwl_cfg_ma_a0_ms_a0 = {
905         .fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
906         .uhb_supported = false,
907         IWL_DEVICE_AX210,
908         .num_rbds = IWL_NUM_RBDS_AX210_HE,
909 };
910
911 const struct iwl_cfg iwl_cfg_ma_b0_fm_a0 = {
912         .fw_name_pre = IWL_MA_B_FM_A_FW_PRE,
913         .uhb_supported = true,
914         IWL_DEVICE_AX210,
915         .num_rbds = IWL_NUM_RBDS_AX210_HE,
916 };
917
918 const struct iwl_cfg iwl_cfg_ma_b0_hr_b0 = {
919         .fw_name_pre = IWL_MA_B_HR_B_FW_PRE,
920         .uhb_supported = true,
921         IWL_DEVICE_AX210,
922         .num_rbds = IWL_NUM_RBDS_AX210_HE,
923 };
924
925 const struct iwl_cfg iwl_cfg_ma_b0_gf_a0 = {
926         .fw_name_pre = IWL_MA_B_GF_A_FW_PRE,
927         .uhb_supported = true,
928         IWL_DEVICE_AX210,
929         .num_rbds = IWL_NUM_RBDS_AX210_HE,
930 };
931
932 const struct iwl_cfg iwl_cfg_ma_b0_gf4_a0 = {
933         .fw_name_pre = IWL_MA_B_GF4_A_FW_PRE,
934         .uhb_supported = true,
935         IWL_DEVICE_AX210,
936         .num_rbds = IWL_NUM_RBDS_AX210_HE,
937 };
938
939 const struct iwl_cfg iwl_cfg_ma_b0_mr_a0 = {
940         .fw_name_pre = IWL_MA_B_MR_A_FW_PRE,
941         .uhb_supported = true,
942         IWL_DEVICE_AX210,
943         .num_rbds = IWL_NUM_RBDS_AX210_HE,
944 };
945
946 const struct iwl_cfg iwl_cfg_so_a0_ms_a0 = {
947         .fw_name_pre = IWL_SO_A_MR_A_FW_PRE,
948         .uhb_supported = false,
949         IWL_DEVICE_AX210,
950         .num_rbds = IWL_NUM_RBDS_AX210_HE,
951 };
952
953 const struct iwl_cfg iwl_cfg_ma_a0_fm_a0 = {
954         .fw_name_pre = IWL_MA_A_FM_A_FW_PRE,
955         .uhb_supported = true,
956         IWL_DEVICE_AX210,
957         .num_rbds = IWL_NUM_RBDS_AX210_HE,
958 };
959
960 const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
961         .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
962         .uhb_supported = true,
963         IWL_DEVICE_AX210,
964         .num_rbds = IWL_NUM_RBDS_AX210_HE,
965 };
966
967 const struct iwl_cfg iwl_cfg_snj_a0_ms_a0 = {
968         .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
969         .uhb_supported = false,
970         IWL_DEVICE_AX210,
971         .num_rbds = IWL_NUM_RBDS_AX210_HE,
972 };
973
974 const struct iwl_cfg iwl_cfg_so_a0_hr_a0 = {
975         .fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
976         IWL_DEVICE_AX210,
977         .num_rbds = IWL_NUM_RBDS_AX210_HE,
978 };
979
980 const struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = {
981         .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
982         IWL_DEVICE_22500,
983         /*
984          * This device doesn't support receiving BlockAck with a large bitmap
985          * so we need to restrict the size of transmitted aggregation to the
986          * HT size; mac80211 would otherwise pick the HE max (256) by default.
987          */
988         .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
989         .num_rbds = IWL_NUM_RBDS_22000_HE,
990 };
991
992 const struct iwl_cfg iwl_cfg_bz_a0_hr_a0 = {
993         .fw_name_pre = IWL_BZ_A_HR_A_FW_PRE,
994         .uhb_supported = true,
995         IWL_DEVICE_BZ,
996         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
997         .num_rbds = IWL_NUM_RBDS_AX210_HE,
998 };
999
1000 const struct iwl_cfg iwl_cfg_bz_a0_hr_b0 = {
1001         .fw_name_pre = IWL_BZ_A_HR_B_FW_PRE,
1002         .uhb_supported = true,
1003         IWL_DEVICE_BZ,
1004         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1005         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1006 };
1007
1008 const struct iwl_cfg iwl_cfg_bz_a0_gf_a0 = {
1009         .fw_name_pre = IWL_BZ_A_GF_A_FW_PRE,
1010         .uhb_supported = true,
1011         IWL_DEVICE_BZ,
1012         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1013         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1014 };
1015
1016 const struct iwl_cfg iwl_cfg_bz_a0_gf4_a0 = {
1017         .fw_name_pre = IWL_BZ_A_GF4_A_FW_PRE,
1018         .uhb_supported = true,
1019         IWL_DEVICE_BZ,
1020         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1021         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1022 };
1023
1024 const struct iwl_cfg iwl_cfg_bz_a0_mr_a0 = {
1025         .fw_name_pre = IWL_BZ_A_MR_A_FW_PRE,
1026         .uhb_supported = true,
1027         IWL_DEVICE_BZ,
1028         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1029         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1030 };
1031
1032 const struct iwl_cfg iwl_cfg_bz_a0_fm_a0 = {
1033         .fw_name_pre = IWL_BZ_A_FM_A_FW_PRE,
1034         .uhb_supported = true,
1035         IWL_DEVICE_BZ,
1036         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1037         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1038 };
1039
1040 const struct iwl_cfg iwl_cfg_bz_a0_fm4_a0 = {
1041         .fw_name_pre = IWL_BZ_A_FM4_A_FW_PRE,
1042         .uhb_supported = true,
1043         IWL_DEVICE_BZ,
1044         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1045         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1046 };
1047
1048 const struct iwl_cfg iwl_cfg_bz_a0_fm_b0 = {
1049         .fw_name_pre = IWL_BZ_A_FM_B_FW_PRE,
1050         .uhb_supported = true,
1051         IWL_DEVICE_BZ,
1052         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1053         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1054 };
1055
1056 const struct iwl_cfg iwl_cfg_bz_a0_fm4_b0 = {
1057         .fw_name_pre = IWL_BZ_A_FM4_B_FW_PRE,
1058         .uhb_supported = true,
1059         IWL_DEVICE_BZ,
1060         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1061         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1062 };
1063
1064 const struct iwl_cfg iwl_cfg_gl_a0_fm_a0 = {
1065         .fw_name_pre = IWL_GL_A_FM_A_FW_PRE,
1066         .uhb_supported = true,
1067         IWL_DEVICE_GL_A,
1068         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1069         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1070 };
1071
1072 const struct iwl_cfg iwl_cfg_gl_b0_fm_b0 = {
1073         .fw_name_pre = IWL_GL_B_FM_B_FW_PRE,
1074         .uhb_supported = true,
1075         IWL_DEVICE_BZ,
1076         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1077         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1078 };
1079
1080 const struct iwl_cfg iwl_cfg_bz_z0_gf_a0 = {
1081         .fw_name_pre = IWL_BZ_Z_GF_A_FW_PRE,
1082         .uhb_supported = true,
1083         IWL_DEVICE_BZ,
1084         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1085         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1086 };
1087
1088 const struct iwl_cfg iwl_cfg_bnj_a0_fm_a0 = {
1089         .fw_name_pre = IWL_BNJ_A_FM_A_FW_PRE,
1090         .uhb_supported = true,
1091         IWL_DEVICE_BZ,
1092         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1093         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1094 };
1095
1096 const struct iwl_cfg iwl_cfg_bnj_a0_fm4_a0 = {
1097         .fw_name_pre = IWL_BNJ_A_FM4_A_FW_PRE,
1098         .uhb_supported = true,
1099         IWL_DEVICE_BZ,
1100         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1101         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1102 };
1103
1104 const struct iwl_cfg iwl_cfg_bnj_b0_fm4_b0 = {
1105         .fw_name_pre = IWL_BNJ_B_FM4_B_FW_PRE,
1106         .uhb_supported = true,
1107         IWL_DEVICE_BZ,
1108         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1109         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1110 };
1111
1112 const struct iwl_cfg iwl_cfg_bnj_a0_gf_a0 = {
1113         .fw_name_pre = IWL_BNJ_A_GF_A_FW_PRE,
1114         .uhb_supported = true,
1115         IWL_DEVICE_BZ,
1116         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1117         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1118 };
1119
1120 const struct iwl_cfg iwl_cfg_bnj_b0_gf_a0 = {
1121         .fw_name_pre = IWL_BNJ_B_GF_A_FW_PRE,
1122         .uhb_supported = true,
1123         IWL_DEVICE_BZ,
1124         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1125         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1126 };
1127
1128 const struct iwl_cfg iwl_cfg_bnj_a0_gf4_a0 = {
1129         .fw_name_pre = IWL_BNJ_A_GF4_A_FW_PRE,
1130         .uhb_supported = true,
1131         IWL_DEVICE_BZ,
1132         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1133         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1134 };
1135
1136 const struct iwl_cfg iwl_cfg_bnj_b0_gf4_a0 = {
1137         .fw_name_pre = IWL_BNJ_B_GF4_A_FW_PRE,
1138         .uhb_supported = true,
1139         IWL_DEVICE_BZ,
1140         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1141         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1142 };
1143
1144 const struct iwl_cfg iwl_cfg_bnj_a0_hr_a0 = {
1145         .fw_name_pre = IWL_BNJ_A_HR_A_FW_PRE,
1146         .uhb_supported = true,
1147         IWL_DEVICE_BZ,
1148         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1149         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1150 };
1151
1152 const struct iwl_cfg iwl_cfg_bnj_a0_hr_b0 = {
1153         .fw_name_pre = IWL_BNJ_A_HR_B_FW_PRE,
1154         .uhb_supported = true,
1155         IWL_DEVICE_BZ,
1156         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1157         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1158 };
1159
1160 const struct iwl_cfg iwl_cfg_bnj_b0_hr_a0 = {
1161         .fw_name_pre = IWL_BNJ_B_HR_A_FW_PRE,
1162         .uhb_supported = true,
1163         IWL_DEVICE_BZ,
1164         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1165         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1166 };
1167
1168 const struct iwl_cfg iwl_cfg_bnj_b0_hr_b0 = {
1169         .fw_name_pre = IWL_BNJ_B_HR_B_FW_PRE,
1170         .uhb_supported = true,
1171         IWL_DEVICE_BZ,
1172         .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
1173         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1174 };
1175
1176 const struct iwl_cfg iwl_cfg_bnj_b0_fm_b0 = {
1177         .fw_name_pre = IWL_BNJ_B_FM_B_FW_PRE,
1178         .uhb_supported = true,
1179         IWL_DEVICE_BZ,
1180         .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
1181         .num_rbds = IWL_NUM_RBDS_AX210_HE,
1182 };
1183 MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1184 MODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1185 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1186 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1187 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1188 MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1189 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1190 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22500_UCODE_API_MAX));
1191 MODULE_FIRMWARE(IWL_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1192 MODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1193 MODULE_FIRMWARE(IWL_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1194 MODULE_FIRMWARE(IWL_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1195 MODULE_FIRMWARE(IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1196 MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1197 MODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1198 MODULE_FIRMWARE(IWL_SNJ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1199 MODULE_FIRMWARE(IWL_MA_A_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1200 MODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1201 MODULE_FIRMWARE(IWL_MA_A_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1202 MODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1203 MODULE_FIRMWARE(IWL_MA_A_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1204 MODULE_FIRMWARE(IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1205 MODULE_FIRMWARE(IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1206 MODULE_FIRMWARE(IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1207 MODULE_FIRMWARE(IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1208 MODULE_FIRMWARE(IWL_MA_B_FM_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1209 MODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1210 MODULE_FIRMWARE(IWL_BZ_A_HR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1211 MODULE_FIRMWARE(IWL_BZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1212 MODULE_FIRMWARE(IWL_BZ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1213 MODULE_FIRMWARE(IWL_BZ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1214 MODULE_FIRMWARE(IWL_BZ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1215 MODULE_FIRMWARE(IWL_BZ_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1216 MODULE_FIRMWARE(IWL_BZ_A_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1217 MODULE_FIRMWARE(IWL_GL_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1218 MODULE_FIRMWARE(IWL_BNJ_A_FM_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1219 MODULE_FIRMWARE(IWL_BNJ_A_FM4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1220 MODULE_FIRMWARE(IWL_BNJ_B_FM4_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1221 MODULE_FIRMWARE(IWL_BNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1222 MODULE_FIRMWARE(IWL_BNJ_B_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1223 MODULE_FIRMWARE(IWL_BNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1224 MODULE_FIRMWARE(IWL_BNJ_B_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1225 MODULE_FIRMWARE(IWL_BNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1226 MODULE_FIRMWARE(IWL_BNJ_B_HR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1227 MODULE_FIRMWARE(IWL_BNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1228 MODULE_FIRMWARE(IWL_BZ_A_FM4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1229 MODULE_FIRMWARE(IWL_BZ_A_FM4_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1230 MODULE_FIRMWARE(IWL_GL_B_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
1231 MODULE_FIRMWARE(IWL_BNJ_B_FM_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));