18c2ecf20Sopenharmony_ci/******************************************************************************
28c2ecf20Sopenharmony_ci *
38c2ecf20Sopenharmony_ci * This file is provided under a dual BSD/GPLv2 license.  When using or
48c2ecf20Sopenharmony_ci * redistributing this file, you may do so under either license.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * GPL LICENSE SUMMARY
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * Copyright(c) 2015-2017 Intel Deutschland GmbH
98c2ecf20Sopenharmony_ci * Copyright (C) 2018-2020 Intel Corporation
108c2ecf20Sopenharmony_ci *
118c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
128c2ecf20Sopenharmony_ci * it under the terms of version 2 of the GNU General Public License as
138c2ecf20Sopenharmony_ci * published by the Free Software Foundation.
148c2ecf20Sopenharmony_ci *
158c2ecf20Sopenharmony_ci * This program is distributed in the hope that it will be useful, but
168c2ecf20Sopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of
178c2ecf20Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
188c2ecf20Sopenharmony_ci * General Public License for more details.
198c2ecf20Sopenharmony_ci *
208c2ecf20Sopenharmony_ci * BSD LICENSE
218c2ecf20Sopenharmony_ci *
228c2ecf20Sopenharmony_ci * Copyright(c) 2015-2017 Intel Deutschland GmbH
238c2ecf20Sopenharmony_ci * Copyright (C) 2018-2020 Intel Corporation
248c2ecf20Sopenharmony_ci * All rights reserved.
258c2ecf20Sopenharmony_ci *
268c2ecf20Sopenharmony_ci * Redistribution and use in source and binary forms, with or without
278c2ecf20Sopenharmony_ci * modification, are permitted provided that the following conditions
288c2ecf20Sopenharmony_ci * are met:
298c2ecf20Sopenharmony_ci *
308c2ecf20Sopenharmony_ci *  * Redistributions of source code must retain the above copyright
318c2ecf20Sopenharmony_ci *    notice, this list of conditions and the following disclaimer.
328c2ecf20Sopenharmony_ci *  * Redistributions in binary form must reproduce the above copyright
338c2ecf20Sopenharmony_ci *    notice, this list of conditions and the following disclaimer in
348c2ecf20Sopenharmony_ci *    the documentation and/or other materials provided with the
358c2ecf20Sopenharmony_ci *    distribution.
368c2ecf20Sopenharmony_ci *  * Neither the name Intel Corporation nor the names of its
378c2ecf20Sopenharmony_ci *    contributors may be used to endorse or promote products derived
388c2ecf20Sopenharmony_ci *    from this software without specific prior written permission.
398c2ecf20Sopenharmony_ci *
408c2ecf20Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
418c2ecf20Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
428c2ecf20Sopenharmony_ci * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
438c2ecf20Sopenharmony_ci * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
448c2ecf20Sopenharmony_ci * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
458c2ecf20Sopenharmony_ci * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
468c2ecf20Sopenharmony_ci * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
478c2ecf20Sopenharmony_ci * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
488c2ecf20Sopenharmony_ci * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
498c2ecf20Sopenharmony_ci * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
508c2ecf20Sopenharmony_ci * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
518c2ecf20Sopenharmony_ci *
528c2ecf20Sopenharmony_ci *****************************************************************************/
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci#include <linux/module.h>
558c2ecf20Sopenharmony_ci#include <linux/stringify.h>
568c2ecf20Sopenharmony_ci#include "iwl-config.h"
578c2ecf20Sopenharmony_ci#include "iwl-prph.h"
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci/* Highest firmware API version supported */
608c2ecf20Sopenharmony_ci#define IWL_22000_UCODE_API_MAX	59
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci/* Lowest firmware API version supported */
638c2ecf20Sopenharmony_ci#define IWL_22000_UCODE_API_MIN	39
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci/* NVM versions */
668c2ecf20Sopenharmony_ci#define IWL_22000_NVM_VERSION		0x0a1d
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci/* Memory offsets and lengths */
698c2ecf20Sopenharmony_ci#define IWL_22000_DCCM_OFFSET		0x800000 /* LMAC1 */
708c2ecf20Sopenharmony_ci#define IWL_22000_DCCM_LEN		0x10000 /* LMAC1 */
718c2ecf20Sopenharmony_ci#define IWL_22000_DCCM2_OFFSET		0x880000
728c2ecf20Sopenharmony_ci#define IWL_22000_DCCM2_LEN		0x8000
738c2ecf20Sopenharmony_ci#define IWL_22000_SMEM_OFFSET		0x400000
748c2ecf20Sopenharmony_ci#define IWL_22000_SMEM_LEN		0xD0000
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci#define IWL_QU_B_HR_B_FW_PRE		"iwlwifi-Qu-b0-hr-b0-"
778c2ecf20Sopenharmony_ci#define IWL_QNJ_B_HR_B_FW_PRE		"iwlwifi-QuQnj-b0-hr-b0-"
788c2ecf20Sopenharmony_ci#define IWL_QU_C_HR_B_FW_PRE		"iwlwifi-Qu-c0-hr-b0-"
798c2ecf20Sopenharmony_ci#define IWL_QU_B_JF_B_FW_PRE		"iwlwifi-Qu-b0-jf-b0-"
808c2ecf20Sopenharmony_ci#define IWL_QU_C_JF_B_FW_PRE		"iwlwifi-Qu-c0-jf-b0-"
818c2ecf20Sopenharmony_ci#define IWL_QUZ_A_HR_B_FW_PRE		"iwlwifi-QuZ-a0-hr-b0-"
828c2ecf20Sopenharmony_ci#define IWL_QUZ_A_JF_B_FW_PRE		"iwlwifi-QuZ-a0-jf-b0-"
838c2ecf20Sopenharmony_ci#define IWL_QNJ_B_JF_B_FW_PRE		"iwlwifi-QuQnj-b0-jf-b0-"
848c2ecf20Sopenharmony_ci#define IWL_CC_A_FW_PRE			"iwlwifi-cc-a0-"
858c2ecf20Sopenharmony_ci#define IWL_SO_A_JF_B_FW_PRE		"iwlwifi-so-a0-jf-b0-"
868c2ecf20Sopenharmony_ci#define IWL_SO_A_HR_B_FW_PRE		"iwlwifi-so-a0-hr-b0-"
878c2ecf20Sopenharmony_ci#define IWL_SO_A_GF_A_FW_PRE		"iwlwifi-so-a0-gf-a0-"
888c2ecf20Sopenharmony_ci#define IWL_TY_A_GF_A_FW_PRE		"iwlwifi-ty-a0-gf-a0-"
898c2ecf20Sopenharmony_ci#define IWL_SO_A_GF4_A_FW_PRE		"iwlwifi-so-a0-gf4-a0-"
908c2ecf20Sopenharmony_ci#define IWL_SNJ_A_GF4_A_FW_PRE		"iwlwifi-SoSnj-a0-gf4-a0-"
918c2ecf20Sopenharmony_ci#define IWL_SNJ_A_GF_A_FW_PRE		"iwlwifi-SoSnj-a0-gf-a0-"
928c2ecf20Sopenharmony_ci#define IWL_SNJ_A_HR_B_FW_PRE		"iwlwifi-SoSnj-a0-hr-b0-"
938c2ecf20Sopenharmony_ci#define IWL_MA_A_GF_A_FW_PRE		"iwlwifi-ma-a0-gf-a0-"
948c2ecf20Sopenharmony_ci#define IWL_MA_A_MR_A_FW_PRE		"iwlwifi-ma-a0-mr-a0-"
958c2ecf20Sopenharmony_ci#define IWL_SNJ_A_MR_A_FW_PRE		"iwlwifi-SoSnj-a0-mr-a0-"
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci#define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
988c2ecf20Sopenharmony_ci	IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
998c2ecf20Sopenharmony_ci#define IWL_QNJ_B_HR_B_MODULE_FIRMWARE(api)	\
1008c2ecf20Sopenharmony_ci	IWL_QNJ_B_HR_B_FW_PRE __stringify(api) ".ucode"
1018c2ecf20Sopenharmony_ci#define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
1028c2ecf20Sopenharmony_ci	IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
1038c2ecf20Sopenharmony_ci#define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
1048c2ecf20Sopenharmony_ci	IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
1058c2ecf20Sopenharmony_ci#define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
1068c2ecf20Sopenharmony_ci	IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
1078c2ecf20Sopenharmony_ci#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
1088c2ecf20Sopenharmony_ci	IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
1098c2ecf20Sopenharmony_ci#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api)		\
1108c2ecf20Sopenharmony_ci	IWL_QNJ_B_JF_B_FW_PRE __stringify(api) ".ucode"
1118c2ecf20Sopenharmony_ci#define IWL_CC_A_MODULE_FIRMWARE(api)			\
1128c2ecf20Sopenharmony_ci	IWL_CC_A_FW_PRE __stringify(api) ".ucode"
1138c2ecf20Sopenharmony_ci#define IWL_SO_A_JF_B_MODULE_FIRMWARE(api) \
1148c2ecf20Sopenharmony_ci	IWL_SO_A_JF_B_FW_PRE __stringify(api) ".ucode"
1158c2ecf20Sopenharmony_ci#define IWL_SO_A_HR_B_MODULE_FIRMWARE(api) \
1168c2ecf20Sopenharmony_ci	IWL_SO_A_HR_B_FW_PRE __stringify(api) ".ucode"
1178c2ecf20Sopenharmony_ci#define IWL_SO_A_GF_A_MODULE_FIRMWARE(api) \
1188c2ecf20Sopenharmony_ci	IWL_SO_A_GF_A_FW_PRE __stringify(api) ".ucode"
1198c2ecf20Sopenharmony_ci#define IWL_TY_A_GF_A_MODULE_FIRMWARE(api) \
1208c2ecf20Sopenharmony_ci	IWL_TY_A_GF_A_FW_PRE __stringify(api) ".ucode"
1218c2ecf20Sopenharmony_ci#define IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(api) \
1228c2ecf20Sopenharmony_ci	IWL_SNJ_A_GF4_A_FW_PRE __stringify(api) ".ucode"
1238c2ecf20Sopenharmony_ci#define IWL_SNJ_A_GF_A_MODULE_FIRMWARE(api) \
1248c2ecf20Sopenharmony_ci	IWL_SNJ_A_GF_A_FW_PRE __stringify(api) ".ucode"
1258c2ecf20Sopenharmony_ci#define IWL_SNJ_A_HR_B_MODULE_FIRMWARE(api) \
1268c2ecf20Sopenharmony_ci	IWL_SNJ_A_HR_B_FW_PRE __stringify(api) ".ucode"
1278c2ecf20Sopenharmony_ci#define IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(api) \
1288c2ecf20Sopenharmony_ci	IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
1298c2ecf20Sopenharmony_ci#define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
1308c2ecf20Sopenharmony_ci	IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
1318c2ecf20Sopenharmony_ci#define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
1328c2ecf20Sopenharmony_ci	IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_cistatic const struct iwl_base_params iwl_22000_base_params = {
1358c2ecf20Sopenharmony_ci	.eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
1368c2ecf20Sopenharmony_ci	.num_of_queues = 512,
1378c2ecf20Sopenharmony_ci	.max_tfd_queue_size = 256,
1388c2ecf20Sopenharmony_ci	.shadow_ram_support = true,
1398c2ecf20Sopenharmony_ci	.led_compensation = 57,
1408c2ecf20Sopenharmony_ci	.wd_timeout = IWL_LONG_WD_TIMEOUT,
1418c2ecf20Sopenharmony_ci	.max_event_log_size = 512,
1428c2ecf20Sopenharmony_ci	.shadow_reg_enable = true,
1438c2ecf20Sopenharmony_ci	.pcie_l1_allowed = true,
1448c2ecf20Sopenharmony_ci};
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_cistatic const struct iwl_base_params iwl_ax210_base_params = {
1478c2ecf20Sopenharmony_ci	.eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
1488c2ecf20Sopenharmony_ci	.num_of_queues = 512,
1498c2ecf20Sopenharmony_ci	.max_tfd_queue_size = 65536,
1508c2ecf20Sopenharmony_ci	.shadow_ram_support = true,
1518c2ecf20Sopenharmony_ci	.led_compensation = 57,
1528c2ecf20Sopenharmony_ci	.wd_timeout = IWL_LONG_WD_TIMEOUT,
1538c2ecf20Sopenharmony_ci	.max_event_log_size = 512,
1548c2ecf20Sopenharmony_ci	.shadow_reg_enable = true,
1558c2ecf20Sopenharmony_ci	.pcie_l1_allowed = true,
1568c2ecf20Sopenharmony_ci};
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_cistatic const struct iwl_ht_params iwl_22000_ht_params = {
1598c2ecf20Sopenharmony_ci	.stbc = true,
1608c2ecf20Sopenharmony_ci	.ldpc = true,
1618c2ecf20Sopenharmony_ci	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
1628c2ecf20Sopenharmony_ci};
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_ci#define IWL_DEVICE_22000_COMMON						\
1658c2ecf20Sopenharmony_ci	.ucode_api_max = IWL_22000_UCODE_API_MAX,			\
1668c2ecf20Sopenharmony_ci	.ucode_api_min = IWL_22000_UCODE_API_MIN,			\
1678c2ecf20Sopenharmony_ci	.led_mode = IWL_LED_RF_STATE,					\
1688c2ecf20Sopenharmony_ci	.nvm_hw_section_num = 10,					\
1698c2ecf20Sopenharmony_ci	.non_shared_ant = ANT_B,					\
1708c2ecf20Sopenharmony_ci	.dccm_offset = IWL_22000_DCCM_OFFSET,				\
1718c2ecf20Sopenharmony_ci	.dccm_len = IWL_22000_DCCM_LEN,					\
1728c2ecf20Sopenharmony_ci	.dccm2_offset = IWL_22000_DCCM2_OFFSET,				\
1738c2ecf20Sopenharmony_ci	.dccm2_len = IWL_22000_DCCM2_LEN,				\
1748c2ecf20Sopenharmony_ci	.smem_offset = IWL_22000_SMEM_OFFSET,				\
1758c2ecf20Sopenharmony_ci	.smem_len = IWL_22000_SMEM_LEN,					\
1768c2ecf20Sopenharmony_ci	.features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,		\
1778c2ecf20Sopenharmony_ci	.apmg_not_supported = true,					\
1788c2ecf20Sopenharmony_ci	.trans.mq_rx_supported = true,					\
1798c2ecf20Sopenharmony_ci	.vht_mu_mimo_supported = true,					\
1808c2ecf20Sopenharmony_ci	.mac_addr_from_csr = true,					\
1818c2ecf20Sopenharmony_ci	.ht_params = &iwl_22000_ht_params,				\
1828c2ecf20Sopenharmony_ci	.nvm_ver = IWL_22000_NVM_VERSION,				\
1838c2ecf20Sopenharmony_ci	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,		\
1848c2ecf20Sopenharmony_ci	.trans.use_tfh = true,						\
1858c2ecf20Sopenharmony_ci	.trans.rf_id = true,						\
1868c2ecf20Sopenharmony_ci	.trans.gen2 = true,						\
1878c2ecf20Sopenharmony_ci	.nvm_type = IWL_NVM_EXT,					\
1888c2ecf20Sopenharmony_ci	.dbgc_supported = true,						\
1898c2ecf20Sopenharmony_ci	.min_umac_error_event_table = 0x400000,				\
1908c2ecf20Sopenharmony_ci	.d3_debug_data_base_addr = 0x401000,				\
1918c2ecf20Sopenharmony_ci	.d3_debug_data_length = 60 * 1024,				\
1928c2ecf20Sopenharmony_ci	.mon_smem_regs = {						\
1938c2ecf20Sopenharmony_ci		.write_ptr = {						\
1948c2ecf20Sopenharmony_ci			.addr = LDBG_M2S_BUF_WPTR,			\
1958c2ecf20Sopenharmony_ci			.mask = LDBG_M2S_BUF_WPTR_VAL_MSK,		\
1968c2ecf20Sopenharmony_ci	},								\
1978c2ecf20Sopenharmony_ci		.cycle_cnt = {						\
1988c2ecf20Sopenharmony_ci			.addr = LDBG_M2S_BUF_WRAP_CNT,			\
1998c2ecf20Sopenharmony_ci			.mask = LDBG_M2S_BUF_WRAP_CNT_VAL_MSK,		\
2008c2ecf20Sopenharmony_ci		},							\
2018c2ecf20Sopenharmony_ci	}
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_ci#define IWL_DEVICE_22500						\
2048c2ecf20Sopenharmony_ci	IWL_DEVICE_22000_COMMON,					\
2058c2ecf20Sopenharmony_ci	.trans.device_family = IWL_DEVICE_FAMILY_22000,			\
2068c2ecf20Sopenharmony_ci	.trans.base_params = &iwl_22000_base_params,			\
2078c2ecf20Sopenharmony_ci	.gp2_reg_addr = 0xa02c68,					\
2088c2ecf20Sopenharmony_ci	.mon_dram_regs = {						\
2098c2ecf20Sopenharmony_ci		.write_ptr = {						\
2108c2ecf20Sopenharmony_ci			.addr = MON_BUFF_WRPTR_VER2,			\
2118c2ecf20Sopenharmony_ci			.mask = 0xffffffff,				\
2128c2ecf20Sopenharmony_ci		},							\
2138c2ecf20Sopenharmony_ci		.cycle_cnt = {						\
2148c2ecf20Sopenharmony_ci			.addr = MON_BUFF_CYCLE_CNT_VER2,		\
2158c2ecf20Sopenharmony_ci			.mask = 0xffffffff,				\
2168c2ecf20Sopenharmony_ci		},							\
2178c2ecf20Sopenharmony_ci	}
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ci#define IWL_DEVICE_AX210						\
2208c2ecf20Sopenharmony_ci	IWL_DEVICE_22000_COMMON,					\
2218c2ecf20Sopenharmony_ci	.trans.umac_prph_offset = 0x300000,				\
2228c2ecf20Sopenharmony_ci	.trans.device_family = IWL_DEVICE_FAMILY_AX210,			\
2238c2ecf20Sopenharmony_ci	.trans.base_params = &iwl_ax210_base_params,			\
2248c2ecf20Sopenharmony_ci	.min_txq_size = 128,						\
2258c2ecf20Sopenharmony_ci	.gp2_reg_addr = 0xd02c68,					\
2268c2ecf20Sopenharmony_ci	.min_256_ba_txq_size = 1024,					\
2278c2ecf20Sopenharmony_ci	.mon_dram_regs = {						\
2288c2ecf20Sopenharmony_ci		.write_ptr = {						\
2298c2ecf20Sopenharmony_ci			.addr = DBGC_CUR_DBGBUF_STATUS,			\
2308c2ecf20Sopenharmony_ci			.mask = DBGC_CUR_DBGBUF_STATUS_OFFSET_MSK,	\
2318c2ecf20Sopenharmony_ci		},							\
2328c2ecf20Sopenharmony_ci		.cycle_cnt = {						\
2338c2ecf20Sopenharmony_ci			.addr = DBGC_DBGBUF_WRAP_AROUND,		\
2348c2ecf20Sopenharmony_ci			.mask = 0xffffffff,				\
2358c2ecf20Sopenharmony_ci		},							\
2368c2ecf20Sopenharmony_ci		.cur_frag = {						\
2378c2ecf20Sopenharmony_ci			.addr = DBGC_CUR_DBGBUF_STATUS,			\
2388c2ecf20Sopenharmony_ci			.mask = DBGC_CUR_DBGBUF_STATUS_IDX_MSK,		\
2398c2ecf20Sopenharmony_ci		},							\
2408c2ecf20Sopenharmony_ci	}
2418c2ecf20Sopenharmony_ci
2428c2ecf20Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
2438c2ecf20Sopenharmony_ci	.mq_rx_supported = true,
2448c2ecf20Sopenharmony_ci	.use_tfh = true,
2458c2ecf20Sopenharmony_ci	.rf_id = true,
2468c2ecf20Sopenharmony_ci	.gen2 = true,
2478c2ecf20Sopenharmony_ci	.device_family = IWL_DEVICE_FAMILY_22000,
2488c2ecf20Sopenharmony_ci	.base_params = &iwl_22000_base_params,
2498c2ecf20Sopenharmony_ci};
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
2528c2ecf20Sopenharmony_ci	.mq_rx_supported = true,
2538c2ecf20Sopenharmony_ci	.use_tfh = true,
2548c2ecf20Sopenharmony_ci	.rf_id = true,
2558c2ecf20Sopenharmony_ci	.gen2 = true,
2568c2ecf20Sopenharmony_ci	.device_family = IWL_DEVICE_FAMILY_22000,
2578c2ecf20Sopenharmony_ci	.base_params = &iwl_22000_base_params,
2588c2ecf20Sopenharmony_ci	.integrated = true,
2598c2ecf20Sopenharmony_ci	.xtal_latency = 500,
2608c2ecf20Sopenharmony_ci	.ltr_delay = IWL_CFG_TRANS_LTR_DELAY_200US,
2618c2ecf20Sopenharmony_ci};
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg = {
2648c2ecf20Sopenharmony_ci	.mq_rx_supported = true,
2658c2ecf20Sopenharmony_ci	.use_tfh = true,
2668c2ecf20Sopenharmony_ci	.rf_id = true,
2678c2ecf20Sopenharmony_ci	.gen2 = true,
2688c2ecf20Sopenharmony_ci	.device_family = IWL_DEVICE_FAMILY_22000,
2698c2ecf20Sopenharmony_ci	.base_params = &iwl_22000_base_params,
2708c2ecf20Sopenharmony_ci	.integrated = true,
2718c2ecf20Sopenharmony_ci	.xtal_latency = 1820,
2728c2ecf20Sopenharmony_ci	.ltr_delay = IWL_CFG_TRANS_LTR_DELAY_1820US,
2738c2ecf20Sopenharmony_ci};
2748c2ecf20Sopenharmony_ci
2758c2ecf20Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
2768c2ecf20Sopenharmony_ci	.mq_rx_supported = true,
2778c2ecf20Sopenharmony_ci	.use_tfh = true,
2788c2ecf20Sopenharmony_ci	.rf_id = true,
2798c2ecf20Sopenharmony_ci	.gen2 = true,
2808c2ecf20Sopenharmony_ci	.device_family = IWL_DEVICE_FAMILY_22000,
2818c2ecf20Sopenharmony_ci	.base_params = &iwl_22000_base_params,
2828c2ecf20Sopenharmony_ci	.integrated = true,
2838c2ecf20Sopenharmony_ci	.xtal_latency = 12000,
2848c2ecf20Sopenharmony_ci	.low_latency_xtal = true,
2858c2ecf20Sopenharmony_ci	.ltr_delay = IWL_CFG_TRANS_LTR_DELAY_2500US,
2868c2ecf20Sopenharmony_ci};
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci/*
2898c2ecf20Sopenharmony_ci * If the device doesn't support HE, no need to have that many buffers.
2908c2ecf20Sopenharmony_ci * 22000 devices can split multiple frames into a single RB, so fewer are
2918c2ecf20Sopenharmony_ci * needed; AX210 cannot (but use smaller RBs by default) - these sizes
2928c2ecf20Sopenharmony_ci * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
2938c2ecf20Sopenharmony_ci * additional overhead to account for processing time.
2948c2ecf20Sopenharmony_ci */
2958c2ecf20Sopenharmony_ci#define IWL_NUM_RBDS_NON_HE		512
2968c2ecf20Sopenharmony_ci#define IWL_NUM_RBDS_22000_HE		2048
2978c2ecf20Sopenharmony_ci#define IWL_NUM_RBDS_AX210_HE		4096
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci/*
3008c2ecf20Sopenharmony_ci * All JF radio modules are part of the 9000 series, but the MAC part
3018c2ecf20Sopenharmony_ci * looks more like 22000.  That's why this device is here, but called
3028c2ecf20Sopenharmony_ci * 9560 nevertheless.
3038c2ecf20Sopenharmony_ci */
3048c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
3058c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
3068c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
3078c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_NON_HE,
3088c2ecf20Sopenharmony_ci};
3098c2ecf20Sopenharmony_ci
3108c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
3118c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
3128c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
3138c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_NON_HE,
3148c2ecf20Sopenharmony_ci};
3158c2ecf20Sopenharmony_ci
3168c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
3178c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
3188c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
3198c2ecf20Sopenharmony_ci	/*
3208c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
3218c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
3228c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3238c2ecf20Sopenharmony_ci	 */
3248c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
3258c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_NON_HE,
3268c2ecf20Sopenharmony_ci};
3278c2ecf20Sopenharmony_ci
3288c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
3298c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
3308c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
3318c2ecf20Sopenharmony_ci	/*
3328c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
3338c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
3348c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3358c2ecf20Sopenharmony_ci	 */
3368c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
3378c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_NON_HE,
3388c2ecf20Sopenharmony_ci};
3398c2ecf20Sopenharmony_ci
3408c2ecf20Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
3418c2ecf20Sopenharmony_ci	.device_family = IWL_DEVICE_FAMILY_22000,
3428c2ecf20Sopenharmony_ci	.base_params = &iwl_22000_base_params,
3438c2ecf20Sopenharmony_ci	.mq_rx_supported = true,
3448c2ecf20Sopenharmony_ci	.use_tfh = true,
3458c2ecf20Sopenharmony_ci	.rf_id = true,
3468c2ecf20Sopenharmony_ci	.gen2 = true,
3478c2ecf20Sopenharmony_ci	.bisr_workaround = 1,
3488c2ecf20Sopenharmony_ci};
3498c2ecf20Sopenharmony_ci
3508c2ecf20Sopenharmony_ciconst struct iwl_cfg_trans_params iwl_ma_trans_cfg = {
3518c2ecf20Sopenharmony_ci	.device_family = IWL_DEVICE_FAMILY_AX210,
3528c2ecf20Sopenharmony_ci	.base_params = &iwl_ax210_base_params,
3538c2ecf20Sopenharmony_ci	.mq_rx_supported = true,
3548c2ecf20Sopenharmony_ci	.use_tfh = true,
3558c2ecf20Sopenharmony_ci	.rf_id = true,
3568c2ecf20Sopenharmony_ci	.gen2 = true,
3578c2ecf20Sopenharmony_ci	.integrated = true,
3588c2ecf20Sopenharmony_ci	.umac_prph_offset = 0x300000
3598c2ecf20Sopenharmony_ci};
3608c2ecf20Sopenharmony_ci
3618c2ecf20Sopenharmony_ciconst char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101";
3628c2ecf20Sopenharmony_ciconst char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
3638c2ecf20Sopenharmony_ciconst char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz";
3648c2ecf20Sopenharmony_ciconst char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203";
3658c2ecf20Sopenharmony_ciconst char iwl_ax211_name[] = "Intel(R) Wi-Fi 6 AX211 160MHz";
3668c2ecf20Sopenharmony_ciconst char iwl_ax411_name[] = "Intel(R) Wi-Fi 6 AX411 160MHz";
3678c2ecf20Sopenharmony_ciconst char iwl_ma_name[] = "Intel(R) Wi-Fi 6";
3688c2ecf20Sopenharmony_ci
3698c2ecf20Sopenharmony_ciconst char iwl_ax200_killer_1650w_name[] =
3708c2ecf20Sopenharmony_ci	"Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
3718c2ecf20Sopenharmony_ciconst char iwl_ax200_killer_1650x_name[] =
3728c2ecf20Sopenharmony_ci	"Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
3738c2ecf20Sopenharmony_ciconst char iwl_ax201_killer_1650s_name[] =
3748c2ecf20Sopenharmony_ci	"Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)";
3758c2ecf20Sopenharmony_ciconst char iwl_ax201_killer_1650i_name[] =
3768c2ecf20Sopenharmony_ci	"Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)";
3778c2ecf20Sopenharmony_ci
3788c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_qu_b0_hr1_b0 = {
3798c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
3808c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
3818c2ecf20Sopenharmony_ci	/*
3828c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
3838c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
3848c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3858c2ecf20Sopenharmony_ci	 */
3868c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
3878c2ecf20Sopenharmony_ci	.tx_with_siso_diversity = true,
3888c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
3898c2ecf20Sopenharmony_ci};
3908c2ecf20Sopenharmony_ci
3918c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_qu_b0_hr_b0 = {
3928c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
3938c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
3948c2ecf20Sopenharmony_ci	/*
3958c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
3968c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
3978c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
3988c2ecf20Sopenharmony_ci	 */
3998c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4008c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4018c2ecf20Sopenharmony_ci};
4028c2ecf20Sopenharmony_ci
4038c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_ax201_cfg_qu_hr = {
4048c2ecf20Sopenharmony_ci	.name = "Intel(R) Wi-Fi 6 AX201 160MHz",
4058c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
4068c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4078c2ecf20Sopenharmony_ci	/*
4088c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
4098c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
4108c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
4118c2ecf20Sopenharmony_ci	 */
4128c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4138c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4148c2ecf20Sopenharmony_ci};
4158c2ecf20Sopenharmony_ci
4168c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_qu_c0_hr1_b0 = {
4178c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
4188c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4198c2ecf20Sopenharmony_ci	/*
4208c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
4218c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
4228c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
4238c2ecf20Sopenharmony_ci	 */
4248c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4258c2ecf20Sopenharmony_ci	.tx_with_siso_diversity = true,
4268c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4278c2ecf20Sopenharmony_ci};
4288c2ecf20Sopenharmony_ci
4298c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_qu_c0_hr_b0 = {
4308c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
4318c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4328c2ecf20Sopenharmony_ci	/*
4338c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
4348c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
4358c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
4368c2ecf20Sopenharmony_ci	 */
4378c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4388c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4398c2ecf20Sopenharmony_ci};
4408c2ecf20Sopenharmony_ci
4418c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
4428c2ecf20Sopenharmony_ci	.name = "Intel(R) Wi-Fi 6 AX201 160MHz",
4438c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
4448c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4458c2ecf20Sopenharmony_ci	/*
4468c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
4478c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
4488c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
4498c2ecf20Sopenharmony_ci	 */
4508c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4518c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4528c2ecf20Sopenharmony_ci};
4538c2ecf20Sopenharmony_ci
4548c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_quz_a0_hr1_b0 = {
4558c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
4568c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4578c2ecf20Sopenharmony_ci	/*
4588c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
4598c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
4608c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
4618c2ecf20Sopenharmony_ci	 */
4628c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4638c2ecf20Sopenharmony_ci	.tx_with_siso_diversity = true,
4648c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4658c2ecf20Sopenharmony_ci};
4668c2ecf20Sopenharmony_ci
4678c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_ax201_cfg_quz_hr = {
4688c2ecf20Sopenharmony_ci	.name = "Intel(R) Wi-Fi 6 AX201 160MHz",
4698c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
4708c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4718c2ecf20Sopenharmony_ci	/*
4728c2ecf20Sopenharmony_ci         * This device doesn't support receiving BlockAck with a large bitmap
4738c2ecf20Sopenharmony_ci         * so we need to restrict the size of transmitted aggregation to the
4748c2ecf20Sopenharmony_ci         * HT size; mac80211 would otherwise pick the HE max (256) by default.
4758c2ecf20Sopenharmony_ci         */
4768c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4778c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4788c2ecf20Sopenharmony_ci};
4798c2ecf20Sopenharmony_ci
4808c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
4818c2ecf20Sopenharmony_ci	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
4828c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
4838c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4848c2ecf20Sopenharmony_ci	/*
4858c2ecf20Sopenharmony_ci         * This device doesn't support receiving BlockAck with a large bitmap
4868c2ecf20Sopenharmony_ci         * so we need to restrict the size of transmitted aggregation to the
4878c2ecf20Sopenharmony_ci         * HT size; mac80211 would otherwise pick the HE max (256) by default.
4888c2ecf20Sopenharmony_ci         */
4898c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
4908c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
4918c2ecf20Sopenharmony_ci};
4928c2ecf20Sopenharmony_ci
4938c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
4948c2ecf20Sopenharmony_ci	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
4958c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
4968c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
4978c2ecf20Sopenharmony_ci	/*
4988c2ecf20Sopenharmony_ci         * This device doesn't support receiving BlockAck with a large bitmap
4998c2ecf20Sopenharmony_ci         * so we need to restrict the size of transmitted aggregation to the
5008c2ecf20Sopenharmony_ci         * HT size; mac80211 would otherwise pick the HE max (256) by default.
5018c2ecf20Sopenharmony_ci         */
5028c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5038c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5048c2ecf20Sopenharmony_ci};
5058c2ecf20Sopenharmony_ci
5068c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_ax200_cfg_cc = {
5078c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_CC_A_FW_PRE,
5088c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
5098c2ecf20Sopenharmony_ci	/*
5108c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
5118c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
5128c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
5138c2ecf20Sopenharmony_ci	 */
5148c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5158c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5168c2ecf20Sopenharmony_ci};
5178c2ecf20Sopenharmony_ci
5188c2ecf20Sopenharmony_ciconst struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
5198c2ecf20Sopenharmony_ci	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
5208c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
5218c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
5228c2ecf20Sopenharmony_ci	/*
5238c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
5248c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
5258c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
5268c2ecf20Sopenharmony_ci	 */
5278c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5288c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5298c2ecf20Sopenharmony_ci};
5308c2ecf20Sopenharmony_ci
5318c2ecf20Sopenharmony_ciconst struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
5328c2ecf20Sopenharmony_ci	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
5338c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
5348c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
5358c2ecf20Sopenharmony_ci	/*
5368c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
5378c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
5388c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
5398c2ecf20Sopenharmony_ci	 */
5408c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5418c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5428c2ecf20Sopenharmony_ci};
5438c2ecf20Sopenharmony_ci
5448c2ecf20Sopenharmony_ciconst struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
5458c2ecf20Sopenharmony_ci	.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
5468c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
5478c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
5488c2ecf20Sopenharmony_ci	/*
5498c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
5508c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
5518c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
5528c2ecf20Sopenharmony_ci	 */
5538c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5548c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5558c2ecf20Sopenharmony_ci};
5568c2ecf20Sopenharmony_ci
5578c2ecf20Sopenharmony_ciconst struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
5588c2ecf20Sopenharmony_ci	.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
5598c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
5608c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
5618c2ecf20Sopenharmony_ci	/*
5628c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
5638c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
5648c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
5658c2ecf20Sopenharmony_ci	 */
5668c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5678c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5688c2ecf20Sopenharmony_ci};
5698c2ecf20Sopenharmony_ci
5708c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_qnj_b0_hr_b0_cfg = {
5718c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QNJ_B_HR_B_FW_PRE,
5728c2ecf20Sopenharmony_ci	IWL_DEVICE_22500,
5738c2ecf20Sopenharmony_ci	/*
5748c2ecf20Sopenharmony_ci	 * This device doesn't support receiving BlockAck with a large bitmap
5758c2ecf20Sopenharmony_ci	 * so we need to restrict the size of transmitted aggregation to the
5768c2ecf20Sopenharmony_ci	 * HT size; mac80211 would otherwise pick the HE max (256) by default.
5778c2ecf20Sopenharmony_ci	 */
5788c2ecf20Sopenharmony_ci	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
5798c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_22000_HE,
5808c2ecf20Sopenharmony_ci};
5818c2ecf20Sopenharmony_ci
5828c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0 = {
5838c2ecf20Sopenharmony_ci	.name = "Intel(R) Wireless-AC 9560 160MHz",
5848c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SO_A_JF_B_FW_PRE,
5858c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
5868c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_NON_HE,
5878c2ecf20Sopenharmony_ci};
5888c2ecf20Sopenharmony_ci
5898c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0 = {
5908c2ecf20Sopenharmony_ci	.name = "Intel(R) Wi-Fi 6 AX210 160MHz",
5918c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SO_A_HR_B_FW_PRE,
5928c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
5938c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
5948c2ecf20Sopenharmony_ci};
5958c2ecf20Sopenharmony_ci
5968c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
5978c2ecf20Sopenharmony_ci	.name = iwl_ax211_name,
5988c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
5998c2ecf20Sopenharmony_ci	.uhb_supported = true,
6008c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6018c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6028c2ecf20Sopenharmony_ci};
6038c2ecf20Sopenharmony_ci
6048c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long = {
6058c2ecf20Sopenharmony_ci	.name = iwl_ax211_name,
6068c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SO_A_GF_A_FW_PRE,
6078c2ecf20Sopenharmony_ci	.uhb_supported = true,
6088c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6098c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6108c2ecf20Sopenharmony_ci	.trans.xtal_latency = 12000,
6118c2ecf20Sopenharmony_ci	.trans.low_latency_xtal = true,
6128c2ecf20Sopenharmony_ci};
6138c2ecf20Sopenharmony_ci
6148c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
6158c2ecf20Sopenharmony_ci	.name = "Intel(R) Wi-Fi 6 AX210 160MHz",
6168c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_TY_A_GF_A_FW_PRE,
6178c2ecf20Sopenharmony_ci	.uhb_supported = true,
6188c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6198c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6208c2ecf20Sopenharmony_ci};
6218c2ecf20Sopenharmony_ci
6228c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
6238c2ecf20Sopenharmony_ci	.name = iwl_ax411_name,
6248c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
6258c2ecf20Sopenharmony_ci	.uhb_supported = true,
6268c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6278c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6288c2ecf20Sopenharmony_ci};
6298c2ecf20Sopenharmony_ci
6308c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long = {
6318c2ecf20Sopenharmony_ci	.name = iwl_ax411_name,
6328c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SO_A_GF4_A_FW_PRE,
6338c2ecf20Sopenharmony_ci	.uhb_supported = true,
6348c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6358c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6368c2ecf20Sopenharmony_ci	.trans.xtal_latency = 12000,
6378c2ecf20Sopenharmony_ci	.trans.low_latency_xtal = true,
6388c2ecf20Sopenharmony_ci};
6398c2ecf20Sopenharmony_ci
6408c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
6418c2ecf20Sopenharmony_ci	.name = iwl_ax411_name,
6428c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SNJ_A_GF4_A_FW_PRE,
6438c2ecf20Sopenharmony_ci	.uhb_supported = true,
6448c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6458c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6468c2ecf20Sopenharmony_ci};
6478c2ecf20Sopenharmony_ci
6488c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax211_cfg_snj_gf_a0 = {
6498c2ecf20Sopenharmony_ci	.name = iwl_ax211_name,
6508c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SNJ_A_GF_A_FW_PRE,
6518c2ecf20Sopenharmony_ci	.uhb_supported = true,
6528c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6538c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6548c2ecf20Sopenharmony_ci};
6558c2ecf20Sopenharmony_ci
6568c2ecf20Sopenharmony_ciconst struct iwl_cfg iwlax201_cfg_snj_hr_b0 = {
6578c2ecf20Sopenharmony_ci	.name = iwl_ax201_name,
6588c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_QU_B_HR_B_FW_PRE,
6598c2ecf20Sopenharmony_ci	.uhb_supported = true,
6608c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6618c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6628c2ecf20Sopenharmony_ci};
6638c2ecf20Sopenharmony_ci
6648c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_cfg_ma_a0_gf_a0 = {
6658c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_MA_A_GF_A_FW_PRE,
6668c2ecf20Sopenharmony_ci	.uhb_supported = true,
6678c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6688c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6698c2ecf20Sopenharmony_ci};
6708c2ecf20Sopenharmony_ci
6718c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
6728c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_MA_A_MR_A_FW_PRE,
6738c2ecf20Sopenharmony_ci	.uhb_supported = true,
6748c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6758c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6768c2ecf20Sopenharmony_ci};
6778c2ecf20Sopenharmony_ci
6788c2ecf20Sopenharmony_ciconst struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
6798c2ecf20Sopenharmony_ci	.fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
6808c2ecf20Sopenharmony_ci	.uhb_supported = true,
6818c2ecf20Sopenharmony_ci	IWL_DEVICE_AX210,
6828c2ecf20Sopenharmony_ci	.num_rbds = IWL_NUM_RBDS_AX210_HE,
6838c2ecf20Sopenharmony_ci};
6848c2ecf20Sopenharmony_ci
6858c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6868c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6878c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6888c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6898c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6908c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6918c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_QNJ_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6928c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_CC_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6938c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SO_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6948c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SO_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6958c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SO_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6968c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_TY_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6978c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SNJ_A_GF4_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6988c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
6998c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
7008c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
7018c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
7028c2ecf20Sopenharmony_ciMODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
703