kernel/pci/id.rs
1// SPDX-License-Identifier: GPL-2.0
2
3//! PCI device identifiers and related types.
4//!
5//! This module contains PCI class codes, Vendor IDs, and supporting types.
6
7use crate::{bindings, error::code::EINVAL, error::Error, fmt, prelude::*};
8
9/// PCI device class codes.
10///
11/// Each entry contains the full 24-bit PCI class code (base class in bits
12/// 23-16, subclass in bits 15-8, programming interface in bits 7-0).
13///
14/// # Examples
15///
16/// ```
17/// # use kernel::{device::Core, pci::{self, Class}, prelude::*};
18/// fn probe_device(pdev: &pci::Device<Core>) -> Result {
19/// let pci_class = pdev.pci_class();
20/// dev_info!(
21/// pdev.as_ref(),
22/// "Detected PCI class: {}\n",
23/// pci_class
24/// );
25/// Ok(())
26/// }
27/// ```
28#[derive(Clone, Copy, PartialEq, Eq)]
29#[repr(transparent)]
30pub struct Class(u32);
31
32/// PCI class mask constants for matching [`Class`] codes.
33#[repr(u32)]
34#[derive(Debug, Clone, Copy, PartialEq, Eq)]
35pub enum ClassMask {
36 /// Match the full 24-bit class code.
37 Full = 0xffffff,
38 /// Match the upper 16 bits of the class code (base class and subclass only)
39 ClassSubclass = 0xffff00,
40}
41
42macro_rules! define_all_pci_classes {
43 (
44 $($variant:ident = $binding:expr,)+
45 ) => {
46 impl Class {
47 $(
48 #[allow(missing_docs)]
49 pub const $variant: Self = Self(Self::to_24bit_class($binding));
50 )+
51 }
52
53 impl fmt::Display for Class {
54 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55 match self {
56 $(
57 &Self::$variant => write!(f, stringify!($variant)),
58 )+
59 _ => <Self as fmt::Debug>::fmt(self, f),
60 }
61 }
62 }
63 };
64}
65
66/// Once constructed, a [`Class`] contains a valid PCI class code.
67impl Class {
68 /// Create a [`Class`] from a raw 24-bit class code.
69 #[inline]
70 pub(super) fn from_raw(class_code: u32) -> Self {
71 Self(class_code)
72 }
73
74 /// Get the raw 24-bit class code value.
75 #[inline]
76 pub const fn as_raw(self) -> u32 {
77 self.0
78 }
79
80 // Converts a PCI class constant to 24-bit format.
81 //
82 // Many device drivers use only the upper 16 bits (base class and subclass),
83 // but some use the full 24 bits. In order to support both cases, store the
84 // class code as a 24-bit value, where 16-bit values are shifted up 8 bits.
85 const fn to_24bit_class(val: u32) -> u32 {
86 if val > 0xFFFF {
87 val
88 } else {
89 val << 8
90 }
91 }
92}
93
94impl fmt::Debug for Class {
95 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
96 write!(f, "0x{:06x}", self.0)
97 }
98}
99
100impl ClassMask {
101 /// Get the raw mask value.
102 #[inline]
103 pub const fn as_raw(self) -> u32 {
104 self as u32
105 }
106}
107
108impl TryFrom<u32> for ClassMask {
109 type Error = Error;
110
111 fn try_from(value: u32) -> Result<Self, Self::Error> {
112 match value {
113 0xffffff => Ok(ClassMask::Full),
114 0xffff00 => Ok(ClassMask::ClassSubclass),
115 _ => Err(EINVAL),
116 }
117 }
118}
119
120/// PCI vendor IDs.
121///
122/// Each entry contains the 16-bit PCI vendor ID as assigned by the PCI SIG.
123#[derive(Clone, Copy, PartialEq, Eq)]
124#[repr(transparent)]
125pub struct Vendor(u16);
126
127macro_rules! define_all_pci_vendors {
128 (
129 $($variant:ident = $binding:expr,)+
130 ) => {
131 impl Vendor {
132 $(
133 #[allow(missing_docs)]
134 pub const $variant: Self = Self($binding as u16);
135 )+
136 }
137
138 impl fmt::Display for Vendor {
139 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
140 match self {
141 $(
142 &Self::$variant => write!(f, stringify!($variant)),
143 )+
144 _ => <Self as fmt::Debug>::fmt(self, f),
145 }
146 }
147 }
148 };
149}
150
151/// Once constructed, a `Vendor` contains a valid PCI Vendor ID.
152impl Vendor {
153 /// Create a Vendor from a raw 16-bit vendor ID.
154 #[inline]
155 pub(super) fn from_raw(vendor_id: u16) -> Self {
156 Self(vendor_id)
157 }
158
159 /// Get the raw 16-bit vendor ID value.
160 #[inline]
161 pub const fn as_raw(self) -> u16 {
162 self.0
163 }
164}
165
166impl fmt::Debug for Vendor {
167 #[inline]
168 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
169 write!(f, "0x{:04x}", self.0)
170 }
171}
172
173define_all_pci_classes! {
174 NOT_DEFINED = bindings::PCI_CLASS_NOT_DEFINED, // 0x000000
175 NOT_DEFINED_VGA = bindings::PCI_CLASS_NOT_DEFINED_VGA, // 0x000100
176
177 STORAGE_SCSI = bindings::PCI_CLASS_STORAGE_SCSI, // 0x010000
178 STORAGE_IDE = bindings::PCI_CLASS_STORAGE_IDE, // 0x010100
179 STORAGE_FLOPPY = bindings::PCI_CLASS_STORAGE_FLOPPY, // 0x010200
180 STORAGE_IPI = bindings::PCI_CLASS_STORAGE_IPI, // 0x010300
181 STORAGE_RAID = bindings::PCI_CLASS_STORAGE_RAID, // 0x010400
182 STORAGE_SATA = bindings::PCI_CLASS_STORAGE_SATA, // 0x010600
183 STORAGE_SATA_AHCI = bindings::PCI_CLASS_STORAGE_SATA_AHCI, // 0x010601
184 STORAGE_SAS = bindings::PCI_CLASS_STORAGE_SAS, // 0x010700
185 STORAGE_EXPRESS = bindings::PCI_CLASS_STORAGE_EXPRESS, // 0x010802
186 STORAGE_OTHER = bindings::PCI_CLASS_STORAGE_OTHER, // 0x018000
187
188 NETWORK_ETHERNET = bindings::PCI_CLASS_NETWORK_ETHERNET, // 0x020000
189 NETWORK_TOKEN_RING = bindings::PCI_CLASS_NETWORK_TOKEN_RING, // 0x020100
190 NETWORK_FDDI = bindings::PCI_CLASS_NETWORK_FDDI, // 0x020200
191 NETWORK_ATM = bindings::PCI_CLASS_NETWORK_ATM, // 0x020300
192 NETWORK_OTHER = bindings::PCI_CLASS_NETWORK_OTHER, // 0x028000
193
194 DISPLAY_VGA = bindings::PCI_CLASS_DISPLAY_VGA, // 0x030000
195 DISPLAY_XGA = bindings::PCI_CLASS_DISPLAY_XGA, // 0x030100
196 DISPLAY_3D = bindings::PCI_CLASS_DISPLAY_3D, // 0x030200
197 DISPLAY_OTHER = bindings::PCI_CLASS_DISPLAY_OTHER, // 0x038000
198
199 MULTIMEDIA_VIDEO = bindings::PCI_CLASS_MULTIMEDIA_VIDEO, // 0x040000
200 MULTIMEDIA_AUDIO = bindings::PCI_CLASS_MULTIMEDIA_AUDIO, // 0x040100
201 MULTIMEDIA_PHONE = bindings::PCI_CLASS_MULTIMEDIA_PHONE, // 0x040200
202 MULTIMEDIA_HD_AUDIO = bindings::PCI_CLASS_MULTIMEDIA_HD_AUDIO, // 0x040300
203 MULTIMEDIA_OTHER = bindings::PCI_CLASS_MULTIMEDIA_OTHER, // 0x048000
204
205 MEMORY_RAM = bindings::PCI_CLASS_MEMORY_RAM, // 0x050000
206 MEMORY_FLASH = bindings::PCI_CLASS_MEMORY_FLASH, // 0x050100
207 MEMORY_CXL = bindings::PCI_CLASS_MEMORY_CXL, // 0x050200
208 MEMORY_OTHER = bindings::PCI_CLASS_MEMORY_OTHER, // 0x058000
209
210 BRIDGE_HOST = bindings::PCI_CLASS_BRIDGE_HOST, // 0x060000
211 BRIDGE_ISA = bindings::PCI_CLASS_BRIDGE_ISA, // 0x060100
212 BRIDGE_EISA = bindings::PCI_CLASS_BRIDGE_EISA, // 0x060200
213 BRIDGE_MC = bindings::PCI_CLASS_BRIDGE_MC, // 0x060300
214 BRIDGE_PCI_NORMAL = bindings::PCI_CLASS_BRIDGE_PCI_NORMAL, // 0x060400
215 BRIDGE_PCI_SUBTRACTIVE = bindings::PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE, // 0x060401
216 BRIDGE_PCMCIA = bindings::PCI_CLASS_BRIDGE_PCMCIA, // 0x060500
217 BRIDGE_NUBUS = bindings::PCI_CLASS_BRIDGE_NUBUS, // 0x060600
218 BRIDGE_CARDBUS = bindings::PCI_CLASS_BRIDGE_CARDBUS, // 0x060700
219 BRIDGE_RACEWAY = bindings::PCI_CLASS_BRIDGE_RACEWAY, // 0x060800
220 BRIDGE_OTHER = bindings::PCI_CLASS_BRIDGE_OTHER, // 0x068000
221
222 COMMUNICATION_SERIAL = bindings::PCI_CLASS_COMMUNICATION_SERIAL, // 0x070000
223 COMMUNICATION_PARALLEL = bindings::PCI_CLASS_COMMUNICATION_PARALLEL, // 0x070100
224 COMMUNICATION_MULTISERIAL = bindings::PCI_CLASS_COMMUNICATION_MULTISERIAL, // 0x070200
225 COMMUNICATION_MODEM = bindings::PCI_CLASS_COMMUNICATION_MODEM, // 0x070300
226 COMMUNICATION_OTHER = bindings::PCI_CLASS_COMMUNICATION_OTHER, // 0x078000
227
228 SYSTEM_PIC = bindings::PCI_CLASS_SYSTEM_PIC, // 0x080000
229 SYSTEM_PIC_IOAPIC = bindings::PCI_CLASS_SYSTEM_PIC_IOAPIC, // 0x080010
230 SYSTEM_PIC_IOXAPIC = bindings::PCI_CLASS_SYSTEM_PIC_IOXAPIC, // 0x080020
231 SYSTEM_DMA = bindings::PCI_CLASS_SYSTEM_DMA, // 0x080100
232 SYSTEM_TIMER = bindings::PCI_CLASS_SYSTEM_TIMER, // 0x080200
233 SYSTEM_RTC = bindings::PCI_CLASS_SYSTEM_RTC, // 0x080300
234 SYSTEM_PCI_HOTPLUG = bindings::PCI_CLASS_SYSTEM_PCI_HOTPLUG, // 0x080400
235 SYSTEM_SDHCI = bindings::PCI_CLASS_SYSTEM_SDHCI, // 0x080500
236 SYSTEM_RCEC = bindings::PCI_CLASS_SYSTEM_RCEC, // 0x080700
237 SYSTEM_OTHER = bindings::PCI_CLASS_SYSTEM_OTHER, // 0x088000
238
239 INPUT_KEYBOARD = bindings::PCI_CLASS_INPUT_KEYBOARD, // 0x090000
240 INPUT_PEN = bindings::PCI_CLASS_INPUT_PEN, // 0x090100
241 INPUT_MOUSE = bindings::PCI_CLASS_INPUT_MOUSE, // 0x090200
242 INPUT_SCANNER = bindings::PCI_CLASS_INPUT_SCANNER, // 0x090300
243 INPUT_GAMEPORT = bindings::PCI_CLASS_INPUT_GAMEPORT, // 0x090400
244 INPUT_OTHER = bindings::PCI_CLASS_INPUT_OTHER, // 0x098000
245
246 DOCKING_GENERIC = bindings::PCI_CLASS_DOCKING_GENERIC, // 0x0a0000
247 DOCKING_OTHER = bindings::PCI_CLASS_DOCKING_OTHER, // 0x0a8000
248
249 PROCESSOR_386 = bindings::PCI_CLASS_PROCESSOR_386, // 0x0b0000
250 PROCESSOR_486 = bindings::PCI_CLASS_PROCESSOR_486, // 0x0b0100
251 PROCESSOR_PENTIUM = bindings::PCI_CLASS_PROCESSOR_PENTIUM, // 0x0b0200
252 PROCESSOR_ALPHA = bindings::PCI_CLASS_PROCESSOR_ALPHA, // 0x0b1000
253 PROCESSOR_POWERPC = bindings::PCI_CLASS_PROCESSOR_POWERPC, // 0x0b2000
254 PROCESSOR_MIPS = bindings::PCI_CLASS_PROCESSOR_MIPS, // 0x0b3000
255 PROCESSOR_CO = bindings::PCI_CLASS_PROCESSOR_CO, // 0x0b4000
256
257 SERIAL_FIREWIRE = bindings::PCI_CLASS_SERIAL_FIREWIRE, // 0x0c0000
258 SERIAL_FIREWIRE_OHCI = bindings::PCI_CLASS_SERIAL_FIREWIRE_OHCI, // 0x0c0010
259 SERIAL_ACCESS = bindings::PCI_CLASS_SERIAL_ACCESS, // 0x0c0100
260 SERIAL_SSA = bindings::PCI_CLASS_SERIAL_SSA, // 0x0c0200
261 SERIAL_USB_UHCI = bindings::PCI_CLASS_SERIAL_USB_UHCI, // 0x0c0300
262 SERIAL_USB_OHCI = bindings::PCI_CLASS_SERIAL_USB_OHCI, // 0x0c0310
263 SERIAL_USB_EHCI = bindings::PCI_CLASS_SERIAL_USB_EHCI, // 0x0c0320
264 SERIAL_USB_XHCI = bindings::PCI_CLASS_SERIAL_USB_XHCI, // 0x0c0330
265 SERIAL_USB_CDNS = bindings::PCI_CLASS_SERIAL_USB_CDNS, // 0x0c0380
266 SERIAL_USB_DEVICE = bindings::PCI_CLASS_SERIAL_USB_DEVICE, // 0x0c03fe
267 SERIAL_FIBER = bindings::PCI_CLASS_SERIAL_FIBER, // 0x0c0400
268 SERIAL_SMBUS = bindings::PCI_CLASS_SERIAL_SMBUS, // 0x0c0500
269 SERIAL_IPMI_SMIC = bindings::PCI_CLASS_SERIAL_IPMI_SMIC, // 0x0c0700
270 SERIAL_IPMI_KCS = bindings::PCI_CLASS_SERIAL_IPMI_KCS, // 0x0c0701
271 SERIAL_IPMI_BT = bindings::PCI_CLASS_SERIAL_IPMI_BT, // 0x0c0702
272
273 WIRELESS_RF_CONTROLLER = bindings::PCI_CLASS_WIRELESS_RF_CONTROLLER, // 0x0d1000
274 WIRELESS_WHCI = bindings::PCI_CLASS_WIRELESS_WHCI, // 0x0d1010
275
276 INTELLIGENT_I2O = bindings::PCI_CLASS_INTELLIGENT_I2O, // 0x0e0000
277
278 SATELLITE_TV = bindings::PCI_CLASS_SATELLITE_TV, // 0x0f0000
279 SATELLITE_AUDIO = bindings::PCI_CLASS_SATELLITE_AUDIO, // 0x0f0100
280 SATELLITE_VOICE = bindings::PCI_CLASS_SATELLITE_VOICE, // 0x0f0300
281 SATELLITE_DATA = bindings::PCI_CLASS_SATELLITE_DATA, // 0x0f0400
282
283 CRYPT_NETWORK = bindings::PCI_CLASS_CRYPT_NETWORK, // 0x100000
284 CRYPT_ENTERTAINMENT = bindings::PCI_CLASS_CRYPT_ENTERTAINMENT, // 0x100100
285 CRYPT_OTHER = bindings::PCI_CLASS_CRYPT_OTHER, // 0x108000
286
287 SP_DPIO = bindings::PCI_CLASS_SP_DPIO, // 0x110000
288 SP_OTHER = bindings::PCI_CLASS_SP_OTHER, // 0x118000
289
290 ACCELERATOR_PROCESSING = bindings::PCI_CLASS_ACCELERATOR_PROCESSING, // 0x120000
291
292 OTHERS = bindings::PCI_CLASS_OTHERS, // 0xff0000
293}
294
295define_all_pci_vendors! {
296 PCI_SIG = bindings::PCI_VENDOR_ID_PCI_SIG, // 0x0001
297 LOONGSON = bindings::PCI_VENDOR_ID_LOONGSON, // 0x0014
298 SOLIDIGM = bindings::PCI_VENDOR_ID_SOLIDIGM, // 0x025e
299 TTTECH = bindings::PCI_VENDOR_ID_TTTECH, // 0x0357
300 DYNALINK = bindings::PCI_VENDOR_ID_DYNALINK, // 0x0675
301 UBIQUITI = bindings::PCI_VENDOR_ID_UBIQUITI, // 0x0777
302 BERKOM = bindings::PCI_VENDOR_ID_BERKOM, // 0x0871
303 ITTIM = bindings::PCI_VENDOR_ID_ITTIM, // 0x0b48
304 COMPAQ = bindings::PCI_VENDOR_ID_COMPAQ, // 0x0e11
305 LSI_LOGIC = bindings::PCI_VENDOR_ID_LSI_LOGIC, // 0x1000
306 ATI = bindings::PCI_VENDOR_ID_ATI, // 0x1002
307 VLSI = bindings::PCI_VENDOR_ID_VLSI, // 0x1004
308 ADL = bindings::PCI_VENDOR_ID_ADL, // 0x1005
309 NS = bindings::PCI_VENDOR_ID_NS, // 0x100b
310 TSENG = bindings::PCI_VENDOR_ID_TSENG, // 0x100c
311 WEITEK = bindings::PCI_VENDOR_ID_WEITEK, // 0x100e
312 DEC = bindings::PCI_VENDOR_ID_DEC, // 0x1011
313 CIRRUS = bindings::PCI_VENDOR_ID_CIRRUS, // 0x1013
314 IBM = bindings::PCI_VENDOR_ID_IBM, // 0x1014
315 UNISYS = bindings::PCI_VENDOR_ID_UNISYS, // 0x1018
316 COMPEX2 = bindings::PCI_VENDOR_ID_COMPEX2, // 0x101a
317 WD = bindings::PCI_VENDOR_ID_WD, // 0x101c
318 AMI = bindings::PCI_VENDOR_ID_AMI, // 0x101e
319 AMD = bindings::PCI_VENDOR_ID_AMD, // 0x1022
320 TRIDENT = bindings::PCI_VENDOR_ID_TRIDENT, // 0x1023
321 AI = bindings::PCI_VENDOR_ID_AI, // 0x1025
322 DELL = bindings::PCI_VENDOR_ID_DELL, // 0x1028
323 MATROX = bindings::PCI_VENDOR_ID_MATROX, // 0x102B
324 MOBILITY_ELECTRONICS = bindings::PCI_VENDOR_ID_MOBILITY_ELECTRONICS, // 0x14f2
325 CT = bindings::PCI_VENDOR_ID_CT, // 0x102c
326 MIRO = bindings::PCI_VENDOR_ID_MIRO, // 0x1031
327 NEC = bindings::PCI_VENDOR_ID_NEC, // 0x1033
328 FD = bindings::PCI_VENDOR_ID_FD, // 0x1036
329 SI = bindings::PCI_VENDOR_ID_SI, // 0x1039
330 HP = bindings::PCI_VENDOR_ID_HP, // 0x103c
331 HP_3PAR = bindings::PCI_VENDOR_ID_HP_3PAR, // 0x1590
332 PCTECH = bindings::PCI_VENDOR_ID_PCTECH, // 0x1042
333 ASUSTEK = bindings::PCI_VENDOR_ID_ASUSTEK, // 0x1043
334 DPT = bindings::PCI_VENDOR_ID_DPT, // 0x1044
335 OPTI = bindings::PCI_VENDOR_ID_OPTI, // 0x1045
336 ELSA = bindings::PCI_VENDOR_ID_ELSA, // 0x1048
337 STMICRO = bindings::PCI_VENDOR_ID_STMICRO, // 0x104A
338 BUSLOGIC = bindings::PCI_VENDOR_ID_BUSLOGIC, // 0x104B
339 TI = bindings::PCI_VENDOR_ID_TI, // 0x104c
340 SONY = bindings::PCI_VENDOR_ID_SONY, // 0x104d
341 WINBOND2 = bindings::PCI_VENDOR_ID_WINBOND2, // 0x1050
342 ANIGMA = bindings::PCI_VENDOR_ID_ANIGMA, // 0x1051
343 EFAR = bindings::PCI_VENDOR_ID_EFAR, // 0x1055
344 MOTOROLA = bindings::PCI_VENDOR_ID_MOTOROLA, // 0x1057
345 PROMISE = bindings::PCI_VENDOR_ID_PROMISE, // 0x105a
346 FOXCONN = bindings::PCI_VENDOR_ID_FOXCONN, // 0x105b
347 UMC = bindings::PCI_VENDOR_ID_UMC, // 0x1060
348 PICOPOWER = bindings::PCI_VENDOR_ID_PICOPOWER, // 0x1066
349 MYLEX = bindings::PCI_VENDOR_ID_MYLEX, // 0x1069
350 APPLE = bindings::PCI_VENDOR_ID_APPLE, // 0x106b
351 YAMAHA = bindings::PCI_VENDOR_ID_YAMAHA, // 0x1073
352 QLOGIC = bindings::PCI_VENDOR_ID_QLOGIC, // 0x1077
353 CYRIX = bindings::PCI_VENDOR_ID_CYRIX, // 0x1078
354 CONTAQ = bindings::PCI_VENDOR_ID_CONTAQ, // 0x1080
355 OLICOM = bindings::PCI_VENDOR_ID_OLICOM, // 0x108d
356 SUN = bindings::PCI_VENDOR_ID_SUN, // 0x108e
357 NI = bindings::PCI_VENDOR_ID_NI, // 0x1093
358 CMD = bindings::PCI_VENDOR_ID_CMD, // 0x1095
359 BROOKTREE = bindings::PCI_VENDOR_ID_BROOKTREE, // 0x109e
360 SGI = bindings::PCI_VENDOR_ID_SGI, // 0x10a9
361 WINBOND = bindings::PCI_VENDOR_ID_WINBOND, // 0x10ad
362 PLX = bindings::PCI_VENDOR_ID_PLX, // 0x10b5
363 MADGE = bindings::PCI_VENDOR_ID_MADGE, // 0x10b6
364 THREECOM = bindings::PCI_VENDOR_ID_3COM, // 0x10b7
365 AL = bindings::PCI_VENDOR_ID_AL, // 0x10b9
366 NEOMAGIC = bindings::PCI_VENDOR_ID_NEOMAGIC, // 0x10c8
367 TCONRAD = bindings::PCI_VENDOR_ID_TCONRAD, // 0x10da
368 ROHM = bindings::PCI_VENDOR_ID_ROHM, // 0x10db
369 NVIDIA = bindings::PCI_VENDOR_ID_NVIDIA, // 0x10de
370 IMS = bindings::PCI_VENDOR_ID_IMS, // 0x10e0
371 AMCC = bindings::PCI_VENDOR_ID_AMCC, // 0x10e8
372 AMPERE = bindings::PCI_VENDOR_ID_AMPERE, // 0x1def
373 INTERG = bindings::PCI_VENDOR_ID_INTERG, // 0x10ea
374 REALTEK = bindings::PCI_VENDOR_ID_REALTEK, // 0x10ec
375 XILINX = bindings::PCI_VENDOR_ID_XILINX, // 0x10ee
376 INIT = bindings::PCI_VENDOR_ID_INIT, // 0x1101
377 CREATIVE = bindings::PCI_VENDOR_ID_CREATIVE, // 0x1102
378 TTI = bindings::PCI_VENDOR_ID_TTI, // 0x1103
379 SIGMA = bindings::PCI_VENDOR_ID_SIGMA, // 0x1105
380 VIA = bindings::PCI_VENDOR_ID_VIA, // 0x1106
381 SIEMENS = bindings::PCI_VENDOR_ID_SIEMENS, // 0x110A
382 VORTEX = bindings::PCI_VENDOR_ID_VORTEX, // 0x1119
383 EF = bindings::PCI_VENDOR_ID_EF, // 0x111a
384 IDT = bindings::PCI_VENDOR_ID_IDT, // 0x111d
385 FORE = bindings::PCI_VENDOR_ID_FORE, // 0x1127
386 PHILIPS = bindings::PCI_VENDOR_ID_PHILIPS, // 0x1131
387 EICON = bindings::PCI_VENDOR_ID_EICON, // 0x1133
388 CISCO = bindings::PCI_VENDOR_ID_CISCO, // 0x1137
389 ZIATECH = bindings::PCI_VENDOR_ID_ZIATECH, // 0x1138
390 SYSKONNECT = bindings::PCI_VENDOR_ID_SYSKONNECT, // 0x1148
391 DIGI = bindings::PCI_VENDOR_ID_DIGI, // 0x114f
392 XIRCOM = bindings::PCI_VENDOR_ID_XIRCOM, // 0x115d
393 SERVERWORKS = bindings::PCI_VENDOR_ID_SERVERWORKS, // 0x1166
394 ALTERA = bindings::PCI_VENDOR_ID_ALTERA, // 0x1172
395 SBE = bindings::PCI_VENDOR_ID_SBE, // 0x1176
396 TOSHIBA = bindings::PCI_VENDOR_ID_TOSHIBA, // 0x1179
397 TOSHIBA_2 = bindings::PCI_VENDOR_ID_TOSHIBA_2, // 0x102f
398 ATTO = bindings::PCI_VENDOR_ID_ATTO, // 0x117c
399 RICOH = bindings::PCI_VENDOR_ID_RICOH, // 0x1180
400 DLINK = bindings::PCI_VENDOR_ID_DLINK, // 0x1186
401 ARTOP = bindings::PCI_VENDOR_ID_ARTOP, // 0x1191
402 ZEITNET = bindings::PCI_VENDOR_ID_ZEITNET, // 0x1193
403 FUJITSU_ME = bindings::PCI_VENDOR_ID_FUJITSU_ME, // 0x119e
404 MARVELL = bindings::PCI_VENDOR_ID_MARVELL, // 0x11ab
405 MARVELL_EXT = bindings::PCI_VENDOR_ID_MARVELL_EXT, // 0x1b4b
406 V3 = bindings::PCI_VENDOR_ID_V3, // 0x11b0
407 ATT = bindings::PCI_VENDOR_ID_ATT, // 0x11c1
408 SPECIALIX = bindings::PCI_VENDOR_ID_SPECIALIX, // 0x11cb
409 ANALOG_DEVICES = bindings::PCI_VENDOR_ID_ANALOG_DEVICES, // 0x11d4
410 ZORAN = bindings::PCI_VENDOR_ID_ZORAN, // 0x11de
411 COMPEX = bindings::PCI_VENDOR_ID_COMPEX, // 0x11f6
412 MICROSEMI = bindings::PCI_VENDOR_ID_MICROSEMI, // 0x11f8
413 RP = bindings::PCI_VENDOR_ID_RP, // 0x11fe
414 CYCLADES = bindings::PCI_VENDOR_ID_CYCLADES, // 0x120e
415 ESSENTIAL = bindings::PCI_VENDOR_ID_ESSENTIAL, // 0x120f
416 O2 = bindings::PCI_VENDOR_ID_O2, // 0x1217
417 THREEDX = bindings::PCI_VENDOR_ID_3DFX, // 0x121a
418 AVM = bindings::PCI_VENDOR_ID_AVM, // 0x1244
419 STALLION = bindings::PCI_VENDOR_ID_STALLION, // 0x124d
420 AT = bindings::PCI_VENDOR_ID_AT, // 0x1259
421 ASIX = bindings::PCI_VENDOR_ID_ASIX, // 0x125b
422 ESS = bindings::PCI_VENDOR_ID_ESS, // 0x125d
423 SATSAGEM = bindings::PCI_VENDOR_ID_SATSAGEM, // 0x1267
424 ENSONIQ = bindings::PCI_VENDOR_ID_ENSONIQ, // 0x1274
425 TRANSMETA = bindings::PCI_VENDOR_ID_TRANSMETA, // 0x1279
426 ROCKWELL = bindings::PCI_VENDOR_ID_ROCKWELL, // 0x127A
427 ITE = bindings::PCI_VENDOR_ID_ITE, // 0x1283
428 ALTEON = bindings::PCI_VENDOR_ID_ALTEON, // 0x12ae
429 NVIDIA_SGS = bindings::PCI_VENDOR_ID_NVIDIA_SGS, // 0x12d2
430 PERICOM = bindings::PCI_VENDOR_ID_PERICOM, // 0x12D8
431 AUREAL = bindings::PCI_VENDOR_ID_AUREAL, // 0x12eb
432 ELECTRONICDESIGNGMBH = bindings::PCI_VENDOR_ID_ELECTRONICDESIGNGMBH, // 0x12f8
433 ESDGMBH = bindings::PCI_VENDOR_ID_ESDGMBH, // 0x12fe
434 CB = bindings::PCI_VENDOR_ID_CB, // 0x1307
435 SIIG = bindings::PCI_VENDOR_ID_SIIG, // 0x131f
436 RADISYS = bindings::PCI_VENDOR_ID_RADISYS, // 0x1331
437 MICRO_MEMORY = bindings::PCI_VENDOR_ID_MICRO_MEMORY, // 0x1332
438 DOMEX = bindings::PCI_VENDOR_ID_DOMEX, // 0x134a
439 INTASHIELD = bindings::PCI_VENDOR_ID_INTASHIELD, // 0x135a
440 QUATECH = bindings::PCI_VENDOR_ID_QUATECH, // 0x135C
441 SEALEVEL = bindings::PCI_VENDOR_ID_SEALEVEL, // 0x135e
442 HYPERCOPE = bindings::PCI_VENDOR_ID_HYPERCOPE, // 0x1365
443 DIGIGRAM = bindings::PCI_VENDOR_ID_DIGIGRAM, // 0x1369
444 KAWASAKI = bindings::PCI_VENDOR_ID_KAWASAKI, // 0x136b
445 CNET = bindings::PCI_VENDOR_ID_CNET, // 0x1371
446 LMC = bindings::PCI_VENDOR_ID_LMC, // 0x1376
447 NETGEAR = bindings::PCI_VENDOR_ID_NETGEAR, // 0x1385
448 APPLICOM = bindings::PCI_VENDOR_ID_APPLICOM, // 0x1389
449 MOXA = bindings::PCI_VENDOR_ID_MOXA, // 0x1393
450 CCD = bindings::PCI_VENDOR_ID_CCD, // 0x1397
451 EXAR = bindings::PCI_VENDOR_ID_EXAR, // 0x13a8
452 MICROGATE = bindings::PCI_VENDOR_ID_MICROGATE, // 0x13c0
453 THREEWARE = bindings::PCI_VENDOR_ID_3WARE, // 0x13C1
454 IOMEGA = bindings::PCI_VENDOR_ID_IOMEGA, // 0x13ca
455 ABOCOM = bindings::PCI_VENDOR_ID_ABOCOM, // 0x13D1
456 SUNDANCE = bindings::PCI_VENDOR_ID_SUNDANCE, // 0x13f0
457 CMEDIA = bindings::PCI_VENDOR_ID_CMEDIA, // 0x13f6
458 ADVANTECH = bindings::PCI_VENDOR_ID_ADVANTECH, // 0x13fe
459 MEILHAUS = bindings::PCI_VENDOR_ID_MEILHAUS, // 0x1402
460 LAVA = bindings::PCI_VENDOR_ID_LAVA, // 0x1407
461 TIMEDIA = bindings::PCI_VENDOR_ID_TIMEDIA, // 0x1409
462 ICE = bindings::PCI_VENDOR_ID_ICE, // 0x1412
463 MICROSOFT = bindings::PCI_VENDOR_ID_MICROSOFT, // 0x1414
464 OXSEMI = bindings::PCI_VENDOR_ID_OXSEMI, // 0x1415
465 CHELSIO = bindings::PCI_VENDOR_ID_CHELSIO, // 0x1425
466 EDIMAX = bindings::PCI_VENDOR_ID_EDIMAX, // 0x1432
467 ADLINK = bindings::PCI_VENDOR_ID_ADLINK, // 0x144a
468 SAMSUNG = bindings::PCI_VENDOR_ID_SAMSUNG, // 0x144d
469 GIGABYTE = bindings::PCI_VENDOR_ID_GIGABYTE, // 0x1458
470 AMBIT = bindings::PCI_VENDOR_ID_AMBIT, // 0x1468
471 MYRICOM = bindings::PCI_VENDOR_ID_MYRICOM, // 0x14c1
472 MEDIATEK = bindings::PCI_VENDOR_ID_MEDIATEK, // 0x14c3
473 TITAN = bindings::PCI_VENDOR_ID_TITAN, // 0x14D2
474 PANACOM = bindings::PCI_VENDOR_ID_PANACOM, // 0x14d4
475 SIPACKETS = bindings::PCI_VENDOR_ID_SIPACKETS, // 0x14d9
476 AFAVLAB = bindings::PCI_VENDOR_ID_AFAVLAB, // 0x14db
477 AMPLICON = bindings::PCI_VENDOR_ID_AMPLICON, // 0x14dc
478 BCM_GVC = bindings::PCI_VENDOR_ID_BCM_GVC, // 0x14a4
479 BROADCOM = bindings::PCI_VENDOR_ID_BROADCOM, // 0x14e4
480 TOPIC = bindings::PCI_VENDOR_ID_TOPIC, // 0x151f
481 MAINPINE = bindings::PCI_VENDOR_ID_MAINPINE, // 0x1522
482 ENE = bindings::PCI_VENDOR_ID_ENE, // 0x1524
483 SYBA = bindings::PCI_VENDOR_ID_SYBA, // 0x1592
484 MORETON = bindings::PCI_VENDOR_ID_MORETON, // 0x15aa
485 VMWARE = bindings::PCI_VENDOR_ID_VMWARE, // 0x15ad
486 ZOLTRIX = bindings::PCI_VENDOR_ID_ZOLTRIX, // 0x15b0
487 MELLANOX = bindings::PCI_VENDOR_ID_MELLANOX, // 0x15b3
488 DFI = bindings::PCI_VENDOR_ID_DFI, // 0x15bd
489 QUICKNET = bindings::PCI_VENDOR_ID_QUICKNET, // 0x15e2
490 ADDIDATA = bindings::PCI_VENDOR_ID_ADDIDATA, // 0x15B8
491 PDC = bindings::PCI_VENDOR_ID_PDC, // 0x15e9
492 FARSITE = bindings::PCI_VENDOR_ID_FARSITE, // 0x1619
493 ARIMA = bindings::PCI_VENDOR_ID_ARIMA, // 0x161f
494 BROCADE = bindings::PCI_VENDOR_ID_BROCADE, // 0x1657
495 SIBYTE = bindings::PCI_VENDOR_ID_SIBYTE, // 0x166d
496 ATHEROS = bindings::PCI_VENDOR_ID_ATHEROS, // 0x168c
497 NETCELL = bindings::PCI_VENDOR_ID_NETCELL, // 0x169c
498 CENATEK = bindings::PCI_VENDOR_ID_CENATEK, // 0x16CA
499 SYNOPSYS = bindings::PCI_VENDOR_ID_SYNOPSYS, // 0x16c3
500 USR = bindings::PCI_VENDOR_ID_USR, // 0x16ec
501 VITESSE = bindings::PCI_VENDOR_ID_VITESSE, // 0x1725
502 LINKSYS = bindings::PCI_VENDOR_ID_LINKSYS, // 0x1737
503 ALTIMA = bindings::PCI_VENDOR_ID_ALTIMA, // 0x173b
504 CAVIUM = bindings::PCI_VENDOR_ID_CAVIUM, // 0x177d
505 TECHWELL = bindings::PCI_VENDOR_ID_TECHWELL, // 0x1797
506 BELKIN = bindings::PCI_VENDOR_ID_BELKIN, // 0x1799
507 RDC = bindings::PCI_VENDOR_ID_RDC, // 0x17f3
508 GLI = bindings::PCI_VENDOR_ID_GLI, // 0x17a0
509 LENOVO = bindings::PCI_VENDOR_ID_LENOVO, // 0x17aa
510 QCOM = bindings::PCI_VENDOR_ID_QCOM, // 0x17cb
511 CDNS = bindings::PCI_VENDOR_ID_CDNS, // 0x17cd
512 ARECA = bindings::PCI_VENDOR_ID_ARECA, // 0x17d3
513 S2IO = bindings::PCI_VENDOR_ID_S2IO, // 0x17d5
514 SITECOM = bindings::PCI_VENDOR_ID_SITECOM, // 0x182d
515 TOPSPIN = bindings::PCI_VENDOR_ID_TOPSPIN, // 0x1867
516 COMMTECH = bindings::PCI_VENDOR_ID_COMMTECH, // 0x18f7
517 SILAN = bindings::PCI_VENDOR_ID_SILAN, // 0x1904
518 RENESAS = bindings::PCI_VENDOR_ID_RENESAS, // 0x1912
519 SOLARFLARE = bindings::PCI_VENDOR_ID_SOLARFLARE, // 0x1924
520 TDI = bindings::PCI_VENDOR_ID_TDI, // 0x192E
521 NXP = bindings::PCI_VENDOR_ID_NXP, // 0x1957
522 PASEMI = bindings::PCI_VENDOR_ID_PASEMI, // 0x1959
523 ATTANSIC = bindings::PCI_VENDOR_ID_ATTANSIC, // 0x1969
524 JMICRON = bindings::PCI_VENDOR_ID_JMICRON, // 0x197B
525 KORENIX = bindings::PCI_VENDOR_ID_KORENIX, // 0x1982
526 HUAWEI = bindings::PCI_VENDOR_ID_HUAWEI, // 0x19e5
527 NETRONOME = bindings::PCI_VENDOR_ID_NETRONOME, // 0x19ee
528 QMI = bindings::PCI_VENDOR_ID_QMI, // 0x1a32
529 AZWAVE = bindings::PCI_VENDOR_ID_AZWAVE, // 0x1a3b
530 REDHAT_QUMRANET = bindings::PCI_VENDOR_ID_REDHAT_QUMRANET, // 0x1af4
531 ASMEDIA = bindings::PCI_VENDOR_ID_ASMEDIA, // 0x1b21
532 REDHAT = bindings::PCI_VENDOR_ID_REDHAT, // 0x1b36
533 WCHIC = bindings::PCI_VENDOR_ID_WCHIC, // 0x1c00
534 SILICOM_DENMARK = bindings::PCI_VENDOR_ID_SILICOM_DENMARK, // 0x1c2c
535 AMAZON_ANNAPURNA_LABS = bindings::PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS, // 0x1c36
536 CIRCUITCO = bindings::PCI_VENDOR_ID_CIRCUITCO, // 0x1cc8
537 AMAZON = bindings::PCI_VENDOR_ID_AMAZON, // 0x1d0f
538 ZHAOXIN = bindings::PCI_VENDOR_ID_ZHAOXIN, // 0x1d17
539 ROCKCHIP = bindings::PCI_VENDOR_ID_ROCKCHIP, // 0x1d87
540 HYGON = bindings::PCI_VENDOR_ID_HYGON, // 0x1d94
541 META = bindings::PCI_VENDOR_ID_META, // 0x1d9b
542 FUNGIBLE = bindings::PCI_VENDOR_ID_FUNGIBLE, // 0x1dad
543 HXT = bindings::PCI_VENDOR_ID_HXT, // 0x1dbf
544 TEKRAM = bindings::PCI_VENDOR_ID_TEKRAM, // 0x1de1
545 RPI = bindings::PCI_VENDOR_ID_RPI, // 0x1de4
546 ALIBABA = bindings::PCI_VENDOR_ID_ALIBABA, // 0x1ded
547 CXL = bindings::PCI_VENDOR_ID_CXL, // 0x1e98
548 TEHUTI = bindings::PCI_VENDOR_ID_TEHUTI, // 0x1fc9
549 SUNIX = bindings::PCI_VENDOR_ID_SUNIX, // 0x1fd4
550 HINT = bindings::PCI_VENDOR_ID_HINT, // 0x3388
551 THREEDLABS = bindings::PCI_VENDOR_ID_3DLABS, // 0x3d3d
552 NETXEN = bindings::PCI_VENDOR_ID_NETXEN, // 0x4040
553 AKS = bindings::PCI_VENDOR_ID_AKS, // 0x416c
554 WCHCN = bindings::PCI_VENDOR_ID_WCHCN, // 0x4348
555 ACCESSIO = bindings::PCI_VENDOR_ID_ACCESSIO, // 0x494f
556 S3 = bindings::PCI_VENDOR_ID_S3, // 0x5333
557 DUNORD = bindings::PCI_VENDOR_ID_DUNORD, // 0x5544
558 DCI = bindings::PCI_VENDOR_ID_DCI, // 0x6666
559 GLENFLY = bindings::PCI_VENDOR_ID_GLENFLY, // 0x6766
560 INTEL = bindings::PCI_VENDOR_ID_INTEL, // 0x8086
561 WANGXUN = bindings::PCI_VENDOR_ID_WANGXUN, // 0x8088
562 SCALEMP = bindings::PCI_VENDOR_ID_SCALEMP, // 0x8686
563 COMPUTONE = bindings::PCI_VENDOR_ID_COMPUTONE, // 0x8e0e
564 KTI = bindings::PCI_VENDOR_ID_KTI, // 0x8e2e
565 ADAPTEC = bindings::PCI_VENDOR_ID_ADAPTEC, // 0x9004
566 ADAPTEC2 = bindings::PCI_VENDOR_ID_ADAPTEC2, // 0x9005
567 HOLTEK = bindings::PCI_VENDOR_ID_HOLTEK, // 0x9412
568 NETMOS = bindings::PCI_VENDOR_ID_NETMOS, // 0x9710
569 THREECOM_2 = bindings::PCI_VENDOR_ID_3COM_2, // 0xa727
570 SOLIDRUN = bindings::PCI_VENDOR_ID_SOLIDRUN, // 0xd063
571 DIGIUM = bindings::PCI_VENDOR_ID_DIGIUM, // 0xd161
572 TIGERJET = bindings::PCI_VENDOR_ID_TIGERJET, // 0xe159
573 XILINX_RME = bindings::PCI_VENDOR_ID_XILINX_RME, // 0xea60
574 XEN = bindings::PCI_VENDOR_ID_XEN, // 0x5853
575 OCZ = bindings::PCI_VENDOR_ID_OCZ, // 0x1b85
576 NCUBE = bindings::PCI_VENDOR_ID_NCUBE, // 0x10ff
577}