cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

drv.c (75996B)


      1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
      2/*
      3 * Copyright (C) 2005-2014, 2018-2021 Intel Corporation
      4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
      5 * Copyright (C) 2016-2017 Intel Deutschland GmbH
      6 */
      7#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      8
      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 */
     36static 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(0x2720, PCI_ANY_ID, iwl_qnj_trans_cfg)},
    488
    489	{IWL_PCI_DEVICE(0x2723, PCI_ANY_ID, iwl_ax200_trans_cfg)},
    490
    491/* So devices */
    492	{IWL_PCI_DEVICE(0x2725, PCI_ANY_ID, iwl_so_trans_cfg)},
    493	{IWL_PCI_DEVICE(0x2726, PCI_ANY_ID, iwl_snj_trans_cfg)},
    494	{IWL_PCI_DEVICE(0x7A70, PCI_ANY_ID, iwl_so_long_latency_imr_trans_cfg)},
    495	{IWL_PCI_DEVICE(0x7AF0, PCI_ANY_ID, iwl_so_trans_cfg)},
    496	{IWL_PCI_DEVICE(0x51F0, PCI_ANY_ID, iwl_so_long_latency_trans_cfg)},
    497	{IWL_PCI_DEVICE(0x51F1, PCI_ANY_ID, iwl_so_long_latency_imr_trans_cfg)},
    498	{IWL_PCI_DEVICE(0x54F0, PCI_ANY_ID, iwl_so_long_latency_trans_cfg)},
    499	{IWL_PCI_DEVICE(0x7F70, PCI_ANY_ID, iwl_so_trans_cfg)},
    500
    501/* Ma devices */
    502	{IWL_PCI_DEVICE(0x2729, PCI_ANY_ID, iwl_ma_trans_cfg)},
    503	{IWL_PCI_DEVICE(0x7E40, PCI_ANY_ID, iwl_ma_trans_cfg)},
    504
    505/* Bz devices */
    506	{IWL_PCI_DEVICE(0x2727, PCI_ANY_ID, iwl_bz_trans_cfg)},
    507	{IWL_PCI_DEVICE(0xA840, PCI_ANY_ID, iwl_bz_trans_cfg)},
    508	{IWL_PCI_DEVICE(0x7740, PCI_ANY_ID, iwl_bz_trans_cfg)},
    509#endif /* CONFIG_IWLMVM */
    510
    511	{0}
    512};
    513MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);
    514
    515#define _IWL_DEV_INFO(_device, _subdevice, _mac_type, _mac_step, _rf_type, \
    516		      _rf_id, _no_160, _cores, _cdb, _jacket, _cfg, _name) \
    517	{ .device = (_device), .subdevice = (_subdevice), .cfg = &(_cfg),  \
    518	  .name = _name, .mac_type = _mac_type, .rf_type = _rf_type,	   \
    519	  .no_160 = _no_160, .cores = _cores, .rf_id = _rf_id,		   \
    520	  .mac_step = _mac_step, .cdb = _cdb, .jacket = _jacket }
    521
    522#define IWL_DEV_INFO(_device, _subdevice, _cfg, _name) \
    523	_IWL_DEV_INFO(_device, _subdevice, IWL_CFG_ANY, IWL_CFG_ANY,	   \
    524		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY,  \
    525		      IWL_CFG_ANY, IWL_CFG_ANY, _cfg, _name)
    526
    527static const struct iwl_dev_info iwl_dev_info_table[] = {
    528#if IS_ENABLED(CONFIG_IWLMVM)
    529/* 9000 */
    530	IWL_DEV_INFO(0x2526, 0x1550, iwl9260_2ac_cfg, iwl9260_killer_1550_name),
    531	IWL_DEV_INFO(0x2526, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),
    532	IWL_DEV_INFO(0x2526, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
    533	IWL_DEV_INFO(0x30DC, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),
    534	IWL_DEV_INFO(0x30DC, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
    535	IWL_DEV_INFO(0x31DC, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),
    536	IWL_DEV_INFO(0x31DC, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
    537	IWL_DEV_INFO(0xA370, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_name),
    538	IWL_DEV_INFO(0xA370, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
    539	IWL_DEV_INFO(0x54F0, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),
    540	IWL_DEV_INFO(0x54F0, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_name),
    541	IWL_DEV_INFO(0x51F0, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),
    542	IWL_DEV_INFO(0x51F0, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_160_name),
    543	IWL_DEV_INFO(0x51F0, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),
    544	IWL_DEV_INFO(0x51F0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),
    545	IWL_DEV_INFO(0x54F0, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),
    546	IWL_DEV_INFO(0x54F0, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),
    547	IWL_DEV_INFO(0x7A70, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),
    548	IWL_DEV_INFO(0x7A70, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),
    549
    550	IWL_DEV_INFO(0x271C, 0x0214, iwl9260_2ac_cfg, iwl9260_1_name),
    551	IWL_DEV_INFO(0x7E40, 0x1691, iwl_cfg_ma_a0_gf4_a0, iwl_ax411_killer_1690s_name),
    552	IWL_DEV_INFO(0x7E40, 0x1692, iwl_cfg_ma_a0_gf4_a0, iwl_ax411_killer_1690i_name),
    553
    554/* AX200 */
    555	IWL_DEV_INFO(0x2723, IWL_CFG_ANY, iwl_ax200_cfg_cc, iwl_ax200_name),
    556	IWL_DEV_INFO(0x2723, 0x1653, iwl_ax200_cfg_cc, iwl_ax200_killer_1650w_name),
    557	IWL_DEV_INFO(0x2723, 0x1654, iwl_ax200_cfg_cc, iwl_ax200_killer_1650x_name),
    558
    559	/* Qu with Hr */
    560	IWL_DEV_INFO(0x43F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),
    561	IWL_DEV_INFO(0x43F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),
    562	IWL_DEV_INFO(0x43F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),
    563	IWL_DEV_INFO(0x43F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),
    564	IWL_DEV_INFO(0x43F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650s_name),
    565	IWL_DEV_INFO(0x43F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650i_name),
    566	IWL_DEV_INFO(0x43F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),
    567	IWL_DEV_INFO(0x43F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),
    568	IWL_DEV_INFO(0x43F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, iwl_ax201_killer_1650s_name),
    569	IWL_DEV_INFO(0xA0F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),
    570	IWL_DEV_INFO(0xA0F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),
    571	IWL_DEV_INFO(0xA0F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),
    572	IWL_DEV_INFO(0xA0F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),
    573	IWL_DEV_INFO(0xA0F0, 0x0A10, iwl_ax201_cfg_qu_hr, NULL),
    574	IWL_DEV_INFO(0xA0F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),
    575	IWL_DEV_INFO(0xA0F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),
    576	IWL_DEV_INFO(0xA0F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),
    577	IWL_DEV_INFO(0xA0F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),
    578	IWL_DEV_INFO(0xA0F0, 0x6074, iwl_ax201_cfg_qu_hr, NULL),
    579	IWL_DEV_INFO(0x02F0, 0x0070, iwl_ax201_cfg_quz_hr, NULL),
    580	IWL_DEV_INFO(0x02F0, 0x0074, iwl_ax201_cfg_quz_hr, NULL),
    581	IWL_DEV_INFO(0x02F0, 0x6074, iwl_ax201_cfg_quz_hr, NULL),
    582	IWL_DEV_INFO(0x02F0, 0x0078, iwl_ax201_cfg_quz_hr, NULL),
    583	IWL_DEV_INFO(0x02F0, 0x007C, iwl_ax201_cfg_quz_hr, NULL),
    584	IWL_DEV_INFO(0x02F0, 0x0310, iwl_ax201_cfg_quz_hr, NULL),
    585	IWL_DEV_INFO(0x02F0, 0x1651, iwl_ax1650s_cfg_quz_hr, NULL),
    586	IWL_DEV_INFO(0x02F0, 0x1652, iwl_ax1650i_cfg_quz_hr, NULL),
    587	IWL_DEV_INFO(0x02F0, 0x2074, iwl_ax201_cfg_quz_hr, NULL),
    588	IWL_DEV_INFO(0x02F0, 0x4070, iwl_ax201_cfg_quz_hr, NULL),
    589	IWL_DEV_INFO(0x06F0, 0x0070, iwl_ax201_cfg_quz_hr, NULL),
    590	IWL_DEV_INFO(0x06F0, 0x0074, iwl_ax201_cfg_quz_hr, NULL),
    591	IWL_DEV_INFO(0x06F0, 0x0078, iwl_ax201_cfg_quz_hr, NULL),
    592	IWL_DEV_INFO(0x06F0, 0x007C, iwl_ax201_cfg_quz_hr, NULL),
    593	IWL_DEV_INFO(0x06F0, 0x0310, iwl_ax201_cfg_quz_hr, NULL),
    594	IWL_DEV_INFO(0x06F0, 0x1651, iwl_ax1650s_cfg_quz_hr, NULL),
    595	IWL_DEV_INFO(0x06F0, 0x1652, iwl_ax1650i_cfg_quz_hr, NULL),
    596	IWL_DEV_INFO(0x06F0, 0x2074, iwl_ax201_cfg_quz_hr, NULL),
    597	IWL_DEV_INFO(0x06F0, 0x4070, iwl_ax201_cfg_quz_hr, NULL),
    598	IWL_DEV_INFO(0x34F0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),
    599	IWL_DEV_INFO(0x34F0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),
    600	IWL_DEV_INFO(0x34F0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),
    601	IWL_DEV_INFO(0x34F0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),
    602	IWL_DEV_INFO(0x34F0, 0x0310, iwl_ax201_cfg_qu_hr, NULL),
    603	IWL_DEV_INFO(0x34F0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),
    604	IWL_DEV_INFO(0x34F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),
    605	IWL_DEV_INFO(0x34F0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),
    606	IWL_DEV_INFO(0x34F0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),
    607
    608	IWL_DEV_INFO(0x3DF0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),
    609	IWL_DEV_INFO(0x3DF0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),
    610	IWL_DEV_INFO(0x3DF0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),
    611	IWL_DEV_INFO(0x3DF0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),
    612	IWL_DEV_INFO(0x3DF0, 0x0310, iwl_ax201_cfg_qu_hr, NULL),
    613	IWL_DEV_INFO(0x3DF0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),
    614	IWL_DEV_INFO(0x3DF0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),
    615	IWL_DEV_INFO(0x3DF0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),
    616	IWL_DEV_INFO(0x3DF0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),
    617
    618	IWL_DEV_INFO(0x4DF0, 0x0070, iwl_ax201_cfg_qu_hr, NULL),
    619	IWL_DEV_INFO(0x4DF0, 0x0074, iwl_ax201_cfg_qu_hr, NULL),
    620	IWL_DEV_INFO(0x4DF0, 0x0078, iwl_ax201_cfg_qu_hr, NULL),
    621	IWL_DEV_INFO(0x4DF0, 0x007C, iwl_ax201_cfg_qu_hr, NULL),
    622	IWL_DEV_INFO(0x4DF0, 0x0310, iwl_ax201_cfg_qu_hr, NULL),
    623	IWL_DEV_INFO(0x4DF0, 0x1651, killer1650s_2ax_cfg_qu_b0_hr_b0, NULL),
    624	IWL_DEV_INFO(0x4DF0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0, NULL),
    625	IWL_DEV_INFO(0x4DF0, 0x2074, iwl_ax201_cfg_qu_hr, NULL),
    626	IWL_DEV_INFO(0x4DF0, 0x4070, iwl_ax201_cfg_qu_hr, NULL),
    627	IWL_DEV_INFO(0x4DF0, 0x6074, iwl_ax201_cfg_qu_hr, NULL),
    628
    629	/* So with HR */
    630	IWL_DEV_INFO(0x2725, 0x0090, iwlax211_2ax_cfg_so_gf_a0, NULL),
    631	IWL_DEV_INFO(0x2725, 0x0020, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    632	IWL_DEV_INFO(0x2725, 0x2020, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    633	IWL_DEV_INFO(0x2725, 0x0024, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    634	IWL_DEV_INFO(0x2725, 0x0310, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    635	IWL_DEV_INFO(0x2725, 0x0510, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    636	IWL_DEV_INFO(0x2725, 0x0A10, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    637	IWL_DEV_INFO(0x2725, 0xE020, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    638	IWL_DEV_INFO(0x2725, 0xE024, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    639	IWL_DEV_INFO(0x2725, 0x4020, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    640	IWL_DEV_INFO(0x2725, 0x6020, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    641	IWL_DEV_INFO(0x2725, 0x6024, iwlax210_2ax_cfg_ty_gf_a0, NULL),
    642	IWL_DEV_INFO(0x2725, 0x1673, iwlax210_2ax_cfg_ty_gf_a0, iwl_ax210_killer_1675w_name),
    643	IWL_DEV_INFO(0x2725, 0x1674, iwlax210_2ax_cfg_ty_gf_a0, iwl_ax210_killer_1675x_name),
    644	IWL_DEV_INFO(0x7A70, 0x0090, iwlax211_2ax_cfg_so_gf_a0_long, NULL),
    645	IWL_DEV_INFO(0x7A70, 0x0098, iwlax211_2ax_cfg_so_gf_a0_long, NULL),
    646	IWL_DEV_INFO(0x7A70, 0x00B0, iwlax411_2ax_cfg_so_gf4_a0_long, NULL),
    647	IWL_DEV_INFO(0x7A70, 0x0310, iwlax211_2ax_cfg_so_gf_a0_long, NULL),
    648	IWL_DEV_INFO(0x7A70, 0x0510, iwlax211_2ax_cfg_so_gf_a0_long, NULL),
    649	IWL_DEV_INFO(0x7A70, 0x0A10, iwlax211_2ax_cfg_so_gf_a0_long, NULL),
    650	IWL_DEV_INFO(0x7AF0, 0x0090, iwlax211_2ax_cfg_so_gf_a0, NULL),
    651	IWL_DEV_INFO(0x7AF0, 0x0098, iwlax211_2ax_cfg_so_gf_a0, NULL),
    652	IWL_DEV_INFO(0x7AF0, 0x00B0, iwlax411_2ax_cfg_so_gf4_a0, NULL),
    653	IWL_DEV_INFO(0x7AF0, 0x0310, iwlax211_2ax_cfg_so_gf_a0, NULL),
    654	IWL_DEV_INFO(0x7AF0, 0x0510, iwlax211_2ax_cfg_so_gf_a0, NULL),
    655	IWL_DEV_INFO(0x7AF0, 0x0A10, iwlax211_2ax_cfg_so_gf_a0, NULL),
    656
    657	/* So with JF */
    658	IWL_DEV_INFO(0x7A70, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),
    659	IWL_DEV_INFO(0x7A70, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_160_name),
    660	IWL_DEV_INFO(0x7AF0, 0x1551, iwl9560_2ac_cfg_soc, iwl9560_killer_1550s_160_name),
    661	IWL_DEV_INFO(0x7AF0, 0x1552, iwl9560_2ac_cfg_soc, iwl9560_killer_1550i_160_name),
    662
    663	/* SnJ with HR */
    664	IWL_DEV_INFO(0x2725, 0x00B0, iwlax411_2ax_cfg_sosnj_gf4_a0, NULL),
    665	IWL_DEV_INFO(0x2726, 0x0090, iwlax211_cfg_snj_gf_a0, NULL),
    666	IWL_DEV_INFO(0x2726, 0x0098, iwlax211_cfg_snj_gf_a0, NULL),
    667	IWL_DEV_INFO(0x2726, 0x00B0, iwlax411_2ax_cfg_sosnj_gf4_a0, NULL),
    668	IWL_DEV_INFO(0x2726, 0x00B4, iwlax411_2ax_cfg_sosnj_gf4_a0, NULL),
    669	IWL_DEV_INFO(0x2726, 0x0510, iwlax211_cfg_snj_gf_a0, NULL),
    670	IWL_DEV_INFO(0x2726, 0x1651, iwl_cfg_snj_hr_b0, iwl_ax201_killer_1650s_name),
    671	IWL_DEV_INFO(0x2726, 0x1652, iwl_cfg_snj_hr_b0, iwl_ax201_killer_1650i_name),
    672	IWL_DEV_INFO(0x2726, 0x1691, iwlax411_2ax_cfg_sosnj_gf4_a0, iwl_ax411_killer_1690s_name),
    673	IWL_DEV_INFO(0x2726, 0x1692, iwlax411_2ax_cfg_sosnj_gf4_a0, iwl_ax411_killer_1690i_name),
    674	IWL_DEV_INFO(0x7F70, 0x1691, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690s_name),
    675	IWL_DEV_INFO(0x7F70, 0x1692, iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_killer_1690i_name),
    676
    677	/* SO with GF2 */
    678	IWL_DEV_INFO(0x2726, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),
    679	IWL_DEV_INFO(0x2726, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),
    680	IWL_DEV_INFO(0x51F0, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),
    681	IWL_DEV_INFO(0x51F0, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),
    682	IWL_DEV_INFO(0x54F0, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),
    683	IWL_DEV_INFO(0x54F0, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),
    684	IWL_DEV_INFO(0x7A70, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),
    685	IWL_DEV_INFO(0x7A70, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),
    686	IWL_DEV_INFO(0x7AF0, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),
    687	IWL_DEV_INFO(0x7AF0, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),
    688	IWL_DEV_INFO(0x7F70, 0x1671, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675s_name),
    689	IWL_DEV_INFO(0x7F70, 0x1672, iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_killer_1675i_name),
    690
    691	/* MA with GF2 */
    692	IWL_DEV_INFO(0x7E40, 0x1671, iwl_cfg_ma_a0_gf_a0, iwl_ax211_killer_1675s_name),
    693	IWL_DEV_INFO(0x7E40, 0x1672, iwl_cfg_ma_a0_gf_a0, iwl_ax211_killer_1675i_name),
    694
    695	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    696		      IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
    697		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    698		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    699		      iwl9560_2ac_cfg_soc, iwl9461_160_name),
    700	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    701		      IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
    702		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    703		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    704		      iwl9560_2ac_cfg_soc, iwl9461_name),
    705	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    706		      IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
    707		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    708		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    709		      iwl9560_2ac_cfg_soc, iwl9462_160_name),
    710	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    711		      IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
    712		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    713		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    714		      iwl9560_2ac_cfg_soc, iwl9462_name),
    715
    716	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    717		      IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
    718		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    719		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    720		      iwl9560_2ac_cfg_soc, iwl9560_160_name),
    721	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    722		      IWL_CFG_MAC_TYPE_PU, IWL_CFG_ANY,
    723		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    724		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    725		      iwl9560_2ac_cfg_soc, iwl9560_name),
    726
    727	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    728		      IWL_CFG_MAC_TYPE_PNJ, IWL_CFG_ANY,
    729		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    730		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    731		      iwl9260_2ac_cfg, iwl9461_160_name),
    732	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    733		      IWL_CFG_MAC_TYPE_PNJ, IWL_CFG_ANY,
    734		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    735		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    736		      iwl9260_2ac_cfg, iwl9461_name),
    737	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    738		      IWL_CFG_MAC_TYPE_PNJ, IWL_CFG_ANY,
    739		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    740		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    741		      iwl9260_2ac_cfg, iwl9462_160_name),
    742	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    743		      IWL_CFG_MAC_TYPE_PNJ, IWL_CFG_ANY,
    744		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    745		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    746		      iwl9260_2ac_cfg, iwl9462_name),
    747
    748	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    749		      IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,
    750		      IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY,
    751		      IWL_CFG_160, IWL_CFG_CORES_BT_GNSS, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    752		      iwl9260_2ac_cfg, iwl9270_160_name),
    753	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    754		      IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,
    755		      IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY,
    756		      IWL_CFG_NO_160, IWL_CFG_CORES_BT_GNSS, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    757		      iwl9260_2ac_cfg, iwl9270_name),
    758
    759	_IWL_DEV_INFO(0x271B, IWL_CFG_ANY,
    760		      IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,
    761		      IWL_CFG_RF_TYPE_TH1, IWL_CFG_ANY,
    762		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    763		      iwl9260_2ac_cfg, iwl9162_160_name),
    764	_IWL_DEV_INFO(0x271B, IWL_CFG_ANY,
    765		      IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,
    766		      IWL_CFG_RF_TYPE_TH1, IWL_CFG_ANY,
    767		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    768		      iwl9260_2ac_cfg, iwl9162_name),
    769
    770	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    771		      IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,
    772		      IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY,
    773		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    774		      iwl9260_2ac_cfg, iwl9260_160_name),
    775	_IWL_DEV_INFO(0x2526, IWL_CFG_ANY,
    776		      IWL_CFG_MAC_TYPE_TH, IWL_CFG_ANY,
    777		      IWL_CFG_RF_TYPE_TH, IWL_CFG_ANY,
    778		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    779		      iwl9260_2ac_cfg, iwl9260_name),
    780
    781/* Qu with Jf */
    782	/* Qu B step */
    783	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    784		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    785		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    786		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    787		      iwl9560_qu_b0_jf_b0_cfg, iwl9461_160_name),
    788	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    789		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    790		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    791		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    792		      iwl9560_qu_b0_jf_b0_cfg, iwl9461_name),
    793	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    794		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    795		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    796		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    797		      iwl9560_qu_b0_jf_b0_cfg, iwl9462_160_name),
    798	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    799		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    800		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    801		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    802		      iwl9560_qu_b0_jf_b0_cfg, iwl9462_name),
    803
    804	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    805		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    806		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    807		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    808		      iwl9560_qu_b0_jf_b0_cfg, iwl9560_160_name),
    809	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    810		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    811		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    812		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    813		      iwl9560_qu_b0_jf_b0_cfg, iwl9560_name),
    814
    815	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,
    816		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    817		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    818		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    819		      iwl9560_qu_b0_jf_b0_cfg, iwl9560_killer_1550s_name),
    820	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,
    821		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    822		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    823		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    824		      iwl9560_qu_b0_jf_b0_cfg, iwl9560_killer_1550i_name),
    825
    826	/* Qu C step */
    827	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    828		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    829		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    830		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    831		      iwl9560_qu_c0_jf_b0_cfg, iwl9461_160_name),
    832	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    833		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    834		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    835		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    836		      iwl9560_qu_c0_jf_b0_cfg, iwl9461_name),
    837	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    838		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    839		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    840		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    841		      iwl9560_qu_c0_jf_b0_cfg, iwl9462_160_name),
    842	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    843		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    844		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    845		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    846		      iwl9560_qu_c0_jf_b0_cfg, iwl9462_name),
    847
    848	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    849		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    850		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    851		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    852		      iwl9560_qu_c0_jf_b0_cfg, iwl9560_160_name),
    853	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    854		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    855		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    856		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    857		      iwl9560_qu_c0_jf_b0_cfg, iwl9560_name),
    858
    859	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,
    860		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    861		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    862		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    863		      iwl9560_qu_c0_jf_b0_cfg, iwl9560_killer_1550s_name),
    864	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,
    865		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    866		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    867		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    868		      iwl9560_qu_c0_jf_b0_cfg, iwl9560_killer_1550i_name),
    869
    870	/* QuZ */
    871	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    872		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    873		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    874		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    875		      iwl9560_quz_a0_jf_b0_cfg, iwl9461_160_name),
    876	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    877		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    878		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    879		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    880		      iwl9560_quz_a0_jf_b0_cfg, iwl9461_name),
    881	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    882		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    883		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    884		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    885		      iwl9560_quz_a0_jf_b0_cfg, iwl9462_160_name),
    886	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    887		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    888		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    889		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    890		      iwl9560_quz_a0_jf_b0_cfg, iwl9462_name),
    891
    892	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    893		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    894		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    895		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    896		      iwl9560_quz_a0_jf_b0_cfg, iwl9560_160_name),
    897	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    898		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    899		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    900		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    901		      iwl9560_quz_a0_jf_b0_cfg, iwl9560_name),
    902
    903	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,
    904		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    905		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    906		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    907		      iwl9560_quz_a0_jf_b0_cfg, iwl9560_killer_1550s_name),
    908	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,
    909		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    910		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    911		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    912		      iwl9560_quz_a0_jf_b0_cfg, iwl9560_killer_1550i_name),
    913
    914	/* QnJ */
    915	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    916		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    917		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    918		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    919		      iwl9560_qnj_b0_jf_b0_cfg, iwl9461_160_name),
    920	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    921		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    922		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
    923		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    924		      iwl9560_qnj_b0_jf_b0_cfg, iwl9461_name),
    925	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    926		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    927		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    928		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    929		      iwl9560_qnj_b0_jf_b0_cfg, iwl9462_160_name),
    930	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    931		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    932		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
    933		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    934		      iwl9560_qnj_b0_jf_b0_cfg, iwl9462_name),
    935
    936	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    937		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    938		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    939		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    940		      iwl9560_qnj_b0_jf_b0_cfg, iwl9560_160_name),
    941	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    942		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    943		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    944		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    945		      iwl9560_qnj_b0_jf_b0_cfg, iwl9560_name),
    946
    947	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1551,
    948		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    949		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    950		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    951		      iwl9560_qnj_b0_jf_b0_cfg, iwl9560_killer_1550s_name),
    952	_IWL_DEV_INFO(IWL_CFG_ANY, 0x1552,
    953		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
    954		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
    955		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    956		      iwl9560_qnj_b0_jf_b0_cfg, iwl9560_killer_1550i_name),
    957
    958/* Qu with Hr */
    959	/* Qu B step */
    960	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    961		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    962		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
    963		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    964		      iwl_qu_b0_hr1_b0, iwl_ax101_name),
    965	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    966		      IWL_CFG_MAC_TYPE_QU, SILICON_B_STEP,
    967		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
    968		      IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    969		      iwl_qu_b0_hr_b0, iwl_ax203_name),
    970
    971	/* Qu C step */
    972	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    973		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    974		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
    975		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    976		      iwl_qu_c0_hr1_b0, iwl_ax101_name),
    977	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    978		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    979		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
    980		      IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    981		      iwl_qu_c0_hr_b0, iwl_ax203_name),
    982	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    983		      IWL_CFG_MAC_TYPE_QU, SILICON_C_STEP,
    984		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
    985		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    986		      iwl_qu_c0_hr_b0, iwl_ax201_name),
    987
    988	/* QuZ */
    989	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    990		      IWL_CFG_MAC_TYPE_QUZ, IWL_CFG_ANY,
    991		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
    992		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    993		      iwl_quz_a0_hr1_b0, iwl_ax101_name),
    994	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
    995		      IWL_CFG_MAC_TYPE_QUZ, SILICON_B_STEP,
    996		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
    997		      IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
    998		      iwl_cfg_quz_a0_hr_b0, iwl_ax203_name),
    999
   1000/* QnJ with Hr */
   1001	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1002		      IWL_CFG_MAC_TYPE_QNJ, IWL_CFG_ANY,
   1003		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1004		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1005		      iwl_qnj_b0_hr_b0_cfg, iwl_ax201_name),
   1006
   1007/* SnJ with Jf */
   1008	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1009		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1010		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1011		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1012		      iwl_cfg_snj_a0_jf_b0, iwl9461_160_name),
   1013	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1014		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1015		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1016		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1017		      iwl_cfg_snj_a0_jf_b0, iwl9461_name),
   1018	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1019		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1020		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1021		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1022		      iwl_cfg_snj_a0_jf_b0, iwl9462_160_name),
   1023	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1024		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1025		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1026		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1027		      iwl_cfg_snj_a0_jf_b0, iwl9462_name),
   1028
   1029	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1030		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1031		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1032		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1033		      iwl_cfg_snj_a0_jf_b0, iwl9560_160_name),
   1034	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1035		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1036		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1037		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1038		      iwl_cfg_snj_a0_jf_b0, iwl9560_name),
   1039
   1040/* SnJ with Hr */
   1041	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1042		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1043		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
   1044		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1045		      iwl_cfg_snj_hr_b0, iwl_ax101_name),
   1046
   1047	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1048		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1049		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1050		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1051		      iwl_cfg_snj_hr_b0, iwl_ax201_name),
   1052
   1053/* Ma */
   1054	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1055		      IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,
   1056		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1057		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1058		      iwl_cfg_ma_a0_hr_b0, iwl_ax201_name),
   1059	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1060		      IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,
   1061		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1062		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1063		      iwl_cfg_ma_a0_gf_a0, iwl_ax211_name),
   1064	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1065		      IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,
   1066		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1067		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_CDB, IWL_CFG_ANY,
   1068		      iwl_cfg_ma_a0_gf4_a0, iwl_ax211_name),
   1069	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1070		      IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,
   1071		      IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY,
   1072		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1073		      iwl_cfg_ma_a0_mr_a0, iwl_ax221_name),
   1074	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1075		      IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,
   1076		      IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY,
   1077		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1078		      iwl_cfg_ma_a0_fm_a0, iwl_ax231_name),
   1079	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1080		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1081		      IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY,
   1082		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1083		      iwl_cfg_snj_a0_mr_a0, iwl_ax221_name),
   1084
   1085/* So with Hr */
   1086	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1087		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1088		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1089		      IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1090		      iwl_cfg_so_a0_hr_a0, iwl_ax203_name),
   1091	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1092		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1093		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
   1094		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1095		      iwl_cfg_so_a0_hr_a0, iwl_ax101_name),
   1096	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1097		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1098		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1099		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1100		      iwl_cfg_so_a0_hr_a0, iwl_ax201_name),
   1101
   1102/* So-F with Hr */
   1103	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1104		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1105		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1106		      IWL_CFG_NO_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1107		      iwl_cfg_so_a0_hr_a0, iwl_ax203_name),
   1108	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1109		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1110		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
   1111		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1112		      iwl_cfg_so_a0_hr_a0, iwl_ax101_name),
   1113	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1114		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1115		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1116		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1117		      iwl_cfg_so_a0_hr_a0, iwl_ax201_name),
   1118
   1119/* So-F with Gf */
   1120	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1121		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1122		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1123		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1124		      iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_name),
   1125	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1126		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1127		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1128		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_CDB, IWL_CFG_ANY,
   1129		      iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_name),
   1130
   1131/* Bz */
   1132	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1133		      IWL_CFG_MAC_TYPE_BZ, IWL_CFG_ANY,
   1134		      IWL_CFG_RF_TYPE_HR2, IWL_CFG_ANY,
   1135		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1136		      iwl_cfg_bz_a0_hr_b0, iwl_bz_name),
   1137	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1138		      IWL_CFG_MAC_TYPE_BZ, IWL_CFG_ANY,
   1139		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1140		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1141		      iwl_cfg_bz_a0_gf_a0, iwl_bz_name),
   1142	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1143		      IWL_CFG_MAC_TYPE_BZ, IWL_CFG_ANY,
   1144		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1145		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_CDB, IWL_CFG_ANY,
   1146		      iwl_cfg_bz_a0_gf4_a0, iwl_bz_name),
   1147	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1148		      IWL_CFG_MAC_TYPE_BZ, IWL_CFG_ANY,
   1149		      IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY,
   1150		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1151		      iwl_cfg_bz_a0_mr_a0, iwl_bz_name),
   1152	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1153		      IWL_CFG_MAC_TYPE_BZ, IWL_CFG_ANY,
   1154		      IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY,
   1155		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1156		      iwl_cfg_bz_a0_fm_a0, iwl_bz_name),
   1157	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1158		      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
   1159		      IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY,
   1160		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_NO_JACKET,
   1161		      iwl_cfg_gl_a0_fm_a0, iwl_bz_name),
   1162
   1163/* BZ Z step */
   1164	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1165		      IWL_CFG_MAC_TYPE_BZ, SILICON_Z_STEP,
   1166		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1167		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1168		      iwl_cfg_bz_z0_gf_a0, iwl_bz_name),
   1169
   1170/* BNJ */
   1171	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1172		      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
   1173		      IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY,
   1174		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_IS_JACKET,
   1175		      iwl_cfg_bnj_a0_fm_a0, iwl_bz_name),
   1176	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1177		      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
   1178		      IWL_CFG_RF_TYPE_FM, IWL_CFG_ANY,
   1179		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_CDB, IWL_CFG_IS_JACKET,
   1180		      iwl_cfg_bnj_a0_fm4_a0, iwl_bz_name),
   1181	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1182		      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
   1183		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1184		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_IS_JACKET,
   1185		      iwl_cfg_bnj_a0_gf_a0, iwl_bz_name),
   1186	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1187		      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
   1188		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1189		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_CDB, IWL_CFG_IS_JACKET,
   1190		      iwl_cfg_bnj_a0_gf4_a0, iwl_bz_name),
   1191	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1192		      IWL_CFG_MAC_TYPE_GL, IWL_CFG_ANY,
   1193		      IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY,
   1194		      IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_IS_JACKET,
   1195		      iwl_cfg_bnj_a0_hr_b0, iwl_bz_name),
   1196
   1197/* SoF with JF2 */
   1198	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1199		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1200		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1201		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1202		      iwlax210_2ax_cfg_so_jf_b0, iwl9560_160_name),
   1203	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1204		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1205		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1206		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1207		      iwlax210_2ax_cfg_so_jf_b0, iwl9560_name),
   1208
   1209/* SoF with JF */
   1210	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1211		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1212		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1213		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1214		      iwlax210_2ax_cfg_so_jf_b0, iwl9461_160_name),
   1215	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1216		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1217		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1218		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1219		      iwlax210_2ax_cfg_so_jf_b0, iwl9462_160_name),
   1220	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1221		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1222		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1223		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1224		      iwlax210_2ax_cfg_so_jf_b0, iwl9461_name),
   1225	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1226		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1227		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1228		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1229		      iwlax210_2ax_cfg_so_jf_b0, iwl9462_name),
   1230
   1231/* SoF with JF2 */
   1232	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1233		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1234		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1235		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1236		      iwlax210_2ax_cfg_so_jf_b0, iwl9560_160_name),
   1237	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1238		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1239		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1240		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1241		      iwlax210_2ax_cfg_so_jf_b0, iwl9560_name),
   1242
   1243/* SoF with JF */
   1244	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1245		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1246		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1247		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1248		      iwlax210_2ax_cfg_so_jf_b0, iwl9461_160_name),
   1249	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1250		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1251		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1252		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1253		      iwlax210_2ax_cfg_so_jf_b0, iwl9462_160_name),
   1254	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1255		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1256		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1257		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1258		      iwlax210_2ax_cfg_so_jf_b0, iwl9461_name),
   1259	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1260		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1261		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1262		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1263		      iwlax210_2ax_cfg_so_jf_b0, iwl9462_name),
   1264
   1265/* So with GF */
   1266	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1267		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1268		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1269		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1270		      iwlax211_2ax_cfg_so_gf_a0, iwl_ax211_name),
   1271	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1272		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1273		      IWL_CFG_RF_TYPE_GF, IWL_CFG_ANY,
   1274		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_CDB, IWL_CFG_ANY,
   1275		      iwlax411_2ax_cfg_so_gf4_a0, iwl_ax411_name),
   1276
   1277/* So with JF2 */
   1278	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1279		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1280		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1281		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1282		      iwlax210_2ax_cfg_so_jf_b0, iwl9560_160_name),
   1283	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1284		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1285		      IWL_CFG_RF_TYPE_JF2, IWL_CFG_RF_ID_JF,
   1286		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1287		      iwlax210_2ax_cfg_so_jf_b0, iwl9560_name),
   1288
   1289/* So with JF */
   1290	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1291		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1292		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1293		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1294		      iwlax210_2ax_cfg_so_jf_b0, iwl9461_160_name),
   1295	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1296		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1297		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1298		      IWL_CFG_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1299		      iwlax210_2ax_cfg_so_jf_b0, iwl9462_160_name),
   1300	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1301		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1302		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1,
   1303		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1304		      iwlax210_2ax_cfg_so_jf_b0, iwl9461_name),
   1305	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1306		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1307		      IWL_CFG_RF_TYPE_JF1, IWL_CFG_RF_ID_JF1_DIV,
   1308		      IWL_CFG_NO_160, IWL_CFG_CORES_BT, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1309		      iwlax210_2ax_cfg_so_jf_b0, iwl9462_name),
   1310
   1311/* MsP */
   1312/* For now we use the same FW as MR, but this will change in the future. */
   1313	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1314		      IWL_CFG_MAC_TYPE_SO, IWL_CFG_ANY,
   1315		      IWL_CFG_RF_TYPE_MS, IWL_CFG_ANY,
   1316		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1317		      iwl_cfg_so_a0_ms_a0, iwl_ax204_name),
   1318	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1319		      IWL_CFG_MAC_TYPE_SOF, IWL_CFG_ANY,
   1320		      IWL_CFG_RF_TYPE_MS, IWL_CFG_ANY,
   1321		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1322		      iwl_cfg_so_a0_ms_a0, iwl_ax204_name),
   1323	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1324		      IWL_CFG_MAC_TYPE_MA, IWL_CFG_ANY,
   1325		      IWL_CFG_RF_TYPE_MS, IWL_CFG_ANY,
   1326		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1327		      iwl_cfg_ma_a0_ms_a0, iwl_ax204_name),
   1328	_IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
   1329		      IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
   1330		      IWL_CFG_RF_TYPE_MS, IWL_CFG_ANY,
   1331		      IWL_CFG_160, IWL_CFG_ANY, IWL_CFG_NO_CDB, IWL_CFG_ANY,
   1332		      iwl_cfg_snj_a0_ms_a0, iwl_ax204_name)
   1333
   1334#endif /* CONFIG_IWLMVM */
   1335};
   1336
   1337/*
   1338 * In case that there is no OTP on the NIC, get the rf id and cdb info
   1339 * from the prph registers.
   1340 */
   1341static int get_crf_id(struct iwl_trans *iwl_trans)
   1342{
   1343	int ret = 0;
   1344	u32 sd_reg_ver_addr;
   1345	u32 cdb = 0;
   1346	u32 val;
   1347
   1348	if (iwl_trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210)
   1349		sd_reg_ver_addr = SD_REG_VER_GEN2;
   1350	else
   1351		sd_reg_ver_addr = SD_REG_VER;
   1352
   1353	if (!iwl_trans_grab_nic_access(iwl_trans)) {
   1354		IWL_ERR(iwl_trans, "Failed to grab nic access before reading crf id\n");
   1355		ret = -EIO;
   1356		goto out;
   1357	}
   1358
   1359	/* Enable access to peripheral registers */
   1360	val = iwl_read_umac_prph_no_grab(iwl_trans, WFPM_CTRL_REG);
   1361	val |= ENABLE_WFPM;
   1362	iwl_write_umac_prph_no_grab(iwl_trans, WFPM_CTRL_REG, val);
   1363
   1364	/* Read crf info */
   1365	val = iwl_read_prph_no_grab(iwl_trans, sd_reg_ver_addr);
   1366
   1367	/* Read cdb info (also contains the jacket info if needed in the future */
   1368	cdb = iwl_read_umac_prph_no_grab(iwl_trans, WFPM_OTP_CFG1_ADDR);
   1369
   1370	/* Map between crf id to rf id */
   1371	switch (REG_CRF_ID_TYPE(val)) {
   1372	case REG_CRF_ID_TYPE_JF_1:
   1373		iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_JF1 << 12);
   1374		break;
   1375	case REG_CRF_ID_TYPE_JF_2:
   1376		iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_JF2 << 12);
   1377		break;
   1378	case REG_CRF_ID_TYPE_HR_NONE_CDB:
   1379		iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_HR1 << 12);
   1380		break;
   1381	case REG_CRF_ID_TYPE_HR_CDB:
   1382		iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_HR2 << 12);
   1383		break;
   1384	case REG_CRF_ID_TYPE_GF:
   1385		iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_GF << 12);
   1386		break;
   1387	case REG_CRF_ID_TYPE_MR:
   1388		iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_MR << 12);
   1389		break;
   1390		case REG_CRF_ID_TYPE_FM:
   1391			iwl_trans->hw_rf_id = (IWL_CFG_RF_TYPE_FM << 12);
   1392			break;
   1393	default:
   1394		ret = -EIO;
   1395		IWL_ERR(iwl_trans,
   1396			"Can find a correct rfid for crf id 0x%x\n",
   1397			REG_CRF_ID_TYPE(val));
   1398		goto out_release;
   1399
   1400	}
   1401
   1402	/* Set CDB capabilities */
   1403	if (cdb & BIT(4)) {
   1404		iwl_trans->hw_rf_id += BIT(28);
   1405		IWL_INFO(iwl_trans, "Adding cdb to rf id\n");
   1406	}
   1407
   1408	IWL_INFO(iwl_trans, "Detected RF 0x%x from crf id 0x%x\n",
   1409		 iwl_trans->hw_rf_id, REG_CRF_ID_TYPE(val));
   1410
   1411out_release:
   1412	iwl_trans_release_nic_access(iwl_trans);
   1413
   1414out:
   1415	return ret;
   1416}
   1417
   1418/* PCI registers */
   1419#define PCI_CFG_RETRY_TIMEOUT	0x041
   1420
   1421static const struct iwl_dev_info *
   1422iwl_pci_find_dev_info(u16 device, u16 subsystem_device,
   1423		      u16 mac_type, u8 mac_step,
   1424		      u16 rf_type, u8 cdb, u8 jacket, u8 rf_id, u8 no_160, u8 cores)
   1425{
   1426	int num_devices = ARRAY_SIZE(iwl_dev_info_table);
   1427	int i;
   1428
   1429	if (!num_devices)
   1430		return NULL;
   1431
   1432	for (i = num_devices - 1; i >= 0; i--) {
   1433		const struct iwl_dev_info *dev_info = &iwl_dev_info_table[i];
   1434
   1435		if (dev_info->device != (u16)IWL_CFG_ANY &&
   1436		    dev_info->device != device)
   1437			continue;
   1438
   1439		if (dev_info->subdevice != (u16)IWL_CFG_ANY &&
   1440		    dev_info->subdevice != subsystem_device)
   1441			continue;
   1442
   1443		if (dev_info->mac_type != (u16)IWL_CFG_ANY &&
   1444		    dev_info->mac_type != mac_type)
   1445			continue;
   1446
   1447		if (dev_info->mac_step != (u8)IWL_CFG_ANY &&
   1448		    dev_info->mac_step != mac_step)
   1449			continue;
   1450
   1451		if (dev_info->rf_type != (u16)IWL_CFG_ANY &&
   1452		    dev_info->rf_type != rf_type)
   1453			continue;
   1454
   1455		if (dev_info->cdb != (u8)IWL_CFG_ANY &&
   1456		    dev_info->cdb != cdb)
   1457			continue;
   1458
   1459		if (dev_info->jacket != (u8)IWL_CFG_ANY &&
   1460		    dev_info->jacket != jacket)
   1461			continue;
   1462
   1463		if (dev_info->rf_id != (u8)IWL_CFG_ANY &&
   1464		    dev_info->rf_id != rf_id)
   1465			continue;
   1466
   1467		if (dev_info->no_160 != (u8)IWL_CFG_ANY &&
   1468		    dev_info->no_160 != no_160)
   1469			continue;
   1470
   1471		if (dev_info->cores != (u8)IWL_CFG_ANY &&
   1472		    dev_info->cores != cores)
   1473			continue;
   1474
   1475		return dev_info;
   1476	}
   1477
   1478	return NULL;
   1479}
   1480
   1481static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
   1482{
   1483	const struct iwl_cfg_trans_params *trans;
   1484	const struct iwl_cfg *cfg_7265d __maybe_unused = NULL;
   1485	const struct iwl_dev_info *dev_info;
   1486	struct iwl_trans *iwl_trans;
   1487	struct iwl_trans_pcie *trans_pcie;
   1488	int ret;
   1489	const struct iwl_cfg *cfg;
   1490
   1491	trans = (void *)(ent->driver_data & ~TRANS_CFG_MARKER);
   1492
   1493	/*
   1494	 * This is needed for backwards compatibility with the old
   1495	 * tables, so we don't need to change all the config structs
   1496	 * at the same time.  The cfg is used to compare with the old
   1497	 * full cfg structs.
   1498	 */
   1499	cfg = (void *)(ent->driver_data & ~TRANS_CFG_MARKER);
   1500
   1501	/* make sure trans is the first element in iwl_cfg */
   1502	BUILD_BUG_ON(offsetof(struct iwl_cfg, trans));
   1503
   1504	iwl_trans = iwl_trans_pcie_alloc(pdev, ent, trans);
   1505	if (IS_ERR(iwl_trans))
   1506		return PTR_ERR(iwl_trans);
   1507
   1508	trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans);
   1509
   1510	/*
   1511	 * Let's try to grab NIC access early here. Sometimes, NICs may
   1512	 * fail to initialize, and if that happens it's better if we see
   1513	 * issues early on (and can reprobe, per the logic inside), than
   1514	 * first trying to load the firmware etc. and potentially only
   1515	 * detecting any problems when the first interface is brought up.
   1516	 */
   1517	ret = iwl_pcie_prepare_card_hw(iwl_trans);
   1518	if (!ret) {
   1519		ret = iwl_finish_nic_init(iwl_trans);
   1520		if (ret)
   1521			goto out_free_trans;
   1522		if (iwl_trans_grab_nic_access(iwl_trans)) {
   1523			/* all good */
   1524			iwl_trans_release_nic_access(iwl_trans);
   1525		} else {
   1526			ret = -EIO;
   1527			goto out_free_trans;
   1528		}
   1529	}
   1530
   1531	iwl_trans->hw_rf_id = iwl_read32(iwl_trans, CSR_HW_RF_ID);
   1532
   1533	/*
   1534	 * The RF_ID is set to zero in blank OTP so read version to
   1535	 * extract the RF_ID.
   1536	 * This is relevant only for family 9000 and up.
   1537	 */
   1538	if (iwl_trans->trans_cfg->rf_id &&
   1539	    iwl_trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_9000 &&
   1540	    !CSR_HW_RFID_TYPE(iwl_trans->hw_rf_id) && get_crf_id(iwl_trans)) {
   1541		ret = -EINVAL;
   1542		goto out_free_trans;
   1543	}
   1544
   1545	dev_info = iwl_pci_find_dev_info(pdev->device, pdev->subsystem_device,
   1546					 CSR_HW_REV_TYPE(iwl_trans->hw_rev),
   1547					 iwl_trans->hw_rev_step,
   1548					 CSR_HW_RFID_TYPE(iwl_trans->hw_rf_id),
   1549					 CSR_HW_RFID_IS_CDB(iwl_trans->hw_rf_id),
   1550					 CSR_HW_RFID_IS_JACKET(iwl_trans->hw_rf_id),
   1551					 IWL_SUBDEVICE_RF_ID(pdev->subsystem_device),
   1552					 IWL_SUBDEVICE_NO_160(pdev->subsystem_device),
   1553					 IWL_SUBDEVICE_CORES(pdev->subsystem_device));
   1554
   1555	if (dev_info) {
   1556		iwl_trans->cfg = dev_info->cfg;
   1557		iwl_trans->name = dev_info->name;
   1558	}
   1559
   1560#if IS_ENABLED(CONFIG_IWLMVM)
   1561
   1562	/*
   1563	 * Workaround for problematic SnJ device: sometimes when
   1564	 * certain RF modules are connected to SnJ, the device ID
   1565	 * changes to QnJ's ID.  So we are using QnJ's trans_cfg until
   1566	 * here.  But if we detect that the MAC type is actually SnJ,
   1567	 * we should switch to it here to avoid problems later.
   1568	 */
   1569	if (CSR_HW_REV_TYPE(iwl_trans->hw_rev) == IWL_CFG_MAC_TYPE_SNJ)
   1570		iwl_trans->trans_cfg = &iwl_so_trans_cfg;
   1571
   1572	/*
   1573	 * special-case 7265D, it has the same PCI IDs.
   1574	 *
   1575	 * Note that because we already pass the cfg to the transport above,
   1576	 * all the parameters that the transport uses must, until that is
   1577	 * changed, be identical to the ones in the 7265D configuration.
   1578	 */
   1579	if (cfg == &iwl7265_2ac_cfg)
   1580		cfg_7265d = &iwl7265d_2ac_cfg;
   1581	else if (cfg == &iwl7265_2n_cfg)
   1582		cfg_7265d = &iwl7265d_2n_cfg;
   1583	else if (cfg == &iwl7265_n_cfg)
   1584		cfg_7265d = &iwl7265d_n_cfg;
   1585	if (cfg_7265d &&
   1586	    (iwl_trans->hw_rev & CSR_HW_REV_TYPE_MSK) == CSR_HW_REV_TYPE_7265D)
   1587		iwl_trans->cfg = cfg_7265d;
   1588
   1589	/*
   1590	 * This is a hack to switch from Qu B0 to Qu C0.  We need to
   1591	 * do this for all cfgs that use Qu B0, except for those using
   1592	 * Jf, which have already been moved to the new table.  The
   1593	 * rest must be removed once we convert Qu with Hr as well.
   1594	 */
   1595	if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QU_C0) {
   1596		if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr)
   1597			iwl_trans->cfg = &iwl_ax201_cfg_qu_c0_hr_b0;
   1598		else if (iwl_trans->cfg == &killer1650s_2ax_cfg_qu_b0_hr_b0)
   1599			iwl_trans->cfg = &killer1650s_2ax_cfg_qu_c0_hr_b0;
   1600		else if (iwl_trans->cfg == &killer1650i_2ax_cfg_qu_b0_hr_b0)
   1601			iwl_trans->cfg = &killer1650i_2ax_cfg_qu_c0_hr_b0;
   1602	}
   1603
   1604	/* same thing for QuZ... */
   1605	if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QUZ) {
   1606		if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr)
   1607			iwl_trans->cfg = &iwl_ax201_cfg_quz_hr;
   1608		else if (iwl_trans->cfg == &killer1650s_2ax_cfg_qu_b0_hr_b0)
   1609			iwl_trans->cfg = &iwl_ax1650s_cfg_quz_hr;
   1610		else if (iwl_trans->cfg == &killer1650i_2ax_cfg_qu_b0_hr_b0)
   1611			iwl_trans->cfg = &iwl_ax1650i_cfg_quz_hr;
   1612	}
   1613
   1614#endif
   1615	/*
   1616	 * If we didn't set the cfg yet, the PCI ID table entry should have
   1617	 * been a full config - if yes, use it, otherwise fail.
   1618	 */
   1619	if (!iwl_trans->cfg) {
   1620		if (ent->driver_data & TRANS_CFG_MARKER) {
   1621			pr_err("No config found for PCI dev %04x/%04x, rev=0x%x, rfid=0x%x\n",
   1622			       pdev->device, pdev->subsystem_device,
   1623			       iwl_trans->hw_rev, iwl_trans->hw_rf_id);
   1624			ret = -EINVAL;
   1625			goto out_free_trans;
   1626		}
   1627		iwl_trans->cfg = cfg;
   1628	}
   1629
   1630	/* if we don't have a name yet, copy name from the old cfg */
   1631	if (!iwl_trans->name)
   1632		iwl_trans->name = iwl_trans->cfg->name;
   1633
   1634	if (iwl_trans->trans_cfg->mq_rx_supported) {
   1635		if (WARN_ON(!iwl_trans->cfg->num_rbds)) {
   1636			ret = -EINVAL;
   1637			goto out_free_trans;
   1638		}
   1639		trans_pcie->num_rx_bufs = iwl_trans->cfg->num_rbds;
   1640	} else {
   1641		trans_pcie->num_rx_bufs = RX_QUEUE_SIZE;
   1642	}
   1643
   1644	ret = iwl_trans_init(iwl_trans);
   1645	if (ret)
   1646		goto out_free_trans;
   1647
   1648	pci_set_drvdata(pdev, iwl_trans);
   1649
   1650	/* try to get ownership so that we'll know if we don't own it */
   1651	iwl_pcie_prepare_card_hw(iwl_trans);
   1652
   1653	iwl_trans->drv = iwl_drv_start(iwl_trans);
   1654
   1655	if (IS_ERR(iwl_trans->drv)) {
   1656		ret = PTR_ERR(iwl_trans->drv);
   1657		goto out_free_trans;
   1658	}
   1659
   1660	/* register transport layer debugfs here */
   1661	iwl_trans_pcie_dbgfs_register(iwl_trans);
   1662
   1663	return 0;
   1664
   1665out_free_trans:
   1666	iwl_trans_pcie_free(iwl_trans);
   1667	return ret;
   1668}
   1669
   1670static void iwl_pci_remove(struct pci_dev *pdev)
   1671{
   1672	struct iwl_trans *trans = pci_get_drvdata(pdev);
   1673
   1674	iwl_drv_stop(trans->drv);
   1675
   1676	iwl_trans_pcie_free(trans);
   1677}
   1678
   1679#ifdef CONFIG_PM_SLEEP
   1680
   1681static int iwl_pci_suspend(struct device *device)
   1682{
   1683	/* Before you put code here, think about WoWLAN. You cannot check here
   1684	 * whether WoWLAN is enabled or not, and your code will run even if
   1685	 * WoWLAN is enabled - don't kill the NIC, someone may need it in Sx.
   1686	 */
   1687
   1688	return 0;
   1689}
   1690
   1691static int iwl_pci_resume(struct device *device)
   1692{
   1693	struct pci_dev *pdev = to_pci_dev(device);
   1694	struct iwl_trans *trans = pci_get_drvdata(pdev);
   1695	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
   1696
   1697	/* Before you put code here, think about WoWLAN. You cannot check here
   1698	 * whether WoWLAN is enabled or not, and your code will run even if
   1699	 * WoWLAN is enabled - the NIC may be alive.
   1700	 */
   1701
   1702	/*
   1703	 * We disable the RETRY_TIMEOUT register (0x41) to keep
   1704	 * PCI Tx retries from interfering with C3 CPU state.
   1705	 */
   1706	pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);
   1707
   1708	if (!trans->op_mode)
   1709		return 0;
   1710
   1711	/* In WOWLAN, let iwl_trans_pcie_d3_resume do the rest of the work */
   1712	if (test_bit(STATUS_DEVICE_ENABLED, &trans->status))
   1713		return 0;
   1714
   1715	/* reconfigure the MSI-X mapping to get the correct IRQ for rfkill */
   1716	iwl_pcie_conf_msix_hw(trans_pcie);
   1717
   1718	/*
   1719	 * Enable rfkill interrupt (in order to keep track of the rfkill
   1720	 * status). Must be locked to avoid processing a possible rfkill
   1721	 * interrupt while in iwl_pcie_check_hw_rf_kill().
   1722	 */
   1723	mutex_lock(&trans_pcie->mutex);
   1724	iwl_enable_rfkill_int(trans);
   1725	iwl_pcie_check_hw_rf_kill(trans);
   1726	mutex_unlock(&trans_pcie->mutex);
   1727
   1728	return 0;
   1729}
   1730
   1731static const struct dev_pm_ops iwl_dev_pm_ops = {
   1732	SET_SYSTEM_SLEEP_PM_OPS(iwl_pci_suspend,
   1733				iwl_pci_resume)
   1734};
   1735
   1736#define IWL_PM_OPS	(&iwl_dev_pm_ops)
   1737
   1738#else /* CONFIG_PM_SLEEP */
   1739
   1740#define IWL_PM_OPS	NULL
   1741
   1742#endif /* CONFIG_PM_SLEEP */
   1743
   1744static struct pci_driver iwl_pci_driver = {
   1745	.name = DRV_NAME,
   1746	.id_table = iwl_hw_card_ids,
   1747	.probe = iwl_pci_probe,
   1748	.remove = iwl_pci_remove,
   1749	.driver.pm = IWL_PM_OPS,
   1750};
   1751
   1752int __must_check iwl_pci_register_driver(void)
   1753{
   1754	int ret;
   1755	ret = pci_register_driver(&iwl_pci_driver);
   1756	if (ret)
   1757		pr_err("Unable to initialize PCI module\n");
   1758
   1759	return ret;
   1760}
   1761
   1762void iwl_pci_unregister_driver(void)
   1763{
   1764	pci_unregister_driver(&iwl_pci_driver);
   1765}