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