iwlwifi: remove IWL_DEVICE_22560/IWL_DEVICE_FAMILY_22560
[linux-2.6-block.git] / drivers / net / wireless / intel / iwlwifi / cfg / 22000.c
CommitLineData
2f7a3863
LC
1/******************************************************************************
2 *
3 * This file is provided under a dual BSD/GPLv2 license. When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * GPL LICENSE SUMMARY
7 *
8 * Copyright(c) 2015-2017 Intel Deutschland GmbH
ea695b7c 9 * Copyright (C) 2018-2019 Intel Corporation
2f7a3863
LC
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * BSD LICENSE
21 *
22 * Copyright(c) 2015-2017 Intel Deutschland GmbH
ea695b7c 23 * Copyright (C) 2018-2019 Intel Corporation
2f7a3863
LC
24 * All rights reserved.
25 *
26 * Redistribution and use in source and binary forms, with or without
27 * modification, are permitted provided that the following conditions
28 * are met:
29 *
30 * * Redistributions of source code must retain the above copyright
31 * notice, this list of conditions and the following disclaimer.
32 * * Redistributions in binary form must reproduce the above copyright
33 * notice, this list of conditions and the following disclaimer in
34 * the documentation and/or other materials provided with the
35 * distribution.
36 * * Neither the name Intel Corporation nor the names of its
37 * contributors may be used to endorse or promote products derived
38 * from this software without specific prior written permission.
39 *
40 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
41 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
42 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
43 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
44 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
46 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
47 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
48 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
49 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
50 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51 *
52 *****************************************************************************/
53
54#include <linux/module.h>
55#include <linux/stringify.h>
56#include "iwl-config.h"
593fae3e 57#include "iwl-prph.h"
2f7a3863
LC
58
59/* Highest firmware API version supported */
ffe5619f 60#define IWL_22000_UCODE_API_MAX 51
2f7a3863
LC
61
62/* Lowest firmware API version supported */
8edbfaa1 63#define IWL_22000_UCODE_API_MIN 39
2f7a3863
LC
64
65/* NVM versions */
66#define IWL_22000_NVM_VERSION 0x0a1d
2f7a3863
LC
67
68/* Memory offsets and lengths */
69#define IWL_22000_DCCM_OFFSET 0x800000 /* LMAC1 */
70#define IWL_22000_DCCM_LEN 0x10000 /* LMAC1 */
71#define IWL_22000_DCCM2_OFFSET 0x880000
72#define IWL_22000_DCCM2_LEN 0x8000
73#define IWL_22000_SMEM_OFFSET 0x400000
74#define IWL_22000_SMEM_LEN 0xD0000
75
33708052
LC
76#define IWL_22000_JF_FW_PRE "iwlwifi-Qu-a0-jf-b0-"
77#define IWL_22000_HR_FW_PRE "iwlwifi-Qu-a0-hr-a0-"
78#define IWL_22000_HR_CDB_FW_PRE "iwlwifi-QuIcp-z0-hrcdb-a0-"
79#define IWL_22000_HR_A_F0_FW_PRE "iwlwifi-QuQnj-f0-hr-a0-"
ab27926d
LC
80#define IWL_22000_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-"
81#define IWL_22000_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-"
33708052 82#define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"
a7d544d6 83#define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
ab27926d 84#define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
a7d544d6 85#define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
debec2f2 86#define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
658521fc 87#define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-"
81edb6ad 88#define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
8093bb6d 89#define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"
ff911dca
ST
90#define IWL_22000_SO_A_JF_B_FW_PRE "iwlwifi-so-a0-jf-b0-"
91#define IWL_22000_SO_A_HR_B_FW_PRE "iwlwifi-so-a0-hr-b0-"
92#define IWL_22000_SO_A_GF_A_FW_PRE "iwlwifi-so-a0-gf-a0-"
93#define IWL_22000_TY_A_GF_A_FW_PRE "iwlwifi-ty-a0-gf-a0-"
5bd757a6 94#define IWL_22000_SO_A_GF4_A_FW_PRE "iwlwifi-so-a0-gf4-a0-"
2f7a3863
LC
95
96#define IWL_22000_HR_MODULE_FIRMWARE(api) \
80b0ebd4 97 IWL_22000_HR_FW_PRE __stringify(api) ".ucode"
2f7a3863 98#define IWL_22000_JF_MODULE_FIRMWARE(api) \
80b0ebd4 99 IWL_22000_JF_FW_PRE __stringify(api) ".ucode"
33708052
LC
100#define IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(api) \
101 IWL_22000_HR_A_F0_FW_PRE __stringify(api) ".ucode"
ab27926d
LC
102#define IWL_22000_QU_B_HR_B_MODULE_FIRMWARE(api) \
103 IWL_22000_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
104#define IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(api) \
33708052 105 IWL_22000_HR_B_FW_PRE __stringify(api) ".ucode"
2f7a3863 106#define IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(api) \
80b0ebd4 107 IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode"
debec2f2
LC
108#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
109 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
658521fc
IZ
110#define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
111 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
a7d544d6
LC
112#define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
113 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
81edb6ad
LC
114#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
115 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
116#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
117 IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
118#define IWL_CC_A_MODULE_FIRMWARE(api) \
8093bb6d 119 IWL_CC_A_FW_PRE __stringify(api) ".ucode"
ff911dca
ST
120#define IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(api) \
121 IWL_22000_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
122#define IWL_22000_SO_A_HR_B_MODULE_FIRMWARE(api) \
123 IWL_22000_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
124#define IWL_22000_SO_A_GF_A_MODULE_FIRMWARE(api) \
125 IWL_22000_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
126#define IWL_22000_TY_A_GF_A_MODULE_FIRMWARE(api) \
127 IWL_22000_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
2f7a3863 128
2f7a3863 129static const struct iwl_base_params iwl_22000_base_params = {
3e2b49d6 130 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
2f7a3863 131 .num_of_queues = 512,
7b3e42ea
GBA
132 .max_tfd_queue_size = 256,
133 .shadow_ram_support = true,
134 .led_compensation = 57,
135 .wd_timeout = IWL_LONG_WD_TIMEOUT,
136 .max_event_log_size = 512,
137 .shadow_reg_enable = true,
138 .pcie_l1_allowed = true,
139};
140
3681021f 141static const struct iwl_base_params iwl_ax210_base_params = {
3e2b49d6 142 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
7b3e42ea
GBA
143 .num_of_queues = 512,
144 .max_tfd_queue_size = 65536,
2f7a3863
LC
145 .shadow_ram_support = true,
146 .led_compensation = 57,
147 .wd_timeout = IWL_LONG_WD_TIMEOUT,
148 .max_event_log_size = 512,
149 .shadow_reg_enable = true,
150 .pcie_l1_allowed = true,
151};
152
153static const struct iwl_ht_params iwl_22000_ht_params = {
154 .stbc = true,
155 .ldpc = true,
156 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
157};
158
5f01df3f 159#define IWL_DEVICE_22000_COMMON \
2f7a3863
LC
160 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
161 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
2f7a3863 162 .led_mode = IWL_LED_RF_STATE, \
4aeaccd6 163 .nvm_hw_section_num = 10, \
a4028772 164 .non_shared_ant = ANT_B, \
2f7a3863
LC
165 .dccm_offset = IWL_22000_DCCM_OFFSET, \
166 .dccm_len = IWL_22000_DCCM_LEN, \
167 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
168 .dccm2_len = IWL_22000_DCCM2_LEN, \
169 .smem_offset = IWL_22000_SMEM_OFFSET, \
170 .smem_len = IWL_22000_SMEM_LEN, \
171 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
172 .apmg_not_supported = true, \
79b6c8fe 173 .trans.mq_rx_supported = true, \
2f7a3863
LC
174 .vht_mu_mimo_supported = true, \
175 .mac_addr_from_csr = true, \
5f01df3f
GBA
176 .ht_params = &iwl_22000_ht_params, \
177 .nvm_ver = IWL_22000_NVM_VERSION, \
5f01df3f 178 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, \
79b6c8fe
LC
179 .trans.use_tfh = true, \
180 .trans.rf_id = true, \
181 .trans.gen2 = true, \
2f7a3863
LC
182 .nvm_type = IWL_NVM_EXT, \
183 .dbgc_supported = true, \
2d8c2615
SM
184 .min_umac_error_event_table = 0x400000, \
185 .d3_debug_data_base_addr = 0x401000, \
4c704534 186 .d3_debug_data_length = 60 * 1024, \
593fae3e
SM
187 .mon_smem_regs = { \
188 .write_ptr = { \
189 .addr = LDBG_M2S_BUF_WPTR, \
190 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
191 }, \
192 .cycle_cnt = { \
193 .addr = LDBG_M2S_BUF_WRAP_CNT, \
194 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
195 }, \
196 }
2f7a3863 197
5f01df3f
GBA
198#define IWL_DEVICE_22500 \
199 IWL_DEVICE_22000_COMMON, \
79b6c8fe
LC
200 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
201 .trans.base_params = &iwl_22000_base_params, \
202 .trans.csr = &iwl_csr_v1, \
593fae3e
SM
203 .gp2_reg_addr = 0xa02c68, \
204 .mon_dram_regs = { \
205 .write_ptr = { \
206 .addr = MON_BUFF_WRPTR_VER2, \
207 .mask = 0xffffffff, \
208 }, \
209 .cycle_cnt = { \
210 .addr = MON_BUFF_CYCLE_CNT_VER2, \
211 .mask = 0xffffffff, \
212 }, \
213 }
5f01df3f 214
ff911dca 215#define IWL_DEVICE_AX210 \
2c0c0240 216 IWL_DEVICE_22000_COMMON, \
79b6c8fe
LC
217 .trans.umac_prph_offset = 0x300000, \
218 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
3681021f 219 .trans.base_params = &iwl_ax210_base_params, \
79b6c8fe 220 .trans.csr = &iwl_csr_v1, \
afc1e3b4 221 .min_txq_size = 128, \
c30aef01 222 .gp2_reg_addr = 0xd02c68, \
593fae3e
SM
223 .min_256_ba_txq_size = 512, \
224 .mon_dram_regs = { \
225 .write_ptr = { \
226 .addr = DBGC_CUR_DBGBUF_STATUS, \
227 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
228 }, \
229 .cycle_cnt = { \
230 .addr = DBGC_DBGBUF_WRAP_AROUND, \
231 .mask = 0xffffffff, \
232 }, \
233 .cur_frag = { \
234 .addr = DBGC_CUR_DBGBUF_STATUS, \
235 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
236 }, \
237 }
ff911dca 238
2f7a3863
LC
239const struct iwl_cfg iwl22000_2ac_cfg_hr = {
240 .name = "Intel(R) Dual Band Wireless AC 22000",
241 .fw_name_pre = IWL_22000_HR_FW_PRE,
5f01df3f 242 IWL_DEVICE_22500,
2f7a3863
LC
243};
244
245const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = {
246 .name = "Intel(R) Dual Band Wireless AC 22000",
247 .fw_name_pre = IWL_22000_HR_CDB_FW_PRE,
5f01df3f 248 IWL_DEVICE_22500,
2f7a3863
LC
249 .cdb = true,
250};
251
252const struct iwl_cfg iwl22000_2ac_cfg_jf = {
253 .name = "Intel(R) Dual Band Wireless AC 22000",
254 .fw_name_pre = IWL_22000_JF_FW_PRE,
5f01df3f 255 IWL_DEVICE_22500,
2f7a3863
LC
256};
257
085486de
IZ
258const struct iwl_cfg iwl_ax101_cfg_qu_hr = {
259 .name = "Intel(R) Wi-Fi 6 AX101",
ab27926d
LC
260 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
261 IWL_DEVICE_22500,
262 /*
263 * This device doesn't support receiving BlockAck with a large bitmap
264 * so we need to restrict the size of transmitted aggregation to the
265 * HT size; mac80211 would otherwise pick the HE max (256) by default.
266 */
267 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5952e0ec 268 .tx_with_siso_diversity = true,
ab27926d
LC
269};
270
d151b0a2
IZ
271const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
272 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
273 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
274 IWL_DEVICE_22500,
275 /*
276 * This device doesn't support receiving BlockAck with a large bitmap
277 * so we need to restrict the size of transmitted aggregation to the
278 * HT size; mac80211 would otherwise pick the HE max (256) by default.
279 */
280 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
281};
282
a7d544d6
LC
283const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = {
284 .name = "Intel(R) Wi-Fi 6 AX101",
285 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
286 IWL_DEVICE_22500,
287 /*
288 * This device doesn't support receiving BlockAck with a large bitmap
289 * so we need to restrict the size of transmitted aggregation to the
290 * HT size; mac80211 would otherwise pick the HE max (256) by default.
291 */
292 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
293};
294
295const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
296 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
297 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
298 IWL_DEVICE_22500,
299 /*
300 * This device doesn't support receiving BlockAck with a large bitmap
301 * so we need to restrict the size of transmitted aggregation to the
302 * HT size; mac80211 would otherwise pick the HE max (256) by default.
303 */
304 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
305};
306
debec2f2
LC
307const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
308 .name = "Intel(R) Wi-Fi 6 AX101",
309 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
310 IWL_DEVICE_22500,
311 /*
312 * This device doesn't support receiving BlockAck with a large bitmap
313 * so we need to restrict the size of transmitted aggregation to the
314 * HT size; mac80211 would otherwise pick the HE max (256) by default.
315 */
316 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
317};
318
a976bfb4
IZ
319const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
320 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
321 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
322 IWL_DEVICE_22500,
323 /*
324 * This device doesn't support receiving BlockAck with a large bitmap
325 * so we need to restrict the size of transmitted aggregation to the
326 * HT size; mac80211 would otherwise pick the HE max (256) by default.
327 */
328 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
329};
330
331const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
332 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
333 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
334 IWL_DEVICE_22500,
335 /*
336 * This device doesn't support receiving BlockAck with a large bitmap
337 * so we need to restrict the size of transmitted aggregation to the
338 * HT size; mac80211 would otherwise pick the HE max (256) by default.
339 */
340 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
341};
342
343const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
344 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
345 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
346 IWL_DEVICE_22500,
347 /*
348 * This device doesn't support receiving BlockAck with a large bitmap
349 * so we need to restrict the size of transmitted aggregation to the
350 * HT size; mac80211 would otherwise pick the HE max (256) by default.
351 */
352 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
353};
354
0d5bad14
IZ
355const struct iwl_cfg iwl_ax200_cfg_cc = {
356 .name = "Intel(R) Wi-Fi 6 AX200 160MHz",
8093bb6d
LC
357 .fw_name_pre = IWL_CC_A_FW_PRE,
358 IWL_DEVICE_22500,
359 /*
360 * This device doesn't support receiving BlockAck with a large bitmap
361 * so we need to restrict the size of transmitted aggregation to the
362 * HT size; mac80211 would otherwise pick the HE max (256) by default.
363 */
364 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
79b6c8fe 365 .trans.bisr_workaround = 1,
8093bb6d
LC
366};
367
368const struct iwl_cfg killer1650x_2ax_cfg = {
0d5bad14 369 .name = "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)",
8093bb6d
LC
370 .fw_name_pre = IWL_CC_A_FW_PRE,
371 IWL_DEVICE_22500,
372 /*
373 * This device doesn't support receiving BlockAck with a large bitmap
374 * so we need to restrict the size of transmitted aggregation to the
375 * HT size; mac80211 would otherwise pick the HE max (256) by default.
376 */
377 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
79b6c8fe 378 .trans.bisr_workaround = 1,
8093bb6d
LC
379};
380
381const struct iwl_cfg killer1650w_2ax_cfg = {
0d5bad14 382 .name = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)",
8093bb6d
LC
383 .fw_name_pre = IWL_CC_A_FW_PRE,
384 IWL_DEVICE_22500,
385 /*
386 * This device doesn't support receiving BlockAck with a large bitmap
387 * so we need to restrict the size of transmitted aggregation to the
388 * HT size; mac80211 would otherwise pick the HE max (256) by default.
389 */
390 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
79b6c8fe 391 .trans.bisr_workaround = 1,
8093bb6d
LC
392};
393
ab27926d
LC
394/*
395 * All JF radio modules are part of the 9000 series, but the MAC part
396 * looks more like 22000. That's why this device is here, but called
397 * 9560 nevertheless.
398 */
399const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0 = {
400 .name = "Intel(R) Wireless-AC 9461",
401 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
402 IWL_DEVICE_22500,
403};
404
405const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0 = {
406 .name = "Intel(R) Wireless-AC 9462",
407 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
408 IWL_DEVICE_22500,
409};
410
411const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0 = {
412 .name = "Intel(R) Wireless-AC 9560",
413 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
414 IWL_DEVICE_22500,
415};
416
98f0d01a
IZ
417const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0 = {
418 .name = "Intel(R) Wireless-AC 9560 160MHz",
419 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
420 IWL_DEVICE_22500,
421};
422
a7d544d6
LC
423const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0 = {
424 .name = "Intel(R) Wireless-AC 9461",
425 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
426 IWL_DEVICE_22500,
427};
428
429const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0 = {
430 .name = "Intel(R) Wireless-AC 9462",
431 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
432 IWL_DEVICE_22500,
433};
434
435const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0 = {
436 .name = "Intel(R) Wireless-AC 9560",
437 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
438 IWL_DEVICE_22500,
439};
440
441const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0 = {
442 .name = "Intel(R) Wireless-AC 9560 160MHz",
443 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
444 IWL_DEVICE_22500,
445};
446
81edb6ad
LC
447const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = {
448 .name = "Intel(R) Wireless-AC 9560 160MHz",
449 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
450 IWL_DEVICE_22500,
451 /*
452 * This device doesn't support receiving BlockAck with a large bitmap
453 * so we need to restrict the size of transmitted aggregation to the
454 * HT size; mac80211 would otherwise pick the HE max (256) by default.
455 */
456 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
457};
458
658521fc
IZ
459const struct iwl_cfg iwl9560_2ac_cfg_quz_a0_jf_b0_soc = {
460 .name = "Intel(R) Wireless-AC 9560 160MHz",
461 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
462 IWL_DEVICE_22500,
463 /*
464 * This device doesn't support receiving BlockAck with a large bitmap
465 * so we need to restrict the size of transmitted aggregation to the
466 * HT size; mac80211 would otherwise pick the HE max (256) by default.
467 */
468 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
469 .integrated = true,
470 .soc_latency = 5000,
471};
472
473const struct iwl_cfg iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc = {
474 .name = "Intel(R) Wireless-AC 9560 160MHz",
475 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
476 IWL_DEVICE_22500,
477 /*
478 * This device doesn't support receiving BlockAck with a large bitmap
479 * so we need to restrict the size of transmitted aggregation to the
480 * HT size; mac80211 would otherwise pick the HE max (256) by default.
481 */
482 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
483 .integrated = true,
484 .soc_latency = 5000,
485};
486
487const struct iwl_cfg iwl9461_2ac_cfg_quz_a0_jf_b0_soc = {
488 .name = "Intel(R) Dual Band Wireless AC 9461",
489 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
490 IWL_DEVICE_22500,
491 /*
492 * This device doesn't support receiving BlockAck with a large bitmap
493 * so we need to restrict the size of transmitted aggregation to the
494 * HT size; mac80211 would otherwise pick the HE max (256) by default.
495 */
496 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
497 .integrated = true,
498 .soc_latency = 5000,
499};
500
501const struct iwl_cfg iwl9462_2ac_cfg_quz_a0_jf_b0_soc = {
502 .name = "Intel(R) Dual Band Wireless AC 9462",
503 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
504 IWL_DEVICE_22500,
505 /*
506 * This device doesn't support receiving BlockAck with a large bitmap
507 * so we need to restrict the size of transmitted aggregation to the
508 * HT size; mac80211 would otherwise pick the HE max (256) by default.
509 */
510 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
511 .integrated = true,
512 .soc_latency = 5000,
513};
514
515const struct iwl_cfg iwl9560_killer_s_2ac_cfg_quz_a0_jf_b0_soc = {
516 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
517 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
518 IWL_DEVICE_22500,
519 /*
520 * This device doesn't support receiving BlockAck with a large bitmap
521 * so we need to restrict the size of transmitted aggregation to the
522 * HT size; mac80211 would otherwise pick the HE max (256) by default.
523 */
524 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
525 .integrated = true,
526 .soc_latency = 5000,
527};
528
529const struct iwl_cfg iwl9560_killer_i_2ac_cfg_quz_a0_jf_b0_soc = {
530 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
531 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
532 IWL_DEVICE_22500,
533 /*
534 * This device doesn't support receiving BlockAck with a large bitmap
535 * so we need to restrict the size of transmitted aggregation to the
536 * HT size; mac80211 would otherwise pick the HE max (256) by default.
537 */
538 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
539 .integrated = true,
540 .soc_latency = 5000,
541};
542
ab27926d
LC
543const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0 = {
544 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
545 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
546 IWL_DEVICE_22500,
547};
548
549const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0 = {
550 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
551 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
552 IWL_DEVICE_22500,
553};
554
5b74a936 555const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
0d5bad14 556 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
5b74a936
IZ
557 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
558 IWL_DEVICE_22500,
559 /*
560 * This device doesn't support receiving BlockAck with a large bitmap
561 * so we need to restrict the size of transmitted aggregation to the
562 * HT size; mac80211 would otherwise pick the HE max (256) by default.
563 */
564 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
565};
566
567const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
0d5bad14 568 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
5b74a936 569 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
b9500577
LC
570 IWL_DEVICE_22500,
571 /*
572 * This device doesn't support receiving BlockAck with a large bitmap
573 * so we need to restrict the size of transmitted aggregation to the
574 * HT size; mac80211 would otherwise pick the HE max (256) by default.
575 */
576 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
577};
578
579const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
580 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
581 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
582 IWL_DEVICE_22500,
583 /*
584 * This device doesn't support receiving BlockAck with a large bitmap
585 * so we need to restrict the size of transmitted aggregation to the
586 * HT size; mac80211 would otherwise pick the HE max (256) by default.
587 */
588 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
589};
590
591const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
592 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
593 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
5b74a936
IZ
594 IWL_DEVICE_22500,
595 /*
596 * This device doesn't support receiving BlockAck with a large bitmap
597 * so we need to restrict the size of transmitted aggregation to the
598 * HT size; mac80211 would otherwise pick the HE max (256) by default.
599 */
600 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
601};
602
ab27926d
LC
603const struct iwl_cfg iwl22000_2ax_cfg_jf = {
604 .name = "Intel(R) Dual Band Wireless AX 22000",
605 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
5f01df3f
GBA
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,
33708052
LC
613};
614
615const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
616 .name = "Intel(R) Dual Band Wireless AX 22000",
617 .fw_name_pre = IWL_22000_HR_A_F0_FW_PRE,
5f01df3f 618 IWL_DEVICE_22500,
2693de9f
JB
619 /*
620 * This device doesn't support receiving BlockAck with a large bitmap
621 * so we need to restrict the size of transmitted aggregation to the
622 * HT size; mac80211 would otherwise pick the HE max (256) by default.
623 */
624 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2f7a3863
LC
625};
626
33708052 627const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
2f7a3863 628 .name = "Intel(R) Dual Band Wireless AX 22000",
33708052 629 .fw_name_pre = IWL_22000_HR_B_FW_PRE,
5f01df3f
GBA
630 IWL_DEVICE_22500,
631 /*
632 * This device doesn't support receiving BlockAck with a large bitmap
633 * so we need to restrict the size of transmitted aggregation to the
634 * HT size; mac80211 would otherwise pick the HE max (256) by default.
635 */
636 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2f7a3863
LC
637};
638
2f7a3863
LC
639const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {
640 .name = "Intel(R) Dual Band Wireless AX 22000",
641 .fw_name_pre = IWL_22000_HR_A0_FW_PRE,
5f01df3f
GBA
642 IWL_DEVICE_22500,
643 /*
644 * This device doesn't support receiving BlockAck with a large bitmap
645 * so we need to restrict the size of transmitted aggregation to the
646 * HT size; mac80211 would otherwise pick the HE max (256) by default.
647 */
648 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
33708052
LC
649};
650
ff911dca
ST
651const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0 = {
652 .name = "Intel(R) Wireless-AC 9560 160MHz",
653 .fw_name_pre = IWL_22000_SO_A_JF_B_FW_PRE,
654 IWL_DEVICE_AX210,
655};
656
657const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0 = {
d151b0a2 658 .name = "Intel(R) Wi-Fi 7 AX210 160MHz",
ff911dca
ST
659 .fw_name_pre = IWL_22000_SO_A_HR_B_FW_PRE,
660 IWL_DEVICE_AX210,
661};
662
d151b0a2 663const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
ff911dca
ST
664 .name = "Intel(R) Wi-Fi 7 AX211 160MHz",
665 .fw_name_pre = IWL_22000_SO_A_GF_A_FW_PRE,
b15ef67c 666 .uhb_supported = true,
ff911dca
ST
667 IWL_DEVICE_AX210,
668};
669
670const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
671 .name = "Intel(R) Wi-Fi 7 AX210 160MHz",
672 .fw_name_pre = IWL_22000_TY_A_GF_A_FW_PRE,
b15ef67c 673 .uhb_supported = true,
ff911dca
ST
674 IWL_DEVICE_AX210,
675};
676
d151b0a2
IZ
677const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
678 .name = "Intel(R) Wi-Fi 7 AX411 160MHz",
5bd757a6 679 .fw_name_pre = IWL_22000_SO_A_GF4_A_FW_PRE,
ff911dca
ST
680 IWL_DEVICE_AX210,
681};
682
2f7a3863
LC
683MODULE_FIRMWARE(IWL_22000_HR_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
684MODULE_FIRMWARE(IWL_22000_JF_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
33708052
LC
685MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
686MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2f7a3863 687MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
a7d544d6 688MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
ab27926d 689MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
debec2f2 690MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
658521fc 691MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
81edb6ad 692MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
8093bb6d 693MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
ff911dca
ST
694MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
695MODULE_FIRMWARE(IWL_22000_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
696MODULE_FIRMWARE(IWL_22000_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
697MODULE_FIRMWARE(IWL_22000_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));