Commit | Line | Data |
---|---|---|
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 | 129 | static 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 | 141 | static 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 | ||
153 | static 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 |
239 | const 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 | ||
245 | const 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 | ||
252 | const 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 |
258 | const 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 |
271 | const 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 |
283 | const 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 | ||
295 | const 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 |
307 | const 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 |
319 | const 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 | ||
331 | const 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 | ||
343 | const 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 |
355 | const 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 | ||
368 | const 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 | ||
381 | const 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 | */ | |
399 | const 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 | ||
405 | const 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 | ||
411 | const 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 |
417 | const 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 |
423 | const 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 | ||
429 | const 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 | ||
435 | const 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 | ||
441 | const 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 |
447 | const 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 |
459 | const 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 | ||
473 | const 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 | ||
487 | const 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 | ||
501 | const 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 | ||
515 | const 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 | ||
529 | const 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 |
543 | const 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 | ||
549 | const 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 | 555 | const 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 | ||
567 | const 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 | ||
579 | const 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 | ||
591 | const 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 |
603 | const 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 | ||
615 | const 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 | 627 | const 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 |
639 | const 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 |
651 | const 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 | ||
657 | const 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 | 663 | const 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 | ||
670 | const 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 |
677 | const 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 |
683 | MODULE_FIRMWARE(IWL_22000_HR_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
684 | MODULE_FIRMWARE(IWL_22000_JF_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | |
33708052 LC |
685 | MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
686 | MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | |
2f7a3863 | 687 | MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
a7d544d6 | 688 | MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
ab27926d | 689 | MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
debec2f2 | 690 | MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
658521fc | 691 | MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
81edb6ad | 692 | MODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
8093bb6d | 693 | MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
ff911dca ST |
694 | MODULE_FIRMWARE(IWL_22000_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |
695 | MODULE_FIRMWARE(IWL_22000_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | |
696 | MODULE_FIRMWARE(IWL_22000_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); | |
697 | MODULE_FIRMWARE(IWL_22000_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |