treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / drivers / net / wireless / intel / iwlwifi / cfg / 22000.c
bloba22a830019c08d5c8bba5ad406a595f43c522571
1 /******************************************************************************
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.
6 * GPL LICENSE SUMMARY
8 * Copyright(c) 2015-2017 Intel Deutschland GmbH
9 * Copyright (C) 2018-2019 Intel Corporation
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.
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.
20 * BSD LICENSE
22 * Copyright(c) 2015-2017 Intel Deutschland GmbH
23 * Copyright (C) 2018-2019 Intel Corporation
24 * All rights reserved.
26 * Redistribution and use in source and binary forms, with or without
27 * modification, are permitted provided that the following conditions
28 * are met:
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.
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.
52 *****************************************************************************/
54 #include <linux/module.h>
55 #include <linux/stringify.h>
56 #include "iwl-config.h"
57 #include "iwl-prph.h"
59 /* Highest firmware API version supported */
60 #define IWL_22000_UCODE_API_MAX 52
62 /* Lowest firmware API version supported */
63 #define IWL_22000_UCODE_API_MIN 39
65 /* NVM versions */
66 #define IWL_22000_NVM_VERSION 0x0a1d
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
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-"
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-"
82 #define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"
83 #define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
84 #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
85 #define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
86 #define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
87 #define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-"
88 #define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
89 #define IWL_CC_A_FW_PRE "iwlwifi-cc-a0-"
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-"
94 #define IWL_22000_SO_A_GF4_A_FW_PRE "iwlwifi-so-a0-gf4-a0-"
95 #define IWL_22000_SOSNJ_A_GF4_A_FW_PRE "iwlwifi-SoSnj-a0-gf4-a0-"
97 #define IWL_22000_HR_MODULE_FIRMWARE(api) \
98 IWL_22000_HR_FW_PRE __stringify(api) ".ucode"
99 #define IWL_22000_JF_MODULE_FIRMWARE(api) \
100 IWL_22000_JF_FW_PRE __stringify(api) ".ucode"
101 #define IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(api) \
102 IWL_22000_HR_A_F0_FW_PRE __stringify(api) ".ucode"
103 #define IWL_22000_QU_B_HR_B_MODULE_FIRMWARE(api) \
104 IWL_22000_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
105 #define IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(api) \
106 IWL_22000_HR_B_FW_PRE __stringify(api) ".ucode"
107 #define IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(api) \
108 IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode"
109 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
110 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
111 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
112 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
113 #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
114 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
115 #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
116 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
117 #define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
118 IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
119 #define IWL_CC_A_MODULE_FIRMWARE(api) \
120 IWL_CC_A_FW_PRE __stringify(api) ".ucode"
121 #define IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(api) \
122 IWL_22000_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
123 #define IWL_22000_SO_A_HR_B_MODULE_FIRMWARE(api) \
124 IWL_22000_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
125 #define IWL_22000_SO_A_GF_A_MODULE_FIRMWARE(api) \
126 IWL_22000_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
127 #define IWL_22000_TY_A_GF_A_MODULE_FIRMWARE(api) \
128 IWL_22000_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
130 static const struct iwl_base_params iwl_22000_base_params = {
131 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
132 .num_of_queues = 512,
133 .max_tfd_queue_size = 256,
134 .shadow_ram_support = true,
135 .led_compensation = 57,
136 .wd_timeout = IWL_LONG_WD_TIMEOUT,
137 .max_event_log_size = 512,
138 .shadow_reg_enable = true,
139 .pcie_l1_allowed = true,
142 static const struct iwl_base_params iwl_ax210_base_params = {
143 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
144 .num_of_queues = 512,
145 .max_tfd_queue_size = 65536,
146 .shadow_ram_support = true,
147 .led_compensation = 57,
148 .wd_timeout = IWL_LONG_WD_TIMEOUT,
149 .max_event_log_size = 512,
150 .shadow_reg_enable = true,
151 .pcie_l1_allowed = true,
154 static const struct iwl_ht_params iwl_22000_ht_params = {
155 .stbc = true,
156 .ldpc = true,
157 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
160 #define IWL_DEVICE_22000_COMMON \
161 .ucode_api_max = IWL_22000_UCODE_API_MAX, \
162 .ucode_api_min = IWL_22000_UCODE_API_MIN, \
163 .led_mode = IWL_LED_RF_STATE, \
164 .nvm_hw_section_num = 10, \
165 .non_shared_ant = ANT_B, \
166 .dccm_offset = IWL_22000_DCCM_OFFSET, \
167 .dccm_len = IWL_22000_DCCM_LEN, \
168 .dccm2_offset = IWL_22000_DCCM2_OFFSET, \
169 .dccm2_len = IWL_22000_DCCM2_LEN, \
170 .smem_offset = IWL_22000_SMEM_OFFSET, \
171 .smem_len = IWL_22000_SMEM_LEN, \
172 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
173 .apmg_not_supported = true, \
174 .trans.mq_rx_supported = true, \
175 .vht_mu_mimo_supported = true, \
176 .mac_addr_from_csr = true, \
177 .ht_params = &iwl_22000_ht_params, \
178 .nvm_ver = IWL_22000_NVM_VERSION, \
179 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, \
180 .trans.use_tfh = true, \
181 .trans.rf_id = true, \
182 .trans.gen2 = true, \
183 .nvm_type = IWL_NVM_EXT, \
184 .dbgc_supported = true, \
185 .min_umac_error_event_table = 0x400000, \
186 .d3_debug_data_base_addr = 0x401000, \
187 .d3_debug_data_length = 60 * 1024, \
188 .mon_smem_regs = { \
189 .write_ptr = { \
190 .addr = LDBG_M2S_BUF_WPTR, \
191 .mask = LDBG_M2S_BUF_WPTR_VAL_MSK, \
192 }, \
193 .cycle_cnt = { \
194 .addr = LDBG_M2S_BUF_WRAP_CNT, \
195 .mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK, \
196 }, \
199 #define IWL_DEVICE_22500 \
200 IWL_DEVICE_22000_COMMON, \
201 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
202 .trans.base_params = &iwl_22000_base_params, \
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 }, \
215 #define IWL_DEVICE_AX210 \
216 IWL_DEVICE_22000_COMMON, \
217 .trans.umac_prph_offset = 0x300000, \
218 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
219 .trans.base_params = &iwl_ax210_base_params, \
220 .min_txq_size = 128, \
221 .gp2_reg_addr = 0xd02c68, \
222 .min_256_ba_txq_size = 512, \
223 .mon_dram_regs = { \
224 .write_ptr = { \
225 .addr = DBGC_CUR_DBGBUF_STATUS, \
226 .mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK, \
227 }, \
228 .cycle_cnt = { \
229 .addr = DBGC_DBGBUF_WRAP_AROUND, \
230 .mask = 0xffffffff, \
231 }, \
232 .cur_frag = { \
233 .addr = DBGC_CUR_DBGBUF_STATUS, \
234 .mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK, \
235 }, \
239 * If the device doesn't support HE, no need to have that many buffers.
240 * 22000 devices can split multiple frames into a single RB, so fewer are
241 * needed; AX210 cannot (but use smaller RBs by default) - these sizes
242 * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
243 * additional overhead to account for processing time.
245 #define IWL_NUM_RBDS_NON_HE 512
246 #define IWL_NUM_RBDS_22000_HE 2048
247 #define IWL_NUM_RBDS_AX210_HE 4096
249 const struct iwl_cfg iwl_ax101_cfg_qu_hr = {
250 .name = "Intel(R) Wi-Fi 6 AX101",
251 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
252 IWL_DEVICE_22500,
254 * This device doesn't support receiving BlockAck with a large bitmap
255 * so we need to restrict the size of transmitted aggregation to the
256 * HT size; mac80211 would otherwise pick the HE max (256) by default.
258 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
259 .tx_with_siso_diversity = true,
260 .num_rbds = IWL_NUM_RBDS_22000_HE,
263 const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
264 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
265 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
266 IWL_DEVICE_22500,
268 * This device doesn't support receiving BlockAck with a large bitmap
269 * so we need to restrict the size of transmitted aggregation to the
270 * HT size; mac80211 would otherwise pick the HE max (256) by default.
272 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
273 .num_rbds = IWL_NUM_RBDS_22000_HE,
276 const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = {
277 .name = "Intel(R) Wi-Fi 6 AX101",
278 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
279 IWL_DEVICE_22500,
281 * This device doesn't support receiving BlockAck with a large bitmap
282 * so we need to restrict the size of transmitted aggregation to the
283 * HT size; mac80211 would otherwise pick the HE max (256) by default.
285 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
286 .num_rbds = IWL_NUM_RBDS_22000_HE,
289 const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
290 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
291 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
292 IWL_DEVICE_22500,
294 * This device doesn't support receiving BlockAck with a large bitmap
295 * so we need to restrict the size of transmitted aggregation to the
296 * HT size; mac80211 would otherwise pick the HE max (256) by default.
298 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
299 .num_rbds = IWL_NUM_RBDS_22000_HE,
302 const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
303 .name = "Intel(R) Wi-Fi 6 AX101",
304 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
305 IWL_DEVICE_22500,
307 * This device doesn't support receiving BlockAck with a large bitmap
308 * so we need to restrict the size of transmitted aggregation to the
309 * HT size; mac80211 would otherwise pick the HE max (256) by default.
311 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
312 .num_rbds = IWL_NUM_RBDS_22000_HE,
315 const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
316 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
317 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
318 IWL_DEVICE_22500,
320 * This device doesn't support receiving BlockAck with a large bitmap
321 * so we need to restrict the size of transmitted aggregation to the
322 * HT size; mac80211 would otherwise pick the HE max (256) by default.
324 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
325 .num_rbds = IWL_NUM_RBDS_22000_HE,
328 const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
329 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
330 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
331 IWL_DEVICE_22500,
333 * This device doesn't support receiving BlockAck with a large bitmap
334 * so we need to restrict the size of transmitted aggregation to the
335 * HT size; mac80211 would otherwise pick the HE max (256) by default.
337 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
338 .num_rbds = IWL_NUM_RBDS_22000_HE,
341 const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
342 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
343 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
344 IWL_DEVICE_22500,
346 * This device doesn't support receiving BlockAck with a large bitmap
347 * so we need to restrict the size of transmitted aggregation to the
348 * HT size; mac80211 would otherwise pick the HE max (256) by default.
350 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
351 .num_rbds = IWL_NUM_RBDS_22000_HE,
354 const struct iwl_cfg iwl_ax200_cfg_cc = {
355 .name = "Intel(R) Wi-Fi 6 AX200 160MHz",
356 .fw_name_pre = IWL_CC_A_FW_PRE,
357 IWL_DEVICE_22500,
359 * This device doesn't support receiving BlockAck with a large bitmap
360 * so we need to restrict the size of transmitted aggregation to the
361 * HT size; mac80211 would otherwise pick the HE max (256) by default.
363 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
364 .trans.bisr_workaround = 1,
365 .num_rbds = IWL_NUM_RBDS_22000_HE,
368 const struct iwl_cfg killer1650x_2ax_cfg = {
369 .name = "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)",
370 .fw_name_pre = IWL_CC_A_FW_PRE,
371 IWL_DEVICE_22500,
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.
377 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
378 .trans.bisr_workaround = 1,
379 .num_rbds = IWL_NUM_RBDS_22000_HE,
382 const struct iwl_cfg killer1650w_2ax_cfg = {
383 .name = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)",
384 .fw_name_pre = IWL_CC_A_FW_PRE,
385 IWL_DEVICE_22500,
387 * This device doesn't support receiving BlockAck with a large bitmap
388 * so we need to restrict the size of transmitted aggregation to the
389 * HT size; mac80211 would otherwise pick the HE max (256) by default.
391 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
392 .trans.bisr_workaround = 1,
393 .num_rbds = IWL_NUM_RBDS_22000_HE,
397 * All JF radio modules are part of the 9000 series, but the MAC part
398 * looks more like 22000. That's why this device is here, but called
399 * 9560 nevertheless.
401 const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0 = {
402 .name = "Intel(R) Wireless-AC 9461",
403 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
404 IWL_DEVICE_22500,
405 .num_rbds = IWL_NUM_RBDS_NON_HE,
408 const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0 = {
409 .name = "Intel(R) Wireless-AC 9462",
410 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
411 IWL_DEVICE_22500,
412 .num_rbds = IWL_NUM_RBDS_NON_HE,
415 const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0 = {
416 .name = "Intel(R) Wireless-AC 9560",
417 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
418 IWL_DEVICE_22500,
419 .num_rbds = IWL_NUM_RBDS_NON_HE,
422 const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0 = {
423 .name = "Intel(R) Wireless-AC 9560 160MHz",
424 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
425 IWL_DEVICE_22500,
426 .num_rbds = IWL_NUM_RBDS_NON_HE,
429 const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0 = {
430 .name = "Intel(R) Wireless-AC 9461",
431 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
432 IWL_DEVICE_22500,
433 .num_rbds = IWL_NUM_RBDS_NON_HE,
436 const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0 = {
437 .name = "Intel(R) Wireless-AC 9462",
438 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
439 IWL_DEVICE_22500,
440 .num_rbds = IWL_NUM_RBDS_NON_HE,
443 const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0 = {
444 .name = "Intel(R) Wireless-AC 9560",
445 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
446 IWL_DEVICE_22500,
447 .num_rbds = IWL_NUM_RBDS_NON_HE,
450 const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0 = {
451 .name = "Intel(R) Wireless-AC 9560 160MHz",
452 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
453 IWL_DEVICE_22500,
454 .num_rbds = IWL_NUM_RBDS_NON_HE,
457 const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = {
458 .name = "Intel(R) Wireless-AC 9560 160MHz",
459 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
460 IWL_DEVICE_22500,
462 * This device doesn't support receiving BlockAck with a large bitmap
463 * so we need to restrict the size of transmitted aggregation to the
464 * HT size; mac80211 would otherwise pick the HE max (256) by default.
466 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
467 .num_rbds = IWL_NUM_RBDS_NON_HE,
470 const struct iwl_cfg iwl9560_2ac_cfg_quz_a0_jf_b0_soc = {
471 .name = "Intel(R) Wireless-AC 9560 160MHz",
472 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
473 IWL_DEVICE_22500,
475 * This device doesn't support receiving BlockAck with a large bitmap
476 * so we need to restrict the size of transmitted aggregation to the
477 * HT size; mac80211 would otherwise pick the HE max (256) by default.
479 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
480 .integrated = true,
481 .soc_latency = 5000,
482 .num_rbds = IWL_NUM_RBDS_NON_HE,
485 const struct iwl_cfg iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc = {
486 .name = "Intel(R) Wireless-AC 9560 160MHz",
487 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
488 IWL_DEVICE_22500,
490 * This device doesn't support receiving BlockAck with a large bitmap
491 * so we need to restrict the size of transmitted aggregation to the
492 * HT size; mac80211 would otherwise pick the HE max (256) by default.
494 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
495 .integrated = true,
496 .soc_latency = 5000,
497 .num_rbds = IWL_NUM_RBDS_NON_HE,
500 const struct iwl_cfg iwl9461_2ac_cfg_quz_a0_jf_b0_soc = {
501 .name = "Intel(R) Dual Band Wireless AC 9461",
502 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
503 IWL_DEVICE_22500,
505 * This device doesn't support receiving BlockAck with a large bitmap
506 * so we need to restrict the size of transmitted aggregation to the
507 * HT size; mac80211 would otherwise pick the HE max (256) by default.
509 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
510 .integrated = true,
511 .soc_latency = 5000,
512 .num_rbds = IWL_NUM_RBDS_NON_HE,
515 const struct iwl_cfg iwl9462_2ac_cfg_quz_a0_jf_b0_soc = {
516 .name = "Intel(R) Dual Band Wireless AC 9462",
517 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
518 IWL_DEVICE_22500,
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.
524 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
525 .integrated = true,
526 .soc_latency = 5000,
527 .num_rbds = IWL_NUM_RBDS_NON_HE,
530 const struct iwl_cfg iwl9560_killer_s_2ac_cfg_quz_a0_jf_b0_soc = {
531 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
532 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
533 IWL_DEVICE_22500,
535 * This device doesn't support receiving BlockAck with a large bitmap
536 * so we need to restrict the size of transmitted aggregation to the
537 * HT size; mac80211 would otherwise pick the HE max (256) by default.
539 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
540 .integrated = true,
541 .soc_latency = 5000,
542 .num_rbds = IWL_NUM_RBDS_NON_HE,
545 const struct iwl_cfg iwl9560_killer_i_2ac_cfg_quz_a0_jf_b0_soc = {
546 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
547 .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
548 IWL_DEVICE_22500,
550 * This device doesn't support receiving BlockAck with a large bitmap
551 * so we need to restrict the size of transmitted aggregation to the
552 * HT size; mac80211 would otherwise pick the HE max (256) by default.
554 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
555 .integrated = true,
556 .soc_latency = 5000,
557 .num_rbds = IWL_NUM_RBDS_NON_HE,
560 const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0 = {
561 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
562 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
563 IWL_DEVICE_22500,
564 .num_rbds = IWL_NUM_RBDS_NON_HE,
567 const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0 = {
568 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
569 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
570 IWL_DEVICE_22500,
571 .num_rbds = IWL_NUM_RBDS_NON_HE,
574 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
575 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
576 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
577 IWL_DEVICE_22500,
579 * This device doesn't support receiving BlockAck with a large bitmap
580 * so we need to restrict the size of transmitted aggregation to the
581 * HT size; mac80211 would otherwise pick the HE max (256) by default.
583 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
584 .num_rbds = IWL_NUM_RBDS_22000_HE,
587 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
588 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
589 .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
590 IWL_DEVICE_22500,
592 * This device doesn't support receiving BlockAck with a large bitmap
593 * so we need to restrict the size of transmitted aggregation to the
594 * HT size; mac80211 would otherwise pick the HE max (256) by default.
596 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
597 .num_rbds = IWL_NUM_RBDS_22000_HE,
600 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
601 .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
602 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
603 IWL_DEVICE_22500,
605 * This device doesn't support receiving BlockAck with a large bitmap
606 * so we need to restrict the size of transmitted aggregation to the
607 * HT size; mac80211 would otherwise pick the HE max (256) by default.
609 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
610 .num_rbds = IWL_NUM_RBDS_22000_HE,
613 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
614 .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
615 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
616 IWL_DEVICE_22500,
618 * This device doesn't support receiving BlockAck with a large bitmap
619 * so we need to restrict the size of transmitted aggregation to the
620 * HT size; mac80211 would otherwise pick the HE max (256) by default.
622 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
623 .num_rbds = IWL_NUM_RBDS_22000_HE,
626 const struct iwl_cfg iwl22000_2ax_cfg_jf = {
627 .name = "Intel(R) Dual Band Wireless AX 22000",
628 .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
629 IWL_DEVICE_22500,
631 * This device doesn't support receiving BlockAck with a large bitmap
632 * so we need to restrict the size of transmitted aggregation to the
633 * HT size; mac80211 would otherwise pick the HE max (256) by default.
635 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
636 .num_rbds = IWL_NUM_RBDS_22000_HE,
639 const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
640 .name = "Intel(R) Dual Band Wireless AX 22000",
641 .fw_name_pre = IWL_22000_HR_A_F0_FW_PRE,
642 IWL_DEVICE_22500,
644 * This device doesn't support receiving BlockAck with a large bitmap
645 * so we need to restrict the size of transmitted aggregation to the
646 * HT size; mac80211 would otherwise pick the HE max (256) by default.
648 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
649 .num_rbds = IWL_NUM_RBDS_22000_HE,
652 const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
653 .name = "Intel(R) Dual Band Wireless AX 22000",
654 .fw_name_pre = IWL_22000_HR_B_FW_PRE,
655 IWL_DEVICE_22500,
657 * This device doesn't support receiving BlockAck with a large bitmap
658 * so we need to restrict the size of transmitted aggregation to the
659 * HT size; mac80211 would otherwise pick the HE max (256) by default.
661 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
662 .num_rbds = IWL_NUM_RBDS_22000_HE,
665 const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {
666 .name = "Intel(R) Dual Band Wireless AX 22000",
667 .fw_name_pre = IWL_22000_HR_A0_FW_PRE,
668 IWL_DEVICE_22500,
670 * This device doesn't support receiving BlockAck with a large bitmap
671 * so we need to restrict the size of transmitted aggregation to the
672 * HT size; mac80211 would otherwise pick the HE max (256) by default.
674 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
675 .num_rbds = IWL_NUM_RBDS_22000_HE,
678 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0 = {
679 .name = "Intel(R) Wireless-AC 9560 160MHz",
680 .fw_name_pre = IWL_22000_SO_A_JF_B_FW_PRE,
681 IWL_DEVICE_AX210,
682 .num_rbds = IWL_NUM_RBDS_NON_HE,
685 const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0 = {
686 .name = "Intel(R) Wi-Fi 7 AX210 160MHz",
687 .fw_name_pre = IWL_22000_SO_A_HR_B_FW_PRE,
688 IWL_DEVICE_AX210,
689 .num_rbds = IWL_NUM_RBDS_AX210_HE,
692 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
693 .name = "Intel(R) Wi-Fi 7 AX211 160MHz",
694 .fw_name_pre = IWL_22000_SO_A_GF_A_FW_PRE,
695 .uhb_supported = true,
696 IWL_DEVICE_AX210,
697 .num_rbds = IWL_NUM_RBDS_AX210_HE,
700 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
701 .name = "Intel(R) Wi-Fi 7 AX210 160MHz",
702 .fw_name_pre = IWL_22000_TY_A_GF_A_FW_PRE,
703 .uhb_supported = true,
704 IWL_DEVICE_AX210,
705 .num_rbds = IWL_NUM_RBDS_AX210_HE,
708 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
709 .name = "Intel(R) Wi-Fi 7 AX411 160MHz",
710 .fw_name_pre = IWL_22000_SO_A_GF4_A_FW_PRE,
711 .uhb_supported = true,
712 IWL_DEVICE_AX210,
713 .num_rbds = IWL_NUM_RBDS_AX210_HE,
716 const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
717 .name = "Intel(R) Wi-Fi 7 AX411 160MHz",
718 .fw_name_pre = IWL_22000_SOSNJ_A_GF4_A_FW_PRE,
719 .uhb_supported = true,
720 IWL_DEVICE_AX210,
721 .num_rbds = IWL_NUM_RBDS_AX210_HE,
724 MODULE_FIRMWARE(IWL_22000_HR_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
725 MODULE_FIRMWARE(IWL_22000_JF_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
726 MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
727 MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
728 MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
729 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
730 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
731 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
732 MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
733 MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
734 MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
735 MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
736 MODULE_FIRMWARE(IWL_22000_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
737 MODULE_FIRMWARE(IWL_22000_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
738 MODULE_FIRMWARE(IWL_22000_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));