xref: /openbmc/linux/drivers/net/wireless/intel/iwlwifi/cfg/22000.c (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
18e99ea8dSJohannes Berg // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
28e99ea8dSJohannes Berg /*
38e99ea8dSJohannes Berg  * Copyright (C) 2015-2017 Intel Deutschland GmbH
4dd5ff2aaSGregory Greenman  * Copyright (C) 2018-2023 Intel Corporation
58e99ea8dSJohannes Berg  */
62f7a3863SLuca Coelho #include <linux/module.h>
72f7a3863SLuca Coelho #include <linux/stringify.h>
82f7a3863SLuca Coelho #include "iwl-config.h"
9593fae3eSShahar S Matityahu #include "iwl-prph.h"
10d5399f11SMordechay Goodstein #include "fw/api/txq.h"
112f7a3863SLuca Coelho 
122f7a3863SLuca Coelho /* Highest firmware API version supported */
1319898ce9SJohannes Berg #define IWL_22000_UCODE_API_MAX	77
142f7a3863SLuca Coelho 
152f7a3863SLuca Coelho /* Lowest firmware API version supported */
16c648e926SJohannes Berg #define IWL_22000_UCODE_API_MIN	50
172f7a3863SLuca Coelho 
182f7a3863SLuca Coelho /* NVM versions */
192f7a3863SLuca Coelho #define IWL_22000_NVM_VERSION		0x0a1d
202f7a3863SLuca Coelho 
212f7a3863SLuca Coelho /* Memory offsets and lengths */
222f7a3863SLuca Coelho #define IWL_22000_DCCM_OFFSET		0x800000 /* LMAC1 */
232f7a3863SLuca Coelho #define IWL_22000_DCCM_LEN		0x10000 /* LMAC1 */
242f7a3863SLuca Coelho #define IWL_22000_DCCM2_OFFSET		0x880000
252f7a3863SLuca Coelho #define IWL_22000_DCCM2_LEN		0x8000
262f7a3863SLuca Coelho #define IWL_22000_SMEM_OFFSET		0x400000
272f7a3863SLuca Coelho #define IWL_22000_SMEM_LEN		0xD0000
282f7a3863SLuca Coelho 
29*31aeae24SJohannes Berg #define IWL_QU_B_HR_B_FW_PRE		"iwlwifi-Qu-b0-hr-b0"
30*31aeae24SJohannes Berg #define IWL_QU_C_HR_B_FW_PRE		"iwlwifi-Qu-c0-hr-b0"
31*31aeae24SJohannes Berg #define IWL_QU_B_JF_B_FW_PRE		"iwlwifi-Qu-b0-jf-b0"
32*31aeae24SJohannes Berg #define IWL_QU_C_JF_B_FW_PRE		"iwlwifi-Qu-c0-jf-b0"
33*31aeae24SJohannes Berg #define IWL_QUZ_A_HR_B_FW_PRE		"iwlwifi-QuZ-a0-hr-b0"
34*31aeae24SJohannes Berg #define IWL_QUZ_A_JF_B_FW_PRE		"iwlwifi-QuZ-a0-jf-b0"
35*31aeae24SJohannes Berg #define IWL_CC_A_FW_PRE			"iwlwifi-cc-a0"
362f7a3863SLuca Coelho 
37e34aa5abSLuca Coelho #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
38*31aeae24SJohannes Berg 	IWL_QU_B_HR_B_FW_PRE "-" __stringify(api) ".ucode"
39debec2f2SLuca Coelho #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
40*31aeae24SJohannes Berg 	IWL_QUZ_A_HR_B_FW_PRE "-" __stringify(api) ".ucode"
41658521fcSIhab Zhaika #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
42*31aeae24SJohannes Berg 	IWL_QUZ_A_JF_B_FW_PRE "-" __stringify(api) ".ucode"
43a7d544d6SLuca Coelho #define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
44*31aeae24SJohannes Berg 	IWL_QU_C_HR_B_FW_PRE "-" __stringify(api) ".ucode"
4581edb6adSLuca Coelho #define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
46*31aeae24SJohannes Berg 	IWL_QU_B_JF_B_FW_PRE "-" __stringify(api) ".ucode"
478093bb6dSLuca Coelho #define IWL_CC_A_MODULE_FIRMWARE(api)			\
48*31aeae24SJohannes Berg 	IWL_CC_A_FW_PRE "-" __stringify(api) ".ucode"
492f7a3863SLuca Coelho 
502f7a3863SLuca Coelho static const struct iwl_base_params iwl_22000_base_params = {
513e2b49d6SLuca Coelho 	.eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
522f7a3863SLuca Coelho 	.num_of_queues = 512,
537b3e42eaSGolan Ben Ami 	.max_tfd_queue_size = 256,
547b3e42eaSGolan Ben Ami 	.shadow_ram_support = true,
557b3e42eaSGolan Ben Ami 	.led_compensation = 57,
567b3e42eaSGolan Ben Ami 	.wd_timeout = IWL_LONG_WD_TIMEOUT,
577b3e42eaSGolan Ben Ami 	.max_event_log_size = 512,
587b3e42eaSGolan Ben Ami 	.shadow_reg_enable = true,
597b3e42eaSGolan Ben Ami 	.pcie_l1_allowed = true,
607b3e42eaSGolan Ben Ami };
617b3e42eaSGolan Ben Ami 
6219898ce9SJohannes Berg const struct iwl_ht_params iwl_22000_ht_params = {
632f7a3863SLuca Coelho 	.stbc = true,
642f7a3863SLuca Coelho 	.ldpc = true,
65eae94cf8SLuca Coelho 	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ) |
66eae94cf8SLuca Coelho 		      BIT(NL80211_BAND_6GHZ),
672f7a3863SLuca Coelho };
682f7a3863SLuca Coelho 
695f01df3fSGolan Ben Ami #define IWL_DEVICE_22000_COMMON						\
702f7a3863SLuca Coelho 	.ucode_api_min = IWL_22000_UCODE_API_MIN,			\
712f7a3863SLuca Coelho 	.led_mode = IWL_LED_RF_STATE,					\
724aeaccd6SLuca Coelho 	.nvm_hw_section_num = 10,					\
73a4028772SErel Geron 	.non_shared_ant = ANT_B,					\
742f7a3863SLuca Coelho 	.dccm_offset = IWL_22000_DCCM_OFFSET,				\
752f7a3863SLuca Coelho 	.dccm_len = IWL_22000_DCCM_LEN,					\
762f7a3863SLuca Coelho 	.dccm2_offset = IWL_22000_DCCM2_OFFSET,				\
772f7a3863SLuca Coelho 	.dccm2_len = IWL_22000_DCCM2_LEN,				\
782f7a3863SLuca Coelho 	.smem_offset = IWL_22000_SMEM_OFFSET,				\
792f7a3863SLuca Coelho 	.smem_len = IWL_22000_SMEM_LEN,					\
802f7a3863SLuca Coelho 	.features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,		\
812f7a3863SLuca Coelho 	.apmg_not_supported = true,					\
8279b6c8feSLuca Coelho 	.trans.mq_rx_supported = true,					\
832f7a3863SLuca Coelho 	.vht_mu_mimo_supported = true,					\
847e6dffdaSJohannes Berg 	.mac_addr_from_csr = 0x380,					\
855f01df3fSGolan Ben Ami 	.ht_params = &iwl_22000_ht_params,				\
865f01df3fSGolan Ben Ami 	.nvm_ver = IWL_22000_NVM_VERSION,				\
8779b6c8feSLuca Coelho 	.trans.rf_id = true,						\
8879b6c8feSLuca Coelho 	.trans.gen2 = true,						\
892f7a3863SLuca Coelho 	.nvm_type = IWL_NVM_EXT,					\
902f7a3863SLuca Coelho 	.dbgc_supported = true,						\
912d8c2615SShahar S Matityahu 	.min_umac_error_event_table = 0x400000,				\
922d8c2615SShahar S Matityahu 	.d3_debug_data_base_addr = 0x401000,				\
934c704534SShahar S Matityahu 	.d3_debug_data_length = 60 * 1024,				\
94593fae3eSShahar S Matityahu 	.mon_smem_regs = {						\
95593fae3eSShahar S Matityahu 		.write_ptr = {						\
96593fae3eSShahar S Matityahu 			.addr = LDBG_M2S_BUF_WPTR,			\
97593fae3eSShahar S Matityahu 			.mask = LDBG_M2S_BUF_WPTR_VAL_MSK,		\
98593fae3eSShahar S Matityahu 	},								\
99593fae3eSShahar S Matityahu 		.cycle_cnt = {						\
100593fae3eSShahar S Matityahu 			.addr = LDBG_M2S_BUF_WRAP_CNT,			\
101593fae3eSShahar S Matityahu 			.mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK,		\
102593fae3eSShahar S Matityahu 		},							\
103593fae3eSShahar S Matityahu 	}
1042f7a3863SLuca Coelho 
1055f01df3fSGolan Ben Ami #define IWL_DEVICE_22500						\
1065f01df3fSGolan Ben Ami 	IWL_DEVICE_22000_COMMON,					\
10719898ce9SJohannes Berg 	.ucode_api_max = IWL_22000_UCODE_API_MAX,			\
10879b6c8feSLuca Coelho 	.trans.device_family = IWL_DEVICE_FAMILY_22000,			\
10979b6c8feSLuca Coelho 	.trans.base_params = &iwl_22000_base_params,			\
110593fae3eSShahar S Matityahu 	.gp2_reg_addr = 0xa02c68,					\
111593fae3eSShahar S Matityahu 	.mon_dram_regs = {						\
112593fae3eSShahar S Matityahu 		.write_ptr = {						\
113593fae3eSShahar S Matityahu 			.addr = MON_BUFF_WRPTR_VER2,			\
114593fae3eSShahar S Matityahu 			.mask = 0xffffffff,				\
115593fae3eSShahar S Matityahu 		},							\
116593fae3eSShahar S Matityahu 		.cycle_cnt = {						\
117593fae3eSShahar S Matityahu 			.addr = MON_BUFF_CYCLE_CNT_VER2,		\
118593fae3eSShahar S Matityahu 			.mask = 0xffffffff,				\
119593fae3eSShahar S Matityahu 		},							\
120593fae3eSShahar S Matityahu 	}
1215f01df3fSGolan Ben Ami 
12232ed101aSLuca Coelho const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
12332ed101aSLuca Coelho 	.mq_rx_supported = true,
12432ed101aSLuca Coelho 	.rf_id = true,
12532ed101aSLuca Coelho 	.gen2 = true,
12632ed101aSLuca Coelho 	.device_family = IWL_DEVICE_FAMILY_22000,
12732ed101aSLuca Coelho 	.base_params = &iwl_22000_base_params,
12832ed101aSLuca Coelho 	.integrated = true,
1298fac81b5SLuca Coelho 	.xtal_latency = 500,
1300928df0aSJohannes Berg 	.ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
13132ed101aSLuca Coelho };
13232ed101aSLuca Coelho 
1339c9613f0SLuca Coelho const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
1349c9613f0SLuca Coelho 	.mq_rx_supported = true,
1359c9613f0SLuca Coelho 	.rf_id = true,
1369c9613f0SLuca Coelho 	.gen2 = true,
1379c9613f0SLuca Coelho 	.device_family = IWL_DEVICE_FAMILY_22000,
1389c9613f0SLuca Coelho 	.base_params = &iwl_22000_base_params,
1399c9613f0SLuca Coelho 	.integrated = true,
1409c9613f0SLuca Coelho 	.xtal_latency = 1820,
1419c9613f0SLuca Coelho 	.ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
1429c9613f0SLuca Coelho };
1439c9613f0SLuca Coelho 
144a72abfcaSLuca Coelho const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
145a72abfcaSLuca Coelho 	.mq_rx_supported = true,
146a72abfcaSLuca Coelho 	.rf_id = true,
147a72abfcaSLuca Coelho 	.gen2 = true,
148a72abfcaSLuca Coelho 	.device_family = IWL_DEVICE_FAMILY_22000,
149a72abfcaSLuca Coelho 	.base_params = &iwl_22000_base_params,
150a72abfcaSLuca Coelho 	.integrated = true,
151a72abfcaSLuca Coelho 	.xtal_latency = 12000,
152a72abfcaSLuca Coelho 	.low_latency_xtal = true,
1530928df0aSJohannes Berg 	.ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
154a72abfcaSLuca Coelho };
155a72abfcaSLuca Coelho 
156c042f0c7SJohannes Berg /*
157c042f0c7SJohannes Berg  * If the device doesn't support HE, no need to have that many buffers.
158c042f0c7SJohannes Berg  * 22000 devices can split multiple frames into a single RB, so fewer are
159c042f0c7SJohannes Berg  * needed; AX210 cannot (but use smaller RBs by default) - these sizes
160c042f0c7SJohannes Berg  * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
161c042f0c7SJohannes Berg  * additional overhead to account for processing time.
162c042f0c7SJohannes Berg  */
163c042f0c7SJohannes Berg #define IWL_NUM_RBDS_NON_HE		512
164c042f0c7SJohannes Berg #define IWL_NUM_RBDS_22000_HE		2048
165c042f0c7SJohannes Berg 
16668ceba3fSLuca Coelho /*
16768ceba3fSLuca Coelho  * All JF radio modules are part of the 9000 series, but the MAC part
16868ceba3fSLuca Coelho  * looks more like 22000.  That's why this device is here, but called
16968ceba3fSLuca Coelho  * 9560 nevertheless.
17068ceba3fSLuca Coelho  */
17132ed101aSLuca Coelho const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
17232ed101aSLuca Coelho 	.fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
17332ed101aSLuca Coelho 	IWL_DEVICE_22500,
17432ed101aSLuca Coelho 	.num_rbds = IWL_NUM_RBDS_NON_HE,
17532ed101aSLuca Coelho };
17632ed101aSLuca Coelho 
17732ed101aSLuca Coelho const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
17832ed101aSLuca Coelho 	.fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
17932ed101aSLuca Coelho 	IWL_DEVICE_22500,
18032ed101aSLuca Coelho 	.num_rbds = IWL_NUM_RBDS_NON_HE,
18132ed101aSLuca Coelho };
18232ed101aSLuca Coelho 
18332ed101aSLuca Coelho const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
18432ed101aSLuca Coelho 	.fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
18532ed101aSLuca Coelho 	IWL_DEVICE_22500,
18632ed101aSLuca Coelho 	/*
18732ed101aSLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
18832ed101aSLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
18932ed101aSLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
19032ed101aSLuca Coelho 	 */
19132ed101aSLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
19232ed101aSLuca Coelho 	.num_rbds = IWL_NUM_RBDS_NON_HE,
19332ed101aSLuca Coelho };
19432ed101aSLuca Coelho 
1955e003982SLuca Coelho const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
1965e003982SLuca Coelho 	.device_family = IWL_DEVICE_FAMILY_22000,
1975e003982SLuca Coelho 	.base_params = &iwl_22000_base_params,
1985e003982SLuca Coelho 	.mq_rx_supported = true,
1995e003982SLuca Coelho 	.rf_id = true,
2005e003982SLuca Coelho 	.gen2 = true,
2015e003982SLuca Coelho 	.bisr_workaround = 1,
2025e003982SLuca Coelho };
2035e003982SLuca Coelho 
204bc9296f4SIhab Zhaika const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
2055e003982SLuca Coelho const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
206d5727b60SLuca Coelho const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
20716062c12SLuca Coelho const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
208ac4790dcSYaara Baruch const char iwl_ax204_name[] = "Intel(R) Wi-Fi 6 AX204 160MHz";
2095e003982SLuca Coelho 
2105e003982SLuca Coelho const char iwl_ax200_killer_1650w_name[] =
2115e003982SLuca Coelho 	"Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
2125e003982SLuca Coelho const char iwl_ax200_killer_1650x_name[] =
2135e003982SLuca Coelho 	"Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
21464564669SIhab Zhaika const char iwl_ax201_killer_1650s_name[] =
21564564669SIhab Zhaika 	"Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
21664564669SIhab Zhaika const char iwl_ax201_killer_1650i_name[] =
21764564669SIhab Zhaika 	"Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
2185e003982SLuca Coelho 
2193f910a25SLuca Coelho const struct iwl_cfg iwl_qu_b0_hr1_b0 = {
220e34aa5abSLuca Coelho 	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
221ab27926dSLuca Coelho 	IWL_DEVICE_22500,
222ab27926dSLuca Coelho 	/*
223ab27926dSLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
224ab27926dSLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
225ab27926dSLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
226ab27926dSLuca Coelho 	 */
227ab27926dSLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2285952e0ecSHaim Dreyfuss 	.tx_with_siso_diversity = true,
229c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
230ab27926dSLuca Coelho };
231ab27926dSLuca Coelho 
23216062c12SLuca Coelho const struct iwl_cfg iwl_qu_b0_hr_b0 = {
23316062c12SLuca Coelho 	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
23416062c12SLuca Coelho 	IWL_DEVICE_22500,
23516062c12SLuca Coelho 	/*
23616062c12SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
23716062c12SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
23816062c12SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
23916062c12SLuca Coelho 	 */
24016062c12SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
24116062c12SLuca Coelho 	.num_rbds = IWL_NUM_RBDS_22000_HE,
24216062c12SLuca Coelho };
24316062c12SLuca Coelho 
244d151b0a2SIhab Zhaika const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
245d151b0a2SIhab Zhaika 	.name = "Intel(R) Wi-Fi 6 AX201 160MHz",
246e34aa5abSLuca Coelho 	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
247d151b0a2SIhab Zhaika 	IWL_DEVICE_22500,
248d151b0a2SIhab Zhaika 	/*
249d151b0a2SIhab Zhaika 	 * This device doesn't support receiving BlockAck with a large bitmap
250d151b0a2SIhab Zhaika 	 * so we need to restrict the size of transmitted aggregation to the
251d151b0a2SIhab Zhaika 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
252d151b0a2SIhab Zhaika 	 */
253d151b0a2SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
254c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
255d151b0a2SIhab Zhaika };
256d151b0a2SIhab Zhaika 
2573f910a25SLuca Coelho const struct iwl_cfg iwl_qu_c0_hr1_b0 = {
258a7d544d6SLuca Coelho 	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
259a7d544d6SLuca Coelho 	IWL_DEVICE_22500,
260a7d544d6SLuca Coelho 	/*
261a7d544d6SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
262a7d544d6SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
263a7d544d6SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
264a7d544d6SLuca Coelho 	 */
265a7d544d6SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2669352ed01SLuca Coelho 	.tx_with_siso_diversity = true,
267c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
268a7d544d6SLuca Coelho };
269a7d544d6SLuca Coelho 
27016062c12SLuca Coelho const struct iwl_cfg iwl_qu_c0_hr_b0 = {
27116062c12SLuca Coelho 	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
27216062c12SLuca Coelho 	IWL_DEVICE_22500,
27316062c12SLuca Coelho 	/*
27416062c12SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
27516062c12SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
27616062c12SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
27716062c12SLuca Coelho 	 */
27816062c12SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
27916062c12SLuca Coelho 	.num_rbds = IWL_NUM_RBDS_22000_HE,
28016062c12SLuca Coelho };
28116062c12SLuca Coelho 
282a7d544d6SLuca Coelho const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
283a7d544d6SLuca Coelho 	.name = "Intel(R) Wi-Fi 6 AX201 160MHz",
284a7d544d6SLuca Coelho 	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
285a7d544d6SLuca Coelho 	IWL_DEVICE_22500,
286a7d544d6SLuca Coelho 	/*
287a7d544d6SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
288a7d544d6SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
289a7d544d6SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
290a7d544d6SLuca Coelho 	 */
291a7d544d6SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
292c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
293a7d544d6SLuca Coelho };
294a7d544d6SLuca Coelho 
2953f910a25SLuca Coelho const struct iwl_cfg iwl_quz_a0_hr1_b0 = {
296debec2f2SLuca Coelho 	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
297debec2f2SLuca Coelho 	IWL_DEVICE_22500,
298debec2f2SLuca Coelho 	/*
299debec2f2SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
300debec2f2SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
301debec2f2SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
302debec2f2SLuca Coelho 	 */
303debec2f2SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
3049352ed01SLuca Coelho 	.tx_with_siso_diversity = true,
305c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
306debec2f2SLuca Coelho };
307debec2f2SLuca Coelho 
308a976bfb4SIhab Zhaika const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
309a976bfb4SIhab Zhaika 	.name = "Intel(R) Wi-Fi 6 AX201 160MHz",
310a976bfb4SIhab Zhaika 	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
311a976bfb4SIhab Zhaika 	IWL_DEVICE_22500,
312a976bfb4SIhab Zhaika 	/*
313a976bfb4SIhab Zhaika          * This device doesn't support receiving BlockAck with a large bitmap
314a976bfb4SIhab Zhaika          * so we need to restrict the size of transmitted aggregation to the
315a976bfb4SIhab Zhaika          * HT size; mac80211 would otherwise pick the HE max (256) by default.
316a976bfb4SIhab Zhaika          */
317a976bfb4SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
318c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
319a976bfb4SIhab Zhaika };
320a976bfb4SIhab Zhaika 
321a976bfb4SIhab Zhaika const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
322a976bfb4SIhab Zhaika 	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
323a976bfb4SIhab Zhaika 	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
324a976bfb4SIhab Zhaika 	IWL_DEVICE_22500,
325a976bfb4SIhab Zhaika 	/*
326a976bfb4SIhab Zhaika          * This device doesn't support receiving BlockAck with a large bitmap
327a976bfb4SIhab Zhaika          * so we need to restrict the size of transmitted aggregation to the
328a976bfb4SIhab Zhaika          * HT size; mac80211 would otherwise pick the HE max (256) by default.
329a976bfb4SIhab Zhaika          */
330a976bfb4SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
331c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
332a976bfb4SIhab Zhaika };
333a976bfb4SIhab Zhaika 
334a976bfb4SIhab Zhaika const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
335a976bfb4SIhab Zhaika 	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
336a976bfb4SIhab Zhaika 	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
337a976bfb4SIhab Zhaika 	IWL_DEVICE_22500,
338a976bfb4SIhab Zhaika 	/*
339a976bfb4SIhab Zhaika          * This device doesn't support receiving BlockAck with a large bitmap
340a976bfb4SIhab Zhaika          * so we need to restrict the size of transmitted aggregation to the
341a976bfb4SIhab Zhaika          * HT size; mac80211 would otherwise pick the HE max (256) by default.
342a976bfb4SIhab Zhaika          */
343a976bfb4SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
344c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
345a976bfb4SIhab Zhaika };
346a976bfb4SIhab Zhaika 
3470d5bad14SIhab Zhaika const struct iwl_cfg iwl_ax200_cfg_cc = {
3488093bb6dSLuca Coelho 	.fw_name_pre = IWL_CC_A_FW_PRE,
3498093bb6dSLuca Coelho 	IWL_DEVICE_22500,
3508093bb6dSLuca Coelho 	/*
3518093bb6dSLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
3528093bb6dSLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
3538093bb6dSLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3548093bb6dSLuca Coelho 	 */
3558093bb6dSLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
356c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
3578093bb6dSLuca Coelho };
3588093bb6dSLuca Coelho 
3595b74a936SIhab Zhaika const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
360e5178014SYaara Baruch 	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
361e34aa5abSLuca Coelho 	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
3625b74a936SIhab Zhaika 	IWL_DEVICE_22500,
3635b74a936SIhab Zhaika 	/*
3645b74a936SIhab Zhaika 	 * This device doesn't support receiving BlockAck with a large bitmap
3655b74a936SIhab Zhaika 	 * so we need to restrict the size of transmitted aggregation to the
3665b74a936SIhab Zhaika 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3675b74a936SIhab Zhaika 	 */
3685b74a936SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
369c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
3705b74a936SIhab Zhaika };
3715b74a936SIhab Zhaika 
3725b74a936SIhab Zhaika const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
373e5178014SYaara Baruch 	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
374e34aa5abSLuca Coelho 	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
3755b74a936SIhab Zhaika 	IWL_DEVICE_22500,
3765b74a936SIhab Zhaika 	/*
3775b74a936SIhab Zhaika 	 * This device doesn't support receiving BlockAck with a large bitmap
3785b74a936SIhab Zhaika 	 * so we need to restrict the size of transmitted aggregation to the
3795b74a936SIhab Zhaika 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3805b74a936SIhab Zhaika 	 */
3815b74a936SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
382c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
3835b74a936SIhab Zhaika };
3845b74a936SIhab Zhaika 
385b9500577SLuca Coelho const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
386e5178014SYaara Baruch 	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201NGW)",
387b9500577SLuca Coelho 	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
388b9500577SLuca Coelho 	IWL_DEVICE_22500,
389b9500577SLuca Coelho 	/*
390b9500577SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
391b9500577SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
392b9500577SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
393b9500577SLuca Coelho 	 */
394b9500577SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
395c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
396b9500577SLuca Coelho };
397b9500577SLuca Coelho 
398b9500577SLuca Coelho const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
399e5178014SYaara Baruch 	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201D2W)",
400b9500577SLuca Coelho 	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
401b9500577SLuca Coelho 	IWL_DEVICE_22500,
402b9500577SLuca Coelho 	/*
403b9500577SLuca Coelho 	 * This device doesn't support receiving BlockAck with a large bitmap
404b9500577SLuca Coelho 	 * so we need to restrict the size of transmitted aggregation to the
405b9500577SLuca Coelho 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
406b9500577SLuca Coelho 	 */
407b9500577SLuca Coelho 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
408c042f0c7SJohannes Berg 	.num_rbds = IWL_NUM_RBDS_22000_HE,
409b9500577SLuca Coelho };
410b9500577SLuca Coelho 
411410f7585SIhab Zhaika const struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = {
412410f7585SIhab Zhaika 	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
413410f7585SIhab Zhaika 	IWL_DEVICE_22500,
414410f7585SIhab Zhaika 	/*
415410f7585SIhab Zhaika 	 * This device doesn't support receiving BlockAck with a large bitmap
416410f7585SIhab Zhaika 	 * so we need to restrict the size of transmitted aggregation to the
417410f7585SIhab Zhaika 	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
418410f7585SIhab Zhaika 	 */
419410f7585SIhab Zhaika 	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
420410f7585SIhab Zhaika 	.num_rbds = IWL_NUM_RBDS_22000_HE,
421410f7585SIhab Zhaika };
422410f7585SIhab Zhaika 
42319898ce9SJohannes Berg MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
42419898ce9SJohannes Berg MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
42519898ce9SJohannes Berg MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
42619898ce9SJohannes Berg MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
42719898ce9SJohannes Berg MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
42819898ce9SJohannes Berg MODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
429