1688 lines · c
1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause2/*3 * Copyright (C) 2005-2014, 2018-2024 Intel Corporation4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH5 * Copyright (C) 2016-2017 Intel Deutschland GmbH6 */7#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt8 9#include <linux/module.h>10#include <linux/pci.h>11#include <linux/acpi.h>12 13#include "fw/acpi.h"14 15#include "iwl-trans.h"16#include "iwl-drv.h"17#include "iwl-prph.h"18#include "internal.h"19 20#define TRANS_CFG_MARKER BIT(0)21#define _IS_A(cfg, _struct) __builtin_types_compatible_p(typeof(cfg), \22 struct _struct)23extern int _invalid_type;24#define _TRANS_CFG_MARKER(cfg) \25 (__builtin_choose_expr(_IS_A(cfg, iwl_cfg_trans_params), \26 TRANS_CFG_MARKER, \27 __builtin_choose_expr(_IS_A(cfg, iwl_cfg), 0, _invalid_type)))28#define _ASSIGN_CFG(cfg) (_TRANS_CFG_MARKER(cfg) + (kernel_ulong_t)&(cfg))29 30#define IWL_PCI_DEVICE(dev, subdev, cfg) \31 .vendor = PCI_VENDOR_ID_INTEL, .device = (dev), \32 .subvendor = PCI_ANY_ID, .subdevice = (subdev), \33 .driver_data = _ASSIGN_CFG(cfg)34 35/* Hardware specific file defines the PCI IDs table for that hardware module */36VISIBLE_IF_IWLWIFI_KUNIT const struct pci_device_id iwl_hw_card_ids[] = {37#if IS_ENABLED(CONFIG_IWLDVM)38 {IWL_PCI_DEVICE(0x4232, 0x1201, iwl5100_agn_cfg)}, /* Mini Card */39 {IWL_PCI_DEVICE(0x4232, 0x1301, iwl5100_agn_cfg)}, /* Half Mini Card */40 {IWL_PCI_DEVICE(0x4232, 0x1204, iwl5100_agn_cfg)}, /* Mini Card */41 {IWL_PCI_DEVICE(0x4232, 0x1304, iwl5100_agn_cfg)}, /* Half Mini Card */42 {IWL_PCI_DEVICE(0x4232, 0x1205, iwl5100_bgn_cfg)}, /* Mini Card */43 {IWL_PCI_DEVICE(0x4232, 0x1305, iwl5100_bgn_cfg)}, /* Half Mini Card */44 {IWL_PCI_DEVICE(0x4232, 0x1206, iwl5100_abg_cfg)}, /* Mini Card */45 {IWL_PCI_DEVICE(0x4232, 0x1306, iwl5100_abg_cfg)}, /* Half Mini Card */46 {IWL_PCI_DEVICE(0x4232, 0x1221, iwl5100_agn_cfg)}, /* Mini Card */47 {IWL_PCI_DEVICE(0x4232, 0x1321, iwl5100_agn_cfg)}, /* Half Mini Card */48 {IWL_PCI_DEVICE(0x4232, 0x1224, iwl5100_agn_cfg)}, /* Mini Card */49 {IWL_PCI_DEVICE(0x4232, 0x1324, iwl5100_agn_cfg)}, /* Half Mini Card */50 {IWL_PCI_DEVICE(0x4232, 0x1225, iwl5100_bgn_cfg)}, /* Mini Card */51 {IWL_PCI_DEVICE(0x4232, 0x1325, iwl5100_bgn_cfg)}, /* Half Mini Card */52 {IWL_PCI_DEVICE(0x4232, 0x1226, iwl5100_abg_cfg)}, /* Mini Card */53 {IWL_PCI_DEVICE(0x4232, 0x1326, iwl5100_abg_cfg)}, /* Half Mini Card */54 {IWL_PCI_DEVICE(0x4237, 0x1211, iwl5100_agn_cfg)}, /* Mini Card */55 {IWL_PCI_DEVICE(0x4237, 0x1311, iwl5100_agn_cfg)}, /* Half Mini Card */56 {IWL_PCI_DEVICE(0x4237, 0x1214, iwl5100_agn_cfg)}, /* Mini Card */57 {IWL_PCI_DEVICE(0x4237, 0x1314, iwl5100_agn_cfg)}, /* Half Mini Card */58 {IWL_PCI_DEVICE(0x4237, 0x1215, iwl5100_bgn_cfg)}, /* Mini Card */59 {IWL_PCI_DEVICE(0x4237, 0x1315, iwl5100_bgn_cfg)}, /* Half Mini Card */60 {IWL_PCI_DEVICE(0x4237, 0x1216, iwl5100_abg_cfg)}, /* Mini Card */61 {IWL_PCI_DEVICE(0x4237, 0x1316, iwl5100_abg_cfg)}, /* Half Mini Card */62 63/* 5300 Series WiFi */64 {IWL_PCI_DEVICE(0x4235, 0x1021, iwl5300_agn_cfg)}, /* Mini Card */65 {IWL_PCI_DEVICE(0x4235, 0x1121, iwl5300_agn_cfg)}, /* Half Mini Card */66 {IWL_PCI_DEVICE(0x4235, 0x1024, iwl5300_agn_cfg)}, /* Mini Card */67 {IWL_PCI_DEVICE(0x4235, 0x1124, iwl5300_agn_cfg)}, /* Half Mini Card */68 {IWL_PCI_DEVICE(0x4235, 0x1001, iwl5300_agn_cfg)}, /* Mini Card */69 {IWL_PCI_DEVICE(0x4235, 0x1101, iwl5300_agn_cfg)}, /* Half Mini Card */70 {IWL_PCI_DEVICE(0x4235, 0x1004, iwl5300_agn_cfg)}, /* Mini Card */71 {IWL_PCI_DEVICE(0x4235, 0x1104, iwl5300_agn_cfg)}, /* Half Mini Card */72 {IWL_PCI_DEVICE(0x4236, 0x1011, iwl5300_agn_cfg)}, /* Mini Card */73 {IWL_PCI_DEVICE(0x4236, 0x1111, iwl5300_agn_cfg)}, /* Half Mini Card */74 {IWL_PCI_DEVICE(0x4236, 0x1014, iwl5300_agn_cfg)}, /* Mini Card */75 {IWL_PCI_DEVICE(0x4236, 0x1114, iwl5300_agn_cfg)}, /* Half Mini Card */76 77/* 5350 Series WiFi/WiMax */78 {IWL_PCI_DEVICE(0x423A, 0x1001, iwl5350_agn_cfg)}, /* Mini Card */79 {IWL_PCI_DEVICE(0x423A, 0x1021, iwl5350_agn_cfg)}, /* Mini Card */80 {IWL_PCI_DEVICE(0x423B, 0x1011, iwl5350_agn_cfg)}, /* Mini Card */81 82/* 5150 Series Wifi/WiMax */83 {IWL_PCI_DEVICE(0x423C, 0x1201, iwl5150_agn_cfg)}, /* Mini Card */84 {IWL_PCI_DEVICE(0x423C, 0x1301, iwl5150_agn_cfg)}, /* Half Mini Card */85 {IWL_PCI_DEVICE(0x423C, 0x1206, iwl5150_abg_cfg)}, /* Mini Card */86 {IWL_PCI_DEVICE(0x423C, 0x1306, iwl5150_abg_cfg)}, /* Half Mini Card */87 {IWL_PCI_DEVICE(0x423C, 0x1221, iwl5150_agn_cfg)}, /* Mini Card */88 {IWL_PCI_DEVICE(0x423C, 0x1321, iwl5150_agn_cfg)}, /* Half Mini Card */89 {IWL_PCI_DEVICE(0x423C, 0x1326, iwl5150_abg_cfg)}, /* Half Mini Card */90 91 {IWL_PCI_DEVICE(0x423D, 0x1211, iwl5150_agn_cfg)}, /* Mini Card */92 {IWL_PCI_DEVICE(0x423D, 0x1311, iwl5150_agn_cfg)}, /* Half Mini Card */93 {IWL_PCI_DEVICE(0x423D, 0x1216, iwl5150_abg_cfg)}, /* Mini Card */94 {IWL_PCI_DEVICE(0x423D, 0x1316, iwl5150_abg_cfg)}, /* Half Mini Card */95 96/* 6x00 Series */97 {IWL_PCI_DEVICE(0x422B, 0x1101, iwl6000_3agn_cfg)},98 {IWL_PCI_DEVICE(0x422B, 0x1108, iwl6000_3agn_cfg)},99 {IWL_PCI_DEVICE(0x422B, 0x1121, iwl6000_3agn_cfg)},100 {IWL_PCI_DEVICE(0x422B, 0x1128, iwl6000_3agn_cfg)},101 {IWL_PCI_DEVICE(0x422C, 0x1301, iwl6000i_2agn_cfg)},102 {IWL_PCI_DEVICE(0x422C, 0x1306, iwl6000i_2abg_cfg)},103 {IWL_PCI_DEVICE(0x422C, 0x1307, iwl6000i_2bg_cfg)},104 {IWL_PCI_DEVICE(0x422C, 0x1321, iwl6000i_2agn_cfg)},105 {IWL_PCI_DEVICE(0x422C, 0x1326, iwl6000i_2abg_cfg)},106 {IWL_PCI_DEVICE(0x4238, 0x1111, iwl6000_3agn_cfg)},107 {IWL_PCI_DEVICE(0x4238, 0x1118, iwl6000_3agn_cfg)},108 {IWL_PCI_DEVICE(0x4239, 0x1311, iwl6000i_2agn_cfg)},109 {IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_2abg_cfg)},110 111/* 6x05 Series */112 {IWL_PCI_DEVICE(0x0082, 0x1301, iwl6005_2agn_cfg)},113 {IWL_PCI_DEVICE(0x0082, 0x1306, iwl6005_2abg_cfg)},114 {IWL_PCI_DEVICE(0x0082, 0x1307, iwl6005_2bg_cfg)},115 {IWL_PCI_DEVICE(0x0082, 0x1308, iwl6005_2agn_cfg)},116 {IWL_PCI_DEVICE(0x0082, 0x1321, iwl6005_2agn_cfg)},117 {IWL_PCI_DEVICE(0x0082, 0x1326, iwl6005_2abg_cfg)},118 {IWL_PCI_DEVICE(0x0082, 0x1328, iwl6005_2agn_cfg)},119 {IWL_PCI_DEVICE(0x0085, 0x1311, iwl6005_2agn_cfg)},120 {IWL_PCI_DEVICE(0x0085, 0x1318, iwl6005_2agn_cfg)},121 {IWL_PCI_DEVICE(0x0085, 0x1316, iwl6005_2abg_cfg)},122 {IWL_PCI_DEVICE(0x0082, 0xC020, iwl6005_2agn_sff_cfg)},123 {IWL_PCI_DEVICE(0x0085, 0xC220, iwl6005_2agn_sff_cfg)},124 {IWL_PCI_DEVICE(0x0085, 0xC228, iwl6005_2agn_sff_cfg)},125 {IWL_PCI_DEVICE(0x0082, 0x4820, iwl6005_2agn_d_cfg)},126 {IWL_PCI_DEVICE(0x0082, 0x1304, iwl6005_2agn_mow1_cfg)},/* low 5GHz active */127 {IWL_PCI_DEVICE(0x0082, 0x1305, iwl6005_2agn_mow2_cfg)},/* high 5GHz active */128 129/* 6x30 Series */130 {IWL_PCI_DEVICE(0x008A, 0x5305, iwl1030_bgn_cfg)},131 {IWL_PCI_DEVICE(0x008A, 0x5307, iwl1030_bg_cfg)},132 {IWL_PCI_DEVICE(0x008A, 0x5325, iwl1030_bgn_cfg)},133 {IWL_PCI_DEVICE(0x008A, 0x5327, iwl1030_bg_cfg)},134 {IWL_PCI_DEVICE(0x008B, 0x5315, iwl1030_bgn_cfg)},135 {IWL_PCI_DEVICE(0x008B, 0x5317, iwl1030_bg_cfg)},136 {IWL_PCI_DEVICE(0x0090, 0x5211, iwl6030_2agn_cfg)},137 {IWL_PCI_DEVICE(0x0090, 0x5215, iwl6030_2bgn_cfg)},138 {IWL_PCI_DEVICE(0x0090, 0x5216, iwl6030_2abg_cfg)},139 {IWL_PCI_DEVICE(0x0091, 0x5201, iwl6030_2agn_cfg)},140 {IWL_PCI_DEVICE(0x0091, 0x5205, iwl6030_2bgn_cfg)},141 {IWL_PCI_DEVICE(0x0091, 0x5206, iwl6030_2abg_cfg)},142 {IWL_PCI_DEVICE(0x0091, 0x5207, iwl6030_2bg_cfg)},143 {IWL_PCI_DEVICE(0x0091, 0x5221, iwl6030_2agn_cfg)},144 {IWL_PCI_DEVICE(0x0091, 0x5225, iwl6030_2bgn_cfg)},145 {IWL_PCI_DEVICE(0x0091, 0x5226, iwl6030_2abg_cfg)},146 147/* 6x50 WiFi/WiMax Series */148 {IWL_PCI_DEVICE(0x0087, 0x1301, iwl6050_2agn_cfg)},149 {IWL_PCI_DEVICE(0x0087, 0x1306, iwl6050_2abg_cfg)},150 {IWL_PCI_DEVICE(0x0087, 0x1321, iwl6050_2agn_cfg)},151 {IWL_PCI_DEVICE(0x0087, 0x1326, iwl6050_2abg_cfg)},152 {IWL_PCI_DEVICE(0x0089, 0x1311, iwl6050_2agn_cfg)},153 {IWL_PCI_DEVICE(0x0089, 0x1316, iwl6050_2abg_cfg)},154 155/* 6150 WiFi/WiMax Series */156 {IWL_PCI_DEVICE(0x0885, 0x1305, iwl6150_bgn_cfg)},157 {IWL_PCI_DEVICE(0x0885, 0x1307, iwl6150_bg_cfg)},158 {IWL_PCI_DEVICE(0x0885, 0x1325, iwl6150_bgn_cfg)},159 {IWL_PCI_DEVICE(0x0885, 0x1327, iwl6150_bg_cfg)},160 {IWL_PCI_DEVICE(0x0886, 0x1315, iwl6150_bgn_cfg)},161 {IWL_PCI_DEVICE(0x0886, 0x1317, iwl6150_bg_cfg)},162 163/* 1000 Series WiFi */164 {IWL_PCI_DEVICE(0x0083, 0x1205, iwl1000_bgn_cfg)},165 {IWL_PCI_DEVICE(0x0083, 0x1305, iwl1000_bgn_cfg)},166 {IWL_PCI_DEVICE(0x0083, 0x1225, iwl1000_bgn_cfg)},167 {IWL_PCI_DEVICE(0x0083, 0x1325, iwl1000_bgn_cfg)},168 {IWL_PCI_DEVICE(0x0084, 0x1215, iwl1000_bgn_cfg)},169 {IWL_PCI_DEVICE(0x0084, 0x1315, iwl1000_bgn_cfg)},170 {IWL_PCI_DEVICE(0x0083, 0x1206, iwl1000_bg_cfg)},171 {IWL_PCI_DEVICE(0x0083, 0x1306, iwl1000_bg_cfg)},172 {IWL_PCI_DEVICE(0x0083, 0x1226, iwl1000_bg_cfg)},173 {IWL_PCI_DEVICE(0x0083, 0x1326, iwl1000_bg_cfg)},174 {IWL_PCI_DEVICE(0x0084, 0x1216, iwl1000_bg_cfg)},175 {IWL_PCI_DEVICE(0x0084, 0x1316, iwl1000_bg_cfg)},176 177/* 100 Series WiFi */178 {IWL_PCI_DEVICE(0x08AE, 0x1005, iwl100_bgn_cfg)},179 {IWL_PCI_DEVICE(0x08AE, 0x1007, iwl100_bg_cfg)},180 {IWL_PCI_DEVICE(0x08AF, 0x1015, iwl100_bgn_cfg)},181 {IWL_PCI_DEVICE(0x08AF, 0x1017, iwl100_bg_cfg)},182 {IWL_PCI_DEVICE(0x08AE, 0x1025, iwl100_bgn_cfg)},183 {IWL_PCI_DEVICE(0x08AE, 0x1027, iwl100_bg_cfg)},184 185/* 130 Series WiFi */186 {IWL_PCI_DEVICE(0x0896, 0x5005, iwl130_bgn_cfg)},187 {IWL_PCI_DEVICE(0x0896, 0x5007, iwl130_bg_cfg)},188 {IWL_PCI_DEVICE(0x0897, 0x5015, iwl130_bgn_cfg)},189 {IWL_PCI_DEVICE(0x0897, 0x5017, iwl130_bg_cfg)},190 {IWL_PCI_DEVICE(0x0896, 0x5025, iwl130_bgn_cfg)},191 {IWL_PCI_DEVICE(0x0896, 0x5027, iwl130_bg_cfg)},192 193/* 2x00 Series */194 {IWL_PCI_DEVICE(0x0890, 0x4022, iwl2000_2bgn_cfg)},195 {IWL_PCI_DEVICE(0x0891, 0x4222, iwl2000_2bgn_cfg)},196 {IWL_PCI_DEVICE(0x0890, 0x4422, iwl2000_2bgn_cfg)},197 {IWL_PCI_DEVICE(0x0890, 0x4822, iwl2000_2bgn_d_cfg)},198 199/* 2x30 Series */200 {IWL_PCI_DEVICE(0x0887, 0x4062, iwl2030_2bgn_cfg)},201 {IWL_PCI_DEVICE(0x0888, 0x4262, iwl2030_2bgn_cfg)},202 {IWL_PCI_DEVICE(0x0887, 0x4462, iwl2030_2bgn_cfg)},203 204/* 6x35 Series */205 {IWL_PCI_DEVICE(0x088E, 0x4060, iwl6035_2agn_cfg)},206 {IWL_PCI_DEVICE(0x088E, 0x406A, iwl6035_2agn_sff_cfg)},207 {IWL_PCI_DEVICE(0x088F, 0x4260, iwl6035_2agn_cfg)},208 {IWL_PCI_DEVICE(0x088F, 0x426A, iwl6035_2agn_sff_cfg)},209 {IWL_PCI_DEVICE(0x088E, 0x4460, iwl6035_2agn_cfg)},210 {IWL_PCI_DEVICE(0x088E, 0x446A, iwl6035_2agn_sff_cfg)},211 {IWL_PCI_DEVICE(0x088E, 0x4860, iwl6035_2agn_cfg)},212 {IWL_PCI_DEVICE(0x088F, 0x5260, iwl6035_2agn_cfg)},213 214/* 105 Series */215 {IWL_PCI_DEVICE(0x0894, 0x0022, iwl105_bgn_cfg)},216 {IWL_PCI_DEVICE(0x0895, 0x0222, iwl105_bgn_cfg)},217 {IWL_PCI_DEVICE(0x0894, 0x0422, iwl105_bgn_cfg)},218 {IWL_PCI_DEVICE(0x0894, 0x0822, iwl105_bgn_d_cfg)},219 220/* 135 Series */221 {IWL_PCI_DEVICE(0x0892, 0x0062, iwl135_bgn_cfg)},222 {IWL_PCI_DEVICE(0x0893, 0x0262, iwl135_bgn_cfg)},223 {IWL_PCI_DEVICE(0x0892, 0x0462, iwl135_bgn_cfg)},224#endif /* CONFIG_IWLDVM */225 226#if IS_ENABLED(CONFIG_IWLMVM)227/* 7260 Series */228 {IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)},229 {IWL_PCI_DEVICE(0x08B1, 0x4072, iwl7260_2ac_cfg)},230 {IWL_PCI_DEVICE(0x08B1, 0x4170, iwl7260_2ac_cfg)},231 {IWL_PCI_DEVICE(0x08B1, 0x4C60, iwl7260_2ac_cfg)},232 {IWL_PCI_DEVICE(0x08B1, 0x4C70, iwl7260_2ac_cfg)},233 {IWL_PCI_DEVICE(0x08B1, 0x4060, iwl7260_2n_cfg)},234 {IWL_PCI_DEVICE(0x08B1, 0x406A, iwl7260_2n_cfg)},235 {IWL_PCI_DEVICE(0x08B1, 0x4160, iwl7260_2n_cfg)},236 {IWL_PCI_DEVICE(0x08B1, 0x4062, iwl7260_n_cfg)},237 {IWL_PCI_DEVICE(0x08B1, 0x4162, iwl7260_n_cfg)},238 {IWL_PCI_DEVICE(0x08B2, 0x4270, iwl7260_2ac_cfg)},239 {IWL_PCI_DEVICE(0x08B2, 0x4272, iwl7260_2ac_cfg)},240 {IWL_PCI_DEVICE(0x08B2, 0x4260, iwl7260_2n_cfg)},241 {IWL_PCI_DEVICE(0x08B2, 0x426A, iwl7260_2n_cfg)},242 {IWL_PCI_DEVICE(0x08B2, 0x4262, iwl7260_n_cfg)},243 {IWL_PCI_DEVICE(0x08B1, 0x4470, iwl7260_2ac_cfg)},244 {IWL_PCI_DEVICE(0x08B1, 0x4472, iwl7260_2ac_cfg)},245 {IWL_PCI_DEVICE(0x08B1, 0x4460, iwl7260_2n_cfg)},246 {IWL_PCI_DEVICE(0x08B1, 0x446A, iwl7260_2n_cfg)},247 {IWL_PCI_DEVICE(0x08B1, 0x4462, iwl7260_n_cfg)},248 {IWL_PCI_DEVICE(0x08B1, 0x4870, iwl7260_2ac_cfg)},249 {IWL_PCI_DEVICE(0x08B1, 0x486E, iwl7260_2ac_cfg)},250 {IWL_PCI_DEVICE(0x08B1, 0x4A70, iwl7260_2ac_cfg_high_temp)},251 {IWL_PCI_DEVICE(0x08B1, 0x4A6E, iwl7260_2ac_cfg_high_temp)},252 {IWL_PCI_DEVICE(0x08B1, 0x4A6C, iwl7260_2ac_cfg_high_temp)},253 {IWL_PCI_DEVICE(0x08B1, 0x4570, iwl7260_2ac_cfg)},254 {IWL_PCI_DEVICE(0x08B1, 0x4560, iwl7260_2n_cfg)},255 {IWL_PCI_DEVICE(0x08B2, 0x4370, iwl7260_2ac_cfg)},256 {IWL_PCI_DEVICE(0x08B2, 0x4360, iwl7260_2n_cfg)},257 {IWL_PCI_DEVICE(0x08B1, 0x5070, iwl7260_2ac_cfg)},258 {IWL_PCI_DEVICE(0x08B1, 0x5072, iwl7260_2ac_cfg)},259 {IWL_PCI_DEVICE(0x08B1, 0x5170, iwl7260_2ac_cfg)},260 {IWL_PCI_DEVICE(0x08B1, 0x5770, iwl7260_2ac_cfg)},261 {IWL_PCI_DEVICE(0x08B1, 0x4020, iwl7260_2n_cfg)},262 {IWL_PCI_DEVICE(0x08B1, 0x402A, iwl7260_2n_cfg)},263 {IWL_PCI_DEVICE(0x08B2, 0x4220, iwl7260_2n_cfg)},264 {IWL_PCI_DEVICE(0x08B1, 0x4420, iwl7260_2n_cfg)},265 {IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)},266 {IWL_PCI_DEVICE(0x08B1, 0xC072, iwl7260_2ac_cfg)},267 {IWL_PCI_DEVICE(0x08B1, 0xC170, iwl7260_2ac_cfg)},268 {IWL_PCI_DEVICE(0x08B1, 0xC060, iwl7260_2n_cfg)},269 {IWL_PCI_DEVICE(0x08B1, 0xC06A, iwl7260_2n_cfg)},270 {IWL_PCI_DEVICE(0x08B1, 0xC160, iwl7260_2n_cfg)},271 {IWL_PCI_DEVICE(0x08B1, 0xC062, iwl7260_n_cfg)},272 {IWL_PCI_DEVICE(0x08B1, 0xC162, iwl7260_n_cfg)},273 {IWL_PCI_DEVICE(0x08B1, 0xC770, iwl7260_2ac_cfg)},274 {IWL_PCI_DEVICE(0x08B1, 0xC760, iwl7260_2n_cfg)},275 {IWL_PCI_DEVICE(0x08B2, 0xC270, iwl7260_2ac_cfg)},276 {IWL_PCI_DEVICE(0x08B1, 0xCC70, iwl7260_2ac_cfg)},277 {IWL_PCI_DEVICE(0x08B1, 0xCC60, iwl7260_2ac_cfg)},278 {IWL_PCI_DEVICE(0x08B2, 0xC272, iwl7260_2ac_cfg)},279 {IWL_PCI_DEVICE(0x08B2, 0xC260, iwl7260_2n_cfg)},280 {IWL_PCI_DEVICE(0x08B2, 0xC26A, iwl7260_n_cfg)},281 {IWL_PCI_DEVICE(0x08B2, 0xC262, iwl7260_n_cfg)},282 {IWL_PCI_DEVICE(0x08B1, 0xC470, iwl7260_2ac_cfg)},283 {IWL_PCI_DEVICE(0x08B1, 0xC472, iwl7260_2ac_cfg)},284 {IWL_PCI_DEVICE(0x08B1, 0xC460, iwl7260_2n_cfg)},285 {IWL_PCI_DEVICE(0x08B1, 0xC462, iwl7260_n_cfg)},286 {IWL_PCI_DEVICE(0x08B1, 0xC570, iwl7260_2ac_cfg)},287 {IWL_PCI_DEVICE(0x08B1, 0xC560, iwl7260_2n_cfg)},288 {IWL_PCI_DEVICE(0x08B2, 0xC370, iwl7260_2ac_cfg)},289 {IWL_PCI_DEVICE(0x08B1, 0xC360, iwl7260_2n_cfg)},290 {IWL_PCI_DEVICE(0x08B1, 0xC020, iwl7260_2n_cfg)},291 {IWL_PCI_DEVICE(0x08B1, 0xC02A, iwl7260_2n_cfg)},292 {IWL_PCI_DEVICE(0x08B2, 0xC220, iwl7260_2n_cfg)},293 {IWL_PCI_DEVICE(0x08B1, 0xC420, iwl7260_2n_cfg)},294 295/* 3160 Series */296 {IWL_PCI_DEVICE(0x08B3, 0x0070, iwl3160_2ac_cfg)},297 {IWL_PCI_DEVICE(0x08B3, 0x0072, iwl3160_2ac_cfg)},298 {IWL_PCI_DEVICE(0x08B3, 0x0170, iwl3160_2ac_cfg)},299 {IWL_PCI_DEVICE(0x08B3, 0x0172, iwl3160_2ac_cfg)},300 {IWL_PCI_DEVICE(0x08B3, 0x0060, iwl3160_2n_cfg)},301 {IWL_PCI_DEVICE(0x08B3, 0x0062, iwl3160_n_cfg)},302 {IWL_PCI_DEVICE(0x08B4, 0x0270, iwl3160_2ac_cfg)},303 {IWL_PCI_DEVICE(0x08B4, 0x0272, iwl3160_2ac_cfg)},304 {IWL_PCI_DEVICE(0x08B3, 0x0470, iwl3160_2ac_cfg)},305 {IWL_PCI_DEVICE(0x08B3, 0x0472, iwl3160_2ac_cfg)},306 {IWL_PCI_DEVICE(0x08B4, 0x0370, iwl3160_2ac_cfg)},307 {IWL_PCI_DEVICE(0x08B3, 0x8070, iwl3160_2ac_cfg)},308 {IWL_PCI_DEVICE(0x08B3, 0x8072, iwl3160_2ac_cfg)},309 {IWL_PCI_DEVICE(0x08B3, 0x8170, iwl3160_2ac_cfg)},310 {IWL_PCI_DEVICE(0x08B3, 0x8172, iwl3160_2ac_cfg)},311 {IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},312 {IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},313 {IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},314 {IWL_PCI_DEVICE(0x08B4, 0x8370, iwl3160_2ac_cfg)},315 {IWL_PCI_DEVICE(0x08B4, 0x8272, iwl3160_2ac_cfg)},316 {IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},317 {IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)},318 {IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)},319 {IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)},320 321/* 3165 Series */322 {IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)},323 {IWL_PCI_DEVICE(0x3165, 0x4012, iwl3165_2ac_cfg)},324 {IWL_PCI_DEVICE(0x3166, 0x4212, iwl3165_2ac_cfg)},325 {IWL_PCI_DEVICE(0x3165, 0x4410, iwl3165_2ac_cfg)},326 {IWL_PCI_DEVICE(0x3165, 0x4510, iwl3165_2ac_cfg)},327 {IWL_PCI_DEVICE(0x3165, 0x4110, iwl3165_2ac_cfg)},328 {IWL_PCI_DEVICE(0x3166, 0x4310, iwl3165_2ac_cfg)},329 {IWL_PCI_DEVICE(0x3166, 0x4210, iwl3165_2ac_cfg)},330 {IWL_PCI_DEVICE(0x3165, 0x8010, iwl3165_2ac_cfg)},331 {IWL_PCI_DEVICE(0x3165, 0x8110, iwl3165_2ac_cfg)},332 333/* 3168 Series */334 {IWL_PCI_DEVICE(0x24FB, 0x2010, iwl3168_2ac_cfg)},335 {IWL_PCI_DEVICE(0x24FB, 0x2110, iwl3168_2ac_cfg)},336 {IWL_PCI_DEVICE(0x24FB, 0x2050, iwl3168_2ac_cfg)},337 {IWL_PCI_DEVICE(0x24FB, 0x2150, iwl3168_2ac_cfg)},338 {IWL_PCI_DEVICE(0x24FB, 0x0000, iwl3168_2ac_cfg)},339 340/* 7265 Series */341 {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},342 {IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)},343 {IWL_PCI_DEVICE(0x095A, 0x5100, iwl7265_2ac_cfg)},344 {IWL_PCI_DEVICE(0x095B, 0x5310, iwl7265_2ac_cfg)},345 {IWL_PCI_DEVICE(0x095B, 0x5302, iwl7265_n_cfg)},346 {IWL_PCI_DEVICE(0x095B, 0x5210, iwl7265_2ac_cfg)},347 {IWL_PCI_DEVICE(0x095A, 0x5C10, iwl7265_2ac_cfg)},348 {IWL_PCI_DEVICE(0x095A, 0x5012, iwl7265_2ac_cfg)},349 {IWL_PCI_DEVICE(0x095A, 0x5412, iwl7265_2ac_cfg)},350 {IWL_PCI_DEVICE(0x095A, 0x5410, iwl7265_2ac_cfg)},351 {IWL_PCI_DEVICE(0x095A, 0x5510, iwl7265_2ac_cfg)},352 {IWL_PCI_DEVICE(0x095A, 0x5400, iwl7265_2ac_cfg)},353 {IWL_PCI_DEVICE(0x095A, 0x1010, iwl7265_2ac_cfg)},354 {IWL_PCI_DEVICE(0x095A, 0x5000, iwl7265_2n_cfg)},355 {IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2n_cfg)},356 {IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)},357 {IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)},358 {IWL_PCI_DEVICE(0x095A, 0x5102, iwl7265_n_cfg)},359 {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},360 {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},361 {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)},362 {IWL_PCI_DEVICE(0x095A, 0x900A, iwl7265_2ac_cfg)},363 {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},364 {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)},365 {IWL_PCI_DEVICE(0x095B, 0x9210, iwl7265_2ac_cfg)},366 {IWL_PCI_DEVICE(0x095B, 0x9200, iwl7265_2ac_cfg)},367 {IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)},368 {IWL_PCI_DEVICE(0x095B, 0x9310, iwl7265_2ac_cfg)},369 {IWL_PCI_DEVICE(0x095A, 0x9410, iwl7265_2ac_cfg)},370 {IWL_PCI_DEVICE(0x095A, 0x5020, iwl7265_2n_cfg)},371 {IWL_PCI_DEVICE(0x095A, 0x502A, iwl7265_2n_cfg)},372 {IWL_PCI_DEVICE(0x095A, 0x5420, iwl7265_2n_cfg)},373 {IWL_PCI_DEVICE(0x095A, 0x5090, iwl7265_2ac_cfg)},374 {IWL_PCI_DEVICE(0x095A, 0x5190, iwl7265_2ac_cfg)},375 {IWL_PCI_DEVICE(0x095A, 0x5590, iwl7265_2ac_cfg)},376 {IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)},377 {IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)},378 {IWL_PCI_DEVICE(0x095A, 0x5F10, iwl7265_2ac_cfg)},379 {IWL_PCI_DEVICE(0x095B, 0x5212, iwl7265_2ac_cfg)},380 {IWL_PCI_DEVICE(0x095B, 0x520A, iwl7265_2ac_cfg)},381 {IWL_PCI_DEVICE(0x095A, 0x9000, iwl7265_2ac_cfg)},382 {IWL_PCI_DEVICE(0x095A, 0x9400, iwl7265_2ac_cfg)},383 {IWL_PCI_DEVICE(0x095A, 0x9E10, iwl7265_2ac_cfg)},384 385/* 8000 Series */386 {IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)},387 {IWL_PCI_DEVICE(0x24F3, 0x1010, iwl8260_2ac_cfg)},388 {IWL_PCI_DEVICE(0x24F3, 0x10B0, iwl8260_2ac_cfg)},389 {IWL_PCI_DEVICE(0x24F3, 0x0130, iwl8260_2ac_cfg)},390 {IWL_PCI_DEVICE(0x24F3, 0x1130, iwl8260_2ac_cfg)},391 {IWL_PCI_DEVICE(0x24F3, 0x0132, iwl8260_2ac_cfg)},392 {IWL_PCI_DEVICE(0x24F3, 0x1132, iwl8260_2ac_cfg)},393 {IWL_PCI_DEVICE(0x24F3, 0x0110, iwl8260_2ac_cfg)},394 {IWL_PCI_DEVICE(0x24F3, 0x01F0, iwl8260_2ac_cfg)},395 {IWL_PCI_DEVICE(0x24F3, 0x0012, iwl8260_2ac_cfg)},396 {IWL_PCI_DEVICE(0x24F3, 0x1012, iwl8260_2ac_cfg)},397 {IWL_PCI_DEVICE(0x24F3, 0x1110, iwl8260_2ac_cfg)},398 {IWL_PCI_DEVICE(0x24F3, 0x0050, iwl8260_2ac_cfg)},399 {IWL_PCI_DEVICE(0x24F3, 0x0250, iwl8260_2ac_cfg)},400 {IWL_PCI_DEVICE(0x24F3, 0x1050, iwl8260_2ac_cfg)},401 {IWL_PCI_DEVICE(0x24F3, 0x0150, iwl8260_2ac_cfg)},402 {IWL_PCI_DEVICE(0x24F3, 0x1150, iwl8260_2ac_cfg)},403 {IWL_PCI_DEVICE(0x24F4, 0x0030, iwl8260_2ac_cfg)},404 {IWL_PCI_DEVICE(0x24F4, 0x1030, iwl8260_2ac_cfg)},405 {IWL_PCI_DEVICE(0x24F3, 0xC010, iwl8260_2ac_cfg)},406 {IWL_PCI_DEVICE(0x24F3, 0xC110, iwl8260_2ac_cfg)},407 {IWL_PCI_DEVICE(0x24F3, 0xD010, iwl8260_2ac_cfg)},408 {IWL_PCI_DEVICE(0x24F3, 0xC050, iwl8260_2ac_cfg)},409 {IWL_PCI_DEVICE(0x24F3, 0xD050, iwl8260_2ac_cfg)},410 {IWL_PCI_DEVICE(0x24F3, 0xD0B0, iwl8260_2ac_cfg)},411 {IWL_PCI_DEVICE(0x24F3, 0xB0B0, iwl8260_2ac_cfg)},412 {IWL_PCI_DEVICE(0x24F3, 0x8010, iwl8260_2ac_cfg)},413 {IWL_PCI_DEVICE(0x24F3, 0x8110, iwl8260_2ac_cfg)},414 {IWL_PCI_DEVICE(0x24F3, 0x9010, iwl8260_2ac_cfg)},415 {IWL_PCI_DEVICE(0x24F3, 0x9110, iwl8260_2ac_cfg)},416 {IWL_PCI_DEVICE(0x24F4, 0x8030, iwl8260_2ac_cfg)},417 {IWL_PCI_DEVICE(0x24F4, 0x9030, iwl8260_2ac_cfg)},418 {IWL_PCI_DEVICE(0x24F4, 0xC030, iwl8260_2ac_cfg)},419 {IWL_PCI_DEVICE(0x24F4, 0xD030, iwl8260_2ac_cfg)},420 {IWL_PCI_DEVICE(0x24F3, 0x8130, iwl8260_2ac_cfg)},421 {IWL_PCI_DEVICE(0x24F3, 0x9130, iwl8260_2ac_cfg)},422 {IWL_PCI_DEVICE(0x24F3, 0x8132, iwl8260_2ac_cfg)},423 {IWL_PCI_DEVICE(0x24F3, 0x9132, iwl8260_2ac_cfg)},424 {IWL_PCI_DEVICE(0x24F3, 0x8050, iwl8260_2ac_cfg)},425 {IWL_PCI_DEVICE(0x24F3, 0x8150, iwl8260_2ac_cfg)},426 {IWL_PCI_DEVICE(0x24F3, 0x9050, iwl8260_2ac_cfg)},427 {IWL_PCI_DEVICE(0x24F3, 0x9150, iwl8260_2ac_cfg)},428 {IWL_PCI_DEVICE(0x24F3, 0x0004, iwl8260_2n_cfg)},429 {IWL_PCI_DEVICE(0x24F3, 0x0044, iwl8260_2n_cfg)},430 {IWL_PCI_DEVICE(0x24F5, 0x0010, iwl4165_2ac_cfg)},431 {IWL_PCI_DEVICE(0x24F6, 0x0030, iwl4165_2ac_cfg)},432 {IWL_PCI_DEVICE(0x24F3, 0x0810, iwl8260_2ac_cfg)},433 {IWL_PCI_DEVICE(0x24F3, 0x0910, iwl8260_2ac_cfg)},434 {IWL_PCI_DEVICE(0x24F3, 0x0850, iwl8260_2ac_cfg)},435 {IWL_PCI_DEVICE(0x24F3, 0x0950, iwl8260_2ac_cfg)},436 {IWL_PCI_DEVICE(0x24F3, 0x0930, iwl8260_2ac_cfg)},437 {IWL_PCI_DEVICE(0x24F3, 0x0000, iwl8265_2ac_cfg)},438 {IWL_PCI_DEVICE(0x24F3, 0x4010, iwl8260_2ac_cfg)},439 {IWL_PCI_DEVICE(0x24FD, 0x0010, iwl8265_2ac_cfg)},440 {IWL_PCI_DEVICE(0x24FD, 0x0110, iwl8265_2ac_cfg)},441 {IWL_PCI_DEVICE(0x24FD, 0x1110, iwl8265_2ac_cfg)},442 {IWL_PCI_DEVICE(0x24FD, 0x1130, iwl8265_2ac_cfg)},443 {IWL_PCI_DEVICE(0x24FD, 0x0130, iwl8265_2ac_cfg)},444 {IWL_PCI_DEVICE(0x24FD, 0x1010, iwl8265_2ac_cfg)},445 {IWL_PCI_DEVICE(0x24FD, 0x10D0, iwl8265_2ac_cfg)},446 {IWL_PCI_DEVICE(0x24FD, 0x0050, iwl8265_2ac_cfg)},447 {IWL_PCI_DEVICE(0x24FD, 0x0150, iwl8265_2ac_cfg)},448 {IWL_PCI_DEVICE(0x24FD, 0x9010, iwl8265_2ac_cfg)},449 {IWL_PCI_DEVICE(0x24FD, 0x8110, iwl8265_2ac_cfg)},450 {IWL_PCI_DEVICE(0x24FD, 0x8050, iwl8265_2ac_cfg)},451 {IWL_PCI_DEVICE(0x24FD, 0x8010, iwl8265_2ac_cfg)},452 {IWL_PCI_DEVICE(0x24FD, 0x0810, iwl8265_2ac_cfg)},453 {IWL_PCI_DEVICE(0x24FD, 0x9110, iwl8265_2ac_cfg)},454 {IWL_PCI_DEVICE(0x24FD, 0x8130, iwl8265_2ac_cfg)},455 {IWL_PCI_DEVICE(0x24FD, 0x0910, iwl8265_2ac_cfg)},456 {IWL_PCI_DEVICE(0x24FD, 0x0930, iwl8265_2ac_cfg)},457 {IWL_PCI_DEVICE(0x24FD, 0x0950, iwl8265_2ac_cfg)},458 {IWL_PCI_DEVICE(0x24FD, 0x0850, iwl8265_2ac_cfg)},459 {IWL_PCI_DEVICE(0x24FD, 0x1014, iwl8265_2ac_cfg)},460 {IWL_PCI_DEVICE(0x24FD, 0x3E02, iwl8275_2ac_cfg)},461 {IWL_PCI_DEVICE(0x24FD, 0x3E01, iwl8275_2ac_cfg)},462 {IWL_PCI_DEVICE(0x24FD, 0x1012, iwl8275_2ac_cfg)},463 {IWL_PCI_DEVICE(0x24FD, 0x0012, iwl8275_2ac_cfg)},464 {IWL_PCI_DEVICE(0x24FD, 0x0014, iwl8265_2ac_cfg)},465 {IWL_PCI_DEVICE(0x24FD, 0x9074, iwl8265_2ac_cfg)},466 467/* 9000 Series */468 {IWL_PCI_DEVICE(0x2526, PCI_ANY_ID, iwl9000_trans_cfg)},469 {IWL_PCI_DEVICE(0x271B, PCI_ANY_ID, iwl9000_trans_cfg)},470 {IWL_PCI_DEVICE(0x271C, PCI_ANY_ID, iwl9000_trans_cfg)},471 {IWL_PCI_DEVICE(0x30DC, PCI_ANY_ID, iwl9560_long_latency_trans_cfg)},472 {IWL_PCI_DEVICE(0x31DC, PCI_ANY_ID, iwl9560_shared_clk_trans_cfg)},473 {IWL_PCI_DEVICE(0x9DF0, PCI_ANY_ID, iwl9560_trans_cfg)},474 {IWL_PCI_DEVICE(0xA370, PCI_ANY_ID, iwl9560_trans_cfg)},475 476/* Qu devices */477 {IWL_PCI_DEVICE(0x02F0, PCI_ANY_ID, iwl_qu_trans_cfg)},478 {IWL_PCI_DEVICE(0x06F0, PCI_ANY_ID, iwl_qu_trans_cfg)},479 480 {IWL_PCI_DEVICE(0x34F0, PCI_ANY_ID, iwl_qu_medium_latency_trans_cfg)},481 {IWL_PCI_DEVICE(0x3DF0, PCI_ANY_ID, iwl_qu_medium_latency_trans_cfg)},482 {IWL_PCI_DEVICE(0x4DF0, PCI_ANY_ID, iwl_qu_medium_latency_trans_cfg)},483 484 {IWL_PCI_DEVICE(0x43F0, PCI_ANY_ID, iwl_qu_long_latency_trans_cfg)},485 {IWL_PCI_DEVICE(0xA0F0, PCI_ANY_ID, iwl_qu_long_latency_trans_cfg)},486 487 {IWL_PCI_DEVICE(0x2723, PCI_ANY_ID, iwl_ax200_trans_cfg)},488 489/* So devices */490 {IWL_PCI_DEVICE(0x2725, PCI_ANY_ID, iwl_so_trans_cfg)},491 {IWL_PCI_DEVICE(0x7A70, PCI_ANY_ID, iwl_so_long_latency_imr_trans_cfg)},492 {IWL_PCI_DEVICE(0x7AF0, PCI_ANY_ID, iwl_so_trans_cfg)},493 {IWL_PCI_DEVICE(0x51F0, PCI_ANY_ID, iwl_so_long_latency_trans_cfg)},494 {IWL_PCI_DEVICE(0x51F1, PCI_ANY_ID, iwl_so_long_latency_imr_trans_cfg)},495 {IWL_PCI_DEVICE(0x54F0, PCI_ANY_ID, iwl_so_long_latency_trans_cfg)},496 {IWL_PCI_DEVICE(0x7F70, PCI_ANY_ID, iwl_so_trans_cfg)},497 498/* Ma devices */499 {IWL_PCI_DEVICE(0x2729, PCI_ANY_ID, iwl_ma_trans_cfg)},500 {IWL_PCI_DEVICE(0x7E40, PCI_ANY_ID, iwl_ma_trans_cfg)},501 502/* Bz devices */503 {IWL_PCI_DEVICE(0x272b, PCI_ANY_ID, iwl_gl_trans_cfg)},504 {IWL_PCI_DEVICE(0xA840, 0x0000, iwl_bz_trans_cfg)},505 {IWL_PCI_DEVICE(0xA840, 0x0090, iwl_bz_trans_cfg)},506 {IWL_PCI_DEVICE(0xA840, 0x0094, iwl_bz_trans_cfg)},507 {IWL_PCI_DEVICE(0xA840, 0x0098, iwl_bz_trans_cfg)},508 {IWL_PCI_DEVICE(0xA840, 0x009C, iwl_bz_trans_cfg)},509 {IWL_PCI_DEVICE(0xA840, 0x00C0, iwl_bz_trans_cfg)},510 {IWL_PCI_DEVICE(0xA840, 0x00C4, iwl_bz_trans_cfg)},511 {IWL_PCI_DEVICE(0xA840, 0x00E0, iwl_bz_trans_cfg)},512 {IWL_PCI_DEVICE(0xA840, 0x00E4, iwl_bz_trans_cfg)},513 {IWL_PCI_DEVICE(0xA840, 0x00E8, iwl_bz_trans_cfg)},514 {IWL_PCI_DEVICE(0xA840, 0x00EC, iwl_bz_trans_cfg)},515 {IWL_PCI_DEVICE(0xA840, 0x0100, iwl_bz_trans_cfg)},516 {IWL_PCI_DEVICE(0xA840, 0x0110, iwl_bz_trans_cfg)},517 {IWL_PCI_DEVICE(0xA840, 0x0114, iwl_bz_trans_cfg)},518 {IWL_PCI_DEVICE(0xA840, 0x0118, iwl_bz_trans_cfg)},519 {IWL_PCI_DEVICE(0xA840, 0x011C, iwl_bz_trans_cfg)},520 {IWL_PCI_DEVICE(0xA840, 0x0310, iwl_bz_trans_cfg)},521 {IWL_PCI_DEVICE(0xA840, 0x0314, iwl_bz_trans_cfg)},522 {IWL_PCI_DEVICE(0xA840, 0x0510, iwl_bz_trans_cfg)},523 {IWL_PCI_DEVICE(0xA840, 0x0A10, iwl_bz_trans_cfg)},524 {IWL_PCI_DEVICE(0xA840, 0x1671, iwl_bz_trans_cfg)},525 {IWL_PCI_DEVICE(0xA840, 0x1672, iwl_bz_trans_cfg)},526 {IWL_PCI_DEVICE(0xA840, 0x1771, iwl_bz_trans_cfg)},527 {IWL_PCI_DEVICE(0xA840, 0x1772, iwl_bz_trans_cfg)},528 {IWL_PCI_DEVICE(0xA840, 0x1791, iwl_bz_trans_cfg)},529 {IWL_PCI_DEVICE(0xA840, 0x1792, iwl_bz_trans_cfg)},530 {IWL_PCI_DEVICE(0xA840, 0x4090, iwl_bz_trans_cfg)},531 {IWL_PCI_DEVICE(0xA840, 0x40C4, iwl_bz_trans_cfg)},532 {IWL_PCI_DEVICE(0xA840, 0x40E0, iwl_bz_trans_cfg)},533 {IWL_PCI_DEVICE(0xA840, 0x4110, iwl_bz_trans_cfg)},534 {IWL_PCI_DEVICE(0xA840, 0x4314, iwl_bz_trans_cfg)},535 {IWL_PCI_DEVICE(0x7740, PCI_ANY_ID, iwl_bz_trans_cfg)},536 {IWL_PCI_DEVICE(0x4D40, PCI_ANY_ID, iwl_bz_trans_cfg)},537 538/* Sc devices */539 {IWL_PCI_DEVICE(0xE440, PCI_ANY_ID, iwl_sc_trans_cfg)},540 {IWL_PCI_DEVICE(0xE340, PCI_ANY_ID, iwl_sc_trans_cfg)},541 {IWL_PCI_DEVICE(0xD340, PCI_ANY_ID, iwl_sc_trans_cfg)},542 {IWL_PCI_DEVICE(0x6E70, PCI_ANY_ID, iwl_sc_trans_cfg)},543#endif /* CONFIG_IWLMVM */544 545 {0}546};547MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);548EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_hw_card_ids);549 550#define _IWL_DEV_INFO(_device, _subdevice, _mac_type, _mac_step, _rf_type, \551 _rf_id, _rf_step, _no_160, _cores, _cdb, _cfg, _name) \552 { .device = (_device), .subdevice = (_subdevice), .cfg = &(_cfg), \553 .name = _name, .mac_type = _mac_type, .rf_type = _rf_type, .rf_step = _rf_step, \554 .no_160 = _no_160, .cores = _cores, .rf_id = _rf_id, \555 .mac_step = _mac_step, .cdb = _cdb, .jacket = IWL_CFG_ANY }556 557#define IWL_DEV_INFO(_device, _subdevice, _cfg, _name) \558 _IWL_DEV_INFO(_device, _subdevice, IWL_CFG_ANY, IWL_CFG_ANY, \559 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY, \560 IWL_CFG_ANY, _cfg, _name)561 562VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = {563#if IS_ENABLED(CONFIG_IWLMVM)564/* 9000 */565 IWL_DEV_INFO(0x2526, 0x1550, iwl9260_2ac_cfg, iwl9260_killer_1550_name),566 IWL_DEV_INFO(0x2526, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),567 IWL_DEV_INFO(0x2526, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),568 IWL_DEV_INFO(0x30DC, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),569 IWL_DEV_INFO(0x30DC, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),570 IWL_DEV_INFO(0x31DC, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),571 IWL_DEV_INFO(0x31DC, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),572 IWL_DEV_INFO(0xA370, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),573 IWL_DEV_INFO(0xA370, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),574 IWL_DEV_INFO(0x54F0, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),575 IWL_DEV_INFO(0x54F0, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),576 IWL_DEV_INFO(0x51F0, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),577 IWL_DEV_INFO(0x51F0, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_160_name),578 IWL_DEV_INFO(0x51F0, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),579 IWL_DEV_INFO(0x51F0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),580 IWL_DEV_INFO(0x51F1, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),581 IWL_DEV_INFO(0x54F0, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),582 IWL_DEV_INFO(0x54F0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),583 IWL_DEV_INFO(0x7A70, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),584 IWL_DEV_INFO(0x7A70, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),585 IWL_DEV_INFO(0x7AF0, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),586 IWL_DEV_INFO(0x7AF0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),587 588 IWL_DEV_INFO(0x271C, 0x0214, iwl9260_2ac_cfg, iwl9260_1_name),589 IWL_DEV_INFO(0x7E40, 0x1691, iwl_cfg_ma, iwl_ax411_killer_1690s_name),590 IWL_DEV_INFO(0x7E40, 0x1692, iwl_cfg_ma, iwl_ax411_killer_1690i_name),591 592/* AX200 */593 IWL_DEV_INFO(0x2723, IWL_CFG_ANY, iwl_ax200_cfg_cc, iwl_ax200_name),594 IWL_DEV_INFO(0x2723, 0x1653, iwl_ax200_cfg_cc, iwl_ax200_killer_1650w_name),595 IWL_DEV_INFO(0x2723, 0x1654, iwl_ax200_cfg_cc, iwl_ax200_killer_1650x_name),596 597 /* Qu with Hr */598 IWL_DEV_INFO(0x43F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),599 IWL_DEV_INFO(0x43F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),600 IWL_DEV_INFO(0x43F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),601 IWL_DEV_INFO(0x43F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),602 IWL_DEV_INFO(0x43F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650s_name),603 IWL_DEV_INFO(0x43F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650i_name),604 IWL_DEV_INFO(0x43F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),605 IWL_DEV_INFO(0x43F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),606 IWL_DEV_INFO(0xA0F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),607 IWL_DEV_INFO(0xA0F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),608 IWL_DEV_INFO(0xA0F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),609 IWL_DEV_INFO(0xA0F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),610 IWL_DEV_INFO(0xA0F0, 0x0A10, iwl_ax201_cfg_qu_hr, NULL),611 IWL_DEV_INFO(0xA0F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),612 IWL_DEV_INFO(0xA0F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),613 IWL_DEV_INFO(0xA0F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),614 IWL_DEV_INFO(0xA0F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),615 IWL_DEV_INFO(0xA0F0, 0x6074, iwl_ax201_cfg_qu_hr, NULL),616 IWL_DEV_INFO(0x02F0, 0x0070, iwl_ax201_cfg_quz_hr, NULL),617 IWL_DEV_INFO(0x02F0, 0x0074, iwl_ax201_cfg_quz_hr, NULL),618 IWL_DEV_INFO(0x02F0, 0x6074, iwl_ax201_cfg_quz_hr, NULL),619 IWL_DEV_INFO(0x02F0, 0x0078, iwl_ax201_cfg_quz_hr, NULL),620 IWL_DEV_INFO(0x02F0, 0x007C, iwl_ax201_cfg_quz_hr, NULL),621 IWL_DEV_INFO(0x02F0, 0x0310, iwl_ax201_cfg_quz_hr, NULL),622 IWL_DEV_INFO(0x02F0, 0x1651, iwl_ax1650s_cfg_quz_hr, NULL),623 IWL_DEV_INFO(0x02F0, 0x1652, iwl_ax1650i_cfg_quz_hr, NULL),624 IWL_DEV_INFO(0x02F0, 0x2074, iwl_ax201_cfg_quz_hr, NULL),625 IWL_DEV_INFO(0x02F0, 0x4070, iwl_ax201_cfg_quz_hr, NULL),626 IWL_DEV_INFO(0x06F0, 0x0070, iwl_ax201_cfg_quz_hr, NULL),627 IWL_DEV_INFO(0x06F0, 0x0074, iwl_ax201_cfg_quz_hr, NULL),628 IWL_DEV_INFO(0x06F0, 0x0078, iwl_ax201_cfg_quz_hr, NULL),629 IWL_DEV_INFO(0x06F0, 0x007C, iwl_ax201_cfg_quz_hr, NULL),630 IWL_DEV_INFO(0x06F0, 0x0310, iwl_ax201_cfg_quz_hr, NULL),631 IWL_DEV_INFO(0x06F0, 0x1651, iwl_ax1650s_cfg_quz_hr, NULL),632 IWL_DEV_INFO(0x06F0, 0x1652, iwl_ax1650i_cfg_quz_hr, NULL),633 IWL_DEV_INFO(0x06F0, 0x2074, iwl_ax201_cfg_quz_hr, NULL),634 IWL_DEV_INFO(0x06F0, 0x4070, iwl_ax201_cfg_quz_hr, NULL),635 IWL_DEV_INFO(0x34F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),636 IWL_DEV_INFO(0x34F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),637 IWL_DEV_INFO(0x34F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),638 IWL_DEV_INFO(0x34F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),639 IWL_DEV_INFO(0x34F0, 0x0310, iwl_ax201_cfg_qu_hr, NULL),640 IWL_DEV_INFO(0x34F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),641 IWL_DEV_INFO(0x34F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),642 IWL_DEV_INFO(0x34F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),643 IWL_DEV_INFO(0x34F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),644 645 IWL_DEV_INFO(0x3DF0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),646 IWL_DEV_INFO(0x3DF0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),647 IWL_DEV_INFO(0x3DF0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),648 IWL_DEV_INFO(0x3DF0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),649 IWL_DEV_INFO(0x3DF0, 0x0310, iwl_ax201_cfg_qu_hr, NULL),650 IWL_DEV_INFO(0x3DF0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),651 IWL_DEV_INFO(0x3DF0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),652 IWL_DEV_INFO(0x3DF0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),653 IWL_DEV_INFO(0x3DF0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),654 655 IWL_DEV_INFO(0x4DF0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),656 IWL_DEV_INFO(0x4DF0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),657 IWL_DEV_INFO(0x4DF0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),658 IWL_DEV_INFO(0x4DF0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),659 IWL_DEV_INFO(0x4DF0, 0x0310, iwl_ax201_cfg_qu_hr, NULL),660 IWL_DEV_INFO(0x4DF0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),661 IWL_DEV_INFO(0x4DF0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),662 IWL_DEV_INFO(0x4DF0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),663 IWL_DEV_INFO(0x4DF0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),664 IWL_DEV_INFO(0x4DF0, 0x6074, iwl_ax201_cfg_qu_hr, NULL),665 666 /* So with HR */667 IWL_DEV_INFO(0x2725, 0x0090, iwlax211_2ax_cfg_so_gf_a0, NULL),668 IWL_DEV_INFO(0x2725, 0x0020, iwlax210_2ax_cfg_ty_gf_a0, NULL),669 IWL_DEV_INFO(0x2725, 0x2020, iwlax210_2ax_cfg_ty_gf_a0, NULL),670 IWL_DEV_INFO(0x2725, 0x0024, iwlax210_2ax_cfg_ty_gf_a0, NULL),671 IWL_DEV_INFO(0x2725, 0x0310, iwlax210_2ax_cfg_ty_gf_a0, NULL),672 IWL_DEV_INFO(0x2725, 0x0510, iwlax210_2ax_cfg_ty_gf_a0, NULL),673 IWL_DEV_INFO(0x2725, 0x0A10, iwlax210_2ax_cfg_ty_gf_a0, NULL),674 IWL_DEV_INFO(0x2725, 0xE020, iwlax210_2ax_cfg_ty_gf_a0, NULL),675 IWL_DEV_INFO(0x2725, 0xE024, iwlax210_2ax_cfg_ty_gf_a0, NULL),676 IWL_DEV_INFO(0x2725, 0x4020, iwlax210_2ax_cfg_ty_gf_a0, NULL),677 IWL_DEV_INFO(0x2725, 0x6020, iwlax210_2ax_cfg_ty_gf_a0, NULL),678 IWL_DEV_INFO(0x2725, 0x6024, iwlax210_2ax_cfg_ty_gf_a0, NULL),679 IWL_DEV_INFO(0x2725, 0x1673, iwlax210_2ax_cfg_ty_gf_a0, iwl_ax210_killer_1675w_name),680 IWL_DEV_INFO(0x2725, 0x1674, iwlax210_2ax_cfg_ty_gf_a0, iwl_ax210_killer_1675x_name),681 IWL_DEV_INFO(0x7A70, 0x0090, iwlax211_2ax_cfg_so_gf_a0_long, NULL),682 IWL_DEV_INFO(0x7A70, 0x0098, iwlax211_2ax_cfg_so_gf_a0_long, NULL),683 IWL_DEV_INFO(0x7A70, 0x00B0, iwlax411_2ax_cfg_so_gf4_a0_long, NULL),684 IWL_DEV_INFO(0x7A70, 0x0310, iwlax211_2ax_cfg_so_gf_a0_long, NULL),685 IWL_DEV_INFO(0x7A70, 0x0510, iwlax211_2ax_cfg_so_gf_a0_long, NULL),686 IWL_DEV_INFO(0x7A70, 0x0A10, iwlax211_2ax_cfg_so_gf_a0_long, NULL),687 IWL_DEV_INFO(0x7AF0, 0x0090, iwlax211_2ax_cfg_so_gf_a0, NULL),688 IWL_DEV_INFO(0x7AF0, 0x0098, iwlax211_2ax_cfg_so_gf_a0, NULL),689 IWL_DEV_INFO(0x7AF0, 0x00B0, iwlax411_2ax_cfg_so_gf4_a0, NULL),690 IWL_DEV_INFO(0x7AF0, 0x0310, iwlax211_2ax_cfg_so_gf_a0, NULL),691 IWL_DEV_INFO(0x7AF0, 0x0510, iwlax211_2ax_cfg_so_gf_a0, NULL),692 IWL_DEV_INFO(0x7AF0, 0x0A10, iwlax211_2ax_cfg_so_gf_a0, NULL),693 694 /* So with JF */695 IWL_DEV_INFO(0x7A70, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),696 IWL_DEV_INFO(0x7A70, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_160_name),697 IWL_DEV_INFO(0x7AF0, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),698 IWL_DEV_INFO(0x7AF0, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_160_name),699 700 /* SO with GF2 */701 IWL_DEV_INFO(0x2726, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),702 IWL_DEV_INFO(0x2726, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),703 IWL_DEV_INFO(0x51F0, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),704 IWL_DEV_INFO(0x51F0, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),705 IWL_DEV_INFO(0x51F1, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),706 IWL_DEV_INFO(0x51F1, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),707 IWL_DEV_INFO(0x54F0, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),708 IWL_DEV_INFO(0x54F0, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),709 IWL_DEV_INFO(0x7A70, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),710 IWL_DEV_INFO(0x7A70, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),711 IWL_DEV_INFO(0x7AF0, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),712 IWL_DEV_INFO(0x7AF0, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),713 IWL_DEV_INFO(0x7F70, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),714 IWL_DEV_INFO(0x7F70, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),715 716 /* MA with GF2 */717 IWL_DEV_INFO(0x7E40, 0x1671, iwl_cfg_ma, iwl_ax211_killer_1675s_name),718 IWL_DEV_INFO(0x7E40, 0x1672, iwl_cfg_ma, iwl_ax211_killer_1675i_name),719 720 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,721 IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,722 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,723 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,724 iwl9560_2ac_cfg_soc, iwl9461_160_name),725 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,726 IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,727 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,728 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,729 iwl9560_2ac_cfg_soc, iwl9461_name),730 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,731 IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,732 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,733 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,734 iwl9560_2ac_cfg_soc, iwl9462_160_name),735 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,736 IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,737 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,738 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,739 iwl9560_2ac_cfg_soc, iwl9462_name),740 741 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,742 IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,743 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,744 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,745 iwl9560_2ac_cfg_soc, iwl9560_160_name),746 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,747 IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,748 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,749 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,750 iwl9560_2ac_cfg_soc, iwl9560_name),751 752 _IWL_DEV_INFO(0x2526, IWL_CFG_ANY,753 IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,754 IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY, IWL_CFG_ANY,755 IWL_CFG_160, IWL_CFG_CORES_BT_GNSS, IWL_CFG_NO_CDB,756 iwl9260_2ac_cfg, iwl9270_160_name),757 _IWL_DEV_INFO(0x2526, IWL_CFG_ANY,758 IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,759 IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY, IWL_CFG_ANY,760 IWL_CFG_NO_160, IWL_CFG_CORES_BT_GNSS, IWL_CFG_NO_CDB,761 iwl9260_2ac_cfg, iwl9270_name),762 763 _IWL_DEV_INFO(0x271B, IWL_CFG_ANY,764 IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,765 IWL_CFG_RF_TYPE_TH1, IWL_CFG_ANY, IWL_CFG_ANY,766 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,767 iwl9260_2ac_cfg, iwl9162_160_name),768 _IWL_DEV_INFO(0x271B, IWL_CFG_ANY,769 IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,770 IWL_CFG_RF_TYPE_TH1, IWL_CFG_ANY, IWL_CFG_ANY,771 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,772 iwl9260_2ac_cfg, iwl9162_name),773 774 _IWL_DEV_INFO(0x2526, IWL_CFG_ANY,775 IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,776 IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY, IWL_CFG_ANY,777 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,778 iwl9260_2ac_cfg, iwl9260_160_name),779 _IWL_DEV_INFO(0x2526, IWL_CFG_ANY,780 IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,781 IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY, IWL_CFG_ANY,782 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,783 iwl9260_2ac_cfg, iwl9260_name),784 785/* Qu with Jf */786 /* Qu B step */787 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,788 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,789 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,790 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,791 iwl9560_qu_b0_jf_b0_cfg, iwl9461_160_name),792 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,793 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,794 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,795 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,796 iwl9560_qu_b0_jf_b0_cfg, iwl9461_name),797 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,798 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,799 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,800 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,801 iwl9560_qu_b0_jf_b0_cfg, iwl9462_160_name),802 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,803 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,804 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,805 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,806 iwl9560_qu_b0_jf_b0_cfg, iwl9462_name),807 808 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,809 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,810 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,811 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,812 iwl9560_qu_b0_jf_b0_cfg, iwl9560_160_name),813 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,814 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,815 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,816 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,817 iwl9560_qu_b0_jf_b0_cfg, iwl9560_name),818 819 _IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,820 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,821 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,822 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,823 iwl9560_qu_b0_jf_b0_cfg, iwl9560_killer_1550s_name),824 _IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,825 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,826 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,827 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,828 iwl9560_qu_b0_jf_b0_cfg, iwl9560_killer_1550i_name),829 830 /* Qu C step */831 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,832 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,833 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,834 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,835 iwl9560_qu_c0_jf_b0_cfg, iwl9461_160_name),836 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,837 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,838 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,839 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,840 iwl9560_qu_c0_jf_b0_cfg, iwl9461_name),841 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,842 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,843 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,844 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,845 iwl9560_qu_c0_jf_b0_cfg, iwl9462_160_name),846 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,847 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,848 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,849 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,850 iwl9560_qu_c0_jf_b0_cfg, iwl9462_name),851 852 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,853 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,854 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,855 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,856 iwl9560_qu_c0_jf_b0_cfg, iwl9560_160_name),857 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,858 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,859 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,860 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,861 iwl9560_qu_c0_jf_b0_cfg, iwl9560_name),862 863 _IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,864 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,865 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,866 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,867 iwl9560_qu_c0_jf_b0_cfg, iwl9560_killer_1550s_name),868 _IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,869 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,870 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,871 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,872 iwl9560_qu_c0_jf_b0_cfg, iwl9560_killer_1550i_name),873 874 /* QuZ */875 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,876 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,877 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,878 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,879 iwl9560_quz_a0_jf_b0_cfg, iwl9461_160_name),880 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,881 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,882 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,883 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,884 iwl9560_quz_a0_jf_b0_cfg, iwl9461_name),885 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,886 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,887 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,888 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,889 iwl9560_quz_a0_jf_b0_cfg, iwl9462_160_name),890 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,891 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,892 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,893 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,894 iwl9560_quz_a0_jf_b0_cfg, iwl9462_name),895 896 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,897 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,898 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,899 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,900 iwl9560_quz_a0_jf_b0_cfg, iwl9560_160_name),901 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,902 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,903 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,904 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,905 iwl9560_quz_a0_jf_b0_cfg, iwl9560_name),906 907 _IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,908 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,909 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,910 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,911 iwl9560_quz_a0_jf_b0_cfg, iwl9560_killer_1550s_name),912 _IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,913 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,914 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,915 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,916 iwl9560_quz_a0_jf_b0_cfg, iwl9560_killer_1550i_name),917 918/* Qu with Hr */919 /* Qu B step */920 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,921 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,922 IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY, IWL_CFG_ANY,923 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB,924 iwl_qu_b0_hr1_b0, iwl_ax101_name),925 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,926 IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,927 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,928 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,929 iwl_qu_b0_hr_b0, iwl_ax203_name),930 931 /* Qu C step */932 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,933 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,934 IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY, IWL_CFG_ANY,935 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB,936 iwl_qu_c0_hr1_b0, iwl_ax101_name),937 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,938 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,939 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,940 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,941 iwl_qu_c0_hr_b0, iwl_ax203_name),942 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,943 IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,944 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,945 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,946 iwl_qu_c0_hr_b0, iwl_ax201_name),947 948 /* QuZ */949 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,950 IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,951 IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY, IWL_CFG_ANY,952 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB,953 iwl_quz_a0_hr1_b0, iwl_ax101_name),954 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,955 IWL_CFG_MAC_TYPE_QUZ, SILICON_B_STEP,956 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,957 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,958 iwl_cfg_quz_a0_hr_b0, iwl_ax203_name),959 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,960 IWL_CFG_MAC_TYPE_QUZ, SILICON_B_STEP,961 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,962 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,963 iwl_cfg_quz_a0_hr_b0, iwl_ax201_name),964 965/* Ma */966 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,967 IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,968 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,969 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB,970 iwl_cfg_ma, iwl_ax201_name),971 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,972 IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,973 IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY, IWL_CFG_ANY,974 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,975 iwl_cfg_ma, iwl_ax211_name),976 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,977 IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,978 IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY, IWL_CFG_ANY,979 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB,980 iwl_cfg_ma, iwl_ax231_name),981 982/* So with Hr */983 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,984 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,985 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,986 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,987 iwl_cfg_so_a0_hr_a0, iwl_ax203_name),988 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,989 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,990 IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY, IWL_CFG_ANY,991 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,992 iwl_cfg_so_a0_hr_a0, iwl_ax101_name),993 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,994 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,995 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,996 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,997 iwl_cfg_so_a0_hr_a0, iwl_ax201_name),998 999/* So-F with Hr */1000 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1001 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1002 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,1003 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,1004 iwl_cfg_so_a0_hr_a0, iwl_ax203_name),1005 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1006 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1007 IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY, IWL_CFG_ANY,1008 IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,1009 iwl_cfg_so_a0_hr_a0, iwl_ax101_name),1010 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1011 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1012 IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY, IWL_CFG_ANY,1013 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,1014 iwl_cfg_so_a0_hr_a0, iwl_ax201_name),1015 1016/* So-F with Gf */1017 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1018 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1019 IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY, IWL_CFG_ANY,1020 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,1021 iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_name),1022 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1023 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1024 IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY, IWL_CFG_ANY,1025 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_CDB,1026 iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_name),1027 1028/* SoF with JF2 */1029 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1030 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1031 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,1032 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1033 iwlax210_2ax_cfg_so_jf_b0, iwl9560_160_name),1034 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1035 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1036 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,1037 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1038 iwlax210_2ax_cfg_so_jf_b0, iwl9560_name),1039 1040/* SoF with JF */1041 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1042 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1043 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,1044 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1045 iwlax210_2ax_cfg_so_jf_b0, iwl9461_160_name),1046 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1047 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1048 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,1049 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1050 iwlax210_2ax_cfg_so_jf_b0, iwl9462_160_name),1051 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1052 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1053 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,1054 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1055 iwlax210_2ax_cfg_so_jf_b0, iwl9461_name),1056 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1057 IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,1058 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,1059 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1060 iwlax210_2ax_cfg_so_jf_b0, iwl9462_name),1061 1062/* So with GF */1063 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1064 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1065 IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY, IWL_CFG_ANY,1066 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB,1067 iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_name),1068 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1069 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1070 IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY, IWL_CFG_ANY,1071 IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_CDB,1072 iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_name),1073 1074/* So with JF2 */1075 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1076 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1077 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,1078 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1079 iwlax210_2ax_cfg_so_jf_b0, iwl9560_160_name),1080 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1081 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1082 IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF, IWL_CFG_ANY,1083 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1084 iwlax210_2ax_cfg_so_jf_b0, iwl9560_name),1085 1086/* So with JF */1087 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1088 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1089 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,1090 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1091 iwlax210_2ax_cfg_so_jf_b0, iwl9461_160_name),1092 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1093 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1094 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,1095 IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1096 iwlax210_2ax_cfg_so_jf_b0, iwl9462_160_name),1097 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1098 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1099 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1, IWL_CFG_ANY,1100 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1101 iwlax210_2ax_cfg_so_jf_b0, iwl9461_name),1102 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1103 IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,1104 IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV, IWL_CFG_ANY,1105 IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB,1106 iwlax210_2ax_cfg_so_jf_b0, iwl9462_name),1107 1108/* Bz */1109/* FIXME: need to change the naming according to the actual CRF */1110 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1111 IWL_CFG_MAC_TYPE_BZ, IWL_CFG_ANY,1112 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1113 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1114 iwl_cfg_bz, iwl_fm_name),1115 1116 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1117 IWL_CFG_MAC_TYPE_BZ_W, IWL_CFG_ANY,1118 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1119 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1120 iwl_cfg_bz, iwl_fm_name),1121 1122/* Ga (Gl) */1123 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1124 IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,1125 IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY, IWL_CFG_ANY,1126 IWL_CFG_320, IWL_CFG_ANY, IWL_CFG_NO_CDB,1127 iwl_cfg_gl, iwl_gl_name),1128 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1129 IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,1130 IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY, IWL_CFG_ANY,1131 IWL_CFG_NO_320, IWL_CFG_ANY, IWL_CFG_NO_CDB,1132 iwl_cfg_gl, iwl_mtp_name),1133 1134/* Sc */1135 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1136 IWL_CFG_MAC_TYPE_SC, IWL_CFG_ANY,1137 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1138 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1139 iwl_cfg_sc, iwl_sc_name),1140 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1141 IWL_CFG_MAC_TYPE_SC2, IWL_CFG_ANY,1142 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1143 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1144 iwl_cfg_sc2, iwl_sc2_name),1145 _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,1146 IWL_CFG_MAC_TYPE_SC2F, IWL_CFG_ANY,1147 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1148 IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,1149 iwl_cfg_sc2f, iwl_sc2f_name),1150#endif /* CONFIG_IWLMVM */1151};1152EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_dev_info_table);1153 1154#if IS_ENABLED(CONFIG_IWLWIFI_KUNIT_TESTS)1155const unsigned int iwl_dev_info_table_size = ARRAY_SIZE(iwl_dev_info_table);1156EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_dev_info_table_size);1157#endif1158 1159/*1160 * Read rf id and cdb info from prph register and store it1161 */1162static void get_crf_id(struct iwl_trans *iwl_trans)1163{1164 u32 sd_reg_ver_addr;1165 u32 val = 0;1166 u8 step;1167 1168 if (iwl_trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210)1169 sd_reg_ver_addr = SD_REG_VER_GEN2;1170 else1171 sd_reg_ver_addr = SD_REG_VER;1172 1173 /* Enable access to peripheral registers */1174 val = iwl_read_umac_prph_no_grab(iwl_trans, WFPM_CTRL_REG);1175 val |= WFPM_AUX_CTL_AUX_IF_MAC_OWNER_MSK;1176 iwl_write_umac_prph_no_grab(iwl_trans, WFPM_CTRL_REG, val);1177 1178 /* Read crf info */1179 iwl_trans->hw_crf_id = iwl_read_prph_no_grab(iwl_trans, sd_reg_ver_addr);1180 1181 /* Read cnv info */1182 iwl_trans->hw_cnv_id =1183 iwl_read_prph_no_grab(iwl_trans, CNVI_AUX_MISC_CHIP);1184 1185 /* For BZ-W, take B step also when A step is indicated */1186 if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ_W)1187 step = SILICON_B_STEP;1188 1189 /* In BZ, the MAC step must be read from the CNVI aux register */1190 if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ) {1191 step = CNVI_AUX_MISC_CHIP_MAC_STEP(iwl_trans->hw_cnv_id);1192 1193 /* For BZ-U, take B step also when A step is indicated */1194 if ((CNVI_AUX_MISC_CHIP_PROD_TYPE(iwl_trans->hw_cnv_id) ==1195 CNVI_AUX_MISC_CHIP_PROD_TYPE_BZ_U) &&1196 step == SILICON_A_STEP)1197 step = SILICON_B_STEP;1198 }1199 1200 if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ ||1201 CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_BZ_W) {1202 iwl_trans->hw_rev_step = step;1203 iwl_trans->hw_rev |= step;1204 }1205 1206 /* Read cdb info (also contains the jacket info if needed in the future */1207 iwl_trans->hw_wfpm_id =1208 iwl_read_umac_prph_no_grab(iwl_trans, WFPM_OTP_CFG1_ADDR);1209 IWL_INFO(iwl_trans, "Detected crf-id 0x%x, cnv-id 0x%x wfpm id 0x%x\n",1210 iwl_trans->hw_crf_id, iwl_trans->hw_cnv_id,1211 iwl_trans->hw_wfpm_id);1212}1213 1214/*1215 * In case that there is no OTP on the NIC, map the rf id and cdb info1216 * from the prph registers.1217 */1218static int map_crf_id(struct iwl_trans *iwl_trans)1219{1220 int ret = 0;1221 u32 val = iwl_trans->hw_crf_id;1222 u32 step_id = REG_CRF_ID_STEP(val);1223 u32 slave_id = REG_CRF_ID_SLAVE(val);1224 u32 jacket_id_cnv = REG_CRF_ID_SLAVE(iwl_trans->hw_cnv_id);1225 u32 jacket_id_wfpm = WFPM_OTP_CFG1_IS_JACKET(iwl_trans->hw_wfpm_id);1226 u32 cdb_id_wfpm = WFPM_OTP_CFG1_IS_CDB(iwl_trans->hw_wfpm_id);1227 1228 /* Map between crf id to rf id */1229 switch (REG_CRF_ID_TYPE(val)) {1230 case REG_CRF_ID_TYPE_JF_1:1231 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_JF1 << 12);1232 break;1233 case REG_CRF_ID_TYPE_JF_2:1234 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_JF2 << 12);1235 break;1236 case REG_CRF_ID_TYPE_HR_NONE_CDB_1X1:1237 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_HR1 << 12);1238 break;1239 case REG_CRF_ID_TYPE_HR_NONE_CDB:1240 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_HR2 << 12);1241 break;1242 case REG_CRF_ID_TYPE_HR_CDB:1243 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_HR2 << 12);1244 break;1245 case REG_CRF_ID_TYPE_GF:1246 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_GF << 12);1247 break;1248 case REG_CRF_ID_TYPE_FM:1249 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_FM << 12);1250 break;1251 case REG_CRF_ID_TYPE_WHP:1252 iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_WH << 12);1253 break;1254 default:1255 ret = -EIO;1256 IWL_ERR(iwl_trans,1257 "Can't find a correct rfid for crf id 0x%x\n",1258 REG_CRF_ID_TYPE(val));1259 goto out;1260 1261 }1262 1263 /* Set Step-id */1264 iwl_trans->hw_rf_id |= (step_id << 8);1265 1266 /* Set CDB capabilities */1267 if (cdb_id_wfpm || slave_id) {1268 iwl_trans->hw_rf_id += BIT(28);1269 IWL_INFO(iwl_trans, "Adding cdb to rf id\n");1270 }1271 1272 /* Set Jacket capabilities */1273 if (jacket_id_wfpm || jacket_id_cnv) {1274 iwl_trans->hw_rf_id += BIT(29);1275 IWL_INFO(iwl_trans, "Adding jacket to rf id\n");1276 }1277 1278 IWL_INFO(iwl_trans,1279 "Detected rf-type 0x%x step-id 0x%x slave-id 0x%x from crf id 0x%x\n",1280 REG_CRF_ID_TYPE(val), step_id, slave_id, iwl_trans->hw_rf_id);1281 IWL_INFO(iwl_trans,1282 "Detected cdb-id 0x%x jacket-id 0x%x from wfpm id 0x%x\n",1283 cdb_id_wfpm, jacket_id_wfpm, iwl_trans->hw_wfpm_id);1284 IWL_INFO(iwl_trans, "Detected jacket-id 0x%x from cnvi id 0x%x\n",1285 jacket_id_cnv, iwl_trans->hw_cnv_id);1286 1287out:1288 return ret;1289}1290 1291/* PCI registers */1292#define PCI_CFG_RETRY_TIMEOUT 0x0411293 1294VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info *1295iwl_pci_find_dev_info(u16 device, u16 subsystem_device,1296 u16 mac_type, u8 mac_step, u16 rf_type, u8 cdb,1297 u8 jacket, u8 rf_id, u8 no_160, u8 cores, u8 rf_step)1298{1299 int num_devices = ARRAY_SIZE(iwl_dev_info_table);1300 int i;1301 1302 if (!num_devices)1303 return NULL;1304 1305 for (i = num_devices - 1; i >= 0; i--) {1306 const struct iwl_dev_info *dev_info = &iwl_dev_info_table[i];1307 1308 if (dev_info->device != (u16)IWL_CFG_ANY &&1309 dev_info->device != device)1310 continue;1311 1312 if (dev_info->subdevice != (u16)IWL_CFG_ANY &&1313 dev_info->subdevice != subsystem_device)1314 continue;1315 1316 if (dev_info->mac_type != (u16)IWL_CFG_ANY &&1317 dev_info->mac_type != mac_type)1318 continue;1319 1320 if (dev_info->mac_step != (u8)IWL_CFG_ANY &&1321 dev_info->mac_step != mac_step)1322 continue;1323 1324 if (dev_info->rf_type != (u16)IWL_CFG_ANY &&1325 dev_info->rf_type != rf_type)1326 continue;1327 1328 if (dev_info->cdb != (u8)IWL_CFG_ANY &&1329 dev_info->cdb != cdb)1330 continue;1331 1332 if (dev_info->jacket != (u8)IWL_CFG_ANY &&1333 dev_info->jacket != jacket)1334 continue;1335 1336 if (dev_info->rf_id != (u8)IWL_CFG_ANY &&1337 dev_info->rf_id != rf_id)1338 continue;1339 1340 if (dev_info->no_160 != (u8)IWL_CFG_ANY &&1341 dev_info->no_160 != no_160)1342 continue;1343 1344 if (dev_info->cores != (u8)IWL_CFG_ANY &&1345 dev_info->cores != cores)1346 continue;1347 1348 if (dev_info->rf_step != (u8)IWL_CFG_ANY &&1349 dev_info->rf_step != rf_step)1350 continue;1351 1352 return dev_info;1353 }1354 1355 return NULL;1356}1357EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_pci_find_dev_info);1358 1359static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)1360{1361 const struct iwl_cfg_trans_params *trans;1362 const struct iwl_cfg *cfg_7265d __maybe_unused = NULL;1363 const struct iwl_dev_info *dev_info;1364 struct iwl_trans *iwl_trans;1365 struct iwl_trans_pcie *trans_pcie;1366 int ret;1367 const struct iwl_cfg *cfg;1368 1369 trans = (void *)(ent->driver_data & ~TRANS_CFG_MARKER);1370 1371 /*1372 * This is needed for backwards compatibility with the old1373 * tables, so we don't need to change all the config structs1374 * at the same time. The cfg is used to compare with the old1375 * full cfg structs.1376 */1377 cfg = (void *)(ent->driver_data & ~TRANS_CFG_MARKER);1378 1379 /* make sure trans is the first element in iwl_cfg */1380 BUILD_BUG_ON(offsetof(struct iwl_cfg, trans));1381 1382 iwl_trans = iwl_trans_pcie_alloc(pdev, ent, trans);1383 if (IS_ERR(iwl_trans))1384 return PTR_ERR(iwl_trans);1385 1386 trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans);1387 1388 /*1389 * Let's try to grab NIC access early here. Sometimes, NICs may1390 * fail to initialize, and if that happens it's better if we see1391 * issues early on (and can reprobe, per the logic inside), than1392 * first trying to load the firmware etc. and potentially only1393 * detecting any problems when the first interface is brought up.1394 */1395 ret = iwl_pcie_prepare_card_hw(iwl_trans);1396 if (!ret) {1397 ret = iwl_finish_nic_init(iwl_trans);1398 if (ret)1399 goto out_free_trans;1400 if (iwl_trans_grab_nic_access(iwl_trans)) {1401 get_crf_id(iwl_trans);1402 /* all good */1403 iwl_trans_release_nic_access(iwl_trans);1404 } else {1405 ret = -EIO;1406 goto out_free_trans;1407 }1408 }1409 1410 iwl_trans->hw_rf_id = iwl_read32(iwl_trans, CSR_HW_RF_ID);1411 1412 /*1413 * The RF_ID is set to zero in blank OTP so read version to1414 * extract the RF_ID.1415 * This is relevant only for family 9000 and up.1416 */1417 if (iwl_trans->trans_cfg->rf_id &&1418 iwl_trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_9000 &&1419 !CSR_HW_RFID_TYPE(iwl_trans->hw_rf_id) && map_crf_id(iwl_trans)) {1420 ret = -EINVAL;1421 goto out_free_trans;1422 }1423 1424 IWL_INFO(iwl_trans, "PCI dev %04x/%04x, rev=0x%x, rfid=0x%x\n",1425 pdev->device, pdev->subsystem_device,1426 iwl_trans->hw_rev, iwl_trans->hw_rf_id);1427 1428 dev_info = iwl_pci_find_dev_info(pdev->device, pdev->subsystem_device,1429 CSR_HW_REV_TYPE(iwl_trans->hw_rev),1430 iwl_trans->hw_rev_step,1431 CSR_HW_RFID_TYPE(iwl_trans->hw_rf_id),1432 CSR_HW_RFID_IS_CDB(iwl_trans->hw_rf_id),1433 CSR_HW_RFID_IS_JACKET(iwl_trans->hw_rf_id),1434 IWL_SUBDEVICE_RF_ID(pdev->subsystem_device),1435 IWL_SUBDEVICE_NO_160(pdev->subsystem_device),1436 IWL_SUBDEVICE_CORES(pdev->subsystem_device),1437 CSR_HW_RFID_STEP(iwl_trans->hw_rf_id));1438 if (dev_info) {1439 iwl_trans->cfg = dev_info->cfg;1440 iwl_trans->name = dev_info->name;1441 iwl_trans->no_160 = dev_info->no_160 == IWL_CFG_NO_160;1442 }1443 1444#if IS_ENABLED(CONFIG_IWLMVM)1445 /*1446 * special-case 7265D, it has the same PCI IDs.1447 *1448 * Note that because we already pass the cfg to the transport above,1449 * all the parameters that the transport uses must, until that is1450 * changed, be identical to the ones in the 7265D configuration.1451 */1452 if (cfg == &iwl7265_2ac_cfg)1453 cfg_7265d = &iwl7265d_2ac_cfg;1454 else if (cfg == &iwl7265_2n_cfg)1455 cfg_7265d = &iwl7265d_2n_cfg;1456 else if (cfg == &iwl7265_n_cfg)1457 cfg_7265d = &iwl7265d_n_cfg;1458 if (cfg_7265d &&1459 (iwl_trans->hw_rev & CSR_HW_REV_TYPE_MSK) == CSR_HW_REV_TYPE_7265D)1460 iwl_trans->cfg = cfg_7265d;1461 1462 /*1463 * This is a hack to switch from Qu B0 to Qu C0. We need to1464 * do this for all cfgs that use Qu B0, except for those using1465 * Jf, which have already been moved to the new table. The1466 * rest must be removed once we convert Qu with Hr as well.1467 */1468 if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QU_C0) {1469 if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr)1470 iwl_trans->cfg = &iwl_ax201_cfg_qu_c0_hr_b0;1471 else if (iwl_trans->cfg == &killer1650s_2ax_cfg_qu_b0_hr_b0)1472 iwl_trans->cfg = &killer1650s_2ax_cfg_qu_c0_hr_b0;1473 else if (iwl_trans->cfg == &killer1650i_2ax_cfg_qu_b0_hr_b0)1474 iwl_trans->cfg = &killer1650i_2ax_cfg_qu_c0_hr_b0;1475 }1476 1477 /* same thing for QuZ... */1478 if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QUZ) {1479 if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr)1480 iwl_trans->cfg = &iwl_ax201_cfg_quz_hr;1481 else if (iwl_trans->cfg == &killer1650s_2ax_cfg_qu_b0_hr_b0)1482 iwl_trans->cfg = &iwl_ax1650s_cfg_quz_hr;1483 else if (iwl_trans->cfg == &killer1650i_2ax_cfg_qu_b0_hr_b0)1484 iwl_trans->cfg = &iwl_ax1650i_cfg_quz_hr;1485 }1486 1487#endif1488 /*1489 * If we didn't set the cfg yet, the PCI ID table entry should have1490 * been a full config - if yes, use it, otherwise fail.1491 */1492 if (!iwl_trans->cfg) {1493 if (ent->driver_data & TRANS_CFG_MARKER) {1494 pr_err("No config found for PCI dev %04x/%04x, rev=0x%x, rfid=0x%x\n",1495 pdev->device, pdev->subsystem_device,1496 iwl_trans->hw_rev, iwl_trans->hw_rf_id);1497 ret = -EINVAL;1498 goto out_free_trans;1499 }1500 iwl_trans->cfg = cfg;1501 }1502 1503 /* if we don't have a name yet, copy name from the old cfg */1504 if (!iwl_trans->name)1505 iwl_trans->name = iwl_trans->cfg->name;1506 1507 IWL_INFO(iwl_trans, "Detected %s\n", iwl_trans->name);1508 1509 if (iwl_trans->trans_cfg->mq_rx_supported) {1510 if (WARN_ON(!iwl_trans->cfg->num_rbds)) {1511 ret = -EINVAL;1512 goto out_free_trans;1513 }1514 trans_pcie->num_rx_bufs = iwl_trans->cfg->num_rbds;1515 } else {1516 trans_pcie->num_rx_bufs = RX_QUEUE_SIZE;1517 }1518 1519 if (!iwl_trans->trans_cfg->integrated) {1520 u16 link_status;1521 1522 pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &link_status);1523 1524 iwl_trans->pcie_link_speed =1525 u16_get_bits(link_status, PCI_EXP_LNKSTA_CLS);1526 }1527 1528 ret = iwl_trans_init(iwl_trans);1529 if (ret)1530 goto out_free_trans;1531 1532 pci_set_drvdata(pdev, iwl_trans);1533 1534 /* try to get ownership so that we'll know if we don't own it */1535 iwl_pcie_prepare_card_hw(iwl_trans);1536 1537 iwl_trans->drv = iwl_drv_start(iwl_trans);1538 1539 if (IS_ERR(iwl_trans->drv)) {1540 ret = PTR_ERR(iwl_trans->drv);1541 goto out_free_trans;1542 }1543 1544 /* register transport layer debugfs here */1545 iwl_trans_pcie_dbgfs_register(iwl_trans);1546 1547 return 0;1548 1549out_free_trans:1550 iwl_trans_pcie_free(iwl_trans);1551 return ret;1552}1553 1554static void iwl_pci_remove(struct pci_dev *pdev)1555{1556 struct iwl_trans *trans = pci_get_drvdata(pdev);1557 1558 if (!trans)1559 return;1560 1561 iwl_drv_stop(trans->drv);1562 1563 iwl_trans_pcie_free(trans);1564}1565 1566#ifdef CONFIG_PM_SLEEP1567 1568static int iwl_pci_suspend(struct device *device)1569{1570 /* Before you put code here, think about WoWLAN. You cannot check here1571 * whether WoWLAN is enabled or not, and your code will run even if1572 * WoWLAN is enabled - don't kill the NIC, someone may need it in Sx.1573 */1574 1575 return 0;1576}1577 1578static int _iwl_pci_resume(struct device *device, bool restore)1579{1580 struct pci_dev *pdev = to_pci_dev(device);1581 struct iwl_trans *trans = pci_get_drvdata(pdev);1582 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);1583 bool device_was_powered_off = false;1584 1585 /* Before you put code here, think about WoWLAN. You cannot check here1586 * whether WoWLAN is enabled or not, and your code will run even if1587 * WoWLAN is enabled - the NIC may be alive.1588 */1589 1590 /*1591 * We disable the RETRY_TIMEOUT register (0x41) to keep1592 * PCI Tx retries from interfering with C3 CPU state.1593 */1594 pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);1595 1596 if (!trans->op_mode)1597 return 0;1598 1599 /*1600 * Scratch value was altered, this means the device was powered off, we1601 * need to reset it completely.1602 * Note: MAC (bits 0:7) will be cleared upon suspend even with wowlan,1603 * so assume that any bits there mean that the device is usable.1604 */1605 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ &&1606 !iwl_read32(trans, CSR_FUNC_SCRATCH))1607 device_was_powered_off = true;1608 1609 if (restore || device_was_powered_off) {1610 trans->state = IWL_TRANS_NO_FW;1611 /* Hope for the best here ... If one of those steps fails we1612 * won't really know how to recover.1613 */1614 iwl_pcie_prepare_card_hw(trans);1615 iwl_finish_nic_init(trans);1616 iwl_op_mode_device_powered_off(trans->op_mode);1617 }1618 1619 /* In WOWLAN, let iwl_trans_pcie_d3_resume do the rest of the work */1620 if (test_bit(STATUS_DEVICE_ENABLED, &trans->status))1621 return 0;1622 1623 /* reconfigure the MSI-X mapping to get the correct IRQ for rfkill */1624 iwl_pcie_conf_msix_hw(trans_pcie);1625 1626 /*1627 * Enable rfkill interrupt (in order to keep track of the rfkill1628 * status). Must be locked to avoid processing a possible rfkill1629 * interrupt while in iwl_pcie_check_hw_rf_kill().1630 */1631 mutex_lock(&trans_pcie->mutex);1632 iwl_enable_rfkill_int(trans);1633 iwl_pcie_check_hw_rf_kill(trans);1634 mutex_unlock(&trans_pcie->mutex);1635 1636 return 0;1637}1638 1639static int iwl_pci_restore(struct device *device)1640{1641 return _iwl_pci_resume(device, true);1642}1643 1644static int iwl_pci_resume(struct device *device)1645{1646 return _iwl_pci_resume(device, false);1647}1648 1649static const struct dev_pm_ops iwl_dev_pm_ops = {1650 .suspend = pm_sleep_ptr(iwl_pci_suspend),1651 .resume = pm_sleep_ptr(iwl_pci_resume),1652 .freeze = pm_sleep_ptr(iwl_pci_suspend),1653 .thaw = pm_sleep_ptr(iwl_pci_resume),1654 .poweroff = pm_sleep_ptr(iwl_pci_suspend),1655 .restore = pm_sleep_ptr(iwl_pci_restore),1656};1657 1658#define IWL_PM_OPS (&iwl_dev_pm_ops)1659 1660#else /* CONFIG_PM_SLEEP */1661 1662#define IWL_PM_OPS NULL1663 1664#endif /* CONFIG_PM_SLEEP */1665 1666static struct pci_driver iwl_pci_driver = {1667 .name = DRV_NAME,1668 .id_table = iwl_hw_card_ids,1669 .probe = iwl_pci_probe,1670 .remove = iwl_pci_remove,1671 .driver.pm = IWL_PM_OPS,1672};1673 1674int __must_check iwl_pci_register_driver(void)1675{1676 int ret;1677 ret = pci_register_driver(&iwl_pci_driver);1678 if (ret)1679 pr_err("Unable to initialize PCI module\n");1680 1681 return ret;1682}1683 1684void iwl_pci_unregister_driver(void)1685{1686 pci_unregister_driver(&iwl_pci_driver);1687}1688