brintos

brintos / linux-shallow public Read only

0
0
Text · 69.6 KiB · 805fb24 Raw
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