Path: blob/main/sys/contrib/dev/iwlwifi/pcie/drv.c
48372 views
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause1/*2* Copyright (C) 2005-2014, 2018-2025 Intel Corporation3* Copyright (C) 2013-2015 Intel Mobile Communications GmbH4* Copyright (C) 2016-2017 Intel Deutschland GmbH5*/6#if defined(__FreeBSD__)7#define LINUXKPI_PARAM_PREFIX iwlwifi_8#endif9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt1011#include <linux/module.h>12#include <linux/pci.h>13#include <linux/acpi.h>1415#include "fw/acpi.h"1617#include "iwl-trans.h"18#include "iwl-drv.h"19#include "iwl-prph.h"20#include "gen1_2/internal.h"2122#if defined(__FreeBSD__)23#include <sys/rman.h>24#endif2526#define _IS_A(cfg, _struct) __builtin_types_compatible_p(typeof(cfg), \27struct _struct)28extern int _invalid_type;29#define _TRANS_CFG_CHECK(cfg) \30(__builtin_choose_expr(_IS_A(cfg, iwl_mac_cfg), \310, _invalid_type))32#define _ASSIGN_CFG(cfg) (_TRANS_CFG_CHECK(cfg) + (kernel_ulong_t)&(cfg))3334#define IWL_PCI_DEVICE(dev, subdev, cfg) \35.vendor = PCI_VENDOR_ID_INTEL, .device = (dev), \36.subvendor = PCI_ANY_ID, .subdevice = (subdev), \37.driver_data = _ASSIGN_CFG(cfg)3839/* Hardware specific file defines the PCI IDs table for that hardware module */40VISIBLE_IF_IWLWIFI_KUNIT const struct pci_device_id iwl_hw_card_ids[] = {41#if IS_ENABLED(CONFIG_IWLDVM)42{IWL_PCI_DEVICE(0x4232, 0x1201, iwl5000_mac_cfg)}, /* Mini Card */43{IWL_PCI_DEVICE(0x4232, 0x1301, iwl5000_mac_cfg)}, /* Half Mini Card */44{IWL_PCI_DEVICE(0x4232, 0x1204, iwl5000_mac_cfg)}, /* Mini Card */45{IWL_PCI_DEVICE(0x4232, 0x1304, iwl5000_mac_cfg)}, /* Half Mini Card */46{IWL_PCI_DEVICE(0x4232, 0x1205, iwl5000_mac_cfg)}, /* Mini Card */47{IWL_PCI_DEVICE(0x4232, 0x1305, iwl5000_mac_cfg)}, /* Half Mini Card */48{IWL_PCI_DEVICE(0x4232, 0x1206, iwl5000_mac_cfg)}, /* Mini Card */49{IWL_PCI_DEVICE(0x4232, 0x1306, iwl5000_mac_cfg)}, /* Half Mini Card */50{IWL_PCI_DEVICE(0x4232, 0x1221, iwl5000_mac_cfg)}, /* Mini Card */51{IWL_PCI_DEVICE(0x4232, 0x1321, iwl5000_mac_cfg)}, /* Half Mini Card */52{IWL_PCI_DEVICE(0x4232, 0x1224, iwl5000_mac_cfg)}, /* Mini Card */53{IWL_PCI_DEVICE(0x4232, 0x1324, iwl5000_mac_cfg)}, /* Half Mini Card */54{IWL_PCI_DEVICE(0x4232, 0x1225, iwl5000_mac_cfg)}, /* Mini Card */55{IWL_PCI_DEVICE(0x4232, 0x1325, iwl5000_mac_cfg)}, /* Half Mini Card */56{IWL_PCI_DEVICE(0x4232, 0x1226, iwl5000_mac_cfg)}, /* Mini Card */57{IWL_PCI_DEVICE(0x4232, 0x1326, iwl5000_mac_cfg)}, /* Half Mini Card */58{IWL_PCI_DEVICE(0x4237, 0x1211, iwl5000_mac_cfg)}, /* Mini Card */59{IWL_PCI_DEVICE(0x4237, 0x1311, iwl5000_mac_cfg)}, /* Half Mini Card */60{IWL_PCI_DEVICE(0x4237, 0x1214, iwl5000_mac_cfg)}, /* Mini Card */61{IWL_PCI_DEVICE(0x4237, 0x1314, iwl5000_mac_cfg)}, /* Half Mini Card */62{IWL_PCI_DEVICE(0x4237, 0x1215, iwl5000_mac_cfg)}, /* Mini Card */63{IWL_PCI_DEVICE(0x4237, 0x1315, iwl5000_mac_cfg)}, /* Half Mini Card */64{IWL_PCI_DEVICE(0x4237, 0x1216, iwl5000_mac_cfg)}, /* Mini Card */65{IWL_PCI_DEVICE(0x4237, 0x1316, iwl5000_mac_cfg)}, /* Half Mini Card */6667/* 5300 Series WiFi */68{IWL_PCI_DEVICE(0x4235, 0x1021, iwl5000_mac_cfg)}, /* Mini Card */69{IWL_PCI_DEVICE(0x4235, 0x1121, iwl5000_mac_cfg)}, /* Half Mini Card */70{IWL_PCI_DEVICE(0x4235, 0x1024, iwl5000_mac_cfg)}, /* Mini Card */71{IWL_PCI_DEVICE(0x4235, 0x1124, iwl5000_mac_cfg)}, /* Half Mini Card */72{IWL_PCI_DEVICE(0x4235, 0x1001, iwl5000_mac_cfg)}, /* Mini Card */73{IWL_PCI_DEVICE(0x4235, 0x1101, iwl5000_mac_cfg)}, /* Half Mini Card */74{IWL_PCI_DEVICE(0x4235, 0x1004, iwl5000_mac_cfg)}, /* Mini Card */75{IWL_PCI_DEVICE(0x4235, 0x1104, iwl5000_mac_cfg)}, /* Half Mini Card */76{IWL_PCI_DEVICE(0x4236, 0x1011, iwl5000_mac_cfg)}, /* Mini Card */77{IWL_PCI_DEVICE(0x4236, 0x1111, iwl5000_mac_cfg)}, /* Half Mini Card */78{IWL_PCI_DEVICE(0x4236, 0x1014, iwl5000_mac_cfg)}, /* Mini Card */79{IWL_PCI_DEVICE(0x4236, 0x1114, iwl5000_mac_cfg)}, /* Half Mini Card */8081/* 5350 Series WiFi/WiMax */82{IWL_PCI_DEVICE(0x423A, 0x1001, iwl5000_mac_cfg)}, /* Mini Card */83{IWL_PCI_DEVICE(0x423A, 0x1021, iwl5000_mac_cfg)}, /* Mini Card */84{IWL_PCI_DEVICE(0x423B, 0x1011, iwl5000_mac_cfg)}, /* Mini Card */8586/* 5150 Series Wifi/WiMax */87{IWL_PCI_DEVICE(0x423C, 0x1201, iwl5150_mac_cfg)}, /* Mini Card */88{IWL_PCI_DEVICE(0x423C, 0x1301, iwl5150_mac_cfg)}, /* Half Mini Card */89{IWL_PCI_DEVICE(0x423C, 0x1206, iwl5150_mac_cfg)}, /* Mini Card */90{IWL_PCI_DEVICE(0x423C, 0x1306, iwl5150_mac_cfg)}, /* Half Mini Card */91{IWL_PCI_DEVICE(0x423C, 0x1221, iwl5150_mac_cfg)}, /* Mini Card */92{IWL_PCI_DEVICE(0x423C, 0x1321, iwl5150_mac_cfg)}, /* Half Mini Card */93{IWL_PCI_DEVICE(0x423C, 0x1326, iwl5150_mac_cfg)}, /* Half Mini Card */9495{IWL_PCI_DEVICE(0x423D, 0x1211, iwl5150_mac_cfg)}, /* Mini Card */96{IWL_PCI_DEVICE(0x423D, 0x1311, iwl5150_mac_cfg)}, /* Half Mini Card */97{IWL_PCI_DEVICE(0x423D, 0x1216, iwl5150_mac_cfg)}, /* Mini Card */98{IWL_PCI_DEVICE(0x423D, 0x1316, iwl5150_mac_cfg)}, /* Half Mini Card */99100/* 6x00 Series */101{IWL_PCI_DEVICE(0x422B, 0x1101, iwl6000_mac_cfg)},102{IWL_PCI_DEVICE(0x422B, 0x1108, iwl6000_mac_cfg)},103{IWL_PCI_DEVICE(0x422B, 0x1121, iwl6000_mac_cfg)},104{IWL_PCI_DEVICE(0x422B, 0x1128, iwl6000_mac_cfg)},105{IWL_PCI_DEVICE(0x422C, 0x1301, iwl6000i_mac_cfg)},106{IWL_PCI_DEVICE(0x422C, 0x1306, iwl6000i_mac_cfg)},107{IWL_PCI_DEVICE(0x422C, 0x1307, iwl6000i_mac_cfg)},108{IWL_PCI_DEVICE(0x422C, 0x1321, iwl6000i_mac_cfg)},109{IWL_PCI_DEVICE(0x422C, 0x1326, iwl6000i_mac_cfg)},110{IWL_PCI_DEVICE(0x4238, 0x1111, iwl6000_mac_cfg)},111{IWL_PCI_DEVICE(0x4238, 0x1118, iwl6000_mac_cfg)},112{IWL_PCI_DEVICE(0x4239, 0x1311, iwl6000i_mac_cfg)},113{IWL_PCI_DEVICE(0x4239, 0x1316, iwl6000i_mac_cfg)},114115/* 6x05 Series */116{IWL_PCI_DEVICE(0x0082, 0x1301, iwl6005_mac_cfg)},117{IWL_PCI_DEVICE(0x0082, 0x1306, iwl6005_mac_cfg)},118{IWL_PCI_DEVICE(0x0082, 0x1307, iwl6005_mac_cfg)},119{IWL_PCI_DEVICE(0x0082, 0x1308, iwl6005_mac_cfg)},120{IWL_PCI_DEVICE(0x0082, 0x1321, iwl6005_mac_cfg)},121{IWL_PCI_DEVICE(0x0082, 0x1326, iwl6005_mac_cfg)},122{IWL_PCI_DEVICE(0x0082, 0x1328, iwl6005_mac_cfg)},123{IWL_PCI_DEVICE(0x0085, 0x1311, iwl6005_mac_cfg)},124{IWL_PCI_DEVICE(0x0085, 0x1318, iwl6005_mac_cfg)},125{IWL_PCI_DEVICE(0x0085, 0x1316, iwl6005_mac_cfg)},126{IWL_PCI_DEVICE(0x0082, 0xC020, iwl6005_mac_cfg)},127{IWL_PCI_DEVICE(0x0085, 0xC220, iwl6005_mac_cfg)},128{IWL_PCI_DEVICE(0x0085, 0xC228, iwl6005_mac_cfg)},129{IWL_PCI_DEVICE(0x0082, 0x4820, iwl6005_mac_cfg)},130{IWL_PCI_DEVICE(0x0082, 0x1304, iwl6005_mac_cfg)},/* low 5GHz active */131{IWL_PCI_DEVICE(0x0082, 0x1305, iwl6005_mac_cfg)},/* high 5GHz active */132133/* 1030/6x30 Series */134{IWL_PCI_DEVICE(0x008A, 0x5305, iwl6030_mac_cfg)},135{IWL_PCI_DEVICE(0x008A, 0x5307, iwl6030_mac_cfg)},136{IWL_PCI_DEVICE(0x008A, 0x5325, iwl6030_mac_cfg)},137{IWL_PCI_DEVICE(0x008A, 0x5327, iwl6030_mac_cfg)},138{IWL_PCI_DEVICE(0x008B, 0x5315, iwl6030_mac_cfg)},139{IWL_PCI_DEVICE(0x008B, 0x5317, iwl6030_mac_cfg)},140{IWL_PCI_DEVICE(0x0090, 0x5211, iwl6030_mac_cfg)},141{IWL_PCI_DEVICE(0x0090, 0x5215, iwl6030_mac_cfg)},142{IWL_PCI_DEVICE(0x0090, 0x5216, iwl6030_mac_cfg)},143{IWL_PCI_DEVICE(0x0091, 0x5201, iwl6030_mac_cfg)},144{IWL_PCI_DEVICE(0x0091, 0x5205, iwl6030_mac_cfg)},145{IWL_PCI_DEVICE(0x0091, 0x5206, iwl6030_mac_cfg)},146{IWL_PCI_DEVICE(0x0091, 0x5207, iwl6030_mac_cfg)},147{IWL_PCI_DEVICE(0x0091, 0x5221, iwl6030_mac_cfg)},148{IWL_PCI_DEVICE(0x0091, 0x5225, iwl6030_mac_cfg)},149{IWL_PCI_DEVICE(0x0091, 0x5226, iwl6030_mac_cfg)},150151/* 6x50 WiFi/WiMax Series */152{IWL_PCI_DEVICE(0x0087, 0x1301, iwl6050_mac_cfg)},153{IWL_PCI_DEVICE(0x0087, 0x1306, iwl6050_mac_cfg)},154{IWL_PCI_DEVICE(0x0087, 0x1321, iwl6050_mac_cfg)},155{IWL_PCI_DEVICE(0x0087, 0x1326, iwl6050_mac_cfg)},156{IWL_PCI_DEVICE(0x0089, 0x1311, iwl6050_mac_cfg)},157{IWL_PCI_DEVICE(0x0089, 0x1316, iwl6050_mac_cfg)},158159/* 6150 WiFi/WiMax Series */160{IWL_PCI_DEVICE(0x0885, 0x1305, iwl6150_mac_cfg)},161{IWL_PCI_DEVICE(0x0885, 0x1307, iwl6150_mac_cfg)},162{IWL_PCI_DEVICE(0x0885, 0x1325, iwl6150_mac_cfg)},163{IWL_PCI_DEVICE(0x0885, 0x1327, iwl6150_mac_cfg)},164{IWL_PCI_DEVICE(0x0886, 0x1315, iwl6150_mac_cfg)},165{IWL_PCI_DEVICE(0x0886, 0x1317, iwl6150_mac_cfg)},166167/* 1000 Series WiFi */168{IWL_PCI_DEVICE(0x0083, 0x1205, iwl1000_mac_cfg)},169{IWL_PCI_DEVICE(0x0083, 0x1305, iwl1000_mac_cfg)},170{IWL_PCI_DEVICE(0x0083, 0x1225, iwl1000_mac_cfg)},171{IWL_PCI_DEVICE(0x0083, 0x1325, iwl1000_mac_cfg)},172{IWL_PCI_DEVICE(0x0084, 0x1215, iwl1000_mac_cfg)},173{IWL_PCI_DEVICE(0x0084, 0x1315, iwl1000_mac_cfg)},174{IWL_PCI_DEVICE(0x0083, 0x1206, iwl1000_mac_cfg)},175{IWL_PCI_DEVICE(0x0083, 0x1306, iwl1000_mac_cfg)},176{IWL_PCI_DEVICE(0x0083, 0x1226, iwl1000_mac_cfg)},177{IWL_PCI_DEVICE(0x0083, 0x1326, iwl1000_mac_cfg)},178{IWL_PCI_DEVICE(0x0084, 0x1216, iwl1000_mac_cfg)},179{IWL_PCI_DEVICE(0x0084, 0x1316, iwl1000_mac_cfg)},180181/* 100 Series WiFi */182{IWL_PCI_DEVICE(0x08AE, 0x1005, iwl1000_mac_cfg)},183{IWL_PCI_DEVICE(0x08AE, 0x1007, iwl1000_mac_cfg)},184{IWL_PCI_DEVICE(0x08AF, 0x1015, iwl1000_mac_cfg)},185{IWL_PCI_DEVICE(0x08AF, 0x1017, iwl1000_mac_cfg)},186{IWL_PCI_DEVICE(0x08AE, 0x1025, iwl1000_mac_cfg)},187{IWL_PCI_DEVICE(0x08AE, 0x1027, iwl1000_mac_cfg)},188189/* 130 Series WiFi */190{IWL_PCI_DEVICE(0x0896, 0x5005, iwl6030_mac_cfg)},191{IWL_PCI_DEVICE(0x0896, 0x5007, iwl6030_mac_cfg)},192{IWL_PCI_DEVICE(0x0897, 0x5015, iwl6030_mac_cfg)},193{IWL_PCI_DEVICE(0x0897, 0x5017, iwl6030_mac_cfg)},194{IWL_PCI_DEVICE(0x0896, 0x5025, iwl6030_mac_cfg)},195{IWL_PCI_DEVICE(0x0896, 0x5027, iwl6030_mac_cfg)},196197/* 2x00 Series */198{IWL_PCI_DEVICE(0x0890, 0x4022, iwl2000_mac_cfg)},199{IWL_PCI_DEVICE(0x0891, 0x4222, iwl2000_mac_cfg)},200{IWL_PCI_DEVICE(0x0890, 0x4422, iwl2000_mac_cfg)},201{IWL_PCI_DEVICE(0x0890, 0x4822, iwl2000_mac_cfg)},202203/* 2x30 Series */204{IWL_PCI_DEVICE(0x0887, 0x4062, iwl2030_mac_cfg)},205{IWL_PCI_DEVICE(0x0888, 0x4262, iwl2030_mac_cfg)},206{IWL_PCI_DEVICE(0x0887, 0x4462, iwl2030_mac_cfg)},207208/* 6x35 Series */209{IWL_PCI_DEVICE(0x088E, 0x4060, iwl6030_mac_cfg)},210{IWL_PCI_DEVICE(0x088E, 0x406A, iwl6030_mac_cfg)},211{IWL_PCI_DEVICE(0x088F, 0x4260, iwl6030_mac_cfg)},212{IWL_PCI_DEVICE(0x088F, 0x426A, iwl6030_mac_cfg)},213{IWL_PCI_DEVICE(0x088E, 0x4460, iwl6030_mac_cfg)},214{IWL_PCI_DEVICE(0x088E, 0x446A, iwl6030_mac_cfg)},215{IWL_PCI_DEVICE(0x088E, 0x4860, iwl6030_mac_cfg)},216{IWL_PCI_DEVICE(0x088F, 0x5260, iwl6030_mac_cfg)},217218/* 105 Series */219{IWL_PCI_DEVICE(0x0894, 0x0022, iwl105_mac_cfg)},220{IWL_PCI_DEVICE(0x0895, 0x0222, iwl105_mac_cfg)},221{IWL_PCI_DEVICE(0x0894, 0x0422, iwl105_mac_cfg)},222{IWL_PCI_DEVICE(0x0894, 0x0822, iwl105_mac_cfg)},223224/* 135 Series */225{IWL_PCI_DEVICE(0x0892, 0x0062, iwl135_mac_cfg)},226{IWL_PCI_DEVICE(0x0893, 0x0262, iwl135_mac_cfg)},227{IWL_PCI_DEVICE(0x0892, 0x0462, iwl135_mac_cfg)},228#endif /* CONFIG_IWLDVM */229230#if IS_ENABLED(CONFIG_IWLMVM)231/* 7260 Series */232{IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7000_mac_cfg)},233{IWL_PCI_DEVICE(0x08B1, 0x4072, iwl7000_mac_cfg)},234{IWL_PCI_DEVICE(0x08B1, 0x4170, iwl7000_mac_cfg)},235{IWL_PCI_DEVICE(0x08B1, 0x4C60, iwl7000_mac_cfg)},236{IWL_PCI_DEVICE(0x08B1, 0x4C70, iwl7000_mac_cfg)},237{IWL_PCI_DEVICE(0x08B1, 0x4060, iwl7000_mac_cfg)},238{IWL_PCI_DEVICE(0x08B1, 0x406A, iwl7000_mac_cfg)},239{IWL_PCI_DEVICE(0x08B1, 0x4160, iwl7000_mac_cfg)},240{IWL_PCI_DEVICE(0x08B1, 0x4062, iwl7000_mac_cfg)},241{IWL_PCI_DEVICE(0x08B1, 0x4162, iwl7000_mac_cfg)},242{IWL_PCI_DEVICE(0x08B2, 0x4270, iwl7000_mac_cfg)},243{IWL_PCI_DEVICE(0x08B2, 0x4272, iwl7000_mac_cfg)},244{IWL_PCI_DEVICE(0x08B2, 0x4260, iwl7000_mac_cfg)},245{IWL_PCI_DEVICE(0x08B2, 0x426A, iwl7000_mac_cfg)},246{IWL_PCI_DEVICE(0x08B2, 0x4262, iwl7000_mac_cfg)},247{IWL_PCI_DEVICE(0x08B1, 0x4470, iwl7000_mac_cfg)},248{IWL_PCI_DEVICE(0x08B1, 0x4472, iwl7000_mac_cfg)},249{IWL_PCI_DEVICE(0x08B1, 0x4460, iwl7000_mac_cfg)},250{IWL_PCI_DEVICE(0x08B1, 0x446A, iwl7000_mac_cfg)},251{IWL_PCI_DEVICE(0x08B1, 0x4462, iwl7000_mac_cfg)},252{IWL_PCI_DEVICE(0x08B1, 0x4870, iwl7000_mac_cfg)},253{IWL_PCI_DEVICE(0x08B1, 0x486E, iwl7000_mac_cfg)},254{IWL_PCI_DEVICE(0x08B1, 0x4A70, iwl7000_mac_cfg)},255{IWL_PCI_DEVICE(0x08B1, 0x4A6E, iwl7000_mac_cfg)},256{IWL_PCI_DEVICE(0x08B1, 0x4A6C, iwl7000_mac_cfg)},257{IWL_PCI_DEVICE(0x08B1, 0x4570, iwl7000_mac_cfg)},258{IWL_PCI_DEVICE(0x08B1, 0x4560, iwl7000_mac_cfg)},259{IWL_PCI_DEVICE(0x08B2, 0x4370, iwl7000_mac_cfg)},260{IWL_PCI_DEVICE(0x08B2, 0x4360, iwl7000_mac_cfg)},261{IWL_PCI_DEVICE(0x08B1, 0x5070, iwl7000_mac_cfg)},262{IWL_PCI_DEVICE(0x08B1, 0x5072, iwl7000_mac_cfg)},263{IWL_PCI_DEVICE(0x08B1, 0x5170, iwl7000_mac_cfg)},264{IWL_PCI_DEVICE(0x08B1, 0x5770, iwl7000_mac_cfg)},265{IWL_PCI_DEVICE(0x08B1, 0x4020, iwl7000_mac_cfg)},266{IWL_PCI_DEVICE(0x08B1, 0x402A, iwl7000_mac_cfg)},267{IWL_PCI_DEVICE(0x08B2, 0x4220, iwl7000_mac_cfg)},268{IWL_PCI_DEVICE(0x08B1, 0x4420, iwl7000_mac_cfg)},269{IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7000_mac_cfg)},270{IWL_PCI_DEVICE(0x08B1, 0xC072, iwl7000_mac_cfg)},271{IWL_PCI_DEVICE(0x08B1, 0xC170, iwl7000_mac_cfg)},272{IWL_PCI_DEVICE(0x08B1, 0xC060, iwl7000_mac_cfg)},273{IWL_PCI_DEVICE(0x08B1, 0xC06A, iwl7000_mac_cfg)},274{IWL_PCI_DEVICE(0x08B1, 0xC160, iwl7000_mac_cfg)},275{IWL_PCI_DEVICE(0x08B1, 0xC062, iwl7000_mac_cfg)},276{IWL_PCI_DEVICE(0x08B1, 0xC162, iwl7000_mac_cfg)},277{IWL_PCI_DEVICE(0x08B1, 0xC770, iwl7000_mac_cfg)},278{IWL_PCI_DEVICE(0x08B1, 0xC760, iwl7000_mac_cfg)},279{IWL_PCI_DEVICE(0x08B2, 0xC270, iwl7000_mac_cfg)},280{IWL_PCI_DEVICE(0x08B1, 0xCC70, iwl7000_mac_cfg)},281{IWL_PCI_DEVICE(0x08B1, 0xCC60, iwl7000_mac_cfg)},282{IWL_PCI_DEVICE(0x08B2, 0xC272, iwl7000_mac_cfg)},283{IWL_PCI_DEVICE(0x08B2, 0xC260, iwl7000_mac_cfg)},284{IWL_PCI_DEVICE(0x08B2, 0xC26A, iwl7000_mac_cfg)},285{IWL_PCI_DEVICE(0x08B2, 0xC262, iwl7000_mac_cfg)},286{IWL_PCI_DEVICE(0x08B1, 0xC470, iwl7000_mac_cfg)},287{IWL_PCI_DEVICE(0x08B1, 0xC472, iwl7000_mac_cfg)},288{IWL_PCI_DEVICE(0x08B1, 0xC460, iwl7000_mac_cfg)},289{IWL_PCI_DEVICE(0x08B1, 0xC462, iwl7000_mac_cfg)},290{IWL_PCI_DEVICE(0x08B1, 0xC570, iwl7000_mac_cfg)},291{IWL_PCI_DEVICE(0x08B1, 0xC560, iwl7000_mac_cfg)},292{IWL_PCI_DEVICE(0x08B2, 0xC370, iwl7000_mac_cfg)},293{IWL_PCI_DEVICE(0x08B1, 0xC360, iwl7000_mac_cfg)},294{IWL_PCI_DEVICE(0x08B1, 0xC020, iwl7000_mac_cfg)},295{IWL_PCI_DEVICE(0x08B1, 0xC02A, iwl7000_mac_cfg)},296{IWL_PCI_DEVICE(0x08B2, 0xC220, iwl7000_mac_cfg)},297{IWL_PCI_DEVICE(0x08B1, 0xC420, iwl7000_mac_cfg)},298299/* 3160 Series */300{IWL_PCI_DEVICE(0x08B3, 0x0070, iwl7000_mac_cfg)},301{IWL_PCI_DEVICE(0x08B3, 0x0072, iwl7000_mac_cfg)},302{IWL_PCI_DEVICE(0x08B3, 0x0170, iwl7000_mac_cfg)},303{IWL_PCI_DEVICE(0x08B3, 0x0172, iwl7000_mac_cfg)},304{IWL_PCI_DEVICE(0x08B3, 0x0060, iwl7000_mac_cfg)},305{IWL_PCI_DEVICE(0x08B3, 0x0062, iwl7000_mac_cfg)},306{IWL_PCI_DEVICE(0x08B4, 0x0270, iwl7000_mac_cfg)},307{IWL_PCI_DEVICE(0x08B4, 0x0272, iwl7000_mac_cfg)},308{IWL_PCI_DEVICE(0x08B3, 0x0470, iwl7000_mac_cfg)},309{IWL_PCI_DEVICE(0x08B3, 0x0472, iwl7000_mac_cfg)},310{IWL_PCI_DEVICE(0x08B4, 0x0370, iwl7000_mac_cfg)},311{IWL_PCI_DEVICE(0x08B3, 0x8070, iwl7000_mac_cfg)},312{IWL_PCI_DEVICE(0x08B3, 0x8072, iwl7000_mac_cfg)},313{IWL_PCI_DEVICE(0x08B3, 0x8170, iwl7000_mac_cfg)},314{IWL_PCI_DEVICE(0x08B3, 0x8172, iwl7000_mac_cfg)},315{IWL_PCI_DEVICE(0x08B3, 0x8060, iwl7000_mac_cfg)},316{IWL_PCI_DEVICE(0x08B3, 0x8062, iwl7000_mac_cfg)},317{IWL_PCI_DEVICE(0x08B4, 0x8270, iwl7000_mac_cfg)},318{IWL_PCI_DEVICE(0x08B4, 0x8370, iwl7000_mac_cfg)},319{IWL_PCI_DEVICE(0x08B4, 0x8272, iwl7000_mac_cfg)},320{IWL_PCI_DEVICE(0x08B3, 0x8470, iwl7000_mac_cfg)},321{IWL_PCI_DEVICE(0x08B3, 0x8570, iwl7000_mac_cfg)},322{IWL_PCI_DEVICE(0x08B3, 0x1070, iwl7000_mac_cfg)},323{IWL_PCI_DEVICE(0x08B3, 0x1170, iwl7000_mac_cfg)},324325/* 3165 Series */326{IWL_PCI_DEVICE(0x3165, 0x4010, iwl7000_mac_cfg)},327{IWL_PCI_DEVICE(0x3165, 0x4012, iwl7000_mac_cfg)},328{IWL_PCI_DEVICE(0x3166, 0x4212, iwl7000_mac_cfg)},329{IWL_PCI_DEVICE(0x3165, 0x4410, iwl7000_mac_cfg)},330{IWL_PCI_DEVICE(0x3165, 0x4510, iwl7000_mac_cfg)},331{IWL_PCI_DEVICE(0x3165, 0x4110, iwl7000_mac_cfg)},332{IWL_PCI_DEVICE(0x3166, 0x4310, iwl7000_mac_cfg)},333{IWL_PCI_DEVICE(0x3166, 0x4210, iwl7000_mac_cfg)},334{IWL_PCI_DEVICE(0x3165, 0x8010, iwl7000_mac_cfg)},335{IWL_PCI_DEVICE(0x3165, 0x8110, iwl7000_mac_cfg)},336337/* 3168 Series */338{IWL_PCI_DEVICE(0x24FB, 0x2010, iwl7000_mac_cfg)},339{IWL_PCI_DEVICE(0x24FB, 0x2110, iwl7000_mac_cfg)},340{IWL_PCI_DEVICE(0x24FB, 0x2050, iwl7000_mac_cfg)},341{IWL_PCI_DEVICE(0x24FB, 0x2150, iwl7000_mac_cfg)},342{IWL_PCI_DEVICE(0x24FB, 0x0000, iwl7000_mac_cfg)},343344/* 7265 Series */345{IWL_PCI_DEVICE(0x095A, 0x5010, iwl7000_mac_cfg)},346{IWL_PCI_DEVICE(0x095A, 0x5110, iwl7000_mac_cfg)},347{IWL_PCI_DEVICE(0x095A, 0x5100, iwl7000_mac_cfg)},348{IWL_PCI_DEVICE(0x095B, 0x5310, iwl7000_mac_cfg)},349{IWL_PCI_DEVICE(0x095B, 0x5302, iwl7000_mac_cfg)},350{IWL_PCI_DEVICE(0x095B, 0x5210, iwl7000_mac_cfg)},351{IWL_PCI_DEVICE(0x095A, 0x5C10, iwl7000_mac_cfg)},352{IWL_PCI_DEVICE(0x095A, 0x5012, iwl7000_mac_cfg)},353{IWL_PCI_DEVICE(0x095A, 0x5412, iwl7000_mac_cfg)},354{IWL_PCI_DEVICE(0x095A, 0x5410, iwl7000_mac_cfg)},355{IWL_PCI_DEVICE(0x095A, 0x5510, iwl7000_mac_cfg)},356{IWL_PCI_DEVICE(0x095A, 0x5400, iwl7000_mac_cfg)},357{IWL_PCI_DEVICE(0x095A, 0x1010, iwl7000_mac_cfg)},358{IWL_PCI_DEVICE(0x095A, 0x5000, iwl7000_mac_cfg)},359{IWL_PCI_DEVICE(0x095A, 0x500A, iwl7000_mac_cfg)},360{IWL_PCI_DEVICE(0x095B, 0x5200, iwl7000_mac_cfg)},361{IWL_PCI_DEVICE(0x095A, 0x5002, iwl7000_mac_cfg)},362{IWL_PCI_DEVICE(0x095A, 0x5102, iwl7000_mac_cfg)},363{IWL_PCI_DEVICE(0x095B, 0x5202, iwl7000_mac_cfg)},364{IWL_PCI_DEVICE(0x095A, 0x9010, iwl7000_mac_cfg)},365{IWL_PCI_DEVICE(0x095A, 0x9012, iwl7000_mac_cfg)},366{IWL_PCI_DEVICE(0x095A, 0x900A, iwl7000_mac_cfg)},367{IWL_PCI_DEVICE(0x095A, 0x9110, iwl7000_mac_cfg)},368{IWL_PCI_DEVICE(0x095A, 0x9112, iwl7000_mac_cfg)},369{IWL_PCI_DEVICE(0x095B, 0x9210, iwl7000_mac_cfg)},370{IWL_PCI_DEVICE(0x095B, 0x9200, iwl7000_mac_cfg)},371{IWL_PCI_DEVICE(0x095A, 0x9510, iwl7000_mac_cfg)},372{IWL_PCI_DEVICE(0x095B, 0x9310, iwl7000_mac_cfg)},373{IWL_PCI_DEVICE(0x095A, 0x9410, iwl7000_mac_cfg)},374{IWL_PCI_DEVICE(0x095A, 0x5020, iwl7000_mac_cfg)},375{IWL_PCI_DEVICE(0x095A, 0x502A, iwl7000_mac_cfg)},376{IWL_PCI_DEVICE(0x095A, 0x5420, iwl7000_mac_cfg)},377{IWL_PCI_DEVICE(0x095A, 0x5090, iwl7000_mac_cfg)},378{IWL_PCI_DEVICE(0x095A, 0x5190, iwl7000_mac_cfg)},379{IWL_PCI_DEVICE(0x095A, 0x5590, iwl7000_mac_cfg)},380{IWL_PCI_DEVICE(0x095B, 0x5290, iwl7000_mac_cfg)},381{IWL_PCI_DEVICE(0x095A, 0x5490, iwl7000_mac_cfg)},382{IWL_PCI_DEVICE(0x095A, 0x5F10, iwl7000_mac_cfg)},383{IWL_PCI_DEVICE(0x095B, 0x5212, iwl7000_mac_cfg)},384{IWL_PCI_DEVICE(0x095B, 0x520A, iwl7000_mac_cfg)},385{IWL_PCI_DEVICE(0x095A, 0x9000, iwl7000_mac_cfg)},386{IWL_PCI_DEVICE(0x095A, 0x9400, iwl7000_mac_cfg)},387{IWL_PCI_DEVICE(0x095A, 0x9E10, iwl7000_mac_cfg)},388389/* 8000 Series */390{IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8000_mac_cfg)},391{IWL_PCI_DEVICE(0x24F3, 0x1010, iwl8000_mac_cfg)},392{IWL_PCI_DEVICE(0x24F3, 0x10B0, iwl8000_mac_cfg)},393{IWL_PCI_DEVICE(0x24F3, 0x0130, iwl8000_mac_cfg)},394{IWL_PCI_DEVICE(0x24F3, 0x1130, iwl8000_mac_cfg)},395{IWL_PCI_DEVICE(0x24F3, 0x0132, iwl8000_mac_cfg)},396{IWL_PCI_DEVICE(0x24F3, 0x1132, iwl8000_mac_cfg)},397{IWL_PCI_DEVICE(0x24F3, 0x0110, iwl8000_mac_cfg)},398{IWL_PCI_DEVICE(0x24F3, 0x01F0, iwl8000_mac_cfg)},399{IWL_PCI_DEVICE(0x24F3, 0x0012, iwl8000_mac_cfg)},400{IWL_PCI_DEVICE(0x24F3, 0x1012, iwl8000_mac_cfg)},401{IWL_PCI_DEVICE(0x24F3, 0x1110, iwl8000_mac_cfg)},402{IWL_PCI_DEVICE(0x24F3, 0x0050, iwl8000_mac_cfg)},403{IWL_PCI_DEVICE(0x24F3, 0x0250, iwl8000_mac_cfg)},404{IWL_PCI_DEVICE(0x24F3, 0x1050, iwl8000_mac_cfg)},405{IWL_PCI_DEVICE(0x24F3, 0x0150, iwl8000_mac_cfg)},406{IWL_PCI_DEVICE(0x24F3, 0x1150, iwl8000_mac_cfg)},407{IWL_PCI_DEVICE(0x24F4, 0x0030, iwl8000_mac_cfg)},408{IWL_PCI_DEVICE(0x24F4, 0x1030, iwl8000_mac_cfg)},409{IWL_PCI_DEVICE(0x24F3, 0xC010, iwl8000_mac_cfg)},410{IWL_PCI_DEVICE(0x24F3, 0xC110, iwl8000_mac_cfg)},411{IWL_PCI_DEVICE(0x24F3, 0xD010, iwl8000_mac_cfg)},412{IWL_PCI_DEVICE(0x24F3, 0xC050, iwl8000_mac_cfg)},413{IWL_PCI_DEVICE(0x24F3, 0xD050, iwl8000_mac_cfg)},414{IWL_PCI_DEVICE(0x24F3, 0xD0B0, iwl8000_mac_cfg)},415{IWL_PCI_DEVICE(0x24F3, 0xB0B0, iwl8000_mac_cfg)},416{IWL_PCI_DEVICE(0x24F3, 0x8010, iwl8000_mac_cfg)},417{IWL_PCI_DEVICE(0x24F3, 0x8110, iwl8000_mac_cfg)},418{IWL_PCI_DEVICE(0x24F3, 0x9010, iwl8000_mac_cfg)},419{IWL_PCI_DEVICE(0x24F3, 0x9110, iwl8000_mac_cfg)},420{IWL_PCI_DEVICE(0x24F4, 0x8030, iwl8000_mac_cfg)},421{IWL_PCI_DEVICE(0x24F4, 0x9030, iwl8000_mac_cfg)},422{IWL_PCI_DEVICE(0x24F4, 0xC030, iwl8000_mac_cfg)},423{IWL_PCI_DEVICE(0x24F4, 0xD030, iwl8000_mac_cfg)},424{IWL_PCI_DEVICE(0x24F3, 0x8130, iwl8000_mac_cfg)},425{IWL_PCI_DEVICE(0x24F3, 0x9130, iwl8000_mac_cfg)},426{IWL_PCI_DEVICE(0x24F3, 0x8132, iwl8000_mac_cfg)},427{IWL_PCI_DEVICE(0x24F3, 0x9132, iwl8000_mac_cfg)},428{IWL_PCI_DEVICE(0x24F3, 0x8050, iwl8000_mac_cfg)},429{IWL_PCI_DEVICE(0x24F3, 0x8150, iwl8000_mac_cfg)},430{IWL_PCI_DEVICE(0x24F3, 0x9050, iwl8000_mac_cfg)},431{IWL_PCI_DEVICE(0x24F3, 0x9150, iwl8000_mac_cfg)},432{IWL_PCI_DEVICE(0x24F3, 0x0004, iwl8000_mac_cfg)},433{IWL_PCI_DEVICE(0x24F3, 0x0044, iwl8000_mac_cfg)},434{IWL_PCI_DEVICE(0x24F5, 0x0010, iwl8000_mac_cfg)},435{IWL_PCI_DEVICE(0x24F6, 0x0030, iwl8000_mac_cfg)},436{IWL_PCI_DEVICE(0x24F3, 0x0810, iwl8000_mac_cfg)},437{IWL_PCI_DEVICE(0x24F3, 0x0910, iwl8000_mac_cfg)},438{IWL_PCI_DEVICE(0x24F3, 0x0850, iwl8000_mac_cfg)},439{IWL_PCI_DEVICE(0x24F3, 0x0950, iwl8000_mac_cfg)},440{IWL_PCI_DEVICE(0x24F3, 0x0930, iwl8000_mac_cfg)},441{IWL_PCI_DEVICE(0x24F3, 0x0000, iwl8000_mac_cfg)},442{IWL_PCI_DEVICE(0x24F3, 0x4010, iwl8000_mac_cfg)},443{IWL_PCI_DEVICE(0x24F3, 0xC030, iwl8000_mac_cfg)},444{IWL_PCI_DEVICE(0x24F3, 0xD030, iwl8000_mac_cfg)},445{IWL_PCI_DEVICE(0x24FD, 0x0010, iwl8000_mac_cfg)},446{IWL_PCI_DEVICE(0x24FD, 0x0110, iwl8000_mac_cfg)},447{IWL_PCI_DEVICE(0x24FD, 0x1110, iwl8000_mac_cfg)},448{IWL_PCI_DEVICE(0x24FD, 0x1130, iwl8000_mac_cfg)},449{IWL_PCI_DEVICE(0x24FD, 0x0130, iwl8000_mac_cfg)},450{IWL_PCI_DEVICE(0x24FD, 0x1010, iwl8000_mac_cfg)},451{IWL_PCI_DEVICE(0x24FD, 0x10D0, iwl8000_mac_cfg)},452{IWL_PCI_DEVICE(0x24FD, 0x0050, iwl8000_mac_cfg)},453{IWL_PCI_DEVICE(0x24FD, 0x0150, iwl8000_mac_cfg)},454{IWL_PCI_DEVICE(0x24FD, 0x9010, iwl8000_mac_cfg)},455{IWL_PCI_DEVICE(0x24FD, 0x8110, iwl8000_mac_cfg)},456{IWL_PCI_DEVICE(0x24FD, 0x8050, iwl8000_mac_cfg)},457{IWL_PCI_DEVICE(0x24FD, 0x8010, iwl8000_mac_cfg)},458{IWL_PCI_DEVICE(0x24FD, 0x0810, iwl8000_mac_cfg)},459{IWL_PCI_DEVICE(0x24FD, 0x9110, iwl8000_mac_cfg)},460{IWL_PCI_DEVICE(0x24FD, 0x8130, iwl8000_mac_cfg)},461{IWL_PCI_DEVICE(0x24FD, 0x0910, iwl8000_mac_cfg)},462{IWL_PCI_DEVICE(0x24FD, 0x0930, iwl8000_mac_cfg)},463{IWL_PCI_DEVICE(0x24FD, 0x0950, iwl8000_mac_cfg)},464{IWL_PCI_DEVICE(0x24FD, 0x0850, iwl8000_mac_cfg)},465{IWL_PCI_DEVICE(0x24FD, 0x1014, iwl8000_mac_cfg)},466{IWL_PCI_DEVICE(0x24FD, 0x3E02, iwl8000_mac_cfg)},467{IWL_PCI_DEVICE(0x24FD, 0x3E01, iwl8000_mac_cfg)},468{IWL_PCI_DEVICE(0x24FD, 0x1012, iwl8000_mac_cfg)},469{IWL_PCI_DEVICE(0x24FD, 0x0012, iwl8000_mac_cfg)},470{IWL_PCI_DEVICE(0x24FD, 0x0014, iwl8000_mac_cfg)},471{IWL_PCI_DEVICE(0x24FD, 0x9074, iwl8000_mac_cfg)},472{IWL_PCI_DEVICE(0x24FD, 0x1431, iwl8000_mac_cfg)},473{IWL_PCI_DEVICE(0x24FD, 0x1432, iwl8000_mac_cfg)},474475/* 9000 Series */476{IWL_PCI_DEVICE(0x2526, PCI_ANY_ID, iwl9000_mac_cfg)},477{IWL_PCI_DEVICE(0x271B, PCI_ANY_ID, iwl9000_mac_cfg)},478{IWL_PCI_DEVICE(0x271C, PCI_ANY_ID, iwl9000_mac_cfg)},479{IWL_PCI_DEVICE(0x30DC, PCI_ANY_ID, iwl9560_long_latency_mac_cfg)},480{IWL_PCI_DEVICE(0x31DC, PCI_ANY_ID, iwl9560_shared_clk_mac_cfg)},481{IWL_PCI_DEVICE(0x9DF0, PCI_ANY_ID, iwl9560_mac_cfg)},482{IWL_PCI_DEVICE(0xA370, PCI_ANY_ID, iwl9560_mac_cfg)},483484/* Qu devices */485{IWL_PCI_DEVICE(0x02F0, PCI_ANY_ID, iwl_qu_mac_cfg)},486{IWL_PCI_DEVICE(0x06F0, PCI_ANY_ID, iwl_qu_mac_cfg)},487488{IWL_PCI_DEVICE(0x34F0, PCI_ANY_ID, iwl_qu_medium_latency_mac_cfg)},489{IWL_PCI_DEVICE(0x3DF0, PCI_ANY_ID, iwl_qu_medium_latency_mac_cfg)},490{IWL_PCI_DEVICE(0x4DF0, PCI_ANY_ID, iwl_qu_medium_latency_mac_cfg)},491492{IWL_PCI_DEVICE(0x43F0, PCI_ANY_ID, iwl_qu_long_latency_mac_cfg)},493{IWL_PCI_DEVICE(0xA0F0, PCI_ANY_ID, iwl_qu_long_latency_mac_cfg)},494495{IWL_PCI_DEVICE(0x2723, PCI_ANY_ID, iwl_ax200_mac_cfg)},496497/* Ty/So devices */498{IWL_PCI_DEVICE(0x2725, PCI_ANY_ID, iwl_ty_mac_cfg)},499{IWL_PCI_DEVICE(0x7A70, PCI_ANY_ID, iwl_so_long_latency_imr_mac_cfg)},500{IWL_PCI_DEVICE(0x7AF0, PCI_ANY_ID, iwl_so_mac_cfg)},501{IWL_PCI_DEVICE(0x51F0, PCI_ANY_ID, iwl_so_long_latency_mac_cfg)},502{IWL_PCI_DEVICE(0x51F1, PCI_ANY_ID, iwl_so_long_latency_imr_mac_cfg)},503{IWL_PCI_DEVICE(0x54F0, PCI_ANY_ID, iwl_so_long_latency_mac_cfg)},504{IWL_PCI_DEVICE(0x7F70, PCI_ANY_ID, iwl_so_mac_cfg)},505506/* Ma devices */507{IWL_PCI_DEVICE(0x2729, PCI_ANY_ID, iwl_ma_mac_cfg)},508{IWL_PCI_DEVICE(0x7E40, PCI_ANY_ID, iwl_ma_mac_cfg)},509#endif /* CONFIG_IWLMVM */510#if IS_ENABLED(CONFIG_IWLMVM) || IS_ENABLED(CONFIG_IWLMLD)511/* Bz devices */512{IWL_PCI_DEVICE(0x272b, PCI_ANY_ID, iwl_gl_mac_cfg)},513{IWL_PCI_DEVICE(0xA840, 0x0000, iwl_bz_mac_cfg)},514{IWL_PCI_DEVICE(0xA840, 0x0090, iwl_bz_mac_cfg)},515{IWL_PCI_DEVICE(0xA840, 0x0094, iwl_bz_mac_cfg)},516{IWL_PCI_DEVICE(0xA840, 0x0098, iwl_bz_mac_cfg)},517{IWL_PCI_DEVICE(0xA840, 0x009C, iwl_bz_mac_cfg)},518{IWL_PCI_DEVICE(0xA840, 0x00C0, iwl_bz_mac_cfg)},519{IWL_PCI_DEVICE(0xA840, 0x00C4, iwl_bz_mac_cfg)},520{IWL_PCI_DEVICE(0xA840, 0x00E0, iwl_bz_mac_cfg)},521{IWL_PCI_DEVICE(0xA840, 0x00E4, iwl_bz_mac_cfg)},522{IWL_PCI_DEVICE(0xA840, 0x00E8, iwl_bz_mac_cfg)},523{IWL_PCI_DEVICE(0xA840, 0x00EC, iwl_bz_mac_cfg)},524{IWL_PCI_DEVICE(0xA840, 0x0100, iwl_bz_mac_cfg)},525{IWL_PCI_DEVICE(0xA840, 0x0110, iwl_bz_mac_cfg)},526{IWL_PCI_DEVICE(0xA840, 0x0114, iwl_bz_mac_cfg)},527{IWL_PCI_DEVICE(0xA840, 0x0118, iwl_bz_mac_cfg)},528{IWL_PCI_DEVICE(0xA840, 0x011C, iwl_bz_mac_cfg)},529{IWL_PCI_DEVICE(0xA840, 0x0310, iwl_bz_mac_cfg)},530{IWL_PCI_DEVICE(0xA840, 0x0314, iwl_bz_mac_cfg)},531{IWL_PCI_DEVICE(0xA840, 0x0510, iwl_bz_mac_cfg)},532{IWL_PCI_DEVICE(0xA840, 0x0A10, iwl_bz_mac_cfg)},533{IWL_PCI_DEVICE(0xA840, 0x1671, iwl_bz_mac_cfg)},534{IWL_PCI_DEVICE(0xA840, 0x1672, iwl_bz_mac_cfg)},535{IWL_PCI_DEVICE(0xA840, 0x1771, iwl_bz_mac_cfg)},536{IWL_PCI_DEVICE(0xA840, 0x1772, iwl_bz_mac_cfg)},537{IWL_PCI_DEVICE(0xA840, 0x1791, iwl_bz_mac_cfg)},538{IWL_PCI_DEVICE(0xA840, 0x1792, iwl_bz_mac_cfg)},539{IWL_PCI_DEVICE(0xA840, 0x4090, iwl_bz_mac_cfg)},540{IWL_PCI_DEVICE(0xA840, 0x40C4, iwl_bz_mac_cfg)},541{IWL_PCI_DEVICE(0xA840, 0x40E0, iwl_bz_mac_cfg)},542{IWL_PCI_DEVICE(0xA840, 0x4110, iwl_bz_mac_cfg)},543{IWL_PCI_DEVICE(0xA840, 0x4314, iwl_bz_mac_cfg)},544{IWL_PCI_DEVICE(0xA840, 0x1775, iwl_bz_mac_cfg)},545{IWL_PCI_DEVICE(0xA840, 0x1776, iwl_bz_mac_cfg)},546{IWL_PCI_DEVICE(0x7740, PCI_ANY_ID, iwl_bz_mac_cfg)},547{IWL_PCI_DEVICE(0x4D40, PCI_ANY_ID, iwl_bz_mac_cfg)},548549/* Sc devices */550{IWL_PCI_DEVICE(0xE440, PCI_ANY_ID, iwl_sc_mac_cfg)},551{IWL_PCI_DEVICE(0xE340, PCI_ANY_ID, iwl_sc_mac_cfg)},552{IWL_PCI_DEVICE(0xD340, PCI_ANY_ID, iwl_sc_mac_cfg)},553{IWL_PCI_DEVICE(0x6E70, PCI_ANY_ID, iwl_sc_mac_cfg)},554{IWL_PCI_DEVICE(0xD240, PCI_ANY_ID, iwl_sc_mac_cfg)},555#endif /* CONFIG_IWLMVM || CONFIG_IWLMLD */556557{0}558};559MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);560EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_hw_card_ids);561562#define _IWL_DEV_INFO(_cfg, _name, ...) { \563.cfg = &_cfg, \564.name = _name, \565.device = IWL_CFG_ANY, \566.subdevice = IWL_CFG_ANY, \567.subdevice_m_h = 15, \568__VA_ARGS__ \569}570#define IWL_DEV_INFO(_cfg, _name, ...) \571_IWL_DEV_INFO(_cfg, _name, __VA_ARGS__)572573#define DEVICE(n) .device = (n)574#define SUBDEV(n) .subdevice = (n)575#define _LOWEST_BIT(n) (__builtin_ffs(n) - 1)576#define _BIT_ABOVE_MASK(n) ((n) + (1 << _LOWEST_BIT(n)))577#define _HIGHEST_BIT(n) (__builtin_ffs(_BIT_ABOVE_MASK(n)) - 2)578#define _IS_POW2(n) (((n) & ((n) - 1)) == 0)579#define _IS_CONTIG(n) _IS_POW2(_BIT_ABOVE_MASK(n))580#define _CHECK_MASK(m) BUILD_BUG_ON_ZERO(!_IS_CONTIG(m))581#define SUBDEV_MASKED(v, m) .subdevice = (v) + _CHECK_MASK(m), \582.subdevice_m_l = _LOWEST_BIT(m), \583.subdevice_m_h = _HIGHEST_BIT(m)584#define RF_TYPE(n) .match_rf_type = 1, \585.rf_type = IWL_CFG_RF_TYPE_##n586#define DISCRETE .match_discrete = 1, \587.discrete = 1588#define INTEGRATED .match_discrete = 1, \589.discrete = 0590#define RF_ID(n) .match_rf_id = 1, \591.rf_id = IWL_CFG_RF_ID_##n592#define NO_CDB .match_cdb = 1, .cdb = 0593#define CDB .match_cdb = 1, .cdb = 1594#define BW_NOT_LIMITED .match_bw_limit = 1, .bw_limit = 0595#define BW_LIMITED .match_bw_limit = 1, .bw_limit = 1596597VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = {598#if IS_ENABLED(CONFIG_IWLDVM)599IWL_DEV_INFO(iwl5100_n_cfg, iwl5100_agn_name,600DEVICE(0x4232), SUBDEV_MASKED(0x1, 0xF)),601IWL_DEV_INFO(iwl5100_n_cfg, iwl5100_agn_name,602DEVICE(0x4232), SUBDEV_MASKED(0x4, 0xF)),603IWL_DEV_INFO(iwl5100_n_cfg, iwl5100_bgn_name,604DEVICE(0x4232), SUBDEV_MASKED(0x5, 0xF)),605IWL_DEV_INFO(iwl5100_abg_cfg, iwl5100_abg_name,606DEVICE(0x4232), SUBDEV_MASKED(0x6, 0xF)),607IWL_DEV_INFO(iwl5100_n_cfg, iwl5100_agn_name,608DEVICE(0x4237), SUBDEV_MASKED(0x1, 0xF)),609IWL_DEV_INFO(iwl5100_n_cfg, iwl5100_agn_name,610DEVICE(0x4237), SUBDEV_MASKED(0x4, 0xF)),611IWL_DEV_INFO(iwl5100_n_cfg, iwl5100_bgn_name,612DEVICE(0x4237), SUBDEV_MASKED(0x5, 0xF)),613IWL_DEV_INFO(iwl5100_abg_cfg, iwl5100_abg_name,614DEVICE(0x4237), SUBDEV_MASKED(0x6, 0xF)),615616/* 5300 Series WiFi */617IWL_DEV_INFO(iwl5300_agn_cfg, iwl5300_agn_name,618DEVICE(0x4235), SUBDEV_MASKED(0x1, 0xF)),619IWL_DEV_INFO(iwl5300_agn_cfg, iwl5300_agn_name,620DEVICE(0x4235), SUBDEV_MASKED(0x4, 0xF)),621IWL_DEV_INFO(iwl5300_agn_cfg, iwl5300_agn_name,622DEVICE(0x4236), SUBDEV_MASKED(0x1, 0xF)),623IWL_DEV_INFO(iwl5300_agn_cfg, iwl5300_agn_name,624DEVICE(0x4236), SUBDEV_MASKED(0x4, 0xF)),625626/* 5350 Series WiFi/WiMax */627IWL_DEV_INFO(iwl5350_agn_cfg, iwl5350_agn_name,628DEVICE(0x423A)),629IWL_DEV_INFO(iwl5350_agn_cfg, iwl5350_agn_name,630DEVICE(0x423B)),631632/* 5150 Series Wifi/WiMax */633IWL_DEV_INFO(iwl5150_agn_cfg, iwl5150_agn_name,634DEVICE(0x423C), SUBDEV_MASKED(0x1, 0xF)),635IWL_DEV_INFO(iwl5150_abg_cfg, iwl5150_abg_name,636DEVICE(0x423C), SUBDEV_MASKED(0x6, 0xF)),637638IWL_DEV_INFO(iwl5150_agn_cfg, iwl5150_agn_name,639DEVICE(0x423D), SUBDEV_MASKED(0x1, 0xF)),640IWL_DEV_INFO(iwl5150_abg_cfg, iwl5150_abg_name,641DEVICE(0x423D), SUBDEV_MASKED(0x6, 0xF)),642643/* 6x00 Series */644IWL_DEV_INFO(iwl6000_3agn_cfg, iwl6000_3agn_name,645DEVICE(0x422B), SUBDEV_MASKED(0x1, 0xF)),646IWL_DEV_INFO(iwl6000_3agn_cfg, iwl6000_3agn_name,647DEVICE(0x422B), SUBDEV_MASKED(0x8, 0xF)),648IWL_DEV_INFO(iwl6000i_2agn_cfg, iwl6000i_2agn_name,649DEVICE(0x422C), SUBDEV_MASKED(0x1, 0xF)),650IWL_DEV_INFO(iwl6000i_non_n_cfg, iwl6000i_2abg_name,651DEVICE(0x422C), SUBDEV_MASKED(0x6, 0xF)),652IWL_DEV_INFO(iwl6000i_non_n_cfg, iwl6000i_2bg_name,653DEVICE(0x422C), SUBDEV_MASKED(0x7, 0xF)),654IWL_DEV_INFO(iwl6000_3agn_cfg, iwl6000_3agn_name,655DEVICE(0x4238), SUBDEV(0x1111)),656IWL_DEV_INFO(iwl6000_3agn_cfg, iwl6000_3agn_name,657DEVICE(0x4238), SUBDEV(0x1118)),658IWL_DEV_INFO(iwl6000i_2agn_cfg, iwl6000i_2agn_name,659DEVICE(0x4239), SUBDEV(0x1311)),660IWL_DEV_INFO(iwl6000i_non_n_cfg, iwl6000i_2abg_name,661DEVICE(0x4239), SUBDEV(0x1316)),662663/* 6x05 Series */664IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_name,665DEVICE(0x0082), SUBDEV_MASKED(0x1, 0xF)),666IWL_DEV_INFO(iwl6005_non_n_cfg, iwl6005_2abg_name,667DEVICE(0x0082), SUBDEV_MASKED(0x6, 0xF)),668IWL_DEV_INFO(iwl6005_non_n_cfg, iwl6005_2bg_name,669DEVICE(0x0082), SUBDEV_MASKED(0x7, 0xF)),670IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_name,671DEVICE(0x0082), SUBDEV_MASKED(0x8, 0xF)),672673IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_name,674DEVICE(0x0085), SUBDEV_MASKED(0x1, 0xF)),675IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_name,676DEVICE(0x0085), SUBDEV_MASKED(0x8, 0xF)),677IWL_DEV_INFO(iwl6005_non_n_cfg, iwl6005_2abg_name,678DEVICE(0x0085), SUBDEV_MASKED(0x6, 0xF)),679680IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_sff_name,681DEVICE(0x0082), SUBDEV_MASKED(0xC000, 0xF000)),682IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_sff_name,683DEVICE(0x0085), SUBDEV_MASKED(0xC000, 0xF000)),684IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_d_name,685DEVICE(0x0082), SUBDEV(0x4820)),686IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_mow1_name,687DEVICE(0x0082), SUBDEV(0x1304)),/* low 5GHz active */688IWL_DEV_INFO(iwl6005_n_cfg, iwl6005_2agn_mow2_name,689DEVICE(0x0082), SUBDEV(0x1305)),/* high 5GHz active */690691/* 6x30 Series */692IWL_DEV_INFO(iwl6030_n_cfg, iwl1030_bgn_name,693DEVICE(0x008A), SUBDEV_MASKED(0x5, 0xF)),694IWL_DEV_INFO(iwl6030_non_n_cfg, iwl1030_bg_name,695DEVICE(0x008A), SUBDEV_MASKED(0x7, 0xF)),696IWL_DEV_INFO(iwl6030_n_cfg, iwl1030_bgn_name,697DEVICE(0x008B), SUBDEV(0x5315)),698IWL_DEV_INFO(iwl6030_non_n_cfg, iwl1030_bg_name,699DEVICE(0x008B), SUBDEV(0x5317)),700IWL_DEV_INFO(iwl6030_n_cfg, iwl6030_2agn_name,701DEVICE(0x0090), SUBDEV(0x5211)),702IWL_DEV_INFO(iwl6030_n_cfg, iwl6030_2bgn_name,703DEVICE(0x0090), SUBDEV(0x5215)),704IWL_DEV_INFO(iwl6030_non_n_cfg, iwl6030_2abg_name,705DEVICE(0x0090), SUBDEV(0x5216)),706IWL_DEV_INFO(iwl6030_n_cfg, iwl6030_2agn_name,707DEVICE(0x0091), SUBDEV_MASKED(0x1, 0xF)),708IWL_DEV_INFO(iwl6030_n_cfg, iwl6030_2bgn_name,709DEVICE(0x0091), SUBDEV_MASKED(0x5, 0xF)),710IWL_DEV_INFO(iwl6030_non_n_cfg, iwl6030_2abg_name,711DEVICE(0x0091), SUBDEV_MASKED(0x6, 0xF)),712IWL_DEV_INFO(iwl6030_non_n_cfg, iwl6030_2bg_name,713DEVICE(0x0091), SUBDEV(0x5207)),714715/* 6x50 WiFi/WiMax Series */716IWL_DEV_INFO(iwl6050_2agn_cfg, iwl6050_2agn_name,717DEVICE(0x0087), SUBDEV_MASKED(0x1, 0xF)),718IWL_DEV_INFO(iwl6050_2abg_cfg, iwl6050_2abg_name,719DEVICE(0x0087), SUBDEV_MASKED(0x6, 0xF)),720IWL_DEV_INFO(iwl6050_2agn_cfg, iwl6050_2agn_name,721DEVICE(0x0089), SUBDEV(0x1311)),722IWL_DEV_INFO(iwl6050_2abg_cfg, iwl6050_2abg_name,723DEVICE(0x0089), SUBDEV(0x1316)),724725/* 6150 WiFi/WiMax Series */726IWL_DEV_INFO(iwl6150_bgn_cfg, iwl6150_bgn_name,727DEVICE(0x0885), SUBDEV_MASKED(0x5, 0xF)),728IWL_DEV_INFO(iwl6150_bg_cfg, iwl6150_bg_name,729DEVICE(0x0885), SUBDEV_MASKED(0x7, 0xF)),730IWL_DEV_INFO(iwl6150_bgn_cfg, iwl6150_bgn_name,731DEVICE(0x0886), SUBDEV(0x1315)),732IWL_DEV_INFO(iwl6150_bg_cfg, iwl6150_bg_name,733DEVICE(0x0886), SUBDEV(0x1317)),734735/* 1000 Series WiFi */736IWL_DEV_INFO(iwl1000_bgn_cfg, iwl1000_bgn_name,737DEVICE(0x0083), SUBDEV_MASKED(0x5, 0xF)),738IWL_DEV_INFO(iwl1000_bg_cfg, iwl1000_bg_name,739DEVICE(0x0083), SUBDEV_MASKED(0x6, 0xF)),740IWL_DEV_INFO(iwl1000_bgn_cfg, iwl1000_bgn_name,741DEVICE(0x0084), SUBDEV_MASKED(0x5, 0xF)),742IWL_DEV_INFO(iwl1000_bg_cfg, iwl1000_bg_name,743DEVICE(0x0084), SUBDEV_MASKED(0x6, 0xF)),744745/* 100 Series WiFi */746IWL_DEV_INFO(iwl100_bgn_cfg, iwl100_bgn_name,747DEVICE(0x08AE), SUBDEV_MASKED(0x5, 0xF)),748IWL_DEV_INFO(iwl100_bg_cfg, iwl100_bg_name,749DEVICE(0x08AE), SUBDEV_MASKED(0x7, 0xF)),750IWL_DEV_INFO(iwl100_bgn_cfg, iwl100_bgn_name,751DEVICE(0x08AF), SUBDEV(0x1015)),752IWL_DEV_INFO(iwl100_bg_cfg, iwl100_bg_name,753DEVICE(0x08AF), SUBDEV(0x1017)),754755/* 130 Series WiFi */756IWL_DEV_INFO(iwl130_bgn_cfg, iwl130_bgn_name,757DEVICE(0x0896), SUBDEV_MASKED(0x5, 0xF)),758IWL_DEV_INFO(iwl130_bg_cfg, iwl130_bg_name,759DEVICE(0x0896), SUBDEV_MASKED(0x7, 0xF)),760IWL_DEV_INFO(iwl130_bgn_cfg, iwl130_bgn_name,761DEVICE(0x0897), SUBDEV(0x5015)),762IWL_DEV_INFO(iwl130_bg_cfg, iwl130_bg_name,763DEVICE(0x0897), SUBDEV(0x5017)),764765/* 2x00 Series */766IWL_DEV_INFO(iwl2000_2bgn_cfg, iwl2000_2bgn_name,767DEVICE(0x0890), SUBDEV(0x4022)),768IWL_DEV_INFO(iwl2000_2bgn_cfg, iwl2000_2bgn_name,769DEVICE(0x0891), SUBDEV(0x4222)),770IWL_DEV_INFO(iwl2000_2bgn_cfg, iwl2000_2bgn_name,771DEVICE(0x0890), SUBDEV(0x4422)),772IWL_DEV_INFO(iwl2000_2bgn_cfg, iwl2000_2bgn_d_name,773DEVICE(0x0890), SUBDEV(0x4822)),774775/* 2x30 Series */776IWL_DEV_INFO(iwl2030_2bgn_cfg, iwl2030_2bgn_name,777DEVICE(0x0887)),778IWL_DEV_INFO(iwl2030_2bgn_cfg, iwl2030_2bgn_name,779DEVICE(0x0888), SUBDEV(0x4262)),780781/* 6x35 Series */782IWL_DEV_INFO(iwl6035_2agn_cfg, iwl6035_2agn_name,783DEVICE(0x088E), SUBDEV_MASKED(0x0, 0xF)),784IWL_DEV_INFO(iwl6035_2agn_cfg, iwl6035_2agn_sff_name,785DEVICE(0x088E), SUBDEV_MASKED(0xA, 0xF)),786IWL_DEV_INFO(iwl6035_2agn_cfg, iwl6035_2agn_name,787DEVICE(0x088F), SUBDEV_MASKED(0x0, 0xF)),788IWL_DEV_INFO(iwl6035_2agn_cfg, iwl6035_2agn_sff_name,789DEVICE(0x088F), SUBDEV_MASKED(0xA, 0xF)),790791/* 105 Series */792IWL_DEV_INFO(iwl105_bgn_cfg, iwl105_bgn_name,793DEVICE(0x0894)),794IWL_DEV_INFO(iwl105_bgn_cfg, iwl105_bgn_name,795DEVICE(0x0895), SUBDEV(0x0222)),796797/* 135 Series */798IWL_DEV_INFO(iwl135_bgn_cfg, iwl135_bgn_name,799DEVICE(0x0892)),800IWL_DEV_INFO(iwl135_bgn_cfg, iwl135_bgn_name,801DEVICE(0x0893), SUBDEV(0x0262)),802#endif /* CONFIG_IWLDVM */803804#if IS_ENABLED(CONFIG_IWLMVM)805/* 7260 Series */806IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,807DEVICE(0x08B1)), // unlisted ones fall through to here808IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,809DEVICE(0x08B1), SUBDEV(0x4060)),810IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,811DEVICE(0x08B1), SUBDEV(0x406A)),812IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,813DEVICE(0x08B1), SUBDEV(0x4160)),814IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,815DEVICE(0x08B1), SUBDEV(0x4062)),816IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,817DEVICE(0x08B1), SUBDEV(0x4162)),818IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,819DEVICE(0x08B1), SUBDEV(0x4460)),820IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,821DEVICE(0x08B1), SUBDEV(0x446A)),822IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,823DEVICE(0x08B1), SUBDEV(0x4462)),824IWL_DEV_INFO(iwl7260_high_temp_cfg, iwl7260_2ac_name,825DEVICE(0x08B1), SUBDEV(0x4A70)),826IWL_DEV_INFO(iwl7260_high_temp_cfg, iwl7260_2ac_name,827DEVICE(0x08B1), SUBDEV(0x4A6E)),828IWL_DEV_INFO(iwl7260_high_temp_cfg, iwl7260_2ac_name,829DEVICE(0x08B1), SUBDEV(0x4A6C)),830IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,831DEVICE(0x08B1), SUBDEV(0x4560)),832IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,833DEVICE(0x08B1), SUBDEV(0x4020)),834IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,835DEVICE(0x08B1), SUBDEV(0x402A)),836IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,837DEVICE(0x08B1), SUBDEV(0x4420)),838IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,839DEVICE(0x08B1), SUBDEV(0xC060)),840IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,841DEVICE(0x08B1), SUBDEV(0xC06A)),842IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,843DEVICE(0x08B1), SUBDEV(0xC160)),844IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,845DEVICE(0x08B1), SUBDEV(0xC062)),846IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,847DEVICE(0x08B1), SUBDEV(0xC162)),848IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,849DEVICE(0x08B1), SUBDEV(0xC760)),850IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,851DEVICE(0x08B1), SUBDEV(0xC460)),852IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,853DEVICE(0x08B1), SUBDEV(0xC462)),854IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,855DEVICE(0x08B1), SUBDEV(0xC560)),856IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,857DEVICE(0x08B1), SUBDEV(0xC360)),858IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,859DEVICE(0x08B1), SUBDEV(0xC020)),860IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,861DEVICE(0x08B1), SUBDEV(0xC02A)),862IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,863DEVICE(0x08B1), SUBDEV(0xC420)),864IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,865DEVICE(0x08B2), SUBDEV(0x4270)),866IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,867DEVICE(0x08B2), SUBDEV(0x4272)),868IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,869DEVICE(0x08B2), SUBDEV(0x4260)),870IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,871DEVICE(0x08B2), SUBDEV(0x426A)),872IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,873DEVICE(0x08B2), SUBDEV(0x4262)),874IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,875DEVICE(0x08B2), SUBDEV(0x4370)),876IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,877DEVICE(0x08B2), SUBDEV(0x4360)),878IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,879DEVICE(0x08B2), SUBDEV(0x4220)),880IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,881DEVICE(0x08B2), SUBDEV(0xC270)),882IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,883DEVICE(0x08B2), SUBDEV(0xC272)),884IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,885DEVICE(0x08B2), SUBDEV(0xC260)),886IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,887DEVICE(0x08B2), SUBDEV(0xC26A)),888IWL_DEV_INFO(iwl7260_cfg, iwl7260_n_name,889DEVICE(0x08B2), SUBDEV(0xC262)),890IWL_DEV_INFO(iwl7260_cfg, iwl7260_2ac_name,891DEVICE(0x08B2), SUBDEV(0xC370)),892IWL_DEV_INFO(iwl7260_cfg, iwl7260_2n_name,893DEVICE(0x08B2), SUBDEV(0xC220)),894895/* 3160 Series */896IWL_DEV_INFO(iwl3160_cfg, iwl3160_2ac_name,897DEVICE(0x08B3)),898899IWL_DEV_INFO(iwl3160_cfg, iwl3160_n_name,900DEVICE(0x08B3), SUBDEV_MASKED(0x62, 0xFF)),901IWL_DEV_INFO(iwl3160_cfg, iwl3160_2n_name,902DEVICE(0x08B3), SUBDEV_MASKED(0x60, 0xFF)),903904IWL_DEV_INFO(iwl3160_cfg, iwl3160_2ac_name,905DEVICE(0x08B4)),906907/* 3165 Series */908IWL_DEV_INFO(iwl3165_2ac_cfg, iwl3165_2ac_name,909DEVICE(0x3165)),910IWL_DEV_INFO(iwl3165_2ac_cfg, iwl3165_2ac_name,911DEVICE(0x3166)),912913/* 3168 Series */914IWL_DEV_INFO(iwl3168_2ac_cfg, iwl3168_2ac_name,915DEVICE(0x24FB)),916917/* 7265 Series */918IWL_DEV_INFO(iwl7265_cfg, iwl7265_2ac_name,919DEVICE(0x095A)),920IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,921DEVICE(0x095A), SUBDEV(0x5000)),922IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,923DEVICE(0x095A), SUBDEV(0x500A)),924IWL_DEV_INFO(iwl7265_cfg, iwl7265_n_name,925DEVICE(0x095A), SUBDEV(0x5002)),926IWL_DEV_INFO(iwl7265_cfg, iwl7265_n_name,927DEVICE(0x095A), SUBDEV(0x5102)),928IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,929DEVICE(0x095A), SUBDEV(0x5020)),930IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,931DEVICE(0x095A), SUBDEV(0x502A)),932IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,933DEVICE(0x095A), SUBDEV(0x5090)),934IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,935DEVICE(0x095A), SUBDEV(0x5190)),936IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,937DEVICE(0x095A), SUBDEV(0x5100)),938IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,939DEVICE(0x095A), SUBDEV(0x5400)),940IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,941DEVICE(0x095A), SUBDEV(0x5420)),942IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,943DEVICE(0x095A), SUBDEV(0x5490)),944IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,945DEVICE(0x095A), SUBDEV(0x5C10)),946IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,947DEVICE(0x095A), SUBDEV(0x5590)),948IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,949DEVICE(0x095A), SUBDEV(0x9000)),950IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,951DEVICE(0x095A), SUBDEV(0x900A)),952IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,953DEVICE(0x095A), SUBDEV(0x9400)),954955IWL_DEV_INFO(iwl7265_cfg, iwl7265_2ac_name,956DEVICE(0x095B)),957IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,958DEVICE(0x095B), SUBDEV(0x520A)),959IWL_DEV_INFO(iwl7265_cfg, iwl7265_n_name,960DEVICE(0x095B), SUBDEV(0x5302)),961IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,962DEVICE(0x095B), SUBDEV(0x5200)),963IWL_DEV_INFO(iwl7265_cfg, iwl7265_n_name,964DEVICE(0x095B), SUBDEV(0x5202)),965IWL_DEV_INFO(iwl7265_cfg, iwl7265_2n_name,966DEVICE(0x095B), SUBDEV(0x9200)),967968/* 8000 Series */969IWL_DEV_INFO(iwl8260_cfg, iwl8260_2ac_name,970DEVICE(0x24F3)),971IWL_DEV_INFO(iwl8260_cfg, iwl8260_2n_name,972DEVICE(0x24F3), SUBDEV(0x0004)),973IWL_DEV_INFO(iwl8260_cfg, iwl8260_2n_name,974DEVICE(0x24F3), SUBDEV(0x0044)),975IWL_DEV_INFO(iwl8260_cfg, iwl8260_2ac_name,976DEVICE(0x24F4)),977IWL_DEV_INFO(iwl8260_cfg, iwl4165_2ac_name,978DEVICE(0x24F5)),979IWL_DEV_INFO(iwl8260_cfg, iwl4165_2ac_name,980DEVICE(0x24F6)),981IWL_DEV_INFO(iwl8265_cfg, iwl8265_2ac_name,982DEVICE(0x24FD)),983IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name,984DEVICE(0x24FD), SUBDEV(0x3E02)),985IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name,986DEVICE(0x24FD), SUBDEV(0x3E01)),987IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name,988DEVICE(0x24FD), SUBDEV(0x1012)),989IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name,990DEVICE(0x24FD), SUBDEV(0x0012)),991IWL_DEV_INFO(iwl8265_cfg, iwl_killer_1435i_name,992DEVICE(0x24FD), SUBDEV(0x1431)),993IWL_DEV_INFO(iwl8265_cfg, iwl_killer_1434_kix_name,994DEVICE(0x24FD), SUBDEV(0x1432)),995996/* JF1 RF */997IWL_DEV_INFO(iwl_rf_jf, iwl9461_160_name,998RF_TYPE(JF1)),999IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9461_name,1000RF_TYPE(JF1), BW_LIMITED),1001IWL_DEV_INFO(iwl_rf_jf, iwl9462_160_name,1002RF_TYPE(JF1), RF_ID(JF1_DIV)),1003IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9462_name,1004RF_TYPE(JF1), RF_ID(JF1_DIV), BW_LIMITED),1005/* JF2 RF */1006IWL_DEV_INFO(iwl_rf_jf, iwl9260_160_name,1007RF_TYPE(JF2)),1008IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9260_name,1009RF_TYPE(JF2), BW_LIMITED),1010IWL_DEV_INFO(iwl_rf_jf, iwl9560_160_name,1011RF_TYPE(JF2), RF_ID(JF)),1012IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9560_name,1013RF_TYPE(JF2), RF_ID(JF), BW_LIMITED),10141015/* HR RF */1016IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, RF_TYPE(HR2)),1017IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax101_name, RF_TYPE(HR1)),1018IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, RF_TYPE(HR2), BW_LIMITED),1019IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_name, DEVICE(0x2723)),10201021/* GF RF */1022IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, RF_TYPE(GF)),1023IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_name, RF_TYPE(GF), CDB),1024IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_name, DEVICE(0x2725)),10251026/* Killer CRFs */1027IWL_DEV_INFO(iwl_rf_jf, iwl9260_killer_1550_name, SUBDEV(0x1550)),1028IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, SUBDEV(0x1551)),1029IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, SUBDEV(0x1552)),10301031IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, SUBDEV(0x1651)),1032IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, SUBDEV(0x1652)),10331034IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, SUBDEV(0x1671)),1035IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, SUBDEV(0x1672)),1036IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_killer_1675w_name, SUBDEV(0x1673)),1037IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_killer_1675x_name, SUBDEV(0x1674)),1038IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, SUBDEV(0x1691)),1039IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, SUBDEV(0x1692)),10401041/* Killer discrete */1042IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_killer_1650w_name,1043DEVICE(0x2723), SUBDEV(0x1653)),1044IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_killer_1650x_name,1045DEVICE(0x2723), SUBDEV(0x1654)),1046#endif /* CONFIG_IWLMVM */1047#if IS_ENABLED(CONFIG_IWLMLD)1048/* FM RF */1049IWL_DEV_INFO(iwl_rf_fm, iwl_be201_name, RF_TYPE(FM)),1050IWL_DEV_INFO(iwl_rf_fm, iwl_be401_name, RF_TYPE(FM), CDB),1051IWL_DEV_INFO(iwl_rf_fm, iwl_be200_name, RF_TYPE(FM),1052DEVICE(0x272B), DISCRETE),1053IWL_DEV_INFO(iwl_rf_fm_160mhz, iwl_be202_name,1054RF_TYPE(FM), BW_LIMITED),10551056/* Killer CRFs */1057IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750s_name, SUBDEV(0x1771)),1058IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750i_name, SUBDEV(0x1772)),1059IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1790s_name, SUBDEV(0x1791)),1060IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1790i_name, SUBDEV(0x1792)),10611062/* Killer discrete */1063IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750w_name,1064DEVICE(0x272B), SUBDEV(0x1773)),1065IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750x_name,1066DEVICE(0x272B), SUBDEV(0x1774)),10671068/* WH RF */1069IWL_DEV_INFO(iwl_rf_wh, iwl_be211_name, RF_TYPE(WH)),1070IWL_DEV_INFO(iwl_rf_wh_160mhz, iwl_be213_name, RF_TYPE(WH), BW_LIMITED),10711072/* PE RF */1073IWL_DEV_INFO(iwl_rf_pe, iwl_bn201_name, RF_TYPE(PE)),1074IWL_DEV_INFO(iwl_rf_pe, iwl_be223_name, RF_TYPE(PE), SUBDEV(0x0524)),1075IWL_DEV_INFO(iwl_rf_pe, iwl_be221_name, RF_TYPE(PE), SUBDEV(0x0324)),10761077/* Killer */1078IWL_DEV_INFO(iwl_rf_wh, iwl_killer_be1775s_name, SUBDEV(0x1776)),1079IWL_DEV_INFO(iwl_rf_wh, iwl_killer_be1775i_name, SUBDEV(0x1775)),10801081IWL_DEV_INFO(iwl_rf_pe, iwl_killer_bn1850w2_name, SUBDEV(0x1851)),1082IWL_DEV_INFO(iwl_rf_pe, iwl_killer_bn1850i_name, SUBDEV(0x1852)),1083#endif /* CONFIG_IWLMLD */1084};1085EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_dev_info_table);10861087#if IS_ENABLED(CONFIG_IWLWIFI_KUNIT_TESTS)1088const unsigned int iwl_dev_info_table_size = ARRAY_SIZE(iwl_dev_info_table);1089EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_dev_info_table_size);1090#endif10911092/* PCI registers */1093#define PCI_CFG_RETRY_TIMEOUT 0x04110941095const struct iwl_dev_info *1096iwl_pci_find_dev_info(u16 device, u16 subsystem_device, u16 rf_type, u8 cdb,1097u8 rf_id, u8 bw_limit, bool discrete)1098{1099int num_devices = ARRAY_SIZE(iwl_dev_info_table);1100int i;11011102if (!num_devices)1103return NULL;11041105for (i = num_devices - 1; i >= 0; i--) {1106const struct iwl_dev_info *dev_info = &iwl_dev_info_table[i];1107u16 subdevice_mask;11081109if (dev_info->device != (u16)IWL_CFG_ANY &&1110dev_info->device != device)1111continue;11121113subdevice_mask = GENMASK(dev_info->subdevice_m_h,1114dev_info->subdevice_m_l);11151116if (dev_info->subdevice != (u16)IWL_CFG_ANY &&1117dev_info->subdevice != (subsystem_device & subdevice_mask))1118continue;11191120if (dev_info->match_rf_type && dev_info->rf_type != rf_type)1121continue;11221123if (dev_info->match_cdb && dev_info->cdb != cdb)1124continue;11251126if (dev_info->match_rf_id && dev_info->rf_id != rf_id)1127continue;11281129if (dev_info->match_bw_limit && dev_info->bw_limit != bw_limit)1130continue;11311132if (dev_info->match_discrete && dev_info->discrete != discrete)1133continue;11341135return dev_info;1136}11371138return NULL;1139}1140EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_pci_find_dev_info);11411142static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)1143{1144const struct iwl_mac_cfg *mac_cfg = (void *)ent->driver_data;1145u8 __iomem *hw_base;1146u32 bar0, hw_rev;1147int ret;11481149/* reassign our BAR 0 if invalid due to possible runtime PM races */1150pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &bar0);1151if (bar0 == PCI_BASE_ADDRESS_MEM_TYPE_64) {1152ret = pci_assign_resource(pdev, 0);1153if (ret)1154return ret;1155}11561157ret = pcim_enable_device(pdev);1158if (ret)1159return ret;11601161pci_set_master(pdev);11621163ret = pcim_request_all_regions(pdev, DRV_NAME);1164if (ret) {1165dev_err(&pdev->dev, "Requesting all PCI BARs failed.\n");1166return ret;1167}11681169#if defined(__FreeBSD__)1170linuxkpi_pcim_want_to_use_bus_functions(pdev);1171#endif11721173hw_base = pcim_iomap(pdev, 0, 0);1174if (!hw_base) {1175dev_err(&pdev->dev, "Failed to map BAR 0.\n");1176return -ENOMEM;1177}11781179/* We can't use iwl_read32 because trans wasn't allocated */1180#if defined(__linux__)1181hw_rev = readl(hw_base + CSR_HW_REV);1182#elif defined(__FreeBSD__)1183hw_rev = bus_read_4((struct resource *)hw_base, CSR_HW_REV);1184#endif1185if (hw_rev == 0xffffffff) {1186dev_err(&pdev->dev, "HW_REV=0xFFFFFFFF, PCI issues?\n");1187return -EIO;1188}11891190return iwl_pci_gen1_2_probe(pdev, ent, mac_cfg, hw_base, hw_rev);1191}11921193static void iwl_pci_remove(struct pci_dev *pdev)1194{1195struct iwl_trans *trans = pci_get_drvdata(pdev);1196struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);11971198if (!trans)1199return;12001201cancel_delayed_work_sync(&trans_pcie->me_recheck_wk);12021203iwl_drv_stop(trans->drv);12041205iwl_trans_pcie_free(trans);1206}12071208#ifdef CONFIG_PM_SLEEP12091210static int iwl_pci_suspend(struct device *device)1211{1212/* Before you put code here, think about WoWLAN. You cannot check here1213* whether WoWLAN is enabled or not, and your code will run even if1214* WoWLAN is enabled - don't kill the NIC, someone may need it in Sx.1215*/12161217return 0;1218}12191220static int _iwl_pci_resume(struct device *device, bool restore)1221{1222struct pci_dev *pdev = to_pci_dev(device);1223struct iwl_trans *trans = pci_get_drvdata(pdev);1224struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);1225bool device_was_powered_off = false;12261227/* Before you put code here, think about WoWLAN. You cannot check here1228* whether WoWLAN is enabled or not, and your code will run even if1229* WoWLAN is enabled - the NIC may be alive.1230*/12311232/*1233* We disable the RETRY_TIMEOUT register (0x41) to keep1234* PCI Tx retries from interfering with C3 CPU state.1235*/1236pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);12371238if (!trans->op_mode)1239return 0;12401241/*1242* Scratch value was altered, this means the device was powered off, we1243* need to reset it completely.1244* Note: MAC (bits 0:7) will be cleared upon suspend even with wowlan,1245* but not bits [15:8]. So if we have bits set in lower word, assume1246* the device is alive.1247* Alternatively, if the scratch value is 0xFFFFFFFF, then we no longer1248* have access to the device and consider it powered off.1249* For older devices, just try silently to grab the NIC.1250*/1251if (trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {1252u32 scratch = iwl_read32(trans, CSR_FUNC_SCRATCH);12531254if (!(scratch & CSR_FUNC_SCRATCH_POWER_OFF_MASK) ||1255scratch == ~0U)1256device_was_powered_off = true;1257} else {1258/*1259* bh are re-enabled by iwl_trans_pcie_release_nic_access,1260* so re-enable them if _iwl_trans_pcie_grab_nic_access fails.1261*/1262local_bh_disable();1263if (_iwl_trans_pcie_grab_nic_access(trans, true)) {1264iwl_trans_pcie_release_nic_access(trans);1265} else {1266device_was_powered_off = true;1267local_bh_enable();1268}1269}12701271if (restore || device_was_powered_off) {1272trans->state = IWL_TRANS_NO_FW;1273/* Hope for the best here ... If one of those steps fails we1274* won't really know how to recover.1275*/1276iwl_pcie_prepare_card_hw(trans);1277iwl_finish_nic_init(trans);1278iwl_op_mode_device_powered_off(trans->op_mode);1279}12801281/* In WOWLAN, let iwl_trans_pcie_d3_resume do the rest of the work */1282if (test_bit(STATUS_DEVICE_ENABLED, &trans->status))1283return 0;12841285/* reconfigure the MSI-X mapping to get the correct IRQ for rfkill */1286iwl_pcie_conf_msix_hw(trans_pcie);12871288/*1289* Enable rfkill interrupt (in order to keep track of the rfkill1290* status). Must be locked to avoid processing a possible rfkill1291* interrupt while in iwl_pcie_check_hw_rf_kill().1292*/1293mutex_lock(&trans_pcie->mutex);1294iwl_enable_rfkill_int(trans);1295iwl_pcie_check_hw_rf_kill(trans);1296mutex_unlock(&trans_pcie->mutex);12971298return 0;1299}13001301static int iwl_pci_restore(struct device *device)1302{1303return _iwl_pci_resume(device, true);1304}13051306static int iwl_pci_resume(struct device *device)1307{1308return _iwl_pci_resume(device, false);1309}13101311static const struct dev_pm_ops iwl_dev_pm_ops = {1312.suspend = pm_sleep_ptr(iwl_pci_suspend),1313.resume = pm_sleep_ptr(iwl_pci_resume),1314.freeze = pm_sleep_ptr(iwl_pci_suspend),1315.thaw = pm_sleep_ptr(iwl_pci_resume),1316.poweroff = pm_sleep_ptr(iwl_pci_suspend),1317.restore = pm_sleep_ptr(iwl_pci_restore),1318};13191320#define IWL_PM_OPS (&iwl_dev_pm_ops)13211322#else /* CONFIG_PM_SLEEP */13231324#define IWL_PM_OPS NULL13251326#endif /* CONFIG_PM_SLEEP */13271328static void iwl_pci_dump(struct device *device)1329{1330struct pci_dev *pdev = to_pci_dev(device);1331struct iwl_trans *trans = pci_get_drvdata(pdev);13321333iwl_op_mode_dump(trans->op_mode);1334}13351336static struct pci_driver iwl_pci_driver = {1337.name = DRV_NAME,1338.id_table = iwl_hw_card_ids,1339.probe = iwl_pci_probe,1340.remove = iwl_pci_remove,1341.driver.pm = IWL_PM_OPS,1342.driver.coredump = iwl_pci_dump,1343#if defined(__FreeBSD__)1344/* Allow iwm(4) to attach for conflicting IDs for now. */1345.bsd_probe_return = (BUS_PROBE_DEFAULT - 1),1346#endif1347};13481349int __must_check iwl_pci_register_driver(void)1350{1351int ret;1352ret = pci_register_driver(&iwl_pci_driver);1353if (ret)1354pr_err("Unable to initialize PCI module\n");13551356return ret;1357}13581359void iwl_pci_unregister_driver(void)1360{1361pci_unregister_driver(&iwl_pci_driver);1362}13631364#if defined(__FreeBSD__)1365static int1366sysctl_iwlwifi_pci_ids_name(SYSCTL_HANDLER_ARGS)1367{1368const struct pci_device_id *id;1369struct sbuf *sb;1370int error, i;13711372error = sysctl_wire_old_buffer(req, 0);1373if (error != 0)1374return (error);1375sb = sbuf_new_for_sysctl(NULL, NULL, 512, req);1376if (sb == NULL)1377return (ENOMEM);13781379id = iwl_hw_card_ids;1380while (id != NULL && id->vendor != 0) {13811382if (id->driver_data != 0) {1383const struct iwl_mac_cfg *trans;13841385trans = (void *)id->driver_data;1386sbuf_printf(sb, "%#06x/%#06x/%#06x/%#06x\t%d\t%s\t%d\n",1387id->vendor, id->device, id->subvendor, id->subdevice,1388trans->device_family,1389iwl_device_family_name(trans->device_family),1390trans->gen2);1391} else {1392sbuf_printf(sb, "%#06x/%#06x/%#06x/%#06x\t%d\t%s\t%d\n",1393id->vendor, id->device, id->subvendor, id->subdevice,1394IWL_DEVICE_FAMILY_UNDEFINED,1395iwl_device_family_name(IWL_DEVICE_FAMILY_UNDEFINED), -1);1396}1397id++;1398}13991400for (i = 0; i < ARRAY_SIZE(iwl_dev_info_table); i++) {1401const struct iwl_dev_info *dev_info = &iwl_dev_info_table[i];14021403sbuf_printf(sb, "%#06x/%#06x/%#06x/%#06x\t%s\t%s\n",1404PCI_VENDOR_ID_INTEL, dev_info->device, PCI_ANY_ID, dev_info->subdevice,1405dev_info->name, dev_info->cfg->fw_name_pre);1406}14071408error = sbuf_finish(sb);1409sbuf_delete(sb);14101411return (error);1412}1413SYSCTL_PROC(LINUXKPI_PARAM_PARENT, OID_AUTO, LINUXKPI_PARAM_NAME(pci_ids_name),1414CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_SKIP | CTLFLAG_MPSAFE, NULL, 0,1415sysctl_iwlwifi_pci_ids_name, "", "iwlwifi PCI IDs and names");1416#endif141714181419