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 7 use 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)] 30 pub struct Class(u32); 31 32 /// PCI class mask constants for matching [`Class`] codes. 33 #[repr(u32)] 34 #[derive(Debug, Clone, Copy, PartialEq, Eq)] 35 pub 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 42 macro_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. 67 impl 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 94 impl fmt::Debug for Class { 95 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 96 write!(f, "0x{:06x}", self.0) 97 } 98 } 99 100 impl ClassMask { 101 /// Get the raw mask value. 102 #[inline] 103 pub const fn as_raw(self) -> u32 { 104 self as u32 105 } 106 } 107 108 impl 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)] 125 pub struct Vendor(u16); 126 127 macro_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. 152 impl 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 166 impl 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 173 define_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 295 define_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 } 578