OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/io/pci
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v2_0/cdl/io_pci.cdl
0,0 → 1,113
# ====================================================================
#
# io_pci.cdl
#
# eCos PCI library configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): jskov
# Contributors:
# Date: 1999-08-12
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_IO_PCI {
display "PCI configuration library"
doc ref/io-pci.html
include_dir cyg/io
parent CYGPKG_IO
description "
The PCI configuration library provides initialization of devices
on the PCI bus. Functions to find and access these devices are
also provided."
 
compile pci.c pci_hw.c
 
cdl_component CYGPKG_IO_PCI_OPTIONS {
display "PCI build options"
flavor none
description "
Package specific build options including control over
compiler flags used only in building this package,
and details of which tests are built."
 
 
cdl_option CYGPKG_IO_PCI_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the PCI configuration library. These flags are used in addition
to the set of global flags."
}
 
cdl_option CYGPKG_IO_PCI_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the PCI configuration library. These flags are removed from
the set of global flags if present."
}
 
cdl_option CYGPKG_IO_PCI_DEBUG {
display "Enable debugging."
flavor bool
default_value 0
description "
This option enables minimal debugging of the PCI library.
In particular, it will print information about devices as the
PCI bus is being scanned/searched."
}
 
cdl_option CYGPKG_IO_PCI_TESTS {
display "PCI tests"
flavor data
no_define
calculated { "tests/pci1 tests/pci2" }
description "
This option specifies the set of tests for the PCI configuration library."
}
}
}
/v2_0/tests/pcihdr.h
0,0 → 1,4066
#if 0
PCIHDR.H: PCI Vendors, Devices, and Class Type information
 
Created automatically from the web using the following URL:
http://www.yourvote.com/pci
Software to create and maintain the PCICODE List written by:
Jim Boemler (jboemler@halcyon.com)
 
This header created on Tue, 26 Dec 2000 09:11:51 UTC
 
Too many people have contributed to this list to acknowledge them all, but
a few have provided the majority of the input and deserve special mention:
Frederic Potter, who maintains a list for Linux.
Chris Aston at Madge Networks.
Thomas Dippon of Hewlett-Packard GmbH.
Jurgen ("Josh") Thelen
William H. Avery III at Altitech
#endif
 
// NOTE that the 0xFFFF of 0xFF entries at the end of some tables below are
// not properly list terminators, but are actually the printable definitions
// of values that are legitimately found on the PCI bus. The size
// definitions should be used for loop control when the table is searched.
 
typedef struct _PCI_VENTABLE
{
unsigned short VenId ;
char * VenShort ;
char * VenFull ;
} PCI_VENTABLE, *PPCI_VENTABLE ;
 
PCI_VENTABLE PciVenTable [] =
{
{ 0x0000, "Gammagraphx", "Gammagraphx, Inc." } ,
{ 0x001A, "Ascend", "Ascend Communications, Inc." } ,
{ 0x0033, "", "Paradyne Corp." } ,
{ 0x003D, "Lockheed Martin", "Lockheed Martin Corp" } ,
{ 0x0070, "Hauppauge", "Hauppauge Computer Works Inc." } ,
{ 0x0100, "", "Ncipher Corp. Ltd" } ,
{ 0x0123, "", "General Dynamics" } ,
{ 0x0675, "Dynalink", "Dynalink" } ,
{ 0x0A89, "BREA", "BREA Technologies Inc." } ,
{ 0x0E11, "Compaq", "Compaq Computer Corp." } ,
{ 0x1000, "LSI", "LSI Logic" } ,
{ 0x1001, "KOLTER", "Kolter Electronic - Germany" } ,
{ 0x1002, "ATI", "ATI Technologies" } ,
{ 0x1003, "ULSI", "ULSI" } ,
{ 0x1004, "VLSI", "VLSI Technology" } ,
{ 0x1005, "Avance", "Avance Logic Inc." } ,
{ 0x1006, "Reply", "Reply Group" } ,
{ 0x1007, "NetFrame", "Netframe Systems" } ,
{ 0x1008, "Epson", "Epson" } ,
{ 0x100A, "Phoenix", "Phoenix Technologies Ltd." } ,
{ 0x100B, "NSC", "National Semiconductor" } ,
{ 0x100C, "Tseng", "Tseng Labs" } ,
{ 0x100D, "AST", "AST Research" } ,
{ 0x100E, "Weitek", "Weitek" } ,
{ 0x1010, "VLogic", "Video Logic Ltd." } ,
{ 0x1011, "DEC", "Digital Equipment Corporation" } ,
{ 0x1012, "Micronics", "Micronics Computers Inc." } ,
{ 0x1013, "Cirrus", "Cirrus Logic" } ,
{ 0x1014, "IBM", "IBM" } ,
{ 0x1015, "LSIL", "LSI Logic Corp of Canada" } ,
{ 0x1016, "Fujitsu ICL", "Fujitsu ICL Computers" } ,
{ 0x1017, "Spea", "Spea Software AG" } ,
{ 0x1018, "Unisys", "Unisys Systems" } ,
{ 0x1019, "ECS", "Elitegroup Computer Sys" } ,
{ 0x101A, "NCR", "NCR/AT&T GIS" } ,
{ 0x101B, "Vitesse", "Vitesse Semiconductor" } ,
{ 0x101C, "WD", "Western Digital" } ,
{ 0x101E, "AMI", "American Megatrends Inc." } ,
{ 0x101F, "PictureTel", "PictureTel Corp." } ,
{ 0x1020, "Hitachi", "Hitachi Computer Electronics" } ,
{ 0x1021, "OKI", "Oki Electric Industry" } ,
{ 0x1022, "AMD", "Advanced Micro Devices" } ,
{ 0x1023, "Trident", "Trident Microsystems" } ,
{ 0x1024, "Zenith", "Zenith Data Systems" } ,
{ 0x1025, "Acer", "Acer Incorporated" } ,
{ 0x1028, "Dell", "Dell Computer Corporation" } ,
{ 0x1029, "Siem-Nix", "Siemens Nixdorf AG" } ,
{ 0x102A, "LSI", "LSI Logic Headland Div" } ,
{ 0x102B, "Matrox", "Matrox" } ,
{ 0x102C, "C&T", "Chips And Technologies" } ,
{ 0x102D, "Wyse", "Wyse Technologies" } ,
{ 0x102E, "Olivetti", "Olivetti Advanced Technology" } ,
{ 0x102F, "Toshiba", "Toshiba America" } ,
{ 0x1030, "TMC", "TMC Research" } ,
{ 0x1031, "miro", "miro Computer Products AG" } ,
{ 0x1032, "Compaq", "Compaq" } ,
{ 0x1033, "NEC", "NEC Corporation" } ,
{ 0x1034, "Burndy", "Burndy Corporation" } ,
{ 0x1035, "C&CRL", "Computer&Communication Research Lab" } ,
{ 0x1036, "FDomain", "Future Domain" } ,
{ 0x1037, "Hitachi", "Hitachi Micro Systems Inc" } ,
{ 0x1038, "AMP", "AMP Incorporated" } ,
{ 0x1039, "SiS", "Silicon Integrated System" } ,
{ 0x103A, "Seiko", "Seiko Epson Corporation" } ,
{ 0x103B, "Tatung", "Tatung Corp. Of America" } ,
{ 0x103C, "HP", "Hewlett-Packard Company" } ,
{ 0x103E, "Solliday", "Solliday Engineering" } ,
{ 0x103F, "Logic Mod.", "Logic Modeling" } ,
{ 0x1040, "Kubota", "Kubota Pacific Computer Inc." } ,
{ 0x1041, "Computrend", "Computrend" } ,
{ 0x1042, "PC Tech.", "PC Technology" } ,
{ 0x1043, "Asustek", "Asustek Computer Inc." } ,
{ 0x1044, "DPT", "Distributed Processing Tech" } ,
{ 0x1045, "OPTi", "OPTi Inc." } ,
{ 0x1046, "IPC", "IPC Corporation LTD" } ,
{ 0x1047, "Genoa", "Genoa Systems Corp." } ,
{ 0x1048, "ELSA", "ELSA AG" } ,
{ 0x1049, "Fountain", "Fountain Technology" } ,
{ 0x104A, "STM", "ST Microelectronics" } ,
{ 0x104B, "Mylex", "Mylex Corporation" } ,
{ 0x104C, "TI", "Texas Instruments" } ,
{ 0x104D, "Sony", "Sony Corporation" } ,
{ 0x104E, "Oak", "Oak Technology" } ,
{ 0x104F, "Co-Time", "Co-Time Computer Ltd." } ,
{ 0x1050, "Winbond", "Winbond Electronics Corp." } ,
{ 0x1051, "Anigma", "Anigma Corp." } ,
{ 0x1052, "Young", "Young Micro Systems" } ,
{ 0x1054, "Hitachi", "Hitachi LTD" } ,
{ 0x1055, "EFAR", "EFAR Microsystems" } ,
{ 0x1056, "ICL", "ICL" } ,
{ 0x1057, "Motorola", "Motorola" } ,
{ 0x1058, "E&TR", "Electronics & Telecommunication Res" } ,
{ 0x1059, "Teknor", "Teknor Microsystems" } ,
{ 0x105A, "Promise", "Promise Technology" } ,
{ 0x105B, "Foxconn", "Foxconn International" } ,
{ 0x105C, "Wipro", "Wipro Infotech Limited" } ,
{ 0x105D, "Number-Nine", "Number Nine Visual Technology" } ,
{ 0x105E, "Vtech", "Vtech Engineering Canada Ltd." } ,
{ 0x105F, "Infotronic", "Infotronic America Inc." } ,
{ 0x1060, "UMC", "United Microelectronics" } ,
{ 0x1061, "8x8", "8x8 Inc." } ,
{ 0x1062, "Maspar", "Maspar Computer Corp." } ,
{ 0x1063, "OOA", "Ocean Office Automation" } ,
{ 0x1064, "Alcatel", "Alcatel Cit" } ,
{ 0x1065, "TM", "Texas Microsystems" } ,
{ 0x1066, "Picopower", "Picopower Technology" } ,
{ 0x1067, "Mitsubishi", "Mitsubishi Electronics" } ,
{ 0x1068, "Div. Tech.", "Diversified Technology" } ,
{ 0x1069, "Mylex", "Mylex Corporation" } ,
{ 0x106A, "Aten", "Aten Research Inc." } ,
{ 0x106B, "Apple", "Apple Computer Inc." } ,
{ 0x106C, "Hyundai", "Hyundai Electronics America" } ,
{ 0x106D, "Sequent", "Sequent" } ,
{ 0x106E, "DFI", "DFI Inc." } ,
{ 0x106F, "CityGate", "City Gate Development LTD" } ,
{ 0x1070, "Daewoo", "Daewoo Telecom Ltd." } ,
{ 0x1071, "Mitac", "Mitac" } ,
{ 0x1072, "GIT", "GIT Co. Ltd." } ,
{ 0x1073, "Yamaha", "Yamaha Corporation" } ,
{ 0x1074, "Nexgen", "Nexgen Microsysteme" } ,
{ 0x1075, "AIR", "Advanced Integration Research" } ,
{ 0x1076, "Chaintech", "Chaintech Computer Co. Ltd." } ,
{ 0x1077, "Q Logic", "Q Logic" } ,
{ 0x1078, "Cyrix", "Cyrix Corporation" } ,
{ 0x1079, "I-Bus", "I-Bus" } ,
{ 0x107A, "Networth", "Networth" } ,
{ 0x107B, "Gateway", "Gateway 2000" } ,
{ 0x107C, "Goldstar", "Goldstar Co. Ltd." } ,
{ 0x107D, "Leadtek", "Leadtek Research" } ,
{ 0x107E, "Interphase", "Interphase Corporation" } ,
{ 0x107F, "DTC", "Data Technology Corporation" } ,
{ 0x1080, "Contaq", "Contaq Microsystems" } ,
{ 0x1081, "Supermac", "Supermac Technology Inc." } ,
{ 0x1082, "EFA", "EFA Corporation Of America" } ,
{ 0x1083, "Forex", "Forex Computer Corporation" } ,
{ 0x1084, "Parador", "Parador" } ,
{ 0x1085, "Tulip", "Tulip Computers Int'l BV" } ,
{ 0x1086, "J. Bond", "J. Bond Computer Systems" } ,
{ 0x1087, "Cache", "Cache Computer" } ,
{ 0x1088, "MS Son", "Microcomputer Systems (M) Son" } ,
{ 0x1089, "DG", "Data General Corporation" } ,
{ 0x108A, "Bit3", "Bit3 Computer" } ,
{ 0x108C, "Elonex", "Elonex PLC c/o Oakleigh Systems Inc." } ,
{ 0x108D, "Olicom", "Olicom" } ,
{ 0x108E, "Sun", "Sun Microsystems" } ,
{ 0x108F, "Systemsoft", "Systemsoft Corporation" } ,
{ 0x1090, "Encore", "Encore Computer Corporation" } ,
{ 0x1091, "Intergraph", "Intergraph Corporation" } ,
{ 0x1092, "Diamond", "Diamond Computer Systems" } ,
{ 0x1093, "Nat. Inst.", "National Instruments" } ,
{ 0x1094, "FIC", "First Int'l Computers" } ,
{ 0x1095, "CMD", "CMD Technology Inc." } ,
{ 0x1096, "Alacron", "Alacron" } ,
{ 0x1097, "Appian", "Appian Graphics" } ,
{ 0x1098, "Quantum", "Quantum Designs Ltd." } ,
{ 0x1099, "Samsung", "Samsung Electronics Co. Ltd." } ,
{ 0x109A, "Packard-Bell", "Packard Bell" } ,
{ 0x109B, "Gemlight", "Gemlight Computer Ltd." } ,
{ 0x109C, "Megachips", "Megachips Corporation" } ,
{ 0x109D, "Zida", "Zida Technologies Ltd." } ,
{ 0x109E, "Brooktree", "Brooktree Corporation" } ,
{ 0x109F, "Trigem", "Trigem Computer Inc." } ,
{ 0x10A0, "Meidensha", "Meidensha Corporation" } ,
{ 0x10A1, "Juko", "Juko Electronics Inc. Ltd." } ,
{ 0x10A2, "Quantum", "Quantum Corporation" } ,
{ 0x10A3, "Everex", "Everex Systems Inc." } ,
{ 0x10A4, "Globe", "Globe Manufacturing Sales" } ,
{ 0x10A5, "Racal", "Racal Interlan" } ,
{ 0x10A6, "Informtech", "Informtech Industrial Ltd." } ,
{ 0x10A7, "Benchmarq", "Benchmarq Microelectronics" } ,
{ 0x10A8, "Sierra", "Sierra Semiconductor" } ,
{ 0x10A9, "SG", "Silicon Graphics" } ,
{ 0x10AA, "ACC", "ACC Microelectronics" } ,
{ 0x10AB, "Digicom", "Digicom" } ,
{ 0x10AC, "Honeywell", "Honeywell IASD" } ,
{ 0x10AD, "Symphony", "Symphony Labs" } ,
{ 0x10AE, "Cornerstone", "Cornerstone Technology" } ,
{ 0x10AF, "MCS", "Micro Computer Systems Inc." } ,
{ 0x10B0, "Cardexpert", "Cardexpert Technology" } ,
{ 0x10B1, "Cabletron", "Cabletron Systems Inc." } ,
{ 0x10B2, "Raytheon", "Raytheon Company" } ,
{ 0x10B3, "Databook", "Databook Inc." } ,
{ 0x10B4, "STB", "STB Systems" } ,
{ 0x10B5, "PLX", "PLX Technology" } ,
{ 0x10B6, "Madge", "Madge Networks" } ,
{ 0x10B7, "3Com", "3Com Corporation" } ,
{ 0x10B8, "SMC", "Standard Microsystems Corporation" } ,
{ 0x10B9, "ALI", "Acer Labs Inc." } ,
{ 0x10BA, "Mitsubishi", "Mitsubishi Electronics Corp." } ,
{ 0x10BB, "Dapha", "Dapha Electronics Corporation" } ,
{ 0x10BC, "ALR", "Advanced Logic Research Inc." } ,
{ 0x10BD, "Surecom", "Surecom Technology" } ,
{ 0x10BE, "Tseng", "Tsenglabs International Corp." } ,
{ 0x10BF, "MOST", "MOST Corp." } ,
{ 0x10C0, "Boca", "Boca Research Inc." } ,
{ 0x10C1, "ICM", "ICM Corp. Ltd." } ,
{ 0x10C2, "Auspex", "Auspex Systems Inc." } ,
{ 0x10C3, "Samsung", "Samsung Semiconductors" } ,
{ 0x10C4, "Award", "Award Software Int'l Inc." } ,
{ 0x10C5, "Xerox", "Xerox Corporation" } ,
{ 0x10C6, "Rambus", "Rambus Inc." } ,
{ 0x10C7, "Media Vision", "Media Vision" } ,
{ 0x10C8, "Neomagic", "Neomagic Corporation" } ,
{ 0x10C9, "Dataexpert", "Dataexpert Corporation" } ,
{ 0x10CA, "Fujitsu", "Fujitsu" } ,
{ 0x10CB, "Omron", "Omron Corporation" } ,
{ 0x10CC, "Mentor", "Mentor Arc Inc." } ,
{ 0x10CD, "AdvanSys", "Advanced System Products" } ,
{ 0x10CE, "Radius", "Radius Inc." } ,
{ 0x10CF, "TTI", "Citicorp TTI" } ,
{ 0x10D0, "Fujitsu", "Fujitsu Limited" } ,
{ 0x10D1, "Future+", "Future+ Systems" } ,
{ 0x10D2, "Molex", "Molex Incorporated" } ,
{ 0x10D3, "Jabil", "Jabil Circuit Inc." } ,
{ 0x10D4, "Hualon", "Hualon Microelectronics" } ,
{ 0x10D5, "Autologic", "Autologic Inc." } ,
{ 0x10D6, "Cetia", "Cetia" } ,
{ 0x10D7, "BCM", "BCM Advanced Research" } ,
{ 0x10D8, "APL", "Advanced Peripherals Labs" } ,
{ 0x10D9, "Macronix", "Macronix International Co. Ltd." } ,
{ 0x10DA, "T-C", "Thomas-Conrad Corporation" } ,
{ 0x10DB, "Rohm", "Rohm Research" } ,
{ 0x10DC, "CERN", "CERN-European Lab. for Particle Physics" } ,
{ 0x10DD, "E&S", "Evans & Sutherland" } ,
{ 0x10DE, "Nvidia", "Nvidia Corporation" } ,
{ 0x10DF, "Emulex", "Emulex Corporation" } ,
{ 0x10E0, "IMS", "Integrated Micro Solutions" } ,
{ 0x10E1, "Tekram", "Tekram Technology Corp. Ltd." } ,
{ 0x10E2, "Aptix", "Aptix Corporation" } ,
{ 0x10E3, "Tundra", "Tundra Semiconductor Corp." } ,
{ 0x10E4, "Tandem", "Tandem Computers" } ,
{ 0x10E5, "MIC", "Micro Industries Corporation" } ,
{ 0x10E6, "Gainbery", "Gainbery Computer Products Inc." } ,
{ 0x10E7, "Vadem", "Vadem" } ,
{ 0x10E8, "AMCC", "Applied Micro Circuits Corp." } ,
{ 0x10E9, "Alps", "Alps Electronic Corp. Ltd." } ,
{ 0x10EA, "Intergraphics", "Integraphics Systems" } ,
{ 0x10EB, "Artist", "Artist Graphics" } ,
{ 0x10EC, "Realtek", "Realtek Semiconductor" } ,
{ 0x10ED, "Ascii", "Ascii Corporation" } ,
{ 0x10EE, "Xilinx", "Xilinx Corporation" } ,
{ 0x10EF, "Racore", "Racore Computer Products" } ,
{ 0x10F0, "Peritek", "Peritek Corporation" } ,
{ 0x10F1, "Tyan", "Tyan Computer" } ,
{ 0x10F2, "Achme", "Achme Computer Inc." } ,
{ 0x10F3, "Alaris", "Alaris Inc." } ,
{ 0x10F4, "S-Mos", "S-Mos Systems" } ,
{ 0x10F5, "NKK", "NKK Corporation" } ,
{ 0x10F6, "Creative", "Creative Electronic Systems SA" } ,
{ 0x10F7, "Matsushita", "Matsushita Electric Industrial Corp." } ,
{ 0x10F8, "Altos", "Altos India Ltd." } ,
{ 0x10F9, "PC-Direct", "PC Direct" } ,
{ 0x10FA, "Truevision", "Truevision" } ,
{ 0x10FB, "Thesys", "Thesys Microelectronic's" } ,
{ 0x10FC, "I-O", "I-O Data Device Inc." } ,
{ 0x10FD, "Soyo", "Soyo Technology Corp. Ltd." } ,
{ 0x10FE, "Fast", "Fast Electronic GmbH" } ,
{ 0x10FF, "Ncube", "Ncube" } ,
{ 0x1100, "Jazz", "Jazz Multimedia" } ,
{ 0x1101, "Initio", "Initio Corporation" } ,
{ 0x1102, "Creative Labs", "Creative Labs" } ,
{ 0x1103, "HighPoint", "HighPoint Technologies Inc." } ,
{ 0x1104, "Rasterops", "Rasterops" } ,
{ 0x1105, "Sigma", "Sigma Designs Inc." } ,
{ 0x1106, "VIA", "VIA Technologies Inc" } ,
{ 0x1107, "Stratus", "Stratus Computer" } ,
{ 0x1108, "Proteon", "Proteon Inc." } ,
{ 0x1109, "Cogent", "Cogent Data Technologies" } ,
{ 0x110A, "Infineon", "Infineon Technologies" } ,
{ 0x110B, "Chromatic", "Chromatic Research Inc" } ,
{ 0x110C, "Mini-Max", "Mini-Max Technology Inc." } ,
{ 0x110D, "ZNYX", "ZNYX Corporation" } ,
{ 0x110E, "CPU Tech.", "CPU Technology" } ,
{ 0x110F, "Ross", "Ross Technology" } ,
{ 0x1110, "Powerhouse", "Powerhouse Systems" } ,
{ 0x1111, "SCO", "Santa Cruz Operation" } ,
{ 0x1112, "Osicom", "Osicom Technologies Inc." } ,
{ 0x1113, "Accton", "Accton Technology Corporation" } ,
{ 0x1114, "Atmel", "Atmel Corp." } ,
{ 0x1115, "Dupont", "Dupont Pixel Systems Ltd." } ,
{ 0x1116, "Data Trans.", "Data Translation" } ,
{ 0x1117, "Datacube", "Datacube Inc." } ,
{ 0x1118, "Berg", "Berg Electronics" } ,
{ 0x1119, "Vortex", "Vortex Computersysteme GmbH" } ,
{ 0x111A, "Eff. Net.", "Efficent Networks" } ,
{ 0x111B, "Teledyne", "Teledyne Electronic Systems" } ,
{ 0x111C, "Tricord", "Tricord Systems Inc." } ,
{ 0x111D, "IDT", "Integrated Device Technology Inc." } ,
{ 0x111E, "Eldec", "Eldec Corp." } ,
{ 0x111F, "PDI", "Precision Digital Images" } ,
{ 0x1120, "EMC", "EMC Corp." } ,
{ 0x1121, "Zilog", "Zilog" } ,
{ 0x1122, "Multi-Tech", "Multi-Tech Systems Inc." } ,
{ 0x1123, "EDI", "Excellent Design Inc." } ,
{ 0x1124, "Leutron", "Leutron Vision AG" } ,
{ 0x1125, "Eurocore", "Eurocore/Vigra" } ,
{ 0x1126, "Vigra", "Vigra" } ,
{ 0x1127, "FORE", "FORE Systems" } ,
{ 0x1129, "Firmworks", "Firmworks" } ,
{ 0x112A, "Hermes", "Hermes Electronics Co. Ltd." } ,
{ 0x112B, "Linotype", "Linotype - Hell AG" } ,
{ 0x112C, "Zenith", "Zenith Data Systems" } ,
{ 0x112D, "Ravicad", "Ravicad" } ,
{ 0x112E, "Infomedia", "Infomedia" } ,
{ 0x112F, "ImagTech", "Imaging Technology" } ,
{ 0x1130, "Computervision", "Computervision" } ,
{ 0x1131, "Philips", "Philips Semiconductors" } ,
{ 0x1132, "Mitel", "Mitel Corp." } ,
{ 0x1133, "EIC", "Eicon Technology Corporation" } ,
{ 0x1134, "MCS", "Mercury Computer Systems Inc." } ,
{ 0x1135, "Fuji", "Fuji Xerox Co Ltd" } ,
{ 0x1136, "Momentum", "Momentum Data Systems" } ,
{ 0x1137, "Cisco", "Cisco Systems Inc" } ,
{ 0x1138, "Ziatech", "Ziatech Corporation" } ,
{ 0x1139, "Dyn. Pict.", "Dynamic Pictures Inc" } ,
{ 0x113A, "FWB", "FWB Inc" } ,
{ 0x113B, "NCD", "Network Computing Devices" } ,
{ 0x113C, "Cyclone", "Cyclone Microsystems" } ,
{ 0x113D, "Leading Edge", "Leading Edge Products Inc" } ,
{ 0x113E, "Sanyo", "Sanyo Electric Co" } ,
{ 0x113F, "Equinox", "Equinox Systems" } ,
{ 0x1140, "Intervoice", "Intervoice Inc" } ,
{ 0x1141, "Crest", "Crest Microsystem Inc" } ,
{ 0x1142, "Alliance", "Alliance Semiconductor CA - USA" } ,
{ 0x1143, "Netpower", "Netpower Inc" } ,
{ 0x1144, "Cinn. Mil.", "Cincinnati Milacron" } ,
{ 0x1145, "Workbit", "Workbit Corp" } ,
{ 0x1146, "Force", "Force Computers" } ,
{ 0x1147, "Interface", "Interface Corp" } ,
{ 0x1148, "S&K", "Schneider & Koch" } ,
{ 0x1149, "Win System", "Win System Corporation" } ,
{ 0x114A, "VMIC", "VMIC" } ,
{ 0x114B, "Canopus", "Canopus Co. Ltd" } ,
{ 0x114C, "Annabooks", "Annabooks" } ,
{ 0x114D, "IC Corp.", "IC Corporation" } ,
{ 0x114E, "Nikon", "Nikon Systems Inc" } ,
{ 0x114F, "Digi", "Digi International" } ,
{ 0x1150, "TMC", "Thinking Machines Corporation" } ,
{ 0x1151, "JAE", "JAE Electronics Inc." } ,
{ 0x1152, "Megatek", "Megatek" } ,
{ 0x1153, "Land Win", "Land Win Electronic Corp" } ,
{ 0x1154, "Melco", "Melco Inc" } ,
{ 0x1155, "Pine", "Pine Technology Ltd" } ,
{ 0x1156, "Periscope", "Periscope Engineering" } ,
{ 0x1157, "Avsys", "Avsys Corporation" } ,
{ 0x1158, "Voarx", "Voarx R&D Inc" } ,
{ 0x1159, "Mutech", "Mutech" } ,
{ 0x115A, "Harlequin", "Harlequin Ltd" } ,
{ 0x115B, "Parallax", "Parallax Graphics" } ,
{ 0x115C, "Photron", "Photron Ltd." } ,
{ 0x115D, "Xircom", "Xircom" } ,
{ 0x115E, "Peer", "Peer Protocols Inc" } ,
{ 0x115F, "Maxtor", "Maxtor Corporation" } ,
{ 0x1160, "Megasoft", "Megasoft Inc" } ,
{ 0x1161, "PFU", "PFU Ltd" } ,
{ 0x1162, "OA Lab", "OA Laboratory Co Ltd" } ,
{ 0x1163, "Rendition", "Rendition Inc" } ,
{ 0x1164, "APT", "Advanced Peripherals Tech" } ,
{ 0x1165, "Imagraph", "Imagraph Corporation" } ,
{ 0x1166, "Pequr/Ross", "Pequr Technology / Ross Computer Corp" } ,
{ 0x1167, "Mutoh", "Mutoh Industries Inc" } ,
{ 0x1168, "Thine", "Thine Electronics Inc" } ,
{ 0x1169, "CDAC", "Centre f/Dev. of Adv. Computing" } ,
{ 0x116A, "Polaris", "Polaris Communications" } ,
{ 0x116B, "Connectware", "Connectware Inc" } ,
{ 0x116C, "Int Res.", "Intelligent Resources" } ,
{ 0x116E, "EFI", "Electronics for Imaging" } ,
{ 0x116F, "WkSta. Tech.", "Workstation Technology" } ,
{ 0x1170, "Inventec", "Inventec Corporation" } ,
{ 0x1171, "Lough. Sound", "Loughborough Sound Images" } ,
{ 0x1172, "Altera", "Altera Corporation" } ,
{ 0x1173, "Adobe", "Adobe Systems" } ,
{ 0x1174, "Bridgeport", "Bridgeport Machines" } ,
{ 0x1175, "Mitron", "Mitron Computer Inc." } ,
{ 0x1176, "SBE", "SBE" } ,
{ 0x1177, "Silicon Eng.", "Silicon Engineering" } ,
{ 0x1178, "Alfa", "Alfa Inc" } ,
{ 0x1179, "Toshiba", "Toshiba America Info Systems" } ,
{ 0x117A, "A-Trend", "A-Trend Technology" } ,
{ 0x117B, "LG Elec.", "LG Electronics Inc." } ,
{ 0x117C, "Atto", "Atto Technology" } ,
{ 0x117D, "B&D", "Becton & Dickinson" } ,
{ 0x117E, "T/R", "T/R Systems" } ,
{ 0x117F, "ICS", "Integrated Circuit Systems" } ,
{ 0x1180, "Ricoh", "Ricoh Co Ltd" } ,
{ 0x1181, "Telmatics", "Telmatics International" } ,
{ 0x1183, "Fujikura", "Fujikura Ltd" } ,
{ 0x1184, "Forks", "Forks Inc" } ,
{ 0x1185, "Dataworld", "Dataworld" } ,
{ 0x1186, "D-Link", "D-Link System Inc" } ,
{ 0x1187, "ATL", "Advanced Technology Laboratories" } ,
{ 0x1188, "Shima", "Shima Seiki Manufacturing Ltd." } ,
{ 0x1189, "Matsushita", "Matsushita Electronics" } ,
{ 0x118A, "Hilevel", "Hilevel Technology" } ,
{ 0x118B, "Hypertec", "Hypertec Pty Ltd" } ,
{ 0x118C, "Corollary", "Corollary Inc" } ,
{ 0x118D, "BitFlow", "BitFlow Inc" } ,
{ 0x118E, "Hermstedt", "Hermstedt GmbH" } ,
{ 0x118F, "Green", "Green Logic" } ,
{ 0x1190, "Tripace", "Tripace" } ,
{ 0x1191, "ACARD", "ACARD Technology" } ,
{ 0x1192, "Densan", "Densan Co. Ltd" } ,
{ 0x1193, "Zeitnet", "Zeitnet Inc." } ,
{ 0x1194, "Toucan", "Toucan Technology" } ,
{ 0x1195, "Ratoc", "Ratoc System Inc" } ,
{ 0x1196, "Hytec", "Hytec Electronics Ltd" } ,
{ 0x1197, "Gage", "Gage Applied Sciences Inc." } ,
{ 0x1198, "Lambda", "Lambda Systems Inc" } ,
{ 0x1199, "Attachmate", "Attachmate Corp." } ,
{ 0x119A, "Mind Share", "Mind Share Inc." } ,
{ 0x119B, "Omega", "Omega Micro Inc." } ,
{ 0x119C, "ITI", "Information Technology Inst." } ,
{ 0x119D, "Bug", "Bug Sapporo Japan" } ,
{ 0x119E, "Fujitsu", "Fujitsu" } ,
{ 0x119F, "Bull", "Bull Hn Information Systems" } ,
{ 0x11A0, "Convex", "Convex Computer Corporation" } ,
{ 0x11A1, "Hamamatsu", "Hamamatsu Photonics K.K." } ,
{ 0x11A2, "Sierra", "Sierra Research and Technology" } ,
{ 0x11A3, "Deuretzbacher", "Deuretzbacher GmbH & Co. Eng. KG" } ,
{ 0x11A4, "Barco", "Barco" } ,
{ 0x11A5, "MicroUnity", "MicroUnity Systems Engineering Inc." } ,
{ 0x11A6, "Pure Data", "Pure Data" } ,
{ 0x11A7, "Power Comp.", "Power Computing Corp." } ,
{ 0x11A8, "Systech", "Systech Corp." } ,
{ 0x11A9, "InnoSys", "InnoSys Inc." } ,
{ 0x11AA, "Actel", "Actel" } ,
{ 0x11AB, "Galileo", "Galileo Technology Ltd." } ,
{ 0x11AC, "Canon", "Canon Information Systems" } ,
{ 0x11AD, "Lite-On", "Lite-On Communications Inc" } ,
{ 0x11AE, "Scitex", "Scitex Corporation Ltd" } ,
{ 0x11AF, "Avid", "Avid Technology Inc." } ,
{ 0x11B0, "V3", "V3 Semiconductor Inc." } ,
{ 0x11B1, "Apricot", "Apricot Computers" } ,
{ 0x11B2, "Kodak", "Eastman Kodak" } ,
{ 0x11B3, "Barr", "Barr Systems Inc." } ,
{ 0x11B4, "Leitch", "Leitch Technology International" } ,
{ 0x11B5, "Radstone", "Radstone Technology Plc" } ,
{ 0x11B6, "United Video", "United Video Corp" } ,
{ 0x11B7, "Motorola", "Motorola" } ,
{ 0x11B8, "Xpoint", "Xpoint Technologies Inc" } ,
{ 0x11B9, "Pathlight", "Pathlight Technology Inc." } ,
{ 0x11BA, "Videotron", "Videotron Corp" } ,
{ 0x11BB, "Pyramid", "Pyramid Technology" } ,
{ 0x11BC, "Net. Periph.", "Network Peripherals Inc" } ,
{ 0x11BD, "Pinnacle", "Pinnacle Systems Inc." } ,
{ 0x11BE, "IMI", "International Microcircuits Inc" } ,
{ 0x11BF, "Astrodesign", "Astrodesign Inc." } ,
{ 0x11C0, "H-P", "Hewlett-Packard" } ,
{ 0x11C1, "AT&T", "AT&T Microelectronics" } ,
{ 0x11C2, "Sand", "Sand Microelectronics" } ,
{ 0x11C3, "NEC", "NEC Corporation" } ,
{ 0x11C4, "Doc. Tech.", "Document Technologies Ind." } ,
{ 0x11C5, "Shiva", "Shiva Corporatin" } ,
{ 0x11C6, "Dainippon", "Dainippon Screen Mfg. Co" } ,
{ 0x11C7, "D.C.M.", "D.C.M. Data Systems" } ,
{ 0x11C8, "Dolphin", "Dolphin Interconnect Solutions" } ,
{ 0x11C9, "MAGMA", "MAGMA" } ,
{ 0x11CA, "LSI Sys.", "LSI Systems Inc" } ,
{ 0x11CB, "Specialix", "Specialix International Ltd." } ,
{ 0x11CC, "M&K", "Michels & Kleberhoff Computer GmbH" } ,
{ 0x11CD, "HAL", "HAL Computer Systems Inc." } ,
{ 0x11CE, "PRI", "Primary Rate Inc" } ,
{ 0x11CF, "PEC", "Pioneer Electronic Corporation" } ,
{ 0x11D0, "Loral", "Loral Frederal Systems - Manassas" } ,
{ 0x11D1, "AuraVision", "AuraVision Corporation" } ,
{ 0x11D2, "Intercom", "Intercom Inc." } ,
{ 0x11D3, "Trancell", "Trancell Systems Inc" } ,
{ 0x11D4, "AD", "Analog Devices" } ,
{ 0x11D5, "Ikon", "Ikon Corp" } ,
{ 0x11D6, "Tekelec", "Tekelec Technologies" } ,
{ 0x11D7, "Trenton", "Trenton Terminals Inc" } ,
{ 0x11D8, "ITD", "Image Technologies Development" } ,
{ 0x11D9, "Tec", "Tec Corporation" } ,
{ 0x11DA, "Novell", "Novell" } ,
{ 0x11DB, "Sega", "Sega Enterprises Ltd" } ,
{ 0x11DC, "Questra", "Questra Corp" } ,
{ 0x11DD, "Crosfield", "Crosfield Electronics Ltd" } ,
{ 0x11DE, "Zoran", "Zoran Corporation" } ,
{ 0x11DF, "New Wave", "New Wave Pdg" } ,
{ 0x11E0, "Cray", "Cray Communications A/S" } ,
{ 0x11E1, "Gec Plessey", "Gec Plessey Semi Inc" } ,
{ 0x11E2, "Samsung", "Samsung Information Systems America" } ,
{ 0x11E3, "Quicklogic", "Quicklogic Corp" } ,
{ 0x11E4, "Second Wave", "Second Wave Inc" } ,
{ 0x11E5, "IIX", "IIX Consulting" } ,
{ 0x11E6, "Mitsui", "Mitsui-Zosen System Research" } ,
{ 0x11E7, "Toshiba", "Toshiba America Elec. Co" } ,
{ 0x11E8, "DPSI", "Digital Processing Systems Inc" } ,
{ 0x11E9, "Highwater", "Highwater Designs Ltd" } ,
{ 0x11EA, "Elsag", "Elsag Bailey" } ,
{ 0x11EB, "Formation", "Formation Inc" } ,
{ 0x11EC, "Coreco", "Coreco Inc" } ,
{ 0x11ED, "Mediamatics", "Mediamatics" } ,
{ 0x11EE, "Dome", "Dome Imaging Systems Inc" } ,
{ 0x11EF, "Nicolet", "Nicolet Technologies BV" } ,
{ 0x11F0, "Compu-Shack", "Compu-Shack GmbH" } ,
{ 0x11F1, "Symbios", "Symbios Logic Inc" } ,
{ 0x11F2, "Pic-Tel", "Picture Tel Japan KK" } ,
{ 0x11F3, "Keithley", "Keithley Metrabyte" } ,
{ 0x11F4, "Kinetic", "Kinetic Systems Corporation" } ,
{ 0x11F5, "Comp Dev", "Computing Devices Intl" } ,
{ 0x11F6, "Powermatic", "Powermatic Data Systems Ltd" } ,
{ 0x11F7, "S-A", "Scientific Atlanta" } ,
{ 0x11F8, "PMC-Sierra", "PMC-Sierra Inc." } ,
{ 0x11F9, "I-Cube", "I-Cube Inc" } ,
{ 0x11FA, "Kasan", "Kasan Electronics Co Ltd" } ,
{ 0x11FB, "Datel", "Datel Inc" } ,
{ 0x11FC, "Silicon Magic", "Silicon Magic" } ,
{ 0x11FD, "High Street", "High Street Consultants" } ,
{ 0x11FE, "Comtrol", "Comtrol Corp" } ,
{ 0x11FF, "Scion", "Scion Corp" } ,
{ 0x1200, "CSS", "CSS Corp" } ,
{ 0x1201, "Vista", "Vista Controls Corp" } ,
{ 0x1202, "Network Gen", "Network General Corp" } ,
{ 0x1203, "Agfa", "Bayer Corporation Agfa Div" } ,
{ 0x1204, "Lattice", "Lattice Semiconductor Corp" } ,
{ 0x1205, "Array", "Array Corp" } ,
{ 0x1206, "Amdahl", "Amdahl Corp" } ,
{ 0x1208, "Parsytec", "Parsytec GmbH" } ,
{ 0x1209, "Sci Sys", "Sci Systems Inc" } ,
{ 0x120A, "Synaptel", "Synaptel" } ,
{ 0x120B, "Adaptive", "Adaptive Solutions" } ,
{ 0x120D, "Comp Labs", "Compression Labs Inc." } ,
{ 0x120E, "Cyclades", "Cyclades Corporation" } ,
{ 0x120F, "Essential", "Essential Communications" } ,
{ 0x1210, "Hyperparallel", "Hyperparallel Technologies" } ,
{ 0x1211, "Braintech", "Braintech Inc" } ,
{ 0x1212, "Kingston", "Kingston Technology Corp" } ,
{ 0x1213, "AISI", "Applied Intelligent Systems Inc" } ,
{ 0x1214, "Perf Tech", "Performance Technologies Inc" } ,
{ 0x1215, "Interware", "Interware Co Ltd" } ,
{ 0x1216, "Purup Eskofot", "Purup-Eskofot A/S" } ,
{ 0x1217, "O2Micro", "O2Micro Inc" } ,
{ 0x1218, "Hybricon", "Hybricon Corp" } ,
{ 0x1219, "First Virtual", "First Virtual Corp" } ,
{ 0x121A, "3dfx", "3dfx Interactive Inc" } ,
{ 0x121B, "ATM", "Advanced Telecommunications Modules" } ,
{ 0x121C, "Nippon Texa", "Nippon Texa Co Ltd" } ,
{ 0x121D, "Lippert", "Lippert Automationstechnik GmbH" } ,
{ 0x121E, "CSPI", "CSPI" } ,
{ 0x121F, "Arcus", "Arcus Technology Inc" } ,
{ 0x1220, "Ariel", "Ariel Corporation" } ,
{ 0x1221, "Contec", "Contec Co Ltd" } ,
{ 0x1222, "Ancor", "Ancor Communications Inc" } ,
{ 0x1223, "Heurikon", "Heurikon/Computer Products" } ,
{ 0x1224, "Int. Img.", "Interactive Images" } ,
{ 0x1225, "Power IO", "Power I/O Inc." } ,
{ 0x1227, "Tech-Source", "Tech-Source" } ,
{ 0x1228, "Norsk", "Norsk Elektro Optikk A/S" } ,
{ 0x1229, "Data Kin", "Data Kinesis Inc." } ,
{ 0x122A, "Int. Telecom", "Integrated Telecom" } ,
{ 0x122B, "LG Ind.", "LG Industrial Systems Co. Ltd." } ,
{ 0x122C, "Sican", "Sican GmbH" } ,
{ 0x122D, "Aztech", "Aztech System Ltd" } ,
{ 0x122E, "Xyratex", "Xyratex" } ,
{ 0x122F, "Andrew", "Andrew Corp." } ,
{ 0x1230, "Fishcamp", "Fishcamp Engineering" } ,
{ 0x1231, "WMI", "Woodward McCoach Inc." } ,
{ 0x1232, "GPT", "GPT Ltd." } ,
{ 0x1233, "Bus-Tech", "Bus-Tech Inc." } ,
{ 0x1234, "Technical", "Technical Corp" } ,
{ 0x1235, "Risq Mod", "Risq Modular Systems Inc." } ,
{ 0x1236, "Sigma", "Sigma Designs Corp." } ,
{ 0x1237, "Alta Tech", "Alta Technology Corp." } ,
{ 0x1238, "Adtran", "Adtran" } ,
{ 0x1239, "3DO", "The 3DO Company" } ,
{ 0x123A, "Visicom", "Visicom Laboratories Inc." } ,
{ 0x123B, "Seeq", "Seeq Technology Inc." } ,
{ 0x123C, "Century Sys", "Century Systems Inc." } ,
{ 0x123D, "EDT", "Engineering Design Team Inc." } ,
{ 0x123F, "C-Cube", "C-Cube Microsystems" } ,
{ 0x1240, "Marathon", "Marathon Technologies Corp." } ,
{ 0x1241, "DSC", "DSC Communications" } ,
{ 0x1242, "Jaycor", "Jaycor Network Inc." } ,
{ 0x1243, "Delphax", "Delphax" } ,
{ 0x1244, "AVM", "AVM AUDIOVISUELLES MKTG & Computer GmbH" } ,
{ 0x1245, "APD", "APD S.A." } ,
{ 0x1246, "Dipix", "Dipix Technologies Inc" } ,
{ 0x1247, "Xylon", "Xylon Research Inc." } ,
{ 0x1248, "Central Data", "Central Data Corp." } ,
{ 0x1249, "Samsung", "Samsung Electronics Co. Ltd." } ,
{ 0x124A, "AEG", "AEG Electrocom GmbH" } ,
{ 0x124B, "GreenSpring", "GreenSpring Computers" } ,
{ 0x124C, "Solitron", "Solitron Technologies Inc." } ,
{ 0x124D, "Stallion", "Stallion Technologies" } ,
{ 0x124E, "Cylink", "Cylink" } ,
{ 0x124F, "Infortrend", "Infortrend Technology Inc" } ,
{ 0x1250, "Hitachi", "Hitachi Microcomputer System Ltd." } ,
{ 0x1251, "VLSI Sol.", "VLSI Solution OY" } ,
{ 0x1253, "Guzik", "Guzik Technical Enterprises" } ,
{ 0x1254, "Linear Systems", "Linear Systems Ltd." } ,
{ 0x1255, "Optibase", "Optibase Ltd." } ,
{ 0x1256, "Perceptive", "Perceptive Solutions Inc." } ,
{ 0x1257, "Vertex", "Vertex Networks Inc." } ,
{ 0x1258, "Gilbarco", "Gilbarco Inc." } ,
{ 0x1259, "Allied Tsyn", "Allied Telesyn International" } ,
{ 0x125A, "ABB Pwr", "ABB Power Systems" } ,
{ 0x125B, "Asix", "Asix Electronics Corp." } ,
{ 0x125C, "Aurora", "Aurora Technologies Inc." } ,
{ 0x125D, "ESS", "ESS Technology" } ,
{ 0x125E, "Specvideo", "Specialvideo Engineering SRL" } ,
{ 0x125F, "Concurrent", "Concurrent Technologies Inc." } ,
{ 0x1260, "Harris", "Harris Semiconductor" } ,
{ 0x1261, "Matsushita", "Matsushita-Kotobuki Electronics Indu" } ,
{ 0x1262, "ES Comp.", "ES Computer Co. Ltd." } ,
{ 0x1263, "Sonic Sol.", "Sonic Solutions" } ,
{ 0x1264, "Aval Nag.", "Aval Nagasaki Corp." } ,
{ 0x1265, "Casio", "Casio Computer Co. Ltd." } ,
{ 0x1266, "Microdyne", "Microdyne Corp." } ,
{ 0x1267, "SA Telecom", "S.A. Telecommunications" } ,
{ 0x1268, "Tektronix", "Tektronix" } ,
{ 0x1269, "Thomson-CSF", "Thomson-CSF/TTM" } ,
{ 0x126A, "Lexmark", "Lexmark International Inc." } ,
{ 0x126B, "Adax", "Adax Inc." } ,
{ 0x126C, "NorTel", "Northern Telecom" } ,
{ 0x126D, "Splash", "Splash Technology Inc." } ,
{ 0x126E, "Sumitomo", "Sumitomo Metal Industries Ltd." } ,
{ 0x126F, "Sil Motion", "Silicon Motion" } ,
{ 0x1270, "Olympus", "Olympus Optical Co. Ltd." } ,
{ 0x1271, "GW Instr.", "GW Instruments" } ,
{ 0x1272, "Telematics", "Telematics International" } ,
{ 0x1273, "Hughes", "Hughes Network Systems" } ,
{ 0x1274, "Ensoniq", "Ensoniq" } ,
{ 0x1275, "NetApp", "Network Appliance" } ,
{ 0x1276, "Sw Net Tech", "Switched Network Technologies Inc." } ,
{ 0x1277, "Comstream", "Comstream" } ,
{ 0x1278, "Transtech", "Transtech Parallel Systems" } ,
{ 0x1279, "Transmeta", "Transmeta Corp." } ,
{ 0x127A, "Conexant", "Conexant Systems" } ,
{ 0x127B, "Pixera", "Pixera Corp" } ,
{ 0x127C, "Crosspoint", "Crosspoint Solutions Inc." } ,
{ 0x127D, "Vela Res", "Vela Research" } ,
{ 0x127E, "Winnow", "Winnov L.P." } ,
{ 0x127F, "Fujifilm", "Fujifilm" } ,
{ 0x1280, "Photoscript", "Photoscript Group Ltd." } ,
{ 0x1281, "Yokogawa", "Yokogawa Electronic Corp." } ,
{ 0x1282, "Davicom", "Davicom Semiconductor Inc." } ,
{ 0x1283, "ITExpress", "Integrated Technology Express Inc." } ,
{ 0x1284, "Sahara", "Sahara Networks Inc." } ,
{ 0x1285, "Plat Tech", "Platform Technologies Inc." } ,
{ 0x1286, "Mazet", "Mazet GmbH" } ,
{ 0x1287, "LuxSonor", "LuxSonor Inc." } ,
{ 0x1288, "Timestep", "Timestep Corp." } ,
{ 0x1289, "AVC Tech", "AVC Technology Inc." } ,
{ 0x128A, "Asante", "Asante Technologies Inc." } ,
{ 0x128B, "Transwitch", "Transwitch Corp." } ,
{ 0x128C, "Retix", "Retix Corp." } ,
{ 0x128D, "G2 Net", "G2 Networks Inc." } ,
{ 0x128E, "Samho", "Samho Multi Tech Ltd." } ,
{ 0x128F, "Tateno", "Tateno Dennou Inc." } ,
{ 0x1290, "Sord", "Sord Computer Corp." } ,
{ 0x1291, "NCS Comp", "NCS Computer Italia" } ,
{ 0x1292, "Tritech", "Tritech Microelectronics Intl PTE" } ,
{ 0x1293, "M Reality", "Media Reality Technology" } ,
{ 0x1294, "Rhetorex", "Rhetorex Inc." } ,
{ 0x1295, "Imagenation", "Imagenation Corp." } ,
{ 0x1296, "Kofax", "Kofax Image Products" } ,
{ 0x1297, "Holco", "Holco Enterprise" } ,
{ 0x1298, "Spellcaster", "Spellcaster Telecommunications Inc." } ,
{ 0x1299, "Know Tech", "Knowledge Technology Laboratories" } ,
{ 0x129A, "VMETRO", "VMETRO" } ,
{ 0x129B, "Img Access", "Image Access" } ,
{ 0x129D, "CompCore", "CompCore Multimedia Inc." } ,
{ 0x129E, "Victor Jpn", "Victor Co. of Japan Ltd." } ,
{ 0x129F, "OEC Med", "OEC Medical Systems Inc." } ,
{ 0x12A0, "A-B", "Allen Bradley Co." } ,
{ 0x12A1, "Simpact", "Simpact Inc" } ,
{ 0x12A2, "NewGen", "NewGen Systems Corp." } ,
{ 0x12A3, "Lucent", "Lucent Technologies" } ,
{ 0x12A4, "NTT Elect", "NTT Electronics Technology Co." } ,
{ 0x12A5, "Vision Dyn", "Vision Dynamics Ltd." } ,
{ 0x12A6, "Scalable", "Scalable Networks Inc." } ,
{ 0x12A7, "AMO", "AMO GmbH" } ,
{ 0x12A8, "News Datacom", "News Datacom" } ,
{ 0x12A9, "Xiotech", "Xiotech Corp." } ,
{ 0x12AA, "SDL", "SDL Communications Inc." } ,
{ 0x12AB, "Yuan Yuan", "Yuan Yuan Enterprise Co. Ltd." } ,
{ 0x12AC, "MeasureX", "MeasureX Corp." } ,
{ 0x12AD, "Multidata", "Multidata GmbH" } ,
{ 0x12AE, "Alteon", "Alteon Networks Inc." } ,
{ 0x12AF, "TDK USA", "TDK USA Corp." } ,
{ 0x12B0, "Jorge Sci", "Jorge Scientific Corp." } ,
{ 0x12B1, "GammaLink", "GammaLink" } ,
{ 0x12B2, "Gen Signal", "General Signal Networks" } ,
{ 0x12B3, "Inter-Face", "Inter-Face Co. Ltd." } ,
{ 0x12B4, "Future Tel", "Future Tel Inc." } ,
{ 0x12B5, "Granite", "Granite Systems Inc." } ,
{ 0x12B6, "Nat Micro", "Natural Microsystems" } ,
{ 0x12B7, "Acumen", "Acumen" } ,
{ 0x12B8, "Korg", "Korg" } ,
{ 0x12B9, "US Robotics", "US Robotics" } ,
{ 0x12BA, "Bittware", "Bittware Research Systems Inc" } ,
{ 0x12BB, "Nippon Uni", "Nippon Unisoft Corp." } ,
{ 0x12BC, "Array Micro", "Array Microsystems" } ,
{ 0x12BD, "Computerm", "Computerm Corp." } ,
{ 0x12BE, "Anchor Chips", "Anchor Chips Inc." } ,
{ 0x12BF, "Fujifilm", "Fujifilm Microdevices" } ,
{ 0x12C0, "Infimed", "Infimed" } ,
{ 0x12C1, "GMM Res", "GMM Research Corp." } ,
{ 0x12C2, "Mentec", "Mentec Ltd." } ,
{ 0x12C3, "Holtek", "Holtek Microelectronics Inc." } ,
{ 0x12C4, "Conn Tech", "Connect Tech Inc." } ,
{ 0x12C5, "PicturEl", "Picture Elements Inc." } ,
{ 0x12C6, "Mitani", "Mitani Corp." } ,
{ 0x12C7, "Dialogic", "Dialogic Corp." } ,
{ 0x12C8, "G Force", "G Force Co. Ltd." } ,
{ 0x12C9, "Gigi Ops", "Gigi Operations" } ,
{ 0x12CA, "ICE", "Integrated Computing Engines, Inc." } ,
{ 0x12CB, "Antex", "Antex Electronics Corp." } ,
{ 0x12CC, "Pluto", "Pluto Technologies International" } ,
{ 0x12CD, "Aims Lab", "Aims Lab" } ,
{ 0x12CE, "Netspeed", "Netspeed Inc." } ,
{ 0x12CF, "Prophet", "Prophet Systems Inc." } ,
{ 0x12D0, "GDE Sys", "GDE Systems Inc." } ,
{ 0x12D1, "PsiTech", "PsiTech" } ,
{ 0x12D2, "NVidia", "NVidia / SGS Thomson" } ,
{ 0x12D3, "Vingmed", "Vingmed Sound A/S" } ,
{ 0x12D4, "DGM&S", "DGM & S" } ,
{ 0x12D5, "Equator", "Equator Technologies" } ,
{ 0x12D6, "Analogic", "Analogic Corp." } ,
{ 0x12D7, "Biotronic", "Biotronic SRL" } ,
{ 0x12D8, "Pericom", "Pericom Semiconductor" } ,
{ 0x12D9, "Aculab", "Aculab Plc." } ,
{ 0x12DA, "TrueTime", "TrueTime" } ,
{ 0x12DB, "Annapolis", "Annapolis Micro Systems Inc." } ,
{ 0x12DC, "Symicron", "Symicron Computer Communication Ltd." } ,
{ 0x12DD, "MGI", "Management Graphics Inc." } ,
{ 0x12DE, "Rainbow", "Rainbow Technologies" } ,
{ 0x12DF, "SBS Tech", "SBS Technologies Inc." } ,
{ 0x12E0, "Chase", "Chase Research PLC" } ,
{ 0x12E1, "Nintendo", "Nintendo Co. Ltd." } ,
{ 0x12E2, "Datum", "Datum Inc. Bancomm-Timing Division" } ,
{ 0x12E3, "Imation", "Imation Corp. - Medical Imaging Syst" } ,
{ 0x12E4, "Brooktrout", "Brooktrout Technology Inc." } ,
{ 0x12E6, "Cirel", "Cirel Systems" } ,
{ 0x12E7, "Sebring", "Sebring Systems Inc" } ,
{ 0x12E8, "CRISC", "CRISC Corp." } ,
{ 0x12E9, "GE Spacenet", "GE Spacenet" } ,
{ 0x12EA, "Zuken", "Zuken" } ,
{ 0x12EB, "Aureal", "Aureal Semiconductor" } ,
{ 0x12EC, "3A Intl", "3A International Inc." } ,
{ 0x12ED, "Optivision", "Optivision Inc." } ,
{ 0x12EE, "Orange Micro", "Orange Micro, Inc." } ,
{ 0x12EF, "Vienna", "Vienna Systems" } ,
{ 0x12F0, "Pentek", "Pentek" } ,
{ 0x12F1, "Sorenson", "Sorenson Vision Inc." } ,
{ 0x12F2, "Gammagraphx", "Gammagraphx Inc." } ,
{ 0x12F4, "Megatel", "Megatel" } ,
{ 0x12F5, "Forks", "Forks" } ,
{ 0x12F6, "Dawson Fr", "Dawson France" } ,
{ 0x12F7, "Cognex", "Cognex" } ,
{ 0x12F8, "Electronic-Design", "Electronic-Design GmbH" } ,
{ 0x12F9, "FFT", "FourFold Technologies" } ,
{ 0x12FB, "", "Spectrum Signal Processing" } ,
{ 0x12FC, "", "Capital Equipment Corp" } ,
{ 0x12FE, "ESD", "ESD Electronic System Design GmbH" } ,
{ 0x1304, "", "Juniper Networks Inc." } ,
{ 0x1307, "ComputerBoards", "ComputerBoards" } ,
{ 0x1308, "Jato", "Jato Technologies Inc." } ,
{ 0x130A, "", "Mitsubishi Electric Microcomputer" } ,
{ 0x130B, "", "Colorgraphic Communications Corp" } ,
{ 0x130F, "", "Advanet Inc." } ,
{ 0x1310, "", "Gespac" } ,
{ 0x1312, "RVSI", "Robotic Vision Systems Incorporated" } ,
{ 0x1313, "", "Yaskawa Electric Co." } ,
{ 0x1316, "", "Teradyne Inc." } ,
{ 0x1317, "", "Admtek Inc" } ,
{ 0x1318, "Packet Engines", "Packet Engines, Inc." } ,
{ 0x1319, "Forte Media", "Forte Media, Inc." } ,
{ 0x131f, "", "SIIG" } ,
{ 0x1325, "", "Salix Technologies Inc" } ,
{ 0x1326, "", "Seachange International" } ,
{ 0x1331, "RadiSys", "RadiSys Corporation" } ,
{ 0x1335, "Videomail", "Videomail Inc." } ,
{ 0x133D, "", "Prisa Networks" } ,
{ 0x133F, "", "SCM Microsystems" } ,
{ 0x1342, "", "Promax Systems Inc" } ,
{ 0x1344, "", "Micron Technology Inc" } ,
{ 0x1347, "Odetics", "Odetics" } ,
{ 0x134A, "DTC", "DTC Technology Corp." } ,
{ 0x134B, "", "ARK Research Corp." } ,
{ 0x134C, "", "Chori Joho System Co. Ltd" } ,
{ 0x134D, "PCTEL", "PCTEL Inc." } ,
{ 0x135A, "", "Brain Boxes Limited" } ,
{ 0x135B, "", "Giganet Inc." } ,
{ 0x135C, "", "Quatech Inc" } ,
{ 0x135D, "ABB Network Partn", "ABB Network Partner AB" } ,
{ 0x135E, "Sealevel", "Sealevel Systems Inc." } ,
{ 0x135F, "", "I-Data International A-S" } ,
{ 0x1360, "", "Meinberg Funkuhren" } ,
{ 0x1361, "", "Soliton Systems K.K." } ,
{ 0x1363, "", "Phoenix Technologies Ltd" } ,
{ 0x1367, "", "Hitachi Zosen Corporation" } ,
{ 0x1368, "", "Skyware Corporation" } ,
{ 0x1369, "", "Digigram" } ,
{ 0x136B, "", "Kawasaki Steel Corporation" } ,
{ 0x136C, "", "Adtek System Science Co Ltd" } ,
{ 0x1375, "", "Boeing - Sunnyvale" } ,
{ 0x1377, "", "GMBH" } ,
{ 0x137A, "", "Mark Of The Unicorn Inc" } ,
{ 0x137B, "", "PPT Vision" } ,
{ 0x137C, "", "Iwatsu Electric Co Ltd" } ,
{ 0x137D, "", "Dynachip Corporation" } ,
{ 0x137E, "PTSC", "Patriot Scientific Corp." } ,
{ 0x1380, "", "Sanritz Automation Co LTC" } ,
{ 0x1381, "", "Brains Co. Ltd" } ,
{ 0x1384, "", "Stellar Semiconductor Inc" } ,
{ 0x1385, "Netgear", "Netgear" } ,
{ 0x1387, "", "Systran Corp" } ,
{ 0x1388, "", "Hitachi Information Technology Co Ltd" } ,
{ 0x1389, "Applicom", "Applicom International" } ,
{ 0x138B, "", "Tokimec Inc" } ,
{ 0x138E, "", "Basler GMBH" } ,
{ 0x138F, "", "Patapsco Designs Inc" } ,
{ 0x1390, "CDI", "Concept Development Inc." } ,
{ 0x1393, "", "Moxa Technologies Co Ltd" } ,
{ 0x1395, "", "Ambicom Inc" } ,
{ 0x1396, "", "Cipher Systems Inc" } ,
{ 0x1397, "Cologne", "Cologne Chip Designs GmbH" } ,
{ 0x1398, "", "Clarion Co. Ltd" } ,
{ 0x139A, "", "Alacritech Inc" } ,
{ 0x139D, "", "Xstreams PLC/ EPL Limited" } ,
{ 0x139E, "", "Echostar Data Networks" } ,
{ 0x13A0, "", "Crystal Group Inc" } ,
{ 0x13A1, "", "Kawasaki Heavy Industries Ltd" } ,
{ 0x13A4, "", "Rascom Inc" } ,
{ 0x13A7, "", "Teles AG" } ,
{ 0x13A8, "", "Exar Corp." } ,
{ 0x13A9, "", "Siemens Medical Systems Ultrasound Group" } ,
{ 0x13AA, "", "Nortel Networks - BWA Division" } ,
{ 0x13AF, "", "T.Sqware" } ,
{ 0x13B1, "", "Tamura Corporation" } ,
{ 0x13B4, "", "Wellbean Co Inc" } ,
{ 0x13B5, "", "ARM Ltd" } ,
{ 0x13B6, "", "DLoG GMBH" } ,
{ 0x13B8, "", "Nokia Telecommunications OY" } ,
{ 0x13BF, "", "Sharewave Inc" } ,
{ 0x13C0, "Microgate", "Microgate Corp." } ,
{ 0x13C1, "3ware", "3ware Inc." } ,
{ 0x13C2, "", "Technotrend Systemtechnik GMBH" } ,
{ 0x13C3, "", "Janz Computer AG" } ,
{ 0x13C7, "", "Blue Chip Technology Ltd" } ,
{ 0x13CC, "", "Metheus Corporation" } ,
{ 0x13CF, "", "Studio Audio & Video Ltd" } ,
{ 0x13D0, "", "B2C2 Inc" } ,
{ 0x13D1, "", "Abocom Systems Inc" } ,
{ 0x13D4, "", "Graphics Microsystems Inc" } ,
{ 0x13D6, "", "K.I. Technology Co Ltd" } ,
{ 0x13D7, "", "Toshiba Engineering Corporation" } ,
{ 0x13D8, "", "Phobos Corporation" } ,
{ 0x13D9, "", "Apex Inc" } ,
{ 0x13DC, "", "Netboost Corporation" } ,
{ 0x13DE, "", "ABB Robotics Products AB" } ,
{ 0x13DF, "E-Tech", "E-Tech Inc." } ,
{ 0x13E0, "", "GVC Corporation" } ,
{ 0x13E3, "", "Nest Inc" } ,
{ 0x13E4, "", "Calculex Inc" } ,
{ 0x13E5, "", "Telesoft Design Ltd" } ,
{ 0x13E9, "", "Intraserver Technology Inc" } ,
{ 0x13EA, "", "Dallas Semiconductor" } ,
{ 0x13F0, "", "Sundance Technology Inc" } ,
{ 0x13F1, "", "OCE - Industries S.A." } ,
{ 0x13F4, "", "Troika Networks Inc" } ,
{ 0x13F6, "C-Media", "C-Media Electronics Inc." } ,
{ 0x13F9, "", "NTT Advanced Technology Corp." } ,
{ 0x13FA, "Pentland", "Pentland Systems Ltd." } ,
{ 0x13FB, "", "Aydin Corp" } ,
{ 0x13FD, "", "Micro Science Inc" } ,
{ 0x1400, "", "ARTX Inc" } ,
{ 0x1402, "Meilhaus Electronic", "Meilhaus Electronic GmbH Germany" } ,
{ 0x1404, "", "Fundamental Software Inc" } ,
 
{ 0x1407, "LAVA", "Lava Computer MFG Inc." } ,
{ 0x1408, "", "Aloka Co. Ltd" } ,
{ 0x1409, "", "eTIMedia Technology Co Ltd" } ,
{ 0x140A, "", "DSP Research Inc" } ,
{ 0x140B, "", "Ramix Inc" } ,
{ 0x140D, "", "Matsushita Electric Works Ltd" } ,
{ 0x140F, "", "Salient Systems Corp" } ,
{ 0x1412, "IC Ensemble", "IC Ensemble, Inc." } ,
{ 0x1413, "", "Addonics" } ,
{ 0x1415, "", "Oxford Semiconductor Ltd" } ,
{ 0x1418, "", "Kyushu Electronics Systems Inc" } ,
{ 0x1419, "", "Excel Switching Corp" } ,
{ 0x141B, "", "Zoom Telephonics Inc" } ,
{ 0x141E, "", "Fanuc Co. Ltd" } ,
{ 0x141F, "", "Visiontech Ltd" } ,
{ 0x1420, "", "Psion Dacom PLC" } ,
{ 0x1425, "", "ASIC Designers Inc" } ,
{ 0x1428, "", "Edec Co Ltd" } ,
{ 0x1429, "", "Unex Technology Corp." } ,
{ 0x142A, "", "Kingmax Technology Inc" } ,
{ 0x142B, "", "Radiolan" } ,
{ 0x142C, "", "Minton Optic Industry Co Ltd" } ,
{ 0x142D, "", "Pixstream Inc" } ,
{ 0x1430, "", "ITT Aerospace/Communications Division" } ,
{ 0x1433, "", "Eltec Elektronik AG" } ,
{ 0x1436, "", "CIS Technology Inc" } ,
{ 0x1437, "", "Nissin Inc Co" } ,
{ 0x1438, "", "Atmel-Dream" } ,
{ 0x143F, "", "Lightwell Co Ltd - Zax Division" } ,
{ 0x1441, "", "Agie SA." } ,
{ 0x1445, "", "Logical Co Ltd" } ,
{ 0x1446, "", "Graphin Co. Ltd" } ,
{ 0x1447, "", "Aim GMBH" } ,
{ 0x1448, "Alesis", "Alesis Studio" } ,
{ 0x144A, "Adlink", "Adlink Technology" } ,
{ 0x144B, "Loronix", "Loronix Information Systems, Inc." } ,
{ 0x144D, "", "Samsung Electronics Co Ltd" } ,
{ 0x1450, "", "Octave Communications Ind." } ,
{ 0x1451, "", "SP3D Chip Design GMBH" } ,
{ 0x1453, "", "Mycom Inc" } ,
{ 0x1455, "", "Logic Plus PLUS Inc" } ,
{ 0x1458, "Giga-Byte", "Giga-Byte Technologies" } ,
{ 0x145C, "", "Cryptek" } ,
{ 0x145F, "Baldor", "Baldor Electric Company" } ,
{ 0x1460, "", "Dynarc Inc" } ,
{ 0x1462, "", "Micro-Star International Co Ltd" } ,
{ 0x1463, "", "Fast Corporation" } ,
{ 0x1464, "ICS", "Interactive Circuits & Systems Ltd" } ,
{ 0x1465, "", "GN Nettest Telecom Div." } ,
{ 0x1468, "", "Ambit Microsystems Corp." } ,
{ 0x1469, "", "Cleveland Motion Controls" } ,
{ 0x146C, "", "Ruby Tech Corp." } ,
{ 0x146D, "", "Tachyon Inc." } ,
{ 0x146E, "", "WMS Gaming" } ,
{ 0x1471, "", "Integrated Telecom Express Inc" } ,
{ 0x1473, "", "Zapex Technologies Inc" } ,
{ 0x1474, "", "Doug Carson & Associates" } ,
{ 0x1477, "", "Net Insight" } ,
{ 0x1478, "", "Diatrend Corporation" } ,
{ 0x147B, "", "Abit Computer Corp." } ,
{ 0x147F, "", "Nihon Unisys Ltd." } ,
{ 0x1482, "", "Isytec - Integrierte Systemtechnik Gmbh" } ,
{ 0x1483, "", "Labway Coporation" } ,
{ 0x1485, "", "Erma - Electronic GMBH" } ,
{ 0x1489, "", "KYE Systems Corporation" } ,
{ 0x148A, "", "Opto 22" } ,
{ 0x148B, "", "Innomedialogic Inc." } ,
{ 0x148D, "Digicom", "Digicom Systems Inc." } ,
{ 0x148E, "", "OSI Plus Corporation" } ,
{ 0x148F, "", "Plant Equipment Inc." } ,
{ 0x1490, "", "TC Labs Pty Ltd." } ,
{ 0x1493, "", "Maker Communications" } ,
{ 0x1495, "", "Tokai Communications Industry Co. Ltd" } ,
{ 0x1496, "", "Joytech Computer Co. Ltd." } ,
{ 0x1497, "", "SMA Regelsysteme GMBH" } ,
{ 0x1499, "", "Micro-Technology Co Ltd" } ,
{ 0x149B, "", "Seiko Instruments Inc" } ,
{ 0x149E, "", "Mapletree Networks Inc." } ,
{ 0x149F, "", "Lectron Co Ltd" } ,
{ 0x14A0, "", "Softing GMBH" } ,
{ 0x14A2, "", "Millennium Engineering Inc" } ,
{ 0x14A4, "", "GVC/BCM Advanced Research" } ,
{ 0x14A5, "", "Xionics Document Technologies Inc." } ,
{ 0x14A9, "", "Hivertec Inc." } ,
{ 0x14AB, "", "Mentor Graphics Corp." } ,
{ 0x14B1, "", "Nextcom K.K." } ,
{ 0x14B3, "Xpeed", "Xpeed Inc." } ,
{ 0x14B4, "", "Philips Business Electronics B.V." } ,
{ 0x14B6, "", "Quantum Data Corp." } ,
{ 0x14B7, "Proxim", "Proxim Inc." } ,
{ 0x14B9, "Aironet", "Aironet Wireless Communication" } ,
{ 0x14BA, "", "Internix Inc." } ,
{ 0x14BB, "", "Semtech Corporation" } ,
{ 0x14BE, "", "L3 Communications" } ,
{ 0x14C1, "", "Myricom Inc." } ,
{ 0x14C2, "", "DTK Computer" } ,
{ 0x14C4, "", "Iwasaki Information Systems Co Ltd" } ,
{ 0x14C5, "", "ABB Automation Products AB" } ,
{ 0x14C6, "", "Data Race Inc" } ,
{ 0x14C7, "Modtech", "Modular Technology Ltd." } ,
{ 0x14C9, "", "Odin Telesystems Inc" } ,
{ 0x14CB, "", "Billionton Systems Inc./Cadmus Micro Inc" } ,
{ 0x14CD, "", "Universal Scientific Ind." } ,
{ 0x14CF, "", "TEK Microsystems Inc." } ,
{ 0x14D2, "OX", "Oxford Semiconductor" } ,
{ 0x14D4, "PANACOM", "Panacom Technology Corporation" } ,
{ 0x14D5, "", "Nitsuko Corporation" } ,
{ 0x14D6, "", "Accusys Inc" } ,
{ 0x14D7, "", "Hirakawa Hewtech Corp" } ,
{ 0x14D8, "", "Hopf Elektronik GMBH" } ,
{ 0x14D9, "", "Alpha Processor Inc" } ,
{ 0x14DB, "Avlab", "Avlab Technology Inc." } ,
{ 0x14DC, "Amplicon", "Amplicon Liveline Inc." } ,
{ 0x14DD, "", "Imodl Inc." } ,
{ 0x14DE, "", "Applied Integration Corporation" } ,
{ 0x14E3, "", "Amtelco" } ,
{ 0x14E4, "", "Broadcom Corporation" } ,
{ 0x14EB, "", "Seiko Epson Corporation" } ,
{ 0x14EC, "", "Acqiris" } ,
{ 0x14ED, "", "Datakinetics Ltd" } ,
{ 0x14EF, "", "Carry Computer Eng. Co Ltd" } ,
{ 0x14f1, "Conexant", "Conexant Systems, Inc." } ,
{ 0x14F2, "Mobility", "Mobility Electronics, Inc." } ,
{ 0x14F4, "", "Tokyo Electronic Industry Co. Ltd." } ,
{ 0x14F5, "", "Sopac Ltd" } ,
{ 0x14F6, "", "Coyote Technologies LLC" } ,
{ 0x14F7, "", "Wolf Technology Inc" } ,
{ 0x14F8, "", "Audiocodes Inc" } ,
{ 0x14F9, "", "AG Communications" } ,
{ 0x14FB, "", "Transas Marine (UK) Ltd" } ,
{ 0x14FC, "", "Quadrics Supercomputers World" } ,
{ 0x14FD, "", "Japan Computer Industry Inc." } ,
{ 0x14FE, "", "Archtek Telecom Corp." } ,
{ 0x14FF, "", "Twinhead International Corp." } ,
{ 0x1500, "DELTA", "DELTA Electronics, Inc." } ,
{ 0x1501, "", "Banksoft Canada Ltd" } ,
{ 0x1502, "", "Mitsubishi Electric Logistics Support Co" } ,
{ 0x1503, "", "Kawasaki LSI USA Inc" } ,
{ 0x1504, "", "Kaiser Electronics" } ,
{ 0x1506, "", "Chameleon Systems Inc" } ,
{ 0x1507, "Htec", "Htec Ltd." } ,
{ 0x1509, "", "First International Computer Inc" } ,
{ 0x150B, "", "Yamashita Systems Corp" } ,
{ 0x150C, "", "Kyopal Co Ltd" } ,
{ 0x150D, "", "Warpspped Inc" } ,
{ 0x150E, "", "C-Port Corporation" } ,
{ 0x150F, "", "Intec GMBH" } ,
{ 0x1510, "", "Behavior Tech Computer Corp" } ,
{ 0x1511, "", "Centillium Technology Corp" } ,
{ 0x1512, "", "Rosun Technologies Inc" } ,
{ 0x1513, "", "Raychem" } ,
{ 0x1514, "", "TFL LAN Inc" } ,
{ 0x1515, "", "ICS Advent" } ,
{ 0x1516, "", "Myson Technology Inc" } ,
{ 0x1517, "", "Echotek Corporation" } ,
{ 0x1518, "", "PEP Modular Computers GMBH" } ,
{ 0x1519, "", "Telefon Aktiebolaget LM Ericsson" } ,
{ 0x151A, "Globetek", "Globetek Inc." } ,
{ 0x151B, "", "Combox Ltd" } ,
{ 0x151C, "", "Digital Audio Labs Inc" } ,
{ 0x151D, "", "Fujitsu Computer Products Of America" } ,
{ 0x151E, "", "Matrix Corp." } ,
{ 0x151F, "", "Topic Semiconductor Corp" } ,
{ 0x1520, "", "Chaplet System Inc" } ,
{ 0x1521, "", "Bell Corporation" } ,
{ 0x1522, "Mainpine", "Mainpine Limited" } ,
{ 0x1523, "", "Music Semiconductors" } ,
{ 0x1524, "", "ENE Technology Inc" } ,
{ 0x1525, "", "Impact Technologies" } ,
{ 0x1526, "", "ISS Inc" } ,
{ 0x1527, "", "Solectron" } ,
{ 0x1528, "", "Acksys" } ,
{ 0x1529, "", "American Microsystems Inc" } ,
{ 0x152A, "", "Quickturn Design Systems" } ,
{ 0x152B, "", "Flytech Technology Co Ltd" } ,
{ 0x152C, "", "Macraigor Systems LLC" } ,
{ 0x152D, "", "Quanta Computer Inc" } ,
{ 0x152E, "", "Melec Inc" } ,
{ 0x152F, "", "Philips - Crypto" } ,
{ 0x1532, "", "Echelon Corporation" } ,
{ 0x1533, "", "Baltimore" } ,
{ 0x1534, "", "Road Corporation" } ,
{ 0x1535, "", "Evergreen Technologies Inc" } ,
{ 0x1537, "", "Datalex Communcations" } ,
{ 0x1538, "", "Aralion Inc." } ,
{ 0x1539, "", "Atelier Informatiques et Electronique Et" } ,
{ 0x153A, "", "ONO Sokki" } ,
{ 0x153B, "", "Terratec Electronic GMBH" } ,
{ 0x153C, "", "Antal Electronic" } ,
{ 0x153D, "", "Filanet Corporation" } ,
{ 0x153E, "", "Techwell Inc" } ,
{ 0x153F, "", "MIPS Denmark" } ,
{ 0x1540, "", "Provideo Multimedia Co Ltd" } ,
{ 0x1541, "", "Telocity Inc." } ,
{ 0x1542, "", "Vivid Technology Inc" } ,
{ 0x1543, "", "Silicon Laboratories" } ,
{ 0x1544, "", "DCM Data Systems" } ,
{ 0x1545, "", "Visiontek" } ,
{ 0x1546, "", "IOI Technology Corp." } ,
{ 0x1547, "", "Mitutoyo Corporation" } ,
{ 0x1548, "", "Jet Propulsion Laboratory" } ,
{ 0x1549, "", "Interconnect Systems Solutions" } ,
{ 0x154A, "", "Max Technologies Inc." } ,
{ 0x154B, "", "Computex Co Ltd" } ,
{ 0x154C, "", "Visual Technology Inc." } ,
{ 0x154D, "", "PAN International Industrial Corp" } ,
{ 0x154E, "", "Servotest Ltd" } ,
{ 0x154F, "", "Stratabeam Technology" } ,
{ 0x1550, "", "Open Network Co Ltd" } ,
{ 0x1551, "", "Smart Electronic Development GMBH" } ,
{ 0x1552, "", "Racal Airtech Ltd" } ,
{ 0x1553, "", "Chicony Electronics Co Ltd" } ,
{ 0x1554, "", "Prolink Microsystems Corp." } ,
{ 0x1556, "", "PLD Applications" } ,
{ 0x1557, "", "Mediastar Co. Ltd" } ,
{ 0x1558, "", "Clevo/Kapok Computer" } ,
{ 0x1559, "", "SI Logic Ltd" } ,
{ 0x155A, "", "Innomedia Inc" } ,
{ 0x155B, "", "Protac International Corp" } ,
{ 0x155C, "", "Cemax-Icon Inc" } ,
{ 0x155D, "", "MAC System Co Ltd" } ,
{ 0x155E, "", "LP Elektronik GMBH" } ,
{ 0x155F, "", "Perle Systems Limited" } ,
{ 0x1560, "", "Terayon Communications Systems" } ,
{ 0x1561, "", "Viewgraphics Inc" } ,
{ 0x1562, "", "Symbol Technologies" } ,
{ 0x1563, "", "A-Trend Technology Co Ltd" } ,
{ 0x1564, "", "Yamakatsu Electronics Industry Co Ltd" } ,
{ 0x1565, "", "Biostar Microtech Intl Corp" } ,
{ 0x1566, "", "Ardent Technologies Inc" } ,
{ 0x1567, "", "Jungsoft" } ,
{ 0x1568, "", "DDK Electronics Inc" } ,
{ 0x1569, "", "Palit Microsystems Inc" } ,
{ 0x156A, "", "Avtec Systems" } ,
{ 0x156B, "", "2wire Inc" } ,
{ 0x156C, "", "Vidac Electronics GMBH" } ,
{ 0x156D, "", "Alpha-Top Corp" } ,
{ 0x156E, "", "Alfa Inc." } ,
{ 0x156F, "", "M-Systems Flash Disk Pioneers Ltd" } ,
{ 0x1570, "", "Lecroy Corporation" } ,
{ 0x1571, "", "Contemporary Controls" } ,
{ 0x1572, "", "Otis Elevator Company" } ,
{ 0x1573, "", "Lattice - Vantis" } ,
{ 0x1574, "", "Fairchild Semiconductor" } ,
{ 0x1575, "", "Voltaire Advanced Data Security Ltd" } ,
{ 0x1576, "", "Viewcast Com" } ,
{ 0x1578, "", "Hitt" } ,
{ 0x1579, "", "Dual Technology Corporation" } ,
{ 0x157A, "", "Japan Elecronics Ind. Inc" } ,
{ 0x157B, "", "Star Multimedia Corp." } ,
{ 0x157C, "Eurosoft", "Eurosoft (UK)" } ,
{ 0x157D, "", "Gemflex Networks" } ,
{ 0x157E, "", "Transition Networks" } ,
{ 0x157F, "", "PX Instruments Technology Ltd" } ,
{ 0x1580, "", "Primex Aerospace Co." } ,
{ 0x1581, "", "SEH Computertechnik GMBH" } ,
{ 0x1582, "", "Cytec Corporation" } ,
{ 0x1583, "", "Inet Technologies Inc" } ,
{ 0x1584, "", "Uniwill Computer Corp." } ,
{ 0x1585, "", "Marconi Commerce Systems SRL" } ,
{ 0x1586, "", "Lancast Inc" } ,
{ 0x1587, "", "Konica Corporation" } ,
{ 0x1588, "", "Solidum Systems Corp" } ,
{ 0x1589, "", "Atlantek Microsystems Pty Ltd" } ,
{ 0x158A, "", "Digalog Systems Inc" } ,
{ 0x158B, "", "Allied Data Technologies" } ,
{ 0x158C, "", "Hitachi Semiconductor & Devices Sales Co" } ,
{ 0x158D, "", "Point Multimedia Systems" } ,
{ 0x158E, "", "Lara Technology Inc" } ,
{ 0x158F, "", "Ditect Coop" } ,
{ 0x1590, "", "3pardata Inc." } ,
{ 0x1591, "", "ARN" } ,
{ 0x1592, "Syba", "Syba Tech Ltd." } ,
{ 0x1593, "", "Bops Inc" } ,
{ 0x1594, "", "Netgame Ltd" } ,
{ 0x1595, "", "Diva Systems Corp." } ,
{ 0x1596, "", "Folsom Research Inc" } ,
{ 0x1597, "", "Memec Design Services" } ,
{ 0x1598, "", "Granite Microsystems" } ,
{ 0x1599, "", "Delta Electronics Inc" } ,
{ 0x159A, "", "General Instrument" } ,
{ 0x159B, "", "Faraday Technology Corp" } ,
{ 0x159C, "", "Stratus Computer Systems" } ,
{ 0x159D, "", "Ningbo Harrison Electronics Co Ltd" } ,
{ 0x159E, "", "A-Max Technology Co Ltd" } ,
{ 0x159F, "", "Galea Network Security" } ,
{ 0x15A0, "", "Compumaster SRL" } ,
{ 0x15A1, "", "Geocast Network Systems Inc" } ,
{ 0x15A2, "", "Catalyst Enterprises Inc" } ,
{ 0x15A3, "", "Italtel" } ,
{ 0x15A4, "", "X-Net OY" } ,
{ 0x15A5, "", "Toyota MACS Inc" } ,
{ 0x15A6, "", "Sunlight Ultrasound Technologies Ltd" } ,
{ 0x15A7, "", "SSE Telecom Inc" } ,
{ 0x15A8, "", "Shanghai Communications Technologies Cen" } ,
{ 0x15AA, "", "Moreton Bay" } ,
{ 0x15AB, "", "Bluesteel Networks Inc" } ,
{ 0x15AC, "", "North Atlantic Instruments" } ,
{ 0x15AD, "VMware", "VMware Inc." } ,
{ 0x15AE, "", "Amersham Pharmacia Biotech" } ,
{ 0x15B0, "", "Zoltrix International Limited" } ,
{ 0x15B1, "", "Source Technology Inc" } ,
{ 0x15B2, "", "Mosaid Technologies Inc." } ,
{ 0x15B3, "", "Mellanox Technology" } ,
{ 0x15B4, "", "CCI/Triad" } ,
{ 0x15B5, "", "Cimetrics Inc" } ,
{ 0x15B6, "", "Texas Memory Systems Inc" } ,
{ 0x15B7, "", "Sandisk Corp." } ,
{ 0x15B8, "", "Addi-Data GMBH" } ,
{ 0x15B9, "", "Maestro Digital Communications" } ,
{ 0x15BA, "", "Impacct Technology Corp" } ,
{ 0x15BB, "", "Portwell Inc" } ,
{ 0x15BC, "Agilent", "Agilent Technologies" } ,
{ 0x15BD, "", "DFI Inc." } ,
{ 0x15BE, "", "Sola Electronics" } ,
{ 0x15BF, "", "High Tech Computer Corp (HTC)" } ,
{ 0x15C0, "", "BVM Limited" } ,
{ 0x15C1, "", "Quantel" } ,
{ 0x15C2, "", "Newer Technology Inc" } ,
{ 0x15C3, "", "Taiwan Mycomp Co Ltd" } ,
{ 0x15C4, "", "EVSX Inc" } ,
{ 0x15C5, "", "Procomp Informatics Ltd" } ,
{ 0x15C6, "", "Technical University Of Budapest" } ,
{ 0x15C7, "", "Tateyama System Laboratory Co Ltd" } ,
{ 0x15C8, "", "Penta Media Co. Ltd" } ,
{ 0x15C9, "", "Serome Technology Inc" } ,
{ 0x15CA, "", "Bitboys OY" } ,
{ 0x15CB, "", "AG Electronics Ltd" } ,
{ 0x15CC, "", "Hotrail Inc." } ,
{ 0x15CD, "", "Dreamtech Co Ltd" } ,
{ 0x15CE, "", "Genrad Inc." } ,
{ 0x15CF, "", "Hilscher GMBH" } ,
{ 0x15D1, "", "Infineon Technologies AG" } ,
{ 0x15D2, "", "FIC (First International Computer Inc)" } ,
{ 0x15D3, "", "NDS Technologies Israel Ltd" } ,
{ 0x15D4, "", "Iwill Corporation" } ,
{ 0x15D5, "", "Tatung Co." } ,
{ 0x15D6, "", "Entridia Corporation" } ,
{ 0x15D7, "", "Rockwell-Collins Inc" } ,
{ 0x15D8, "", "Cybernetics Technology Co Ltd" } ,
{ 0x15D9, "", "Super Micro Computer Inc" } ,
{ 0x15DA, "", "Cyberfirm Inc." } ,
{ 0x15DB, "", "Applied Computing Systems Inc." } ,
{ 0x15DC, "Litronic", "Litronic Inc." } ,
{ 0x15DD, "", "Sigmatel Inc." } ,
{ 0x15DE, "", "Malleable Technologies Inc" } ,
{ 0x15DF, "", "Infinilink Corp." } ,
{ 0x15E0, "", "Cacheflow Inc" } ,
{ 0x15E1, "VTG", "Voice Technologies Group" } ,
{ 0x15E2, "", "Quicknet Technologies Inc" } ,
{ 0x15E3, "", "Networth Technologies Inc" } ,
{ 0x15E4, "", "VSN Systemen BV" } ,
{ 0x15E5, "", "Valley Technologies Inc" } ,
{ 0x15E6, "", "Agere Inc." } ,
{ 0x15E7, "", "GET Engineering Corp." } ,
{ 0x15E8, "", "National Datacomm Corp." } ,
{ 0x15E9, "", "Pacific Digital Corp." } ,
{ 0x15EA, "", "Tokyo Denshi Sekei K.K." } ,
{ 0x15EB, "", "Drsearch GMBH" } ,
{ 0x15EC, "", "Beckhoff GMBH" } ,
{ 0x15ED, "", "Macrolink Inc" } ,
{ 0x15EE, "", "IN Win Development Inc." } ,
{ 0x15EF, "", "Intelligent Paradigm Inc" } ,
{ 0x15F0, "", "B-Tree Systems Inc" } ,
{ 0x15F1, "", "Times N Systems Inc" } ,
{ 0x15F2, "", "Diagnostic Instruments Inc" } ,
{ 0x15F3, "", "Digitmedia Corp." } ,
{ 0x15F4, "", "Valuesoft" } ,
{ 0x15F5, "", "Power Micro Research" } ,
{ 0x15F6, "", "Extreme Packet Device Inc" } ,
{ 0x15F7, "", "Banctec" } ,
{ 0x15F8, "", "Koga Electronics Co" } ,
{ 0x15F9, "", "Zenith Electronics Corporation" } ,
{ 0x15FA, "", "J.P. Axzam Corporation" } ,
{ 0x15FB, "", "Zilog Inc." } ,
{ 0x15FC, "", "Techsan Electronics Co Ltd" } ,
{ 0x15FD, "", "N-Cubed.Net" } ,
{ 0x15FE, "", "Kinpo Electronics Inc" } ,
{ 0x15FF, "", "Fastpoint Technologies Inc." } ,
{ 0x1600, "", "Northrop Grumman - Canada Ltd" } ,
{ 0x1601, "", "Tenta Technology" } ,
{ 0x1602, "", "Prosys-TEC Inc." } ,
{ 0x1603, "", "Nokia Wireless Business Communications" } ,
{ 0x1604, "", "Central System Research Co Ltd" } ,
{ 0x1605, "", "Pairgain Technologies" } ,
{ 0x1606, "", "Europop AG" } ,
{ 0x1607, "", "Lava Semiconductor Manufacturing Inc." } ,
{ 0x1608, "", "Automated Wagering International" } ,
{ 0x1609, "", "Sciemetric Instruments Inc" } ,
{ 0x160A, "", "Kollmorgen Servotronix" } ,
{ 0x160B, "", "Onkyo Corp." } ,
{ 0x160C, "", "Oregon Micro Systems Inc." } ,
{ 0x160D, "", "Aaeon Electronics Inc" } ,
{ 0x160E, "", "CML Emergency Services" } ,
{ 0x160F, "", "ITEC Co Ltd" } ,
{ 0x1610, "", "Tottori Sanyo Electric Co Ltd" } ,
{ 0x1611, "", "Bel Fuse Inc." } ,
{ 0x1612, "", "Telesynergy Research Inc." } ,
{ 0x1613, "", "System Craft Inc." } ,
{ 0x1614, "", "Jace Tech Inc." } ,
{ 0x1615, "", "Equus Computer Systems Inc" } ,
{ 0x1616, "", "Iotech Inc." } ,
{ 0x1617, "", "Rapidstream Inc" } ,
{ 0x1618, "", "Esec SA" } ,
{ 0x1619, "FarSite", "FarSite Communications Limited" } ,
{ 0x161A, "", "Wvinten Ltd" } ,
{ 0x161B, "", "Mobilian Israel Ltd" } ,
{ 0x161C, "", "Berkshire Products" } ,
{ 0x161D, "", "Gatec" } ,
{ 0x161E, "", "Kyoei Sangyo Co Ltd" } ,
{ 0x161F, "", "Arima Computer Co" } ,
{ 0x1620, "", "Sigmacom Co Ltd" } ,
{ 0x1621, "", "Lynx Studio Technology Inc" } ,
{ 0x1622, "NHC", "Nokia Home Communications" } ,
{ 0x1623, "", "KRF Tech Ltd" } ,
{ 0x1624, "", "CE Infosys GMBH" } ,
{ 0x1625, "", "Warp Nine Engineering" } ,
{ 0x1626, "", "TDK Semiconductor Corp." } ,
{ 0x1627, "", "BCom Electronics Inc" } ,
{ 0x1629, "", "Kongsberg Spacetec a.s." } ,
{ 0x162A, "", "Sejin Computerland Co Ltd" } ,
{ 0x162B, "", "Shanghai Bell Company Limited" } ,
{ 0x162C, "", "C&H Technologies Inc" } ,
{ 0x162D, "", "Reprosoft Co Ltd" } ,
{ 0x162E, "", "Margi Systems Inc" } ,
{ 0x162F, "", "Rohde & Schwarz GMBH & Co KG" } ,
{ 0x1630, "", "Sky Computers Inc" } ,
{ 0x1631, "", "NEC Computer International" } ,
{ 0x1632, "", "Verisys Inc" } ,
{ 0x1633, "", "Adac Corporation" } ,
{ 0x1634, "", "Visionglobal Network Corp." } ,
{ 0x1635, "", "Decros" } ,
{ 0x1636, "", "Jean Company Ltd" } ,
{ 0x1637, "", "NSI" } ,
{ 0x1638, "", "Eumitcom Technology Inc" } ,
{ 0x163A, "", "Air Prime Inc" } ,
{ 0x163B, "", "Glotrex Co Ltd" } ,
{ 0x163C, "", "Smart Link" } ,
{ 0x163D, "", "Heidelberg Digital LLC" } ,
{ 0x163E, "", "3dpower" } ,
{ 0x163F, "", "Renishaw PLC" } ,
{ 0x1640, "", "Intelliworxx Inc" } ,
{ 0x1641, "", "MKNet Corporation" } ,
{ 0x1642, "", "Bitland" } ,
{ 0x1643, "", "Hajime Industries Ltd" } ,
{ 0x1644, "", "Western Avionics Ltd" } ,
{ 0x1645, "", "Quick-Serv. Computer Co. Ltd" } ,
{ 0x1646, "", "Nippon Systemware Co Ltd" } ,
{ 0x1647, "", "Hertz Systemtechnik GMBH" } ,
{ 0x1648, "", "MeltDown Systems LLC" } ,
{ 0x1649, "", "Jupiter Systems" } ,
{ 0x164A, "", "Aiwa Co. Ltd" } ,
{ 0x164C, "", "Department Of Defense" } ,
{ 0x164D, "", "Ishoni Networks" } ,
{ 0x164E, "", "Micrel Inc." } ,
{ 0x164F, "", "Datavoice (Pty) Ltd." } ,
{ 0x1650, "", "Admore Technology Inc." } ,
{ 0x1651, "", "Chaparral Network Storage" } ,
{ 0x1652, "", "Spectrum Digital Inc." } ,
{ 0x1653, "", "Nature Worldwide Technology Corp" } ,
{ 0x1654, "", "Sonicwall Inc" } ,
{ 0x1655, "", "Dazzle Multimedia Inc." } ,
{ 0x1656, "", "Insyde Software Corp" } ,
{ 0x1657, "", "Brocade Communications Systems" } ,
{ 0x1658, "", "Med Associates Inc." } ,
{ 0x1659, "", "Shiba Denshi Systems Inc." } ,
{ 0x165A, "", "Epix Inc." } ,
{ 0x165B, "", "Real-Time Digital Inc." } ,
{ 0x165C, "", "Gidel Ltd." } ,
{ 0x165D, "", "Hsing Tech. Enterprise Co. Ltd." } ,
{ 0x165E, "", "Hyunju Computer Co. Ltd." } ,
{ 0x165F, "", "Add One Company" } ,
{ 0x1660, "", "Network Security Technologies Inc. (Net " } ,
{ 0x1661, "", "Worldspace Corp." } ,
{ 0x1662, "", "Int Labs" } ,
{ 0x1663, "", "Elmec Inc. Ltd." } ,
{ 0x1664, "", "Fastfame Technology Co. Ltd." } ,
{ 0x1665, "", "Edax Inc." } ,
{ 0x1666, "", "Norpak Corporation" } ,
{ 0x1667, "", "CoSystems Inc." } ,
{ 0x166A, "", "Komatsu Ltd." } ,
{ 0x166B, "", "Supernet Inc." } ,
{ 0x166C, "", "Shade Ltd." } ,
{ 0x166D, "", "Sibyte Inc." } ,
{ 0x166E, "", "Schneider Automation Inc." } ,
{ 0x166F, "", "Televox Software Inc." } ,
{ 0x1670, "", "Rearden Steel" } ,
{ 0x1671, "", "Atan Technology Inc." } ,
{ 0x1672, "", "Unitec Co. Ltd." } ,
{ 0x1673, "", "Connex" } ,
{ 0x1675, "", "Square Wave Technology" } ,
{ 0x1676, "", "Emachines Inc." } ,
{ 0x1677, "", "Bernecker + Rainer" } ,
{ 0x1678, "", "INH Semiconductor" } ,
{ 0x1679, "", "Tokyo Electron Device Ltd." } ,
{ 0x16AE, "SFNT", "SafeNet Inc." } ,
{ 0x1813, "", "Ambient Technologies Inc" } ,
{ 0x1A08, "Sierra", "Sierra Semiconductor" } ,
{ 0x1B13, "", "Jaton Corporation" } ,
{ 0x1C1C, "Symphony", "Symphony" } ,
{ 0x1D44, "DPT", "Distributed Processing Technology" } ,
{ 0x1DE1, "Tekram", "Tekram" } ,
{ 0x2001, "", "Temporal Research Ltd" } ,
{ 0x2348, "Racore", "Racore" } ,
{ 0x2646, "", "Kingston Technology Co." } ,
{ 0x270F, "ChainTech", "ChainTech Computer Co. Ltd." } ,
{ 0x2EC1, "", "Zenic Inc" } ,
{ 0x3000, "Hansol", "Hansol Electronics Inc." } ,
{ 0x3142, "PostImpressions", "Post Impressions Systems" } ,
{ 0x3388, "Hint", "Hint Corp." } ,
{ 0x3411, "", "Quantum Designs (H.K.) Inc." } ,
{ 0x3513, "ARCOM", "ARCOM Control Systems Ltd." } ,
{ 0x38EF, "", "4links" } ,
{ 0x3D3D, "3DLabs", "3Dlabs, Inc. Ltd" } ,
{ 0x4005, "Avance", "Avance Logic Inc." } ,
{ 0x4033, "Addtron", "Addtron Technology Co., Inc." } ,
{ 0x4143, "DEC", "Digital Equipment Corp." } ,
{ 0x416C, "", "Aladdin Knowledge Systems" } ,
{ 0x4444, "ICompression", "ICompression Inc." } ,
{ 0x4468, "Bridgeport", "Bridgeport Machines" } ,
{ 0x4594, "", "Cogetec Informatique Inc." } ,
{ 0x45FB, "Baldor", "Baldor Electric Company" } ,
{ 0x4680, "UMAX Comp", "UMAX Computer Corp." } ,
{ 0x4843, "Hercules", "Hercules Computer Technology" } ,
{ 0x4943, "", "Growth Networks" } ,
{ 0x4954, "Integral", "Integral Technologies" } ,
{ 0x4978, "Axil", "Axil Computer Inc." } ,
{ 0x4A14, "NetVin", "NetVin" } ,
{ 0x4B10, "Buslogic", "Buslogic Inc" } ,
{ 0x4C48, "Lung Hwa", "Lung Hwa Electronics" } ,
{ 0x4C53, "", "SBS-OR Industrial Computers" } ,
{ 0x4CA1, "", "Seanix Technology Inc" } ,
{ 0x4D51, "Mediaq", "Mediaq Inc." } ,
{ 0x4D54, "", "Microtechnica Co Ltd" } ,
{ 0x4DDC, "ILC", "ILC Data Device Corp." } ,
{ 0x5053, "TBS/Voyetra", "TBS/Voyetra Technologies" } ,
{ 0x5136, "", "S S Technologies" } ,
{ 0x5143, "Qualcomm", "Qualcomm Inc." } ,
{ 0x5145, "ENSONIQ", "ENSONIQ" } ,
{ 0x5301, "Alliance", "Alliance Semicondutor Corp." } ,
{ 0x5333, "S3", "S3 Incorporated" } ,
{ 0x544C, "", "Teralogic Inc" } ,
{ 0x5455, "TU-Berlin", "Technische Universtiaet Berlin" } ,
{ 0x5519, "Cnet", "Cnet Technoliges, Inc." } ,
{ 0x5555, "Genroco", "Genroco Inc." } ,
{ 0x5700, "Netpower", "Netpower" } ,
{ 0x6356, "UltraStor", "UltraStor" } ,
{ 0x6374, "C4T", "c't Magazin f_r Computertechnik" } ,
{ 0x6409, "", "Logitec Corp." } ,
{ 0x6666, "Decision", "Decision Computer International Co." } ,
{ 0x7604, "O.N.", "O.N. Electric Co. Ltd." } ,
{ 0x7747, "DaoGuo", "DaoGuo Technology Co.,Ltd" } ,
{ 0x7BDE, "MIDAC", "MIDAC Corporation" } ,
{ 0x7FED, "PowerTV", "PowerTV" } ,
{ 0x8001, "BEYERTONE", "Beyertone AG - Germany" } ,
{ 0x8008, "QUANCOM", "QUANCOM Informationssysteme GmbH" } ,
{ 0x8086, "Intel", "Intel Corporation" } ,
{ 0x8800, "Trigem", "Trigem Computer" } ,
{ 0x8866, "T-Square", "T-Square Design Inc." } ,
{ 0x8888, "Sil Magic", "Silicon Magic" } ,
{ 0x8E0E, "Computone", "Computone Corporation" } ,
{ 0x8E2E, "KTI", "KTI" } ,
{ 0x9004, "Adaptec", "Adaptec" } ,
{ 0x9005, "Adaptec", "Adaptec" } ,
{ 0x907F, "Atronics", "Atronics" } ,
{ 0x919A, "", "Gigapixel Corp" } ,
{ 0x9412, "Holtek", "Holtek" } ,
{ 0x9699, "", "Omni Media Technology Inc." } ,
{ 0x9902, "", "Starbridge Technologies Inc" } ,
{ 0xA0A0, "Aopen", "Aopen Inc." } ,
{ 0xA0F1, "", "Unisys Corporation" } ,
{ 0xA200, "NEC", "NEC Corp." } ,
{ 0xA259, "", "Hewlett Packard" } ,
{ 0xA25B, "Hewlett Packard", "Hewlett Packard GmbH PL24-MKT" } ,
{ 0xA304, "Sony", "Sony" } ,
{ 0xA727, "", "3com Corporation" } ,
{ 0xAA42, "Scitex", "Scitex Digital Video" } ,
{ 0xAC1E, "", "Digital Receiver Technology Inc" } ,
{ 0xB1B3, "Shiva", "Shiva Europe Ltd." } ,
{ 0xB894, "", "Brown & Sharpe Mfg. Co." } ,
{ 0xC001, "TSI", "TSI Telsys" } ,
{ 0xC0A9, "Micron/Crucial", "Micron/Crucial Technology" } ,
{ 0xC0DE, "", "Motorola" } ,
{ 0xC0FE, "Mot Engrg", "Motion Engineering Inc." } ,
{ 0xC622, "", "Hudson Soft Co Ltd" } ,
{ 0xCA50, "Varian", "Varian Australia Pty. Ltd." } ,
{ 0xCAFE, "", "Chrysalis-ITS" } ,
{ 0xCCCC, "", "Catapult Communications" } ,
{ 0xD4D4, "DY4", "DY4 Systems Inc." } ,
{ 0xD84D, "Exsys", "Exsys" } ,
{ 0xDC93, "", "Dawicontrol" } ,
{ 0xdead, "Indigita", "Indigita Corporation" } ,
{ 0xE000, "Winbond", "Winbond" } ,
{ 0xE159, "Tiger Jet", "Tiger Jet Network Inc" } ,
{ 0xE4BF, "", "EKF Elektronik GMBH" } ,
{ 0xEA01, "", "Eagle Technology" } ,
{ 0xECC0, "Echo", "Echo Corporation" } ,
{ 0xEDD8, "ARK Logic", "ARK Logic, Inc" } ,
{ 0xF5F5, "", "F5 Networks Inc." } ,
{ 0xFA57, "FAST", "Fast Search & Transfer ASA" } ,
{ 0xFEDA, "", "Epigram Inc " } ,
{ 0xFFFE, "VMware", "VMware Inc." } ,
{ 0xFFFF, "BAD!", "ILLEGITIMATE VENDOR ID" } ,
} ;
 
// Use this value for loop control during searching:
#define PCI_VENTABLE_LEN (sizeof(PciVenTable)/sizeof(PCI_VENTABLE))
 
typedef struct _PCI_DEVTABLE
{
unsigned short VenId ;
unsigned short DevId ;
char * Chip ;
char * ChipDesc ;
} PCI_DEVTABLE, *PPCI_DEVTABLE ;
 
PCI_DEVTABLE PciDevTable [] =
{
{ 0x0675, 0x1700, "IS64PH", "ISDN Adapter" } ,
{ 0x0675, 0x1702, "IS64PH", "ISDN Adapter" } ,
{ 0x0E11, 0x0001, "", "PCI to EISA Bridge" } ,
{ 0x0E11, 0x0002, "ISA Bridge", "" } ,
{ 0x0e11, 0x00c0, "Adaptec AIC-7899G", "64Bit,66MHz,Dual Channel WideUltra3 SCSI" } ,
{ 0x0E11, 0x0508, "Neteligent 4/16 TR", "PCI UTP/STP Controller" } ,
{ 0x0E11, 0x1000, "Model 1000", "Triflex/PCI CPU Bridge" } ,
{ 0x0E11, 0x2000, "Model 2000", "Triflex/PCI CPU Bridge" } ,
{ 0x0E11, 0x3032, "QVision 1280/p v0", "GUI Accelerator" } ,
{ 0x0E11, 0x3033, "QVision 1280/p v1", "GUI Accelerator" } ,
{ 0x0E11, 0x3034, "QVision 1280/p v2", "GUI Accelerator" } ,
{ 0x0E11, 0x4000, "4000", "Triflex/PCI CPU Bridge" } ,
{ 0x0E11, 0x6010, "Model 6010", "HotPlug PCI Bridge" } ,
{ 0x0E11, 0x7020, "", "USB Controller" } ,
{ 0x0E11, 0xA0EC, "", "Fibre Channel Host Controller" } ,
{ 0x0E11, 0xA0F0, "", "Advanced System Management Controller" } ,
{ 0x0E11, 0xA0F3, "", "Triflex PCI to ISA PnP Bridge" } ,
{ 0x0E11, 0xA0F7, "", "PCI Hotplug Controller" } ,
{ 0x0E11, 0xA0F8, "", "USB Open Host Controller" } ,
{ 0x0E11, 0xAe10, "", "Smart-2 Array Controller" } ,
{ 0x0E11, 0xAE29, "MIS-L", "PCI to ISA Bridge" } ,
{ 0x0E11, 0xAE2A, "MPC", "CPU to PCI Bridge" } ,
{ 0x0E11, 0xAE2B, "MIS-E", "PCI to ISA PnP Bridge" } ,
{ 0x0E11, 0xAE31, "", "System Management Controller" } ,
{ 0x0E11, 0xAE32, "", "Netelligent 10/100 TX" } ,
{ 0x0E11, 0xAE33, "", "Triflex Dual EIDE Controller" } ,
{ 0x0E11, 0xAE34, "", "Netelligent 10 T" } ,
{ 0x0E11, 0xAE35, "", "Integrated NetFlex 3/P" } ,
{ 0x0E11, 0xAE40, "", "Dual Port Netelligent 10/100 TX" } ,
{ 0x0E11, 0xAE43, "", "ProLiant Integrated Netelligent 10/100 TX" } ,
{ 0x0E11, 0xAE69, "CETUS-L", "PCI to ISA Bridge" } ,
{ 0x0E11, 0xAE6C, "DRACO", "PCI Bridge" } ,
{ 0x0E11, 0xAE6D, "NorthStar", "CPU to PCI Bridge" } ,
{ 0x0E11, 0xB011, "", "Dual Port Netelligent 10/100 TX" } ,
{ 0x0E11, 0xB012, "Netelligent 10 T/2", "" } ,
{ 0x0E11, 0xB030, "Netelligent 10/100TX", "" } ,
{ 0x0E11, 0xB04A, "", "10/100TX WOL UTP Controller" } ,
{ 0x0E11, 0xB0C6, "", "10/100TX Embedded WOL UTP Controller" } ,
{ 0x0E11, 0xB0D7, "NC3121 rev. A & B", "" } ,
{ 0x0E11, 0xB196, "", "Conexant SoftK56 Modem" } ,
{ 0x0E11, 0xF130, "", "ThunderLAN / NetFlex-3/P" } ,
{ 0x0E11, 0xF150, "", "NetFlex 3/P w/ BNC" } ,
{ 0x1000, 0x0001, "53C810", "Fast/Narrow SCSI I/O Cntrlr" } ,
{ 0x1000, 0x0002, "53C820", "Fast-wide SCSI" } ,
{ 0x1000, 0x0003, "53C825", "Fast-wide SCSI" } ,
{ 0x1000, 0x0004, "53C815", "Fast SCSI" } ,
{ 0x1000, 0x0005, "53C810AP", "Fast SCSI" } ,
{ 0x1000, 0x0006, "53C860", "Ultra SCSI/Narrow" } ,
{ 0x1000, 0x000A, "53C1510", "" } ,
{ 0x1000, 0x000B, "53C896", "dual-channel Ultra-2 Wide SCSI" } ,
{ 0x1000, 0x000C, "SYM53C895", "Ultra-2 Wide SCSI" } ,
{ 0x1000, 0x000D, "53C885", "Ultra Wide SCSI, Ethernet" } ,
{ 0x1000, 0x000F, "53C875, 53C876", "Ultra-Wide SCSI (53C876 is dual-channel)" } ,
{ 0x1000, 0x0010, "", "SCSI Array Controller" } ,
{ 0x1000, 0x0012, "53C895A", "Ultra-2 Wide SCSI" } ,
{ 0x1000, 0x0020, "53C1010-33", "PCI to Dual Channel Ultra3 SCSI Ctrlr" } ,
{ 0x1000, 0x0021, "53C1000R/1010R", "PCI to Ultra160 SCSI Controller" } ,
{ 0x1000, 0x008F, "53C875J", "Ultra Wide SCSI" } ,
{ 0x1000, 0x0621, "LSIFC909", "Fibre Channel I/O Processor" } ,
{ 0x1000, 0x0701, "53C885", "10/100 MBit Ethernet" } ,
{ 0x1000, 0x0702, "", "Gigabit Ethernet Controller" } ,
{ 0x1000, 0x0901, "61C102", "USB Controller" } ,
{ 0x1000, 0x1000, "63C815", "Fast SCSI Controller" } ,
{ 0x1001, 0x0010, "ispLSI1032E", "PCI 1616, 16 TTL-IN, 16 TTL-OUT" } ,
{ 0x1001, 0x0011, "ispLSI1032E", "OPTO-PCI, 16 IN / 16 OUT 24 VDC" } ,
{ 0x1001, 0x0012, "ispLSI1032E", "PCI-AD, PCI-ADDA analog I/O-card" } ,
{ 0x1001, 0x0013, "ispLSI1032E", "PCI-OptoRel, PCI-Relais 16 Relais & Opto" } ,
{ 0x1001, 0x0014, "ispLSI1032E", "Timer, Pulse & Counter-card 16..32 bit" } ,
{ 0x1001, 0x0015, "ispLSI1032E", "PCI-DAC416, 4 channel D/A16bit precision" } ,
{ 0x1001, 0x0016, "ispLSI1032E", "PCI-MFB high-speed analog I/O" } ,
{ 0x1001, 0x0017, "ispLSI1032E", "PROTO-3 PCI, digital I/O with chipselect" } ,
{ 0x1002, 0x4158, "68800AX", "Mach 32" } ,
{ 0x1002, 0x4354, "215CT222", "Mach 64 CT" } ,
{ 0x1002, 0x4358, "210888CX", "Mach64 CX" } ,
{ 0x1002, 0x4554, "Mach64 ET", "" } ,
{ 0x1002, 0x4654, "Mach64 VT", "" } ,
{ 0x1002, 0x4742, "Rage 3D Pro AGP 2x", "" } ,
{ 0x1002, 0x4744, "Rage 3D Pro AGP 1x", "" } ,
{ 0x1002, 0x4747, "Rage 3D Pro", "" } ,
{ 0x1002, 0x4749, "3D RAGE PRO 2X AGP", "ATI ALL IN WONDER PRO (8MB)" } ,
{ 0x1002, 0x474C, "Rage XC PCI-66", "" } ,
{ 0x1002, 0x474D, "Rage XL AGP 2x", "" } ,
{ 0x1002, 0x474E, "Rage XC AGP 2x", "" } ,
{ 0x1002, 0x474F, "Rage XL PCI-66", "" } ,
{ 0x1002, 0x4750, "Rage 3D Pro PCI", "Graphics Accelerator" } ,
{ 0x1002, 0x4751, "Rage 3D Pro PCI", "" } ,
{ 0x1002, 0x4752, "Rage XL", "" } ,
{ 0x1002, 0x4753, "Rage XC PCI", "" } ,
{ 0x1002, 0x4754, "Mach 64 GT", "Rage 3D II Graphics Accelerator" } ,
{ 0x1002, 0x4755, "Rage 3D II+", "" } ,
{ 0x1002, 0x4756, "Rage 3D IIC PCI", "Graphics Accelerator" } ,
{ 0x1002, 0x4757, "", "Rage 3D IIC AGP" } ,
{ 0x1002, 0x4758, "210888GX", "Mach 64 GX (WinTurbo)" } ,
{ 0x1002, 0x4759, "", "Rage 3D IIC" } ,
{ 0x1002, 0x475A, "", "Rage 3D IIC AGP" } ,
{ 0x1002, 0x4C42, "", "Rage 3D LT Pro AGP 133 MHz" } ,
{ 0x1002, 0x4C44, "", "Rage 3D LT Pro AGP 66 MHz" } ,
{ 0x1002, 0x4C46, "Mobility M3 AGP 2x", "" } ,
{ 0x1002, 0x4C47, "", "Rage 3D LT-G" } ,
{ 0x1002, 0x4C49, "", "Rage 3D LT Pro PCI" } ,
{ 0x1002, 0x4C4D, "", "Rage P/M Mobility AGP 2x" } ,
{ 0x1002, 0x4C4E, "", "Rage L Mobility AGP 2x" } ,
{ 0x1002, 0x4C50, "", "Rage 3D LT Pro PCI" } ,
{ 0x1002, 0x4C51, "", "Rage 3D LT Pro PCI" } ,
{ 0x1002, 0x4C52, "", "Rage P/M Mobility PCI" } ,
{ 0x1002, 0x4C53, "", "Rage L Mobility PCI" } ,
{ 0x1002, 0x4C54, "", "Mach 64 LT" } ,
{ 0x1002, 0x5041, "", "Rage 128 Pro PCI" } ,
{ 0x1002, 0x5042, "", "Rage 128 Pro AGP 2x" } ,
{ 0x1002, 0x5043, "", "Rage 128 Pro AGP 4x" } ,
{ 0x1002, 0x5044, "", "Rage 128 Pro PCI (TMDS)" } ,
{ 0x1002, 0x5045, "", "Rage 128 Pro AGP 2x (TMDS)" } ,
{ 0x1002, 0x5046, "Rage Fury MAXX AGP4x", "" } ,
{ 0x1002, 0x5047, "", "Rage 128 Pro PCI" } ,
{ 0x1002, 0x5048, "Rage 128 Pro AGP 2x", "" } ,
{ 0x1002, 0x5049, "Rage 128 Pro AGP 4x", "" } ,
{ 0x1002, 0x504A, "Rage 128 Pro PCI", "" } ,
{ 0x1002, 0x504B, "Rage 128 Pro AGP 2x", "TMDS" } ,
{ 0x1002, 0x504C, "Rage 128 Pro AGP 4x", "TMDS" } ,
{ 0x1002, 0x504D, "Rage 128 Pro PCI", "" } ,
{ 0x1002, 0x504E, "Rage 128 Pro AGP 2x", "" } ,
{ 0x1002, 0x504F, "Rage 128 Pro AGP 4x", "" } ,
{ 0x1002, 0x5050, "Rage 128 Pro PCI", "TMDS" } ,
{ 0x1002, 0x5051, "Rage 128 Pro AGP 2x", "TMDS" } ,
{ 0x1002, 0x5052, "Rage 128 Pro AGP 4x", "TMDS" } ,
{ 0x1002, 0x5053, "Rage 128 Pro PCI", "" } ,
{ 0x1002, 0x5054, "Rage 128 Pro AGP 2x", "" } ,
{ 0x1002, 0x5055, "Rage 128 Pro AGP 4x", "" } ,
{ 0x1002, 0x5056, "Rage 128 Pro PCI", "TMDS" } ,
{ 0x1002, 0x5057, "Rage 128 Pro AGP 2x", "TMDS" } ,
{ 0x1002, 0x5058, "Rage 128 Pro AGP 4x", "TMDS" } ,
{ 0x1002, 0x5245, "", "Rage 128 GL PCI" } ,
{ 0x1002, 0x5246, "Rage 128 GL AGP 2x", "" } ,
{ 0x1002, 0x524B, "", "Rage 128 VR PCI" } ,
{ 0x1002, 0x524C, "", "Rage 128 VR AGP 2x" } ,
{ 0x1002, 0x5345, "", "Rage 128 4x PCI" } ,
{ 0x1002, 0x5346, "", "Rage 128 4x AGP 2x" } ,
{ 0x1002, 0x5347, "", "Rage 128 4x AGP 4x" } ,
{ 0x1002, 0x5348, "", "Rage 128 4x" } ,
{ 0x1002, 0x534B, "Rage 128 4x PCI", "" } ,
{ 0x1002, 0x534C, "Rage 128 4x AGP 2x", "" } ,
{ 0x1002, 0x534D, "Rage 128 4x AGP 4x", "" } ,
{ 0x1002, 0x534E, "Rage 128 4x", "" } ,
{ 0x1002, 0x5354, "", "Mach 64 ST" } ,
{ 0x1002, 0x5654, "215VT222", "Mach 64 VT VIDEO XPRESSION" } ,
{ 0x1002, 0x5655, "", "Mach 64 VT3" } ,
{ 0x1002, 0x5656, "", "Mach 64 VT4 PCI" } ,
{ 0x1003, 0x0201, "US201", "Graphics Cntrlr" } ,
{ 0x1004, 0x0005, "82C591/2-FC1", "CPU Bridge" } ,
{ 0x1004, 0x0006, "82C593", "ISA Bridge" } ,
{ 0x1004, 0x0007, "82C594", "Wildcat System Controller" } ,
{ 0x1004, 0x0008, "82C596/597", "Wildcat ISA Bridge" } ,
{ 0x1004, 0x000C, "82C541", "" } ,
{ 0x1004, 0x000D, "82C543", "" } ,
{ 0x1004, 0x0100, "", "CPU to PCI Bridge for notebook" } ,
{ 0x1004, 0x0101, "82C532", "Peripheral Controller" } ,
{ 0x1004, 0x0102, "82C534", "PCI to PCI Bridge" } ,
{ 0x1004, 0x0103, "82C538", "PCI to ISA Bridge" } ,
{ 0x1004, 0x0104, "82C535", "Host Bridge" } ,
{ 0x1004, 0x0105, "82C147", "IrDA Controller" } ,
{ 0x1004, 0x0200, "82C975", "RISC GUI Accelerator" } ,
{ 0x1004, 0x0280, "82C925", "RISC GUI Accelerator" } ,
{ 0x1004, 0x0304, "ThunderBird", "QSound PCI Audio" } ,
{ 0x1004, 0x0305, "ThunderBird", "Gameport device" } ,
{ 0x1004, 0x0306, "ThunderBird", "PCI Audio Support Registers" } ,
{ 0x1004, 0x0702, "VAS96011", "Golden Gate II" } ,
{ 0x1005, 0x2064, "ALG2032/2064", "" } ,
{ 0x1005, 0x2128, "ALG2364A", "" } ,
{ 0x1005, 0x2301, "ALG2301", "GUI Accelerator" } ,
{ 0x1005, 0x2302, "ALG2302", "GUI Accelerator" } ,
{ 0x1005, 0x2364, "AL2364", "GUI Accelerator" } ,
{ 0x1005, 0x2464, "ALG2364A", "" } ,
{ 0x1005, 0x2501, "ALG2564A/25128A", "" } ,
{ 0x100B, 0x0001, "DP83810", "10/100 Ethernet MAC" } ,
{ 0x100B, 0x0002, "PC87415", "PCI-IDE DMA Master Mode Interface Ctrlr" } ,
{ 0x100B, 0x000F, "", "OHCI Compliant FireWire Controller" } ,
{ 0x100B, 0x0011, "", "PCI System I/O" } ,
{ 0x100B, 0x0012, "", "USB Controller" } ,
{ 0x100B, 0x0020, "DP83815", "10/100 Mb/s Ethernet controller" } ,
{ 0x100B, 0xD001, "PC87410", "PCI-IDE Interface" } ,
{ 0x100C, 0x3202, "ET4000W32P-A", "GUI Accelerator" } ,
{ 0x100C, 0x3205, "ET4000W32P-B", "GUI Accelerator" } ,
{ 0x100C, 0x3206, "ET4000W32P-C", "GUI Accelerator" } ,
{ 0x100C, 0x3207, "ET4000W32P-D", "GUI Accelerator" } ,
{ 0x100C, 0x3208, "ET6000", "Graphics/Multimedia Engine" } ,
{ 0x100C, 0x4702, "ET6300", "" } ,
{ 0x100E, 0x9000, "P9000", "WeitekPower GUI Accelerator" } ,
{ 0x100E, 0x9001, "P9000", "GUI Accelerator" } ,
{ 0x100E, 0x9100, "P9100", "GUI Accelerator" } ,
{ 0x1011, 0x0001, "DC21050", "PCI-PCI Bridge" } ,
{ 0x1011, 0x0002, "DC21040", "Tulip Ethernet Adapter" } ,
{ 0x1011, 0x0004, "DC21030", "PCI Graphics Accelerator" } ,
{ 0x1011, 0x0007, "Zephyr", "NV-RAM" } ,
{ 0x1011, 0x0008, "KZPSA", "SCSI to SCSI Adapter" } ,
{ 0x1011, 0x0009, "DC21140", "Fast Ethernet Ctrlr" } ,
{ 0x1011, 0x000A, "DC21230", "Video Codec" } ,
{ 0x1011, 0x000C, "DC21130", "PCI Integrated Graphics & Video Accel" } ,
{ 0x1011, 0x000D, "TGA2", "" } ,
{ 0x1011, 0x000F, "DEFPA", "FDDI" } ,
{ 0x1011, 0x0014, "DC21041", "Tulip Plus Ethernet Adapter" } ,
{ 0x1011, 0x0016, "DGLPB", "ATM" } ,
{ 0x1011, 0x0019, "DC21142/3", "PCI/CardBus 10/100 Mbit Ethernet Ctlr" } ,
{ 0x1011, 0x0021, "21052", "PCI-PCI Bridge" } ,
{ 0x1011, 0x0022, "DC21150-AA", "PCI-PCI Bridge" } ,
{ 0x1011, 0x0023, "DC21150", "PCI to PCI Bridge" } ,
{ 0x1011, 0x0024, "DC21151/2", "PCI-PCI Bridge" } ,
{ 0x1011, 0x0025, "21153", "PCI-PCI Bridge" } ,
{ 0x1011, 0x0026, "21154", "PCI-PCI Bridge" } ,
{ 0x1011, 0x0045, "DC21553", "PCI to PCI Bridge" } ,
{ 0x1011, 0x0046, "21554", "PCI-to-PCI Bridge" } ,
{ 0x1011, 0x1065, "", "RAID Controller" } ,
{ 0x1013, 0x0038, "CL-GD7548", "GUI-Accelerated XGA/SVGA LCD Controller" } ,
{ 0x1013, 0x0040, "CL-GD7555", "Flat Panel GUI Accelerator" } ,
{ 0x1013, 0x004C, "CL-GD7556", "64-bit Accelerated LCD/CRT Controller" } ,
{ 0x1013, 0x00A0, "CL-GD5340", "GUI Accelerator" } ,
{ 0x1013, 0x00A2, "CL-GD5432", "Alpine GUI Accelerator" } ,
{ 0x1013, 0x00A4, "CL-GD5434", "Alpine GUI Accelerator" } ,
{ 0x1013, 0x00A8, "CL-GD5434", "Alpine GUI Accelerator" } ,
{ 0x1013, 0x00AC, "CL-GD5436", "Alpine GUI Accelerator" } ,
{ 0x1013, 0x00B8, "CL-GD5446", "64-bit VisualMedia Accelerator" } ,
{ 0x1013, 0x00BC, "CL-GD5480", "64-bit SGRAM GUI accelerator" } ,
{ 0x1013, 0x00D0, "CL-GD5462", "Laguna VisualMedia graphics accelerator" } ,
{ 0x1013, 0x00D4, "CL-GD5464", "Laguna 3D VisualMedia Graphics Accel" } ,
{ 0x1013, 0x00D6, "CL-GD5465", "Laguna 3D VisualMedia Graphics Accel" } ,
{ 0x1013, 0x1100, "CL-PD6729", "PCI-to-PC Card host adapter" } ,
{ 0x1013, 0x1110, "CL-PD6832", "PCMCIA/CardBus Controller" } ,
{ 0x1013, 0x1112, "CL-PD6834", "PCMCIA/CardBus Controller" } ,
{ 0x1013, 0x1113, "CL-PD6833", "PCI-to-CardBus Host Adapter" } ,
{ 0x1013, 0x1200, "CL-GD7542", "Nordic GUI Accelerator" } ,
{ 0x1013, 0x1202, "CL-GD7543", "Viking GUI Accelerator" } ,
{ 0x1013, 0x1204, "CL-GD7541", "Nordic-lite VGA Cntrlr" } ,
{ 0x1013, 0x4400, "CL-CD4400", "Communications Controller" } ,
{ 0x1013, 0x6001, "CS4610", "CrystalClear SoundFusion PCI Audio Accel" } ,
{ 0x1013, 0x6003, "CS4614/22/24", "CrystalClear SoundFusion PCI Audio Accel" } ,
{ 0x1013, 0x6005, "CS4281", "CrystalClear PCI Audio Interface" } ,
{ 0x1014, 0x0002, "MCA Bridge", "MCA Bridge" } ,
{ 0x1014, 0x0005, "Alta Lite", "CPU Bridge" } ,
{ 0x1014, 0x0007, "Alta MP", "CPU Bridge" } ,
{ 0x1014, 0x000A, "ISA Bridge w/PnP", "ISA Bridge w/PnP" } ,
{ 0x1014, 0x0017, "CPU Bridge", "CPU Bridge" } ,
{ 0x1014, 0x0018, "Auto LANStreamer", "" } ,
{ 0x1014, 0x001B, "GXT-150P", "Graphics Adapter" } ,
{ 0x1014, 0x001D, "82G2675", "" } ,
{ 0x1014, 0x0020, "", "MCA Bridge" } ,
{ 0x1014, 0x0022, "82351/2", "PCI to PCI Bridge" } ,
{ 0x1014, 0x002D, "Python", "" } ,
{ 0x1014, 0x002E, "ServeRAID", "RAID SCSI Adapter" } ,
{ 0x1014, 0x0036, "Miami/PCI", "32-bit LocalBus Bridge" } ,
{ 0x1014, 0x003E, "85H9533", "16/4 Token Ring PCI IBM UTP/STP Ctrlr" } ,
{ 0x1014, 0x0046, "MPIC", "Interrupt Controller" } ,
{ 0x1014, 0x0047, "", "PCI to PCI Bridge" } ,
{ 0x1014, 0x0048, "", "PCI to PCI Bridge" } ,
{ 0x1014, 0x0053, "", "25 MBit ATM controller" } ,
{ 0x1014, 0x0057, "", "MPEG PCI Bridge" } ,
{ 0x1014, 0x005C, "i82557B", "10/100 PCI Ethernet Adapter" } ,
{ 0x1014, 0x005D, "05J3506", "TCP/IP networking device" } ,
{ 0x1014, 0x007D, "", "MPEG-2 Decoder" } ,
{ 0x1014, 0x0095, "20H2999", "PCI Docking Bridge" } ,
{ 0x1014, 0x00B7, "", "256-bit Graphics Rasterizer" } ,
{ 0x1014, 0x00CE, "02li537", "Adapter 2 Token Ring Card" } ,
{ 0x1017, 0x5343, "", "SPEA 3D Accelerator" } ,
{ 0x101A, 0x0005, "8156", "100VG/AnyLAN Adapter" } ,
{ 0x101A, 0x0009, "Altera FLEX", "??? Raid Controller ???" } ,
{ 0x101C, 0x0193, "WD33C193A", "8-bit SCSI Cntrlr" } ,
{ 0x101C, 0x0196, "WD33C196A", "PCI-SCSI Bridge" } ,
{ 0x101C, 0x0197, "WD33C197A", "16-bit SCSI Cntrlr" } ,
{ 0x101C, 0x0296, "WD33C296A", "high perf 16-bit SCSI Cntrlr" } ,
{ 0x101C, 0x3193, "WD7193", "Fast SCSI-II" } ,
{ 0x101C, 0x3197, "WD7197", "Fast-wide SCSI-II" } ,
{ 0x101C, 0x3296, "WD33C296A", "Fast Wide SCSI bridge" } ,
{ 0x101C, 0x4296, "WD34C296", "Wide Fast-20 Bridge" } ,
{ 0x101C, 0x9710, "Pipeline 9710", "" } ,
{ 0x101C, 0x9712, "Pipeline 9712", "" } ,
{ 0x101C, 0xC24A, "90C", "" } ,
{ 0x101E, 0x9010, "MegaRAID", "Fast-wide SCSI/RAID" } ,
{ 0x101E, 0x9030, "", "IDE Cntrlr" } ,
{ 0x101E, 0x9031, "", "IDE Cntrlr" } ,
{ 0x101E, 0x9032, "", "IDE and SCSI Cntrlr" } ,
{ 0x101E, 0x9033, "", "SCSI Cntrlr" } ,
{ 0x101E, 0x9040, "", "Multimedia card" } ,
{ 0x101E, 0x9060, "MegaRAID", "RAID Controller" } ,
{ 0x1022, 0x2000, "79C970", "Ethernet Ctrlr" } ,
{ 0x1022, 0x2001, "Am79C978", "PCnet-Home Networking Ctrlr (1/10 Mbps)" } ,
{ 0x1022, 0x2020, "53C974", "SCSI Ctrlr" } ,
{ 0x1022, 0x2040, "79C974", "Ethernet & SCSI Ctrlr" } ,
{ 0x1022, 0x7006, "AMD-751", "Processor-to-PCI Bridge / Memory Ctrlr" } ,
{ 0x1022, 0x7007, "AMD-751", "AGP and PCI-to-PCI Bridge" } ,
{ 0x1022, 0x7400, "AMD-755", "PCI to ISA Bridge" } ,
{ 0x1022, 0x7401, "AMD-755", "Bus Master IDE Controller" } ,
{ 0x1022, 0x7403, "AMD-755", "Power Management Controller" } ,
{ 0x1022, 0x7404, "AMD-755", "PCI to USB Open Host Controller" } ,
{ 0x1022, 0x7408, "AMD-756", "PCI-ISA Bridge" } ,
{ 0x1022, 0x7409, "AMD-756", "EIDE Controller" } ,
{ 0x1022, 0x740B, "AMD-756", "Power Management" } ,
{ 0x1022, 0x740C, "AMD-756", "USB Controller" } ,
{ 0x1022, 0x7410, "AMD-766", "PCI to ISA/LPC Bridge" } ,
{ 0x1022, 0x7411, "AMD-766", "EIDE Controller" } ,
{ 0x1022, 0x7412, "AMD-766", "USB Controller" } ,
{ 0x1022, 0x7413, "AMD-766", "Power Management Controller" } ,
{ 0x1023, 0x0194, "82C194", "CardBus Controller" } ,
{ 0x1023, 0x2000, "4DWAVE-DX", "advanced PCI DirectSound accelerator" } ,
{ 0x1023, 0x2001, "4DWAVE-NX", "PCI Audio" } ,
{ 0x1023, 0x8400, "CyberBlade i7", "" } ,
{ 0x1023, 0x8420, "CyberBlade i7 AGP", "" } ,
{ 0x1023, 0x8500, "CyberBlade i1", "" } ,
{ 0x1023, 0x8520, "CyberBlade i1 AGP", "" } ,
{ 0x1023, 0x9320, "TGUI9320", "32-bit GUI Accelerator" } ,
{ 0x1023, 0x9350, "", "32-bit GUI Accelerator" } ,
{ 0x1023, 0x9360, "", "Flat panel Cntrlr" } ,
{ 0x1023, 0x9382, "Cyber9382", "" } ,
{ 0x1023, 0x9383, "Cyber9383", "" } ,
{ 0x1023, 0x9385, "Cyber9385", "" } ,
{ 0x1023, 0x9386, "Cyber9386", "Video Accelerator" } ,
{ 0x1023, 0x9388, "Cyber9388", "Video Accelerator" } ,
{ 0x1023, 0x9397, "Cyber9397", "Video Accelerator" } ,
{ 0x1023, 0x939A, "Cyber9397DVD", "Video Accelerator" } ,
{ 0x1023, 0x9420, "TGUI9420", "DGi GUI Accelerator" } ,
{ 0x1023, 0x9430, "TGUI9430", "GUI Accelerator" } ,
{ 0x1023, 0x9440, "TGUI9440", "DGi GUI Acclerator" } ,
{ 0x1023, 0x9460, "TGUI9460", "32-bit GUI Accelerator" } ,
{ 0x1023, 0x9470, "TGUI9470", "" } ,
{ 0x1023, 0x9520, "Cyber9520", "Video Accelerator" } ,
{ 0x1023, 0x9525, "Cyber9525", "Video Accelerator" } ,
{ 0x1023, 0x9660, "TGUI9660XGi", "GUI Accelerator" } ,
{ 0x1023, 0x9680, "TGUI9680", "GUI Accelerator" } ,
{ 0x1023, 0x9682, "TGUI9682", "Multimedia Accelerator" } ,
{ 0x1023, 0x9683, "TGUI9683", "GUI Accelerator" } ,
{ 0x1023, 0x9685, "ProVIDIA 9685", "" } ,
{ 0x1023, 0x9750, "3DImage 9750 PCI/AGP", "" } ,
{ 0x1023, 0x9753, "TGUI9753", "Video Accelerator" } ,
{ 0x1023, 0x9754, "TGUI9753", "Wave Video Accelerator" } ,
{ 0x1023, 0x9759, "TGUI975?", "Image GUI Accelerator" } ,
{ 0x1023, 0x9783, "TGUI9783", "" } ,
{ 0x1023, 0x9785, "TGUI9785", "" } ,
{ 0x1023, 0x9850, "3D Image 9850 AGP", "" } ,
{ 0x1023, 0x9880, "Blade 3D PCI/AGP", "" } ,
{ 0x1025, 0x1435, "M1435", "VL Bridge" } ,
{ 0x1025, 0x1445, "M1445", "VL Bridge & EIDE" } ,
{ 0x1025, 0x1449, "M1449", "ISA Bridge" } ,
{ 0x1025, 0x1451, "M1451", "Pentium Chipset" } ,
{ 0x1025, 0x1461, "M1461", "P54C Chipset" } ,
{ 0x1025, 0x1489, "M1489", "" } ,
{ 0x1025, 0x1511, "M1511", "" } ,
{ 0x1025, 0x1512, "M1512", "" } ,
{ 0x1025, 0x1513, "M1513", "" } ,
{ 0x1025, 0x1521, "M1521", "CPU Bridge" } ,
{ 0x1025, 0x1523, "M1523", "ISA Bridge" } ,
{ 0x1025, 0x1531, "M1531", "North Bridge" } ,
{ 0x1025, 0x1533, "M1533", "ISA South Bridge" } ,
{ 0x1025, 0x1535, "M1535", "PCI South Bridge" } ,
{ 0x1025, 0x1541, "M1541", "AGP PCI North Bridge Aladdin V/V+" } ,
{ 0x1025, 0x1542, "M1542", "AGP+PCI North Bridge" } ,
{ 0x1025, 0x1543, "M1543C", "PCi South Bridge Aladdin IV+/V" } ,
{ 0x1025, 0x1561, "M1561", "Northbridge" } ,
{ 0x1025, 0x1621, "M1621", "PCI North Bridge Aladdin Pro II" } ,
{ 0x1025, 0x1631, "M1631", "PCI North Bridge Aladdin Pro III" } ,
{ 0x1025, 0x1641, "M1641", "PCI North Bridge Aladdin Pro IV" } ,
{ 0x1025, 0x3141, "M3141", "GUI Accelerator" } ,
{ 0x1025, 0x3143, "M3143", "GUI Accelerator" } ,
{ 0x1025, 0x3145, "M3145", "GUI Accelerator" } ,
{ 0x1025, 0x3147, "M3147", "GUI Accelerator" } ,
{ 0x1025, 0x3149, "M3149", "GUI Accelerator" } ,
{ 0x1025, 0x3151, "M3151", "GUI Accelerator" } ,
{ 0x1025, 0x3307, "M3307", "MPEG-1 Decoder" } ,
{ 0x1025, 0x3309, "M3309", "MPEG Decoder" } ,
{ 0x1025, 0x5212, "M4803", "" } ,
{ 0x1025, 0x5215, "M5217", "EIDE Controller" } ,
{ 0x1025, 0x5217, "M5217", "I/O Controller" } ,
{ 0x1025, 0x5219, "M5219", "I/O Controller" } ,
{ 0x1025, 0x5225, "M5225", "EIDE Controller" } ,
{ 0x1025, 0x5229, "M5229", "EIDE Controller" } ,
{ 0x1025, 0x5235, "M5235", "I/O Controller" } ,
{ 0x1025, 0x5237, "M5237", "PCI USB Host Controller" } ,
{ 0x1025, 0x5240, "", "EIDE Controller" } ,
{ 0x1025, 0x5241, "", "PCMCIA Bridge" } ,
{ 0x1025, 0x5242, "", "General Purpose Controller" } ,
{ 0x1025, 0x5243, "", "PCI to PCI Bridge" } ,
{ 0x1025, 0x5244, "", "Floppy Disk Controller" } ,
{ 0x1025, 0x5247, "M1541", "PCI-PCI Bridge" } ,
{ 0x1025, 0x5427, "", "PCI to AGP Bridge" } ,
{ 0x1025, 0x5451, "M5451", "PCI AC-Link Controller Audio Device" } ,
{ 0x1025, 0x5453, "M5453", "M5453 AC-Link Controller Modem Device" } ,
{ 0x1025, 0x7101, "M7101", "PCI PMU Power Management Controller" } ,
{ 0x1028, 0x0001, "PowerEdge 2 /Si", "Expandable RAID Controller" } ,
{ 0x1028, 0x0002, "PowerEdge 3/Di", "Expandable RAID Controller" } ,
{ 0x1028, 0x0003, "PowerEdge 3/Si", "Expandable RAID Controller" } ,
{ 0x102A, 0x0000, "HYDRA", "P5 Chipset" } ,
{ 0x102A, 0x0010, "ASPEN", "i486 Chipset" } ,
{ 0x102B, 0x0010, "MGA-I", "Impression?" } ,
{ 0x102B, 0x0518, "MGA-PX2085", "Ultima/Atlas GUI Accelerator" } ,
{ 0x102B, 0x0519, "MGA-2064W", "Millenium GUI Accelerator" } ,
{ 0x102B, 0x051A, "MGA 1064SG", "64-bit graphics chip" } ,
{ 0x102B, 0x051B, "MGA-21164W", "Millenium II" } ,
{ 0x102B, 0x051E, "MGA-1164SG", "Mystique 220 (AGP)" } ,
{ 0x102B, 0x051F, "MGA2164WA-B", "Matrox Millenium II AGP" } ,
{ 0x102B, 0x0520, "MGA-G200B", "Millennium/Mystique G200 AGP" } ,
{ 0x102B, 0x0521, "MGA-G200", "Millennium/Mystique G200 AGP" } ,
{ 0x102b, 0x0525, "MGA-G400", "Millennium G400" } ,
{ 0x102B, 0x0D10, "MGA-I", "Ultima/Impression GUI accelerator" } ,
{ 0x102B, 0x1000, "MGA-G100", "" } ,
{ 0x102B, 0x1001, "MGA-G100", "" } ,
{ 0x102B, 0x2007, "Mistral", "GUI+3D Accelerator" } ,
{ 0x102B, 0x4536, "Meteor 2/MC", "Video Capture Card" } ,
{ 0x102B, 0x6573, "Shark", "10/100 Multiport Switch NIC" } ,
{ 0x102C, 0x00B8, "64310", "Wingine DGX - DRAM Graphics Accelerator" } ,
{ 0x102C, 0x00C0, "69000", "Video Accelerator with Integrated Memory" } ,
{ 0x102C, 0x00D0, "65545", "Flat panel/crt VGA Cntrlr" } ,
{ 0x102C, 0x00D8, "65540", "Flat Panel/CRT VGA Controller" } ,
{ 0x102C, 0x00DC, "65548", "GUI Accelerator" } ,
{ 0x102C, 0x00E0, "65550", "LCD/CRT controller" } ,
{ 0x102C, 0x00E4, "65554", "Flat Panel/LCD CRT GUI Accelerator" } ,
{ 0x102C, 0x00E5, "65555", "VGA GUI Accelerator" } ,
{ 0x102C, 0x00F0, "68554", "GUI Controller" } ,
{ 0x102C, 0x00F4, "68554", "HiQVision Flat Panel/CRT GUI Controller" } ,
{ 0x102C, 0x00F5, "68555", "GUI Controller" } ,
{ 0x102C, 0x03C0, "69030", "AGP Video Accelerator (4 MB RAM)" } ,
{ 0x102D, 0x50DC, "3328", "Audio" } ,
{ 0x102F, 0x0009, "r4x00", "CPU Bridge" } ,
{ 0x102F, 0x0020, "Meteor 155", "ATM PCI Adapter" } ,
{ 0x1031, 0x5601, "MiroVIDEO DC20", "I/O & JPEG" } ,
{ 0x1031, 0x5607, "", "video in and out with motion jpeg compression and deco" } ,
{ 0x1031, 0x5631, "Media 3D", "" } ,
{ 0x1031, 0x6057, "MiroVIDEO DC10/DC30", "" } ,
{ 0x1033, 0x0001, "", "PCI to 486 like bus Bridge" } ,
{ 0x1033, 0x0002, "", "PCI to vl98 Bridge" } ,
{ 0x1033, 0x0003, "", "atm lan Cntrlr" } ,
{ 0x1033, 0x0004, "R4000", "PCI bus Bridge" } ,
{ 0x1033, 0x0005, "", "PCI to 486 like peripheral bus Bridge" } ,
{ 0x1033, 0x0006, "", "GUI Accelerator" } ,
{ 0x1033, 0x0007, "", "PCI to ux-bus Bridge" } ,
{ 0x1033, 0x0008, "", "GUI Accelerator (vga equivalent)" } ,
{ 0x1033, 0x0009, "", "graphic Cntrlr for 98" } ,
{ 0x1033, 0x001A, "Nile II", "" } ,
{ 0x1033, 0x001D, "uPD98405", "NEASCOT-S20 ATM Integrated SAR Ctrlr" } ,
{ 0x1033, 0x0021, "Vrc4373", "Nile I" } ,
{ 0x1033, 0x0029, "PoverVR PCX1", "3D Accelerator" } ,
{ 0x1033, 0x002A, "PoverVR", "3D Accelerator" } ,
{ 0x1033, 0x0035, "uPD9210FGC-7EA", "USB Host Controller" } ,
{ 0x1033, 0x003E, "uPD66369", "NAPCCARD CardBus Controller" } ,
{ 0x1033, 0x0046, "PoverVR PCX2", "3D Accelerator" } ,
{ 0x1033, 0x005A, "Vrc5074", "Nile 4" } ,
{ 0x1033, 0x0063, "uPD72862", "Firewarden IEEE1394 OHCI Host Controller" } ,
{ 0x1033, 0x0067, "PowerVR Neon 250", "PowerVR series II graphics processor" } ,
{ 0x1033, 0x0074, "", "56k Voice Modem" } ,
{ 0x1033, 0x009B, "Vrc5476", "" } ,
{ 0x1033, 0x00CD, "uPD72870", "IEEE1394 1-Chip OHCI Host Controller" } ,
{ 0x1033, 0x00CE, "uPD72871", "IEEE1394 1-Chip OHCI Host Controller" } ,
{ 0x1036, 0x0000, "TMC-18C30", "Fast SCSI" } ,
{ 0x1039, 0x0001, "SiS 530", "Virtual PCI-to-PCI bridge (AGP)" } ,
{ 0x1039, 0x0002, "SiS 6202", "PCI True-Color Graphics Accelerator" } ,
{ 0x1039, 0x0005, "", "Pentium chipset" } ,
{ 0x1039, 0x0006, "SiS 85C501", "PCI/ISA Cache Memory Controller (PCMC)" } ,
{ 0x1039, 0x0008, "SiS 85C503", "PCI System I/O (PSIO)" } ,
{ 0x1039, 0x0009, "SiS 5595", "Power Management Unit (PMU)" } ,
{ 0x1039, 0x0018, "SiS 85C503", "PCI to ISA Bridge (LPC Bridge)" } ,
{ 0x1039, 0x0200, "SiS5597", "5597 Onboard Graphics Controller" } ,
{ 0x1039, 0x0204, "SiS 6215", "PCI Graphics & Video Accelerator" } ,
{ 0x1039, 0x0205, "SiS 6205", "PCI Graphics & Video Accelerator" } ,
{ 0x1039, 0x0300, "SiS300/305", "GUI Accelerator+3D" } ,
{ 0x1039, 0x0305, "SiS305", "2D/3D/Video/DVD Accelerator" } ,
{ 0x1039, 0x0406, "85C501", "PCI/ISA Cache Memory Controller (PCMC)" } ,
{ 0x1039, 0x0496, "85C496", "VL Bridge" } ,
{ 0x1039, 0x0530, "SiS530", "Host-to-PCI bridge" } ,
{ 0x1039, 0x0540, "SiS540", "Host-to-PCI Bridge" } ,
{ 0x1039, 0x0596, "", "p5 chipset w/DE" } ,
{ 0x1039, 0x0597, "SiS5513", "EIDE Controller (step C)" } ,
{ 0x1039, 0x0601, "SiS83C601", "PCI EIDE Controller" } ,
{ 0x1039, 0x0620, "SiS620", "Host-to-PCI Bridge" } ,
{ 0x1039, 0x0630, "SiS630", "Host-to-PCI Bridge" } ,
{ 0x1039, 0x0900, "SiS630", "Fast Ethernet/Home Networking Ctrlr" } ,
{ 0x1039, 0x3602, "SiS83C602", "IDE Controller" } ,
{ 0x1039, 0x5107, "SiS5107", "Hot Docking Controller" } ,
{ 0x1039, 0x5300, "SiS540", "AGP" } ,
{ 0x1039, 0x5401, "", "486 chipset" } ,
{ 0x1039, 0x5511, "SiS5511/5512", "PCI/ISA System Memory Controller" } ,
{ 0x1039, 0x5513, "SiS5513", "PCI IDE Controller" } ,
{ 0x1039, 0x5517, "SiS5517", "CPU to PCI Bridge" } ,
{ 0x1039, 0x5571, "SiS5571", "Memory/PCI bridge" } ,
{ 0x1039, 0x5581, "", "p5 chipset" } ,
{ 0x1039, 0x5582, "", "ISA Bridge" } ,
{ 0x1039, 0x5591, "SiS 5591/5592", "PCI AGP & CPU Memory Controller" } ,
{ 0x1039, 0x5596, "SiS5596", "PCI, Memory & VGA Controller" } ,
{ 0x1039, 0x5597, "SiS5597", "Host to PCI bridge" } ,
{ 0x1039, 0x5600, "SiS600", "Host-to-PCI Bridge" } ,
{ 0x1039, 0x6204, "", "video decoder/mpeg interface" } ,
{ 0x1039, 0x6205, "", "PCI vga Cntrlr" } ,
{ 0x1039, 0x6225, "SiS 6225", "PCI Graphics & Video Accelerator" } ,
{ 0x1039, 0x6300, "SiS630", "AGP" } ,
{ 0x1039, 0x6306, "SiS530", "Integrated 3D VGA Controller" } ,
{ 0x1039, 0x6326, "SiS 86C326", "AGP/PCI Graphics & Video Accelerator" } ,
{ 0x1039, 0x7001, "SiS5571", "USB Host Controller" } ,
{ 0x1039, 0x7007, "", "OHCI Compliant FireWire Controller" } ,
{ 0x1039, 0x7016, "SiS7016", "10/100 Ethernet Adapter" } ,
{ 0x1039, 0x7018, "SiS630", "Audio Accelerator" } ,
{ 0x103C, 0x1030, "J2585A", "DeskDirect 10/100VG LAN Adapter" } ,
{ 0x103C, 0x1031, "", "DeskDirect 10/100 NIC" } ,
{ 0x103C, 0x1064, "79C970", "PCnet Ethernet Controller" } ,
{ 0x103C, 0x10C1, "", "NetServer Smart IRQ Router" } ,
{ 0x103C, 0x10ED, "TopTools", "Remote Control" } ,
{ 0x103C, 0x1200, "82557B", "10/100 NIC" } ,
{ 0x103C, 0x1219, "", "NetServer PCI Hot-Plug Controller" } ,
{ 0x103C, 0x121A, "", "NetServer SMIC Controller" } ,
{ 0x103C, 0x121B, "", "NetServer Legacy COM Port Decoder" } ,
{ 0x103C, 0x121C, "", "NetServer PCI COM Port Decoder" } ,
{ 0x103C, 0x2910, "E2910A", "PCI Bus Exerciser" } ,
{ 0x103C, 0x2920, "", "Fast Host Interface" } ,
{ 0x103C, 0x2924, "E2924A", "PCI Host Interface Adapter" } ,
{ 0x103C, 0x2925, "E2925A", "32 bit PCI Bus Exerciser and Analyzer" } ,
{ 0x103C, 0x2926, "E2926A", "64 bit PCI Bus Exerciser and Analyzer" } ,
{ 0x103C, 0x2927, "E2927A", "64 Bit, 66/50MHz PCI Analyzer & Exerciser" } ,
{ 0x103c, 0x2928, "E2928A", "64Bit, 66MHz PCI Exerciser/Analyzer" } ,
{ 0x103C, 0x2940, "E2940A", "64 bit, 66/50MHz CompactPCI Analyzer&Exerciser" } ,
{ 0x1042, 0x1000, "FDC 37C665", "EIDE" } ,
{ 0x1042, 0x1000, "RZ1000", "IDE Ctrlr" } ,
{ 0x1042, 0x1001, "37C922", "" } ,
{ 0x1042, 0x3000, "Samurai 0", "CPU to PCI Bridge" } ,
{ 0x1042, 0x3010, "Samurai 1", "CPU to PCI Bridge" } ,
{ 0x1042, 0x3020, "Samurai", "IDE Controller" } ,
{ 0x1042, 0x3030, "MT82P664", "Samurai 64M2" } ,
{ 0x1043, 0x0200, "AGP-V3400", "Asus RivaTNT Video Board" } ,
{ 0x1043, 0x401D, "", "GeForce2 MX" } ,
{ 0x1044, 0x1012, "Domino", "RAID Engine" } ,
{ 0x1044, 0xA400, "2124A/9X", "SmartCache III/RAID SCSI Controller" } ,
{ 0x1044, 0xA500, "", "PCI Bridge" } ,
{ 0x1044, 0xA501, "", "SmartRAID V Controller" } ,
{ 0x1045, 0xA0F8, "82C750", "PCI USB Controller" } ,
{ 0x1045, 0xC101, "82C264", "GUI Accelerator" } ,
{ 0x1045, 0xC178, "82C178", "LCD GUI Accelerator" } ,
{ 0x1045, 0xC556, "82C556", "Viper" } ,
{ 0x1045, 0xC557, "82C557", "CPU Bridge (Viper)" } ,
{ 0x1045, 0xC558, "82C558", "ISA Bridge w/PnP" } ,
{ 0x1045, 0xC567, "82C750", "Vendetta chipset: host bridge" } ,
{ 0x1045, 0xC568, "82C750", "Vendetta chipset: ISA bridge" } ,
{ 0x1045, 0xC569, "82C579", "Pentium to PCI Bridge" } ,
{ 0x1045, 0xC621, "82C621", "PCI IDE Controller (PIC)" } ,
{ 0x1045, 0xC700, "82C700", "FireStar chipset, PCI-ISA bridge???" } ,
{ 0x1045, 0xC701, "82C700", "FireStar mobile chipset: host bridge" } ,
{ 0x1045, 0xC814, "82C814", "FireBridge II Docking Station Controller" } ,
{ 0x1045, 0xC822, "82C822", "EIDE Ctrlr" } ,
{ 0x1045, 0xC824, "82C824", "FireFox 32-Bit PC Card Controller" } ,
{ 0x1045, 0xC825, "82C825 function 0", "PCI-to-ISA Bridge" } ,
{ 0x1045, 0xC832, "82C832", "CPU-to-PCI and PCI-to-ISA Bridge" } ,
{ 0x1045, 0xC861, "82C861", "FireLink PCI-to-USB Bridge" } ,
{ 0x1045, 0xC895, "82C895", "" } ,
{ 0x1045, 0xC935, "82C935", "MachOne integrated PCI audio processor" } ,
{ 0x1045, 0xD568, "82C825", "PCI bus master IDE controller" } ,
{ 0x1045, 0xD768, "82C750", "Ultra DMA IDE controller" } ,
{ 0x1048, 0x1000, "", "PCI to SCSI Bridge" } ,
{ 0x1048, 0x3000, "QuickStep 3000", "" } ,
{ 0x104A, 0x0008, "STG 2000X", "" } ,
{ 0x104A, 0x0009, "STG 1764X", "" } ,
{ 0x104A, 0x0010, "STG4000", "PowerVR series 3 graphics processor" } ,
{ 0x104A, 0x1746, "STG 1746X", "" } ,
{ 0x104A, 0x3520, "", "MPEG-II Video Decoder" } ,
{ 0x104B, 0x0140, "BT-946C", "Multimaster NC (SCSI-2)" } ,
{ 0x104B, 0x1040, "BA80C30", "Multimaster" } ,
{ 0x104B, 0x8130, "Flashpoint LT", "Ultra SCSI" } ,
{ 0x104C, 0x0500, "", "100 MBit LAN Cntrlr" } ,
{ 0x104C, 0x0508, "TMS380C2X", "Compressor interface" } ,
{ 0x104C, 0x1000, "TI PCI Eagle i/f AS", "" } ,
{ 0x104C, 0x3D04, "TVP4010", "Permedia" } ,
{ 0x104C, 0x3D07, "TVP4020", "AGP Permedia 2" } ,
{ 0x104C, 0x8000, "LYNX", "FireWire Host Controller" } ,
{ 0x104C, 0x8009, "", "OHCI Compliant FireWire Controller" } ,
{ 0x104C, 0x8019, "TSB12LV23", "OHCI Compliant IEEE-1394 Controller" } ,
{ 0x104C, 0xA001, "TDC1570", "64-bit PCI ATM sar" } ,
{ 0x104C, 0xA100, "TDC1561", "32-bit PCI ATM sar" } ,
{ 0x104C, 0xAC10, "PCI1050", "pc card Cntrlr" } ,
{ 0x104C, 0xAC11, "PCI1030/1053", "PC Card Controller" } ,
{ 0x104C, 0xAC12, "PCI1130", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC13, "PCI1031", "PCI-TO-PC CARD16 CONTROLLER UNIT" } ,
{ 0x104c, 0xAC15, "PCI1131", "Dual Socket PCI CardBus Controller" } ,
{ 0x104C, 0xAC16, "PCI1250", "pc card Cardbus Cntrlr" } ,
{ 0x104C, 0xac17, "PCI1220", "CardBus Controller" } ,
{ 0x104C, 0xAC18, "PCI1260", "PC card CardBus Controller" } ,
{ 0x104c, 0xAC19, "PCI1221", "PC Card Controller" } ,
{ 0x104C, 0xAC1A, "PCI1210", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC1B, "PCI1450", "PC card CardBus Controller" } ,
{ 0x104c, 0xAC1C, "PCI1225", "PC Card Controller" } ,
{ 0x104c, 0xAC1D, "PCI1251A", "PC Card Controller" } ,
{ 0x104c, 0xAC1E, "PCI1211", "High Performance PC Card Controller" } ,
{ 0x104C, 0xAC1F, "PCI1251B", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC20, "PCI2030", "PCI to PCI Bridge" } ,
{ 0x104C, 0xAC30, "PCI1260", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC40, "PCI4450", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC41, "PCI4410", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC42, "PCI4451", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC50, "PCI1410", "PC card cardBus Controller" } ,
{ 0x104c, 0xAC51, "PCI1420", "PC Card Controller" } ,
{ 0x104C, 0xAC52, "PCI1451", "PC card CardBus Controller" } ,
{ 0x104C, 0xAC53, "PCI1421", "PC card CardBus Controller" } ,
{ 0x104c, 0xAC60, "PCI2040", "PCI-DSP Bridge Controller" } ,
{ 0x104C, 0xFE00, "", "FireWire Host Controller" } ,
{ 0x104C, 0xFE03, "12C01A", "FireWire Host Controller" } ,
{ 0x104D, 0x8009, "CXD1947A", "IEEE1394 link layer / PCI bridge" } ,
{ 0x104D, 0x8039, "CXD3222", "OHCI i.LINK (IEEE 1394) PCI Host Ctrlr" } ,
{ 0x104D, 0x8056, "Rockwell HCF 56K", "Modem" } ,
{ 0x104d, 0x8057, "0x12298086", "Intel Etherexpress 10/100 onboard" } ,
{ 0x104E, 0x0017, "OTI-64017", "" } ,
{ 0x104E, 0x0107, "OTI107", "Spitfire VGA Accelerator" } ,
{ 0x104E, 0x0109, "", "Video Adapter" } ,
{ 0x104E, 0x0111, "OTI-64111", "Spitfire" } ,
{ 0x104E, 0x0217, "OTI-64217", "" } ,
{ 0x104E, 0x0317, "OTI-64317", "" } ,
{ 0x1050, 0x0000, "", "Ethernet Cntrlr" } ,
{ 0x1050, 0x0001, "W83769F", "Ethernet Adapter" } ,
{ 0x1050, 0x0105, "W82C105", "Ethernet Adapter" } ,
{ 0x1050, 0x0840, "W89C840F", "100/10Mbps Ethernet Controller" } ,
{ 0x1050, 0x0940, "w89c940f", "winbond pci ethernet" } ,
{ 0x1050, 0x5A5A, "W89C940F", "NE2000-compatible Ethernet Adapter" } ,
{ 0x1050, 0x6692, "W6692CF", "ISDN" } ,
{ 0x1050, 0x9970, "W9970CF", "" } ,
{ 0x1054, 0x0001, "", "PCI Bridge" } ,
{ 0x1054, 0x0002, "", "PCI bus Cntrlr" } ,
{ 0x1055, 0x0810, "", "486 host Bridge" } ,
{ 0x1055, 0x0922, "", "Pentium/p54c host Bridge" } ,
{ 0x1055, 0x0926, "", "ISA Bridge" } ,
{ 0x1055, 0x9460, "SLC90E66", "Victory66 PCI to ISA Bridge" } ,
{ 0x1055, 0x9461, "SLC90E66", "Victory66 UDMA EIDE Controller" } ,
{ 0x1055, 0x9462, "SLC90E66", "Victory66 USB Host Controller" } ,
{ 0x1055, 0x9463, "SLC90E66", "Victory66 Power Management Controller" } ,
{ 0x1057, 0x0001, "MPC105", "Eagle PowerPC Chipset" } ,
{ 0x1057, 0x0002, "MPC106", "Grackle PowerPC Chipset" } ,
{ 0x1057, 0x0100, "MC145575", "HCF-PCI" } ,
{ 0x1057, 0x0431, "KTI829c", "100VG Ethernet Controller" } ,
{ 0x1057, 0x1801, "56301", "Audio I/O Controller (MIDI)" } ,
{ 0x1057, 0x4801, "Raven", "PowerPC Chipset" } ,
{ 0x1057, 0x4802, "Falcon", "" } ,
{ 0x1057, 0x4803, "Hawk", "" } ,
{ 0x1057, 0x4806, "CPX8216", "" } ,
{ 0x1057, 0x5600, "SM56", "PCI Speakerphone Modem" } ,
{ 0x105a, 0x0D30, "PDC20265", "UltraDMA100 EIDE controller (on M/B)" } ,
{ 0x105A, 0x4D30, "", "Ultra100 EIDE Controller" } ,
{ 0x105A, 0x4D33, "PDC20246", "Ultra ATA controller" } ,
{ 0x105A, 0x4D38, "PDC20262", "UltraDMA66 EIDE Controller" } ,
{ 0x105A, 0x5300, "DC5300", "EIDE Controller" } ,
{ 0x105D, 0x2309, "Imagine 128", "GUI Accelerator" } ,
{ 0x105D, 0x2339, "I128s2", "Imagine 128 Series 2" } ,
{ 0x105D, 0x493D, "T2R", "Revolution 3D" } ,
{ 0x105D, 0x5348, "Revolution IV", "Revolution IV" } ,
{ 0x1060, 0x0001, "UM82C881", "486 Chipset" } ,
{ 0x1060, 0x0002, "UM82C886", "ISA Bridge" } ,
{ 0x1060, 0x0101, "UM8673F", "EIDE Controller" } ,
{ 0x1060, 0x0881, "UM8881", "" } ,
{ 0x1060, 0x0881, "UM8881", "HB4 486 PCI Chipset" } ,
{ 0x1060, 0x0886, "UM8886F", "ISA Bridge" } ,
{ 0x1060, 0x0891, "UM82C891", "Pentium Chipset" } ,
{ 0x1060, 0x1001, "UM886A", "IDE Cntrlr (dual function)" } ,
{ 0x1060, 0x673A, "UM8886", "Funktion 1: EIDE Controller" } ,
{ 0x1060, 0x673B, "", "EIDE Master/DMA" } ,
{ 0x1060, 0x8710, "UM8710", "VGA Cntrlr" } ,
{ 0x1060, 0x8821, "", "CPU/PCI Bridge" } ,
{ 0x1060, 0x8822, "", "PCI/ISA Bridge" } ,
{ 0x1060, 0x8851, "", "Pentium CPU/PCI Bridge" } ,
{ 0x1060, 0x8852, "", "Pentium CPU/ISA Bridge" } ,
{ 0x1060, 0x886A, "UM8886", "ISA Bridge with EIDE" } ,
{ 0x1060, 0x8881, "UM8881F", "HB4 486 PCI Chipset" } ,
{ 0x1060, 0x8886, "UM8886", "ISA Bridge" } ,
{ 0x1060, 0x888A, "UM8886A", "" } ,
{ 0x1060, 0x8891, "UM8891", "586 Chipset" } ,
{ 0x1060, 0x9017, "UM9017F", "Ethernet" } ,
{ 0x1060, 0x9018, "UM9018", "Ethernet" } ,
{ 0x1060, 0x9026, "UM9026", "Fast Ethernet" } ,
{ 0x1060, 0xE881, "UM8881", "486 Chipset" } ,
{ 0x1060, 0xE886, "UM8886", "ISA Bridge w/EIDE" } ,
{ 0x1060, 0xE88A, "UM8886N", "" } ,
{ 0x1060, 0xE891, "UM8891", "Pentium Chipset" } ,
{ 0x1061, 0x0001, "AGX013/016", "GUI Accelerator" } ,
{ 0x1061, 0x0002, "IIT3204/3501", "MPEG Decoder" } ,
{ 0x1066, 0x0000, "PT80C826", "VL Bridge" } ,
{ 0x1066, 0x0001, "PT86C521", "Vesuvius V1-LS System Controller" } ,
{ 0x1066, 0x0002, "PT86C523", "Vesuvius V3-LS ISA Bridge" } ,
{ 0x1066, 0x0004, "", "ISA Bridge" } ,
{ 0x1066, 0x0005, "PC87550", "System Controller" } ,
{ 0x1066, 0x8002, "PT86C523", "ISA Bridge" } ,
{ 0x1067, 0x1002, "VG500", "VolumePro Volume Rendering Accelerator" } ,
{ 0x1069, 0x0001, "DAC960P", "DAC960P 3 ch SCSI RAID Controller" } ,
{ 0x1069, 0x0002, "DAC960PD", "DAC960PD 3 ch SCSI RAID Controller" } ,
{ 0x1069, 0x0010, "DAC960PJ", "DAC960PJ 3 ch SCSI RAID Controller" } ,
{ 0x1069, 0x0050, "i960", "AcceleRAID 170" } ,
{ 0x1069, 0xBA55, "1100", "eXtremeRAID Controller" } ,
{ 0x106B, 0x0001, "Bandit", "" } ,
{ 0x106B, 0x0002, "Grand Central", "" } ,
{ 0x106B, 0x0003, "Control Video", "" } ,
{ 0x106B, 0x0004, "PlanB", "Video-in" } ,
{ 0x106B, 0x0007, "OHare", "I/O" } ,
{ 0x106B, 0x000E, "Hydra", "" } ,
{ 0x106B, 0x0010, "Heathrow", "Mac I/O" } ,
{ 0x106B, 0x0017, "Paddington", "Mac I/O" } ,
{ 0x106C, 0x8801, "", "Dual Pentium ISA/PCI Motherboard" } ,
{ 0x106C, 0x8802, "", "PowerPC ISA/PCI Motherboard" } ,
{ 0x106C, 0x8803, "", "Dual Window Graphics Accelerator" } ,
{ 0x106C, 0x8804, "", "PCI LAN Controller" } ,
{ 0x106C, 0x8805, "", "100-BaseT LAN Controller" } ,
{ 0x1073, 0x0001, "", "3D graphics Cntrlr" } ,
{ 0x1073, 0x0002, "YGV615", "RPA3 3D-Graphics Controller" } ,
{ 0x1073, 0x0003, "YMF740", "" } ,
{ 0x1073, 0x0004, "YMF724", "" } ,
{ 0x1073, 0x0005, "DS1", "DS1 Audio" } ,
{ 0x1073, 0x0006, "DS1", "DS1 Audio" } ,
{ 0x1073, 0x0008, "DS1", "DS1 Audio" } ,
{ 0x1073, 0x000A, "DS1L", "DS1L Audio" } ,
{ 0x1073, 0x000C, "YMF740C", "DS-1L PCI audio controller" } ,
{ 0x1073, 0x000D, "YMF724F", "DS-1 PCI audio controller" } ,
{ 0x1073, 0x0010, "YMF744B", "DS-1S PCI audio controller" } ,
{ 0x1073, 0x0012, "YMF754B", "DS-1S Audio" } ,
{ 0x1073, 0x0020, "", "DS-1 Audio" } ,
{ 0x1074, 0x4E78, "82C500/1", "Nx586 Chipset" } ,
{ 0x1077, 0x1020, "ISP1020A", "Fast-wide SCSI" } ,
{ 0x1077, 0x1022, "ISP1022A", "Fast-wide SCSI" } ,
{ 0x1077, 0x1080, "ISP1080", "SCSI Host Adapter" } ,
{ 0x1077, 0x1240, "ISP1240", "SCSI Host Adapter" } ,
{ 0x1077, 0x1280, "ISP1280", "" } ,
{ 0x1077, 0x2020, "ISP2020", "Fast!SCSI Basic Adapter" } ,
{ 0x1077, 0x2100, "QLA2100", "64-bit Fibre Channel Adapter" } ,
{ 0x1077, 0x2200, "ISP2200", "" } ,
{ 0x1078, 0x0000, "Cx5520", "ISA Bridge" } ,
{ 0x1078, 0x0001, "MediaGXm MMX", "Cyrix Integrated CPU" } ,
{ 0x1078, 0x0002, "Cx5520", "ISA Bridge" } ,
{ 0x1078, 0x0100, "Cx5530", "Legacy device" } ,
{ 0x1078, 0x0101, "Cx5530", "SMI" } ,
{ 0x1078, 0x0102, "Cx5530", "IDE" } ,
{ 0x1078, 0x0103, "Cx5530", "Audio" } ,
{ 0x1078, 0x0104, "Cx5530", "Video" } ,
{ 0x107D, 0x0000, "P86C850", "Graphic GLU-Logic" } ,
{ 0x107E, 0x0001, "", "ATM interface card" } ,
{ 0x107E, 0x0002, "", "100 vg anylan Cntrlr" } ,
{ 0x107E, 0x0004, "5526", "" } ,
{ 0x107E, 0x0005, "55x6", "" } ,
{ 0x107E, 0x0008, "", "155 MBit ATM controller" } ,
{ 0x107F, 0x0802, "SL82C105", "EIDE Ctrlr" } ,
{ 0x107F, 0x0803, "", "EIDE Bus Master Controller" } ,
{ 0x107F, 0x0806, "", "EIDE Controller" } ,
{ 0x107f, 0x1138, "1138", "" } ,
{ 0x107F, 0x2015, "", "EIDE Controller" } ,
{ 0x1080, 0x0600, "82C596/9", "PCI to VLB Bridge" } ,
{ 0x1080, 0xC691, "Cypress CY82C691", "" } ,
{ 0x1080, 0xC693, "82C693", "PCI to ISA Bridge" } ,
{ 0x1081, 0x0D47, "", "PCi to NuBUS Bridge" } ,
{ 0x1083, 0x0001, "FR710", "EIDE Ctrlr" } ,
{ 0x1083, 0x0613, "", "Host Bridge" } ,
{ 0x108A, 0x0001, "Model 617", "PCI-VME Bus Adapter" } ,
{ 0x108A, 0x0010, "Model 618", "VME Bridge" } ,
{ 0x108A, 0x3000, "Model 2106", "VME Bridge" } ,
{ 0x108D, 0x0001, "OC-3136/37", "16/4 PCI Ethernet Adapter" } ,
{ 0x108D, 0x0002, "OC-3139f", "Fastload 16/4 PCI/III Token Ring Adapter" } ,
{ 0x108D, 0x0004, "OC-3139/40", "RapidFire Token Ring 16/4 Adapter" } ,
{ 0x108D, 0x0005, "OC-3250", "GoCard Token Ring 16/4 Adapter" } ,
{ 0x108D, 0x0006, "OC-3530", "RapidFire Token Ring 100 Adapter" } ,
{ 0x108D, 0x0007, "OC-3141", "RapidFire Token Ring 16/4 Adapter" } ,
{ 0x108D, 0x0008, "OC-3540", "RapidFire HSTR 100/16/4 Adapter" } ,
{ 0x108D, 0x0011, "OC-2805", "Ethernet Controller" } ,
{ 0x108D, 0x0012, "OC-2325", "Ethernet PCI/II 10/100 Controller" } ,
{ 0x108D, 0x0013, "OC-2183/85", "PCI/II Ethernet Controller" } ,
{ 0x108D, 0x0014, "OC-2326", "Ethernet PCI/II 10/100 Controller" } ,
{ 0x108D, 0x0019, "OC-2327/50", "10/100 Ethernet Controller" } ,
{ 0x108D, 0x0021, "OC-6151/52", "ATM Adapter" } ,
{ 0x108D, 0x0022, "", "ATM Adapter" } ,
{ 0x108E, 0x0001, "SPARC EBUS", "" } ,
{ 0x108E, 0x1000, "EBUS?", "HME bridge device" } ,
{ 0x108E, 0x1001, "HME", "Happy Meal Ethernet" } ,
{ 0x108E, 0x5000, "Simba", "PCI Bridge" } ,
{ 0x108E, 0x5043, "SunPCI", "Co-processor" } ,
{ 0x108E, 0x8000, "", "PCI Bus Module" } ,
{ 0x108E, 0xA000, "UltraSPARC III PCI", "" } ,
{ 0x1091, 0x0020, "", "3D Graphics Processor" } ,
{ 0x1091, 0x0021, "", "3D graphics processor w/texturing" } ,
{ 0x1091, 0x0040, "", "3D graphics frame buffer" } ,
{ 0x1091, 0x0041, "", "3D graphics frame buffer" } ,
{ 0x1091, 0x0060, "", "Proprietary bus Bridge" } ,
{ 0x1091, 0x00E4, "Powerstorm 4D50T", "" } ,
{ 0x1091, 0x0720, "", "Motion JPEG Codec" } ,
{ 0x1092, 0x00A0, "SpeedStar Pro SE", "GUI Accelerator" } ,
{ 0x1092, 0x00A8, "SpeedStar 64", "GUI Accelerator" } ,
{ 0x1092, 0x08D4, "Supra 2260", "Modem" } ,
{ 0x1092, 0x1092, "Viper V330", "" } ,
{ 0x1092, 0x6120, "Maximum", "DVD" } ,
{ 0x1092, 0x8810, "Stealth SE", "GUI Accelerator" } ,
{ 0x1092, 0x8811, "Stealth 64/SE", "GUI Accelerator" } ,
{ 0x1092, 0x8880, "Stealth Video", "" } ,
{ 0x1092, 0x8881, "Stealth Video", "GUI Accelerator" } ,
{ 0x1092, 0x88B0, "Stealth 64 Video", "GUI Accelerator" } ,
{ 0x1092, 0x88B1, "Stealth 64 Video", "GUI Accelerator" } ,
{ 0x1092, 0x88C0, "Stealth 64", "GUI Accelerator" } ,
{ 0x1092, 0x88C1, "Stealth 64", "GUI Accelerator" } ,
{ 0x1092, 0x88D0, "Stealth 64", "GUI Accelerator" } ,
{ 0x1092, 0x88D1, "Stealth 64", "GUI Accelerator" } ,
{ 0x1092, 0x88F0, "Stealth 64 Video", "GUI Accelerator" } ,
{ 0x1092, 0x88F1, "Stealth 64 Video", "GUI Accelerator" } ,
{ 0x1092, 0x9999, "Monster Sound", "" } ,
{ 0x1093, 0x0160, "PCI-DIO-96", "" } ,
{ 0x1093, 0x0162, "PCI-MIO-16XE-50", "" } ,
{ 0x1093, 0x1170, "PCI-MIO-16XE-10", "" } ,
{ 0x1093, 0x1180, "PCI-MIO-16E-1", "" } ,
{ 0x1093, 0x1190, "PCI-MIO-16E-4", "" } ,
{ 0x1093, 0x1330, "PCI-6031E", "" } ,
{ 0x1093, 0x1350, "PCI-6071E", "" } ,
{ 0x1093, 0x2A60, "PCI-6023E", "" } ,
{ 0x1093, 0xB001, "IMAQ-PCI-1408", "" } ,
{ 0x1093, 0xB011, "IMAQ-PXI-1408", "" } ,
{ 0x1093, 0xB021, "IMAQ-PCI-1424", "" } ,
{ 0x1093, 0xB031, "IMAQ-PCI-1413", "" } ,
{ 0x1093, 0xB041, "IMAQ-PCI-1407", "" } ,
{ 0x1093, 0xB051, "IMAQ-PXI-1407", "" } ,
{ 0x1093, 0xB061, "IMAQ-PCI-1411", "" } ,
{ 0x1093, 0xB071, "IMAQ-PCI-1422", "" } ,
{ 0x1093, 0xB081, "IMAQ-PXI-1422", "" } ,
{ 0x1093, 0xB091, "IMAQ-PXI-1411", "" } ,
{ 0x1093, 0xC801, "PCI-GPIB", "GPIB Controller Interface Board" } ,
{ 0x1095, 0x0640, "PCI0640A", "EIDE Ctrlr" } ,
{ 0x1095, 0x0641, "PCI0640", "PCI EIDE Adapter with RAID 1" } ,
{ 0x1095, 0x0642, "", "IDE Cntrlr w/RAID 1" } ,
{ 0x1095, 0x0643, "PCI0643", "PCI EIDE controller" } ,
{ 0x1095, 0x0646, "PCI0646", "bus master IDE" } ,
{ 0x1095, 0x0647, "PCI0647", "" } ,
{ 0x1095, 0x0648, "PCI-648", "Bus Master Ultra DMA PCI-IDE/ATA Chip" } ,
{ 0x1095, 0x0649, "PCI-649", "Ultra ATA/100 PCI to IDE/ATA Jost Ctrlr" } ,
{ 0x1095, 0x0650, "PBC0650A", "Fast SCSI-II Ctrlr" } ,
{ 0x1095, 0x0670, "USB0670", "PCI-USB ASIC" } ,
{ 0x1095, 0x0673, "USB0673", "PCI-USB ASIC" } ,
{ 0x1097, 0x0038, "", "EIDE Controller (single FIFO)" } ,
{ 0x1098, 0x0001, "QD8500", "EIDE Controller" } ,
{ 0x1098, 0x0002, "QD8580", "EIDE Controller" } ,
{ 0x109E, 0x0350, "BT848", "TV/PCI with DMA Push" } ,
{ 0x109E, 0x0351, "Bt849", "Video Capture" } ,
{ 0x109E, 0x036C, "Bt879?", "Video Capture" } ,
{ 0x109E, 0x036E, "Bt878", "MediaStream Controller" } ,
{ 0x109E, 0x036F, "Bt879", "Video Capture" } ,
{ 0x109E, 0x0370, "Bt880", "Video Capture" } ,
{ 0x109E, 0x0878, "Bt878", "Video Capture (Audio Section)" } ,
{ 0x109E, 0x0879, "Bt879", "Video Capture (Audio Section)" } ,
{ 0x109E, 0x0880, "Bt880", "Video Capture (Audio Section)" } ,
{ 0x109E, 0x2115, "BtV 2115", "BtV Mediastream Controller" } ,
{ 0x109E, 0x2125, "BtV 2125", "BtV Mediastream Controller" } ,
{ 0x109E, 0x2164, "BtV 2164", "Display Adapter" } ,
{ 0x109E, 0x2165, "BtV 2165", "MediaStream Controller" } ,
{ 0x109E, 0x8230, "BtV 8230", "ATM Segment/Reassembly Controller (SRC)" } ,
{ 0x109E, 0x8472, "Bt8472", "" } ,
{ 0x109E, 0x8474, "Bt8474", "" } ,
{ 0x10A8, 0x0000, "?", "64-bit GUI Accelerator" } ,
{ 0x10a9, 0x0001, "", "Crosstalk to PCi Bridge" } ,
{ 0x10a9, 0x0002, "Linc", "I/O Controller" } ,
{ 0x10a9, 0x0003, "IOC3", "I/O Controller" } ,
{ 0x10A9, 0x0004, "O2 MACE", "" } ,
{ 0x10A9, 0x0005, "RAD Audio", "" } ,
{ 0x10A9, 0x0006, "HPCEX", "" } ,
{ 0x10A9, 0x0007, "RPCEX", "" } ,
{ 0x10A9, 0x0008, "DiVO VIP", "" } ,
{ 0x10A9, 0x0009, "Alteon", "Gigabit Ethernet" } ,
{ 0x10A9, 0x0010, "AMP", "Video I/O" } ,
{ 0x10A9, 0x0011, "GRIP", "" } ,
{ 0x10A9, 0x0012, "SGH PSHAC GSN", "" } ,
{ 0x10A9, 0x1001, "Magic Carpet", "" } ,
{ 0x10A9, 0x1002, "Lithium", "" } ,
{ 0x10A9, 0x1003, "Dual JPEG 1", "" } ,
{ 0x10A9, 0x1004, "Dual JPEG 2", "" } ,
{ 0x10A9, 0x1005, "Dual JPEG 3", "" } ,
{ 0x10A9, 0x1006, "Dual JPEG 4", "" } ,
{ 0x10A9, 0x1007, "Dual JPEG 5", "" } ,
{ 0x10A9, 0x1008, "Cesium", "" } ,
{ 0x10A9, 0x2001, "", "Fibre Channel" } ,
{ 0x10A9, 0x2002, "ASDE", "" } ,
{ 0x10A9, 0x8001, "O2 1394", "" } ,
{ 0x10A9, 0x8002, "G-net NT", "" } ,
{ 0x10AA, 0x0000, "ACC 2056/2188", "CPU to PCI Bridge (Pentium)" } ,
{ 0x10AA, 0x2051, "", "Laptop Chipset CPU Bridge" } ,
{ 0x10AA, 0x5842, "", "Laptop Chipset ISA Bridge" } ,
{ 0x10AD, 0x0001, "W83769F", "EIDE Ctrlr" } ,
{ 0x10ad, 0x0003, "SL82C103", "EIDE Controller" } ,
{ 0x10ad, 0x0005, "SL82C105", "EIDE Busmaster Controller" } ,
{ 0x10AD, 0x0103, "sl82c103", "PCI-ide mode 4.5 Cntrlr" } ,
{ 0x10AD, 0x0105, "sl82c105", "- bus master PCI-ide mode 4.5 Cntrlr" } ,
{ 0x10ad, 0x0150, "", "EIDE Controller" } ,
{ 0x10ad, 0x0565, "W83C553", "PCI EIDE Controller" } ,
{ 0x10ae, 0x0002, "", "Graphics Controller" } ,
{ 0x10af, 0x0001, "", "IDE Controller" } ,
{ 0x10b3, 0x3106, "DB87144", "CardBus Controller" } ,
{ 0x10b3, 0xB106, "DB87144", "" } ,
{ 0x10b4, 0x1B1D, "Velocity 128 3D", "" } ,
{ 0x10b5, 0x0401, "PCI 9080RDK-401B", "PCI Reference Design Kit for PCI 9080" } ,
{ 0x10B5, 0x0480, "IOP 480", "Integrated PowerPC I/O Processor" } ,
{ 0x10b5, 0x0860, "PCI 9080RDK-860", "PCI Reference Design Kit for PCI 9080" } ,
{ 0x10B5, 0x0960, "PCI 9080RDK-960", "PCI Reference Design Kit for PCI 9080" } ,
{ 0x10b5, 0x1860, "PCI 9054RDK-860", "Reference Design Kit for PCI 9054" } ,
{ 0x10b5, 0x2021, "PCI9080", "Daktronics VMax Quad Transmitter Card" } ,
{ 0x10b5, 0x3001, "PCI 9030RDK-LITE", "PCI Reference Design Kit for PCI 9030" } ,
{ 0x10b5, 0x30C1, "cPCI 9030RDK-LITE", "CompactPCI Reference Design Kit for 9030" } ,
{ 0x10b5, 0x5406, "PCI 9054RDK-LITE", "PCI Bus Master Prototyping Kit for 9054" } ,
{ 0x10B5, 0x9030, "PCI 9030", "PCI SMARTarget I/O Accelerator" } ,
{ 0x10B5, 0x9036, "PCI9036", "Interface chip" } ,
{ 0x10B5, 0x9050, "PCI 9050", "Target PCI Interface Chip" } ,
{ 0x10B5, 0x9052, "PCI 9052", "PCI 9052 Target PCI Interface Chip" } ,
{ 0x10B5, 0x9054, "PCI 9054", "PCI I/O Accelerator" } ,
{ 0x10B5, 0x9060, "PCI9060xx", "PCI Bus Master Interface Chip" } ,
{ 0x10B5, 0x906D, "PCI 9060SD", "PCI Bus Master Interface Chip" } ,
{ 0x10B5, 0x906E, "PCI 9060ES", "PCI Bus Master Interface Chip" } ,
{ 0x10B5, 0x9080, "PCI 9080", "High performance PCI to Local Bus chip" } ,
{ 0x10b5, 0xC860, "cPCI 9054RDK-860", "CompactPCI Reference Design Kit for 9054" } ,
{ 0x10B6, 0x0001, "Smart 16/4", "Ringnode (PCI1b)" } ,
{ 0x10B6, 0x0002, "Smart 16/4", "Ringnode (PCIBM2/CardBus)" } ,
{ 0x10B6, 0x0003, "Smart 16/4", "Ringnode" } ,
{ 0x10B6, 0x0004, "", "Smart 16/4 Ringnode Mk1 (PCIBM1)" } ,
{ 0x10B6, 0x0006, "", "16/4 CardBus Adapter (Eric 2)" } ,
{ 0x10B6, 0x0007, "Presto PCI", "" } ,
{ 0x10B6, 0x0009, "", "Smart 100/16/4 PCi-HS Ringnode" } ,
{ 0x10B6, 0x000A, "", "Smart 100/16/4 PCI Ringnode" } ,
{ 0x10B6, 0x000B, "", "16/4 CardBus Adapter Mk2" } ,
{ 0x10B6, 0x1000, "Collage 25", "ATM adapter" } ,
{ 0x10B6, 0x1001, "Collage 155", "ATM adapter" } ,
{ 0x10B7, 0x0001, "3C985", "1000BaseSX Gigabit Etherlink" } ,
{ 0x10B7, 0x1007, "3C556", "V.90 Mini-PCI Modem" } ,
{ 0x10B7, 0x3390, "Velocity", "Token Link Velocity" } ,
{ 0x10B7, 0x3590, "3C359", "TokenLink Velocity XL Adapter" } ,
{ 0x10B7, 0x4500, "3C450", "Cyclone" } ,
{ 0x10B7, 0x5055, "3C555", "Laptop Hurricane" } ,
{ 0x10B7, 0x5057, "3C575", "Megahertz 10/100 LAN CardBus PC Card" } ,
{ 0x10B7, 0x5157, "3C575", "Megahertz 10/100 LAN CardBus PC Card" } ,
{ 0x10B7, 0x5257, "3CCFE575CT", "Cyclone CardBus" } ,
{ 0x10B7, 0x5900, "3C590", "Ethernet 10bT" } ,
{ 0x10B7, 0x5920, "3C592", "10Mbps Demon/Vortex" } ,
{ 0x10B7, 0x5950, "3C595", "Ethernet 100bTX" } ,
{ 0x10B7, 0x5951, "3C595", "Ethernet 100bT4" } ,
{ 0x10B7, 0x5952, "3C595", "Ethernet 100b-MII" } ,
{ 0x10B7, 0x5970, "3C597", "Fast Demon/Vortex" } ,
{ 0x10B7, 0x5B57, "3C595", "Megahertz 10/100 LAN CardBus" } ,
{ 0x10B7, 0x6055, "3C556", "10/100 Fast Ethernet MiniPCI Adapter" } ,
{ 0x10B7, 0x6560, "3CCFE656", "Cyclone CardBus PC Card" } ,
{ 0x10B7, 0x6562, "3CCFEM656", "Cyclone CardBus PC Card" } ,
{ 0x10B7, 0x6564, "3CCFEM656", "Cyclone CardBus PC Card" } ,
{ 0x10B7, 0x6565, "3CCFEM656C", "Global 10/100 Fast Ethernet+56K Modem" } ,
{ 0x10B7, 0x7646, "3CSOHO100-TX", "Hurricane" } ,
{ 0x10B7, 0x8811, "", "Token Ring" } ,
{ 0x10B7, 0x9000, "3C900-TPO", "Fast Etherlink XL PCI 10" } ,
{ 0x10B7, 0x9001, "3C900-COMBO", "Fast Etherlink XL PCI 10" } ,
{ 0x10B7, 0x9004, "3C900B-TPO", "EtherLink XL TPO 10Mb" } ,
{ 0x10B7, 0x9005, "3C900B-COMBO", "Fast Etherlink XL 10Mb" } ,
{ 0x10B7, 0x9006, "3C900B-TPC", "EtherLink XL TPC" } ,
{ 0x10B7, 0x900A, "3C900B-FL", "EtherLink XL FL" } ,
{ 0x10B7, 0x9050, "3C905-TX", "Fast Etherlink XL PCI 10/100" } ,
{ 0x10B7, 0x9051, "3C905-T4", "Fast Etherlink XL 10/100" } ,
{ 0x10B7, 0x9055, "3C905B", "Fast Etherlink XL 10/100" } ,
{ 0x10B7, 0x9056, "3C905B-T4", "Fast EtherLink XL 10/100" } ,
{ 0x10B7, 0x9058, "3C905B-COMBO", "Deluxe EtherLink XL 10/100" } ,
{ 0x10B7, 0x905A, "3C905B-FX", "Fast EtherLink XL FX 10/100" } ,
{ 0x10B7, 0x9200, "3C905C-TX", "Fast EtherLink for PC Management NIC" } ,
{ 0x10B7, 0x9800, "3C980-TX", "Fast EtherLink XL Server Adapter" } ,
{ 0x10B7, 0x9805, "3C980-TX", "Python-T 10/100baseTX NIC" } ,
{ 0x10B8, 0x0005, "83C170QF", "Fast Ethernet Adapter 100bTX" } ,
{ 0x10B8, 0x0006, "", "Fast Ethernet Adapter" } ,
{ 0x10B8, 0x1000, "37C665", "FDC" } ,
{ 0x10B8, 0x1001, "37C922", "FDC" } ,
{ 0x10B8, 0xA011, "83C170QF", "Fast ethernet controller" } ,
{ 0x10B8, 0xB106, "SMC34C90", "CardBus Controller" } ,
{ 0x10B9, 0x0111, "CMI8738/C3DX", "C-Media Audio Device (OEM)" } ,
{ 0x10B9, 0x1435, "M1435", "VL Bridge" } ,
{ 0x10B9, 0x1445, "M1445", "VL Bridge w/EIDE" } ,
{ 0x10B9, 0x1449, "M1449", "ISA Bridge" } ,
{ 0x10B9, 0x1451, "M1451", "Pentium Chipset" } ,
{ 0x10B9, 0x1461, "M1461", "P54C Chipset" } ,
{ 0x10B9, 0x1489, "M1489", "486 PCI Chipset" } ,
{ 0x10B9, 0x1511, "M1511", "Aladdin 2 Host Bridge" } ,
{ 0x10B9, 0x1513, "M1513", "Aladdin 2 South Bridge" } ,
{ 0x10B9, 0x1521, "M1521", "Alladin III CPU to PCI Bridge" } ,
{ 0x10B9, 0x1523, "M1523", "ISA Bridge" } ,
{ 0x10b9, 0x1531, "M1531B", "ALi Aladdin IV Host Bridge" } ,
{ 0x10B9, 0x1533, "M1533", "PCI South Bridge" } ,
{ 0x10B9, 0x1541, "M1541", "Aladdin V AGPset Host Bridge" } ,
{ 0x10B9, 0x1543, "M1543", "Aladdin V AGPset South Bridge" } ,
{ 0x10b9, 0x1621, "M1621", "Aladdin-Pro II Northbridge" } ,
{ 0x10b9, 0x1631, "M1631", "Aladdin Pro III Northbridge" } ,
{ 0x10B9, 0x3141, "M3141", "GUI Accelerator" } ,
{ 0x10B9, 0x3143, "M3143", "GUI Accelerator" } ,
{ 0x10B9, 0x3145, "M3145", "GUI Accelerator" } ,
{ 0x10B9, 0x3147, "M3147", "GUI Accelerator" } ,
{ 0x10B9, 0x3149, "M3149", "GUI Accelerator" } ,
{ 0x10B9, 0x3151, "M3151", "GUI Accelerator" } ,
{ 0x10B9, 0x3307, "M3307", "MPEG-1 Decoder" } ,
{ 0x10B9, 0x3309, "M3309", "MPEG Decoder" } ,
{ 0x10B9, 0x5212, "M4803", "" } ,
{ 0x10B9, 0x5215, "MS4803", "EIDE Ctrlr" } ,
{ 0x10B9, 0x5217, "m5217h", "I/O (?)" } ,
{ 0x10B9, 0x5219, "m5219", "I/O (?)" } ,
{ 0x10B9, 0x5225, "M5225", "IDE Controller" } ,
{ 0x10B9, 0x5229, "M1543 Southbridge", "EIDE Controller" } ,
{ 0x10B9, 0x5235, "M5235", "I/O Controller" } ,
{ 0x10b9, 0x5237, "M5237", "USB Host Controller" } ,
{ 0x10b9, 0x5240, "", "EIDE Controller" } ,
{ 0x10b9, 0x5241, "", "PCMCIA Bridge" } ,
{ 0x10b9, 0x5242, "", "General Purpose Controller" } ,
{ 0x10b9, 0x5243, "M1541A", "Aladdin V PCI-to-PCI Bridge" } ,
{ 0x10b9, 0x5244, "", "Floppy Disk Controller" } ,
{ 0x10b9, 0x5247, "M1621", "Aladdin V built-in PCI-to-PCI bridge" } ,
{ 0x10b9, 0x5427, "", "PCI to AGP Bridge" } ,
{ 0x10b9, 0x5451, "M5451", "PCI AC-link Controller Audio Device" } ,
{ 0x10b9, 0x5453, "M5453", "PCI AC-link Controller Modem Device" } ,
{ 0x10B9, 0x7101, "M7101", "Power Management Controller" } ,
{ 0x10ba, 0x0301, "", "GUI Accelerator" } ,
{ 0x10BD, 0x0E34, "NE34", "NE2000 PCI clone" } ,
{ 0x10BD, 0x5240, "", "IDE Cntrlr" } ,
{ 0x10BD, 0x5241, "", "PCMCIA Bridge" } ,
{ 0x10BD, 0x5242, "", "General Purpose Cntrlr" } ,
{ 0x10BD, 0x5243, "", "Bus Cntrlr" } ,
{ 0x10BD, 0x5244, "", "FCD Cntrlr" } ,
{ 0x10c3, 0x1100, "SC1100", "SmartEther100 LAN Adapter (i82557B)" } ,
{ 0x10C8, 0x0000, "", "Graphics Cntrlr" } ,
{ 0x10c8, 0x0001, "NM2070", "MagicGraph 128" } ,
{ 0x10c8, 0x0002, "NM2090", "MagicGraph 128V" } ,
{ 0x10C8, 0x0003, "NM2093", "MagicGraph 128ZV Video Controller" } ,
{ 0x10C8, 0x0004, "NM2160", "MagicGraph 128XD" } ,
{ 0x10C8, 0x0005, "NM2200", "MagicMedia 256AV" } ,
{ 0x10C8, 0x0006, "NM2360", "MagicMedia 256ZX/256M6D" } ,
{ 0x10C8, 0x0016, "NM2380", "MagicMedia 256XL+" } ,
{ 0x10C8, 0x0025, "NM2230", "MagicMedia 256AV+" } ,
{ 0x10C8, 0x0083, "NM2097", "Graphic Controller NeoMagic MagicGraph128ZV+" } ,
{ 0x10C8, 0x8005, "NM2200", "MagicMedia 256AV Audio Device" } ,
{ 0x10C8, 0x8006, "NM2360", "MagicMedia 256ZX Audio Device" } ,
{ 0x10C8, 0x8016, "NM2380", "MagicMedia 256XL+ Audio Device" } ,
{ 0x10cc, 0x0226, "", "PCI to ISA Bridge" } ,
{ 0x10cc, 0x0257, "", "CPU to PCI Bridge" } ,
{ 0x10CD, 0x1100, "ASC1100", "PCI SCSI Host Adapter" } ,
{ 0x10CD, 0x1200, "ASC1200", "Fast SCSI-II" } ,
{ 0x10CD, 0x1300, "ASC-3050", "ASC-3150" } ,
{ 0x10CD, 0x2300, "ASC2300", "PCI Ultra Wide SCSI-2 Host Adapter" } ,
{ 0x10CF, 0x2001, "mb86605", "Wide SCSI-2" } ,
{ 0x10D9, 0x0066, "MX86101P", "" } ,
{ 0x10D9, 0x0512, "MX98713", "Fast Ethernet Adapter" } ,
{ 0x10D9, 0x0531, "MX98715/725", "Single Chip Fast Ethernet NIC Controller" } ,
{ 0x10D9, 0x0532, "MX98723/727", "PCI/CardBus Fast Ethernet Controller" } ,
{ 0x10D9, 0x8625, "MX86250", "" } ,
{ 0x10D9, 0x8626, "MX86251", "" } ,
{ 0x10D9, 0x8627, "MX86251", "" } ,
{ 0x10D9, 0x8888, "MX86200", "" } ,
{ 0x10DA, 0x0508, "TC4048", "Token Ring" } ,
{ 0x10DA, 0x3390, "Tl3c3x9", "Token Ring" } ,
{ 0x10DC, 0x0001, "STAR/RD24", "SCSI (PMC)" } ,
{ 0x10DC, 0x0002, "ATT 2C15-3 (FPGA)", "SCI bridge on PCI 5 Volt card" } ,
{ 0x10DC, 0x0010, "680-1110-150/400", "Simple PMC/PCI to S-LINK interface" } ,
{ 0x10DC, 0x0011, "680-1110-200/450", "Simple S-LINK to PMC/PCI interface" } ,
{ 0x10DC, 0x0021, "", "HIPPI destination" } ,
{ 0x10DC, 0x0022, "", "HIPPI source" } ,
{ 0x10DC, 0x10DC, "ATT 2C15-3 (FPGA)", "" } ,
{ 0x10DD, 0x0001, "", "3D graphics processor" } ,
{ 0x10DE, 0x0008, "NV1 EDGE", "3D Accelerator" } ,
{ 0x10DE, 0x0009, "NV1 EDGE", "3D Multimedia" } ,
{ 0x10DE, 0x0010, "Mutara V08 (NV2)", "" } ,
{ 0x10DE, 0x0018, "Riva 128", "Riva 128 accelerator" } ,
{ 0x10DE, 0x0020, "Riva TNT", "AGP" } ,
{ 0x10DE, 0x0028, "Riva TNT2", "Riva TNT2" } ,
{ 0x10DE, 0x0029, "Riva TNT2 Ultra", "" } ,
{ 0x10DE, 0x002A, "Riva TNT2 (NV5)", "" } ,
{ 0x10DE, 0x002B, "Riva TNT2 (NV5)", "" } ,
{ 0x10DE, 0x002C, "VANTA", "" } ,
{ 0x10DE, 0x002D, "Riva TNT2 M64", "Riva TNT2 Model 64" } ,
{ 0x10DE, 0x002E, "VANTA (NV6)", "" } ,
{ 0x10DE, 0x002F, "VANTA (NV6)", "" } ,
{ 0x10DE, 0x00A0, "RIVA TNT2 Aladdin", "" } ,
{ 0x10DE, 0x0100, "GeForce 256", "" } ,
{ 0x10DE, 0x0101, "GeForce 256 DDR", "" } ,
{ 0x10DE, 0x0103, "GeForce 256 GL", "Quadro" } ,
{ 0x10DE, 0x0110, "NV11", "GeForce 2 MX" } ,
{ 0x10DE, 0x0111, "NV11 DDR", "" } ,
{ 0x10DE, 0x0113, "NV11 GL", "" } ,
{ 0x10DE, 0x0150, "NV15", "GeForce2 GTS" } ,
{ 0x10DE, 0x0151, "NV15 DDR", "GeForce2 GTS" } ,
{ 0x10DE, 0x0152, "NV15 Bladerunner", "GeForce2 GTS" } ,
{ 0x10DE, 0x0153, "NV15 GL", "Quadro2" } ,
{ 0x10DF, 0x10DF, "Light Pulse", "Fibre Channel Adapter" } ,
{ 0x10DF, 0x1AE5, "LP6000", "Fibre Channel Host Adapter" } ,
{ 0x10DF, 0xF700, "LP7000", "Fibre Channel Host Adapter" } ,
{ 0x10E0, 0x5026, "IMS5026/27/28", "VL Bridge" } ,
{ 0x10E0, 0x5027, "IMS5027", "" } ,
{ 0x10E0, 0x5028, "IMS5028", "ISA Bridge" } ,
{ 0x10E0, 0x8849, "IMS8849/48", "VL Bridge" } ,
{ 0x10E0, 0x8853, "IMS8853", "ATM Network Adapter" } ,
{ 0x10E0, 0x9128, "IMS9129", "GUI Accelerator" } ,
{ 0x10E1, 0x0391, "TRM-S1040", "" } ,
{ 0x10E1, 0x690C, "DC-690c", "" } ,
{ 0x10E1, 0xDC20, "DC-290", "EIDE Controller" } ,
{ 0x10E3, 0x0000, "CA91C042", "VMEbus Bridge" } ,
{ 0x10E3, 0x0860, "CA91C860", "Motorola Processor Bridge" } ,
{ 0x10E3, 0x0862, "CA91L826A", "PCI to Motorola Processor Bridge" } ,
{ 0x10E8, 0x2011, "Q-Motion", "Video Capture/Edit board" } ,
{ 0x10E8, 0x4750, "S5933", "PCI Ctrlr" } ,
{ 0x10E8, 0x5920, "S5920", "32-Bit PCI Bus Target Interface" } ,
{ 0x10e8, 0x8001, "S5933", "Daktronics VMax Transmitter Card" } ,
{ 0x10E8, 0x8033, "BBK-PCI light", "Transputer Link Interface" } ,
{ 0x10E8, 0x8043, "LANai4.x", "Myrinet LANai interface chip" } ,
{ 0x10E8, 0x8062, "S5933", "Parastation" } ,
{ 0x10E8, 0x807D, "S5933", "PCI44" } ,
{ 0x10E8, 0x8088, "FS", "Kingsberg Spacetec Format Synchronizer" } ,
{ 0x10E8, 0x8089, "SOB", "Kingsberg Spacetec Serial Output Board" } ,
{ 0x10E8, 0x809C, "S5933", "Traquair HEPC3" } ,
{ 0x10E8, 0x80D7, "PCI-9112", "" } ,
{ 0x10E8, 0x80D9, "PCI-9118", "" } ,
{ 0x10E8, 0x811A, "PCI-DSlink", "PCI-IEEE1355-DS-DE interface" } ,
{ 0x10E8, 0x8170, "S5933", "Matchmaker PCI Chipset Development Tool" } ,
{ 0x10e8, 0x81b7, "S5933 / NTV", "AJAVideo NTV ITU-R.601 video stillstore" } ,
{ 0x10EA, 0x1680, "IGA-1680", "" } ,
{ 0x10EA, 0x1682, "IGA-1682", "" } ,
{ 0x10EA, 0x1683, "IGA-1683", "" } ,
{ 0x10EA, 0x2000, "CyberPro 2000", "" } ,
{ 0x10EA, 0x2010, "CyperPro 2000A", "" } ,
{ 0x10EA, 0x5000, "CyberPro 5000", "" } ,
{ 0x10EA, 0x5050, "CyberPro 5050", "" } ,
{ 0x10EB, 0x0101, "3GA", "64 bit graphics processor" } ,
{ 0x10EB, 0x8111, "Twist3", "Frame Grabber" } ,
{ 0x10EC, 0x8029, "RTL8029", "NE2000 compatible Ethernet" } ,
{ 0x10EC, 0x8129, "RTL8129", "10/100 Fast Ethernet Controller" } ,
{ 0x10EC, 0x8138, "RT8139B/C", "CardBus Fast Ethernet Adapter" } ,
{ 0x10ec, 0x8139, "RT8139A/B/C", "Fast Ethernet Adapter" } ,
{ 0x10ED, 0x7310, "V7310", "VGA Video Overlay Adapter" } ,
{ 0x10EE, 0x3FC0, "RME Digi96", "" } ,
{ 0x10EE, 0x3FC1, "RME Digi96/8", "" } ,
{ 0x10EE, 0x3FC2, "RME Digi 96/8 Pro", "" } ,
{ 0x10EE, 0x3FC3, "RME Digi96/8 Pad", "" } ,
{ 0x10EF, 0x8154, "M815x", "Token Ring Adapter" } ,
{ 0x10F0, 0xA800, "VCL-P", "Graphics board" } ,
{ 0x10F0, 0xB300, "VCL-M", "graphics board" } ,
{ 0x10F1, 0x1566, "", "IDE/SCSI" } ,
{ 0x10F1, 0x1677, "", "Multimedia" } ,
{ 0x10F5, 0xA001, "NDR4000", "NR4600 Bridge" } ,
{ 0x10FA, 0x0000, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0001, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0002, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0003, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0004, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0005, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0006, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0007, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0008, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0009, "", "GUI Accelerator" } ,
{ 0x10FA, 0x000A, "", "GUI Accelerator" } ,
{ 0x10FA, 0x000B, "", "GUI Accelerator" } ,
{ 0x10FA, 0x000C, "Targa 1000", "Video Capture & Editing card" } ,
{ 0x10FA, 0x000D, "", "GUI Accelerator" } ,
{ 0x10FA, 0x000E, "", "GUI Accelerator" } ,
{ 0x10FA, 0x000F, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0010, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0011, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0012, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0013, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0014, "", "GUI Accelerator" } ,
{ 0x10FA, 0x0015, "", "GUI Accelerator" } ,
{ 0x1101, 0x0002, "", "Ultra SCSI Adapter" } ,
{ 0x1101, 0x1060, "INI-A100U2W", "Ultra-2 SCSI Controller" } ,
{ 0x1101, 0x134A, "", "Ultra SCSI Adapter" } ,
{ 0x1101, 0x9100, "INI-9010/9010W", "Fast Wide SCSI Controller" } ,
{ 0x1101, 0x9400, "INI-940", "Fast Wide SCSI Controller" } ,
{ 0x1101, 0x9401, "INI-950", "Fast Wide SCSI Controller" } ,
{ 0x1101, 0x9500, "INI-9100U/UW", "SCSI Controller" } ,
{ 0x1101, 0x9700, "", "Fast Wide SCSI" } ,
{ 0x1102, 0x0002, "EMU10000", "Sound Blaster Live!" } ,
{ 0x1102, 0x1017, "Banshee", "3D Blaster Banshee PCI CT6760" } ,
{ 0x1102, 0x1047, "", "3D Blaster Annihilator 2" } ,
{ 0x1102, 0x7002, "EMU10000", "Game Port" } ,
{ 0x1103, 0x0003, "HPT343/345", "UDMA EIDE Controller" } ,
{ 0x1103, 0x0004, "HPT366", "UDMA66 EIDE Controller" } ,
{ 0x1105, 0x5000, "", "Multimedia" } ,
{ 0x1105, 0x8300, "VM491", "DVD/MPEG-2 accelerator" } ,
{ 0x1105, 0x8400, "EM8400", "MPEG-2 Decoder" } ,
{ 0x1106, 0x0305, "VT8363", "Host Bus-PCI Bridge" } ,
{ 0x1106, 0x0391, "VT8371", "KX133 Athlon Chipset Host Bridge" } ,
{ 0x1106, 0x0501, "VT8501", "MVP4 System Controller" } ,
{ 0x1106, 0x0505, "82C505", "VL Bridge" } ,
{ 0x1106, 0x0561, "82C561", "IDE" } ,
{ 0x1106, 0x0571, "VT82C586/686", "PCI IDE Controller" } ,
{ 0x1106, 0x0576, "82C576", "P54 Ctrlr" } ,
{ 0x1106, 0x0585, "VT82C585VP/VPX", "Host Bus-PCI Bridge" } ,
{ 0x1106, 0x0586, "VT82C586VP", "PCI-to-ISA Bridge" } ,
{ 0x1106, 0x0595, "VT82C595", "Apollo VP2 PCI North Bridge" } ,
{ 0x1106, 0x0596, "VT82C596", "PCI ISA Bridge" } ,
{ 0x1106, 0x0597, "VT82C597", "Host Bridge (Apollo VP3)" } ,
{ 0x1106, 0x0598, "VT82C598", "Apollo MVP3/Pro133A Host Bridge" } ,
{ 0x1106, 0x0601, "VT8601", "" } ,
{ 0x1106, 0x0680, "VT82C680", "Apollo P6" } ,
{ 0x1106, 0x0686, "VT82C686", "PCI-to-ISA bridge" } ,
{ 0x1106, 0x0691, "VT82C691/693A/694", "Apollo Pro/133/133A System Controller" } ,
{ 0x1106, 0x0693, "VT82C693", "Apollo Pro+ Host Bridge" } ,
{ 0x1106, 0x0926, "VT86C926", "Amazon PCI Ethernet Controller" } ,
{ 0x1106, 0x1000, "82C570MV", "P54 Ctrlr" } ,
{ 0x1106, 0x1106, "82C570MV", "ISA Bridge w/IDE" } ,
{ 0x1106, 0x1571, "VT82C416", "IDE Controller" } ,
{ 0x1106, 0x1595, "VT82C595", "VP2, VP2/97 System Controller" } ,
{ 0x1106, 0x3038, "VT83C572", "PCI USB Controller" } ,
{ 0x1106, 0x3040, "VT83C572", "Power Management Controller" } ,
{ 0x1106, 0x3043, "VT86C100A", "Rhine 10/100 Ethernet Adapter" } ,
{ 0x1106, 0x3044, "", "OHCI Compliant IEEE 1394 Host Ctrlr" } ,
{ 0x1106, 0x3050, "VT82C596", "Power Management Controller" } ,
{ 0x1106, 0x3051, "", "Power Management Controller" } ,
{ 0x1106, 0x3057, "VT82C686A", "ACPI Power Management Controller" } ,
{ 0x1106, 0x3058, "VT82C686", "Audio Codec 97" } ,
{ 0x1106, 0x3068, "VT82C686", "Modem Codec 97" } ,
{ 0x1106, 0x3086, "VT82C686", "Power management" } ,
{ 0x1106, 0x5030, "VT82C596", "Apollo Pro ACPI Power Management Ctrlr" } ,
{ 0x1106, 0x6100, "VT86C100A", "PCI Fast Ethernet Controller" } ,
{ 0x1106, 0x8231, "VT8231", "PCI to ISA Bridge" } ,
{ 0x1106, 0x8305, "VT8363", "PCI to AGP Bridge" } ,
{ 0x1106, 0x8391, "VT8371", "PCI to AGP Bridge" } ,
{ 0x1106, 0x8501, "", "CPU to AGP Controller?" } ,
{ 0x1106, 0x8596, "VT82C596", "PCI to AGP Bridge" } ,
{ 0x1106, 0x8597, "VT82C597", "PCI-to-PCI Bridge (AGP)" } ,
{ 0x1106, 0x8598, "VT82C598/686A", "Apollo MVP3 PCI-to-PCI Bridge" } ,
{ 0x1106, 0x8601, "", "PCI to AGP Controller?" } ,
{ 0x1106, 0x8691, "VT82C691", "Apollo Pro PCI-to-PCI Bridge" } ,
{ 0x1106, 0x8693, "VT82C693", "Apollo Pro+ PCI-to-PCI Bridge" } ,
{ 0x1107, 0x8576, "", "PCI Host Bridge" } ,
{ 0x1108, 0x0100, "p1690plus-AA", "Token Ring Adapter" } ,
{ 0x1108, 0x0101, "p1690plus-AB", "2-Port Token Ring Adapter" } ,
{ 0x1108, 0x0105, "P1690Plus", "Token Ring Adapter" } ,
{ 0x1108, 0x0108, "P1690Plus", "Token Ring Adapter" } ,
{ 0x1108, 0x0138, "P1690Plus", "Token Ring Adapter" } ,
{ 0x1108, 0x0139, "P1690Plus", "Token Ring Adapter" } ,
{ 0x1108, 0x013C, "P1690Plus", "Token Ring Adapter" } ,
{ 0x1108, 0x013D, "P1690Plus", "Token Ring Adapter" } ,
{ 0x1109, 0x1400, "EM110TX", "EX110TX PCI Fast Ethernet Adapter" } ,
{ 0x110A, 0x0002, "Piranha", "PCI-EIDE Adapter (2-port)" } ,
{ 0x110A, 0x0005, "", "Tulip-Ctrlr, Power-Mgmt, Switch Extender" } ,
{ 0x110A, 0x0006, "PINC", "" } ,
{ 0x110A, 0x0015, "", "Multiprocessor Interrupt Ctrlr (MINT)" } ,
{ 0x110A, 0x0017, "", "PCI-WAN Adapter (SiemensCard PWAN)" } ,
{ 0x110A, 0x001D, "Copernicus", "Management Controller" } ,
{ 0x110A, 0x113C, "FPGA-CPTR", "Hardware Tracer for CP113C / CP113D" } ,
{ 0x110A, 0x113E, "FPGA-CPTRE", "Hardware Tracer for CP113E" } ,
{ 0x110A, 0x2101, "PEB 20321", "MUNICH32X Multichannel NIC for HDLC" } ,
{ 0x110A, 0x2102, "PEB/PEF 20534", "DSCC4 Multiprotocol HDLC Controller" } ,
{ 0x110A, 0x2103, "PEB 20324", "MUNICH128X NIC for HDLC + extensions" } ,
{ 0x110A, 0x2104, "PSB 4600/4610", "PCI I/F for Telephony/Data Apps (PITA)" } ,
{ 0x110A, 0x2106, "PEB 20256 E", "MUNICH256 (NIC HDLC/PPP w/256 channels)" } ,
{ 0x110A, 0x2108, "PEB 20256M E", "MUNICH256FM Multichnl NIC for HDLC/PPP" } ,
{ 0x110A, 0x3160, "MCCA", "Pentium-PCI Host Bridge Core ASIC" } ,
{ 0x110A, 0x4942, "FPGA-IBTR", "I-Bus Tracer for MBD" } ,
{ 0x110A, 0x6120, "SZB6120", "Multimedia Adapter" } ,
{ 0x110B, 0x0001, "Mpact", "Media Processor" } ,
{ 0x1110, 0x6037, "Firepower", "Powerized SMP I/O ASIC" } ,
{ 0x1110, 0x6073, "Firepower", "Powerized SMP I/O ASIC" } ,
{ 0x1112, 0x2200, "", "FDDI adapter" } ,
{ 0x1112, 0x2300, "", "fast ethernet adapter" } ,
{ 0x1112, 0X2340, "4 Port FEN Adapter", "4 10/100 UTP Fast Ethernet Adapter" } ,
{ 0x1112, 0x2400, "", "ATM adapter" } ,
{ 0x1113, 0x1211, "EN-1207D", "Fast Ethernet Adapter" } ,
{ 0x1113, 0x1217, "EN-1217", "Ethernet Adapter" } ,
{ 0x1113, 0x5105, "", "" } ,
{ 0x1113, 0x9211, "EN-1207D", "Fast Ethernet Adapter" } ,
{ 0x1116, 0x0022, "DT3001", "" } ,
{ 0x1116, 0x0023, "DT3002", "" } ,
{ 0x1116, 0x0024, "DT3003", "" } ,
{ 0x1116, 0x0025, "DT3004", "" } ,
{ 0x1116, 0x0026, "Dt3005", "" } ,
{ 0x1116, 0x0027, "DT3001-PGL", "" } ,
{ 0x1116, 0x0028, "DT3003-PGL", "" } ,
{ 0x1117, 0x9500, "", "max-lc SVGA card" } ,
{ 0x1117, 0x9501, "", "MaxPCI image processing board" } ,
{ 0x1119, 0x0000, "GDT6000/6020/6050", "SCSI RAID" } ,
{ 0x1119, 0x0001, "GDT6000/6010", "SCSI RAID" } ,
{ 0x1119, 0x0002, "GDT6110/6510", "SCSI RAID" } ,
{ 0x1119, 0x0003, "GDT6120/6520", "2-chan SCSI RAID" } ,
{ 0x1119, 0x0004, "GDT6530", "3-chan SCSI RAID" } ,
{ 0x1119, 0x0005, "GDT6550", "5-chan SCSI RAID" } ,
{ 0x1119, 0x0006, "GDT6117/6517", "" } ,
{ 0x1119, 0x0007, "GDT6127/6527", "" } ,
{ 0x1119, 0x0008, "GDT6537", "" } ,
{ 0x1119, 0x0009, "GDT6557", "" } ,
{ 0x1119, 0x000A, "GDT6115/6515", "" } ,
{ 0x1119, 0x000B, "GDT6125/6525", "" } ,
{ 0x1119, 0x000C, "GDT6535", "" } ,
{ 0x1119, 0x000D, "GDT6555", "" } ,
{ 0x1119, 0x0100, "GDT6117RP/6517", "2 Channel SCSI" } ,
{ 0x1119, 0x0101, "GDT6127RP/6527RP", "" } ,
{ 0x1119, 0x0102, "GDT6537RP", "" } ,
{ 0x1119, 0x0103, "GDT6557RP", "" } ,
{ 0x1119, 0x0104, "GDT6111RP/6511RP", "" } ,
{ 0x1119, 0x0105, "GDT6127RP/6527RP", "" } ,
{ 0x1119, 0x0110, "GDT6117RP1/6517RP1", "" } ,
{ 0x1119, 0x0111, "GDT6127RP1/6527RP1", "" } ,
{ 0x1119, 0x0112, "GDT6537RP1", "" } ,
{ 0x1119, 0x0113, "GDT6557RP1", "" } ,
{ 0x1119, 0x0114, "GDT6111RP1/6511RP1", "" } ,
{ 0x1119, 0x0115, "GDT6127RP1/6527RP1", "" } ,
{ 0x1119, 0x0118, "GDT 6x18RD", "" } ,
{ 0x1119, 0x0119, "GDT 6x28RD", "" } ,
{ 0x1119, 0x011A, "GDT 6x38RD", "" } ,
{ 0x1119, 0x011B, "GDT 6x58RD", "" } ,
{ 0x1119, 0x0120, "GDT6117RP2/6517RP2", "" } ,
{ 0x1119, 0x0121, "GDT6127RP2/6527RP2", "" } ,
{ 0x1119, 0x0122, "GDT6537RP2", "" } ,
{ 0x1119, 0x0123, "GDT6557RP2", "" } ,
{ 0x1119, 0x0124, "GDT6111RP2/6511RP2", "" } ,
{ 0x1119, 0x0125, "GDT6127RP2/6527RP2", "" } ,
{ 0x1119, 0x0168, "GDT 7x18RN", "" } ,
{ 0x1119, 0x0169, "GDT 7x28RN", "" } ,
{ 0x1119, 0x016A, "GST 7x38RN", "" } ,
{ 0x1119, 0x016B, "GDT 7x58RN", "" } ,
{ 0x1119, 0x0210, "GDT 6x19RD", "" } ,
{ 0x1119, 0x0211, "GDT 6x29RD", "" } ,
{ 0x1119, 0x0260, "GDT 7x19RN", "" } ,
{ 0x1119, 0x0261, "GDT 7x29RN", "" } ,
{ 0x111A, 0x0000, "155P-MF1", "" } ,
{ 0x111A, 0x0002, "166P-MF1", "" } ,
{ 0x111A, 0x0003, "ENI-25P", "ATM Adapter" } ,
{ 0x111a, 0x0005, "ENI-25P", "" } ,
{ 0x111C, 0x0001, "", "Powerbus Bridge" } ,
{ 0x111D, 0x0001, "IDT77211", "ATM Adapter" } ,
{ 0x111F, 0x4A47, "Precision MX", "Video engine interface" } ,
{ 0x111F, 0x5243, "", "Frame Capture Bus Interface" } ,
{ 0x1127, 0x0200, "FireRunner PCA-200", "ATM" } ,
{ 0x1127, 0x0210, "PCA-200PC", "ATM" } ,
{ 0x1127, 0x0250, "", "ATM" } ,
{ 0x1127, 0x0300, "PCA-200EPC", "ATM" } ,
{ 0x1127, 0x0310, "", "ATM" } ,
{ 0x1127, 0x0400, "ForeRunner HE", "ATM Adapter" } ,
{ 0x112E, 0x0000, "", "EIDE/hdd and IDE/cd-rom Ctrlr" } ,
{ 0x112E, 0x000B, "", "EIDE/hdd and IDE/cd-rom Ctrlr" } ,
{ 0x112F, 0x0000, "ICPCI", "" } ,
{ 0x112F, 0x0001, "", "video frame grabber/processor" } ,
{ 0x112F, 0x0007, "?", "PCVisionPlus Image Capture Device" } ,
{ 0x1131, 0x2780, "tda 2780 AQ", "Tv deflection" } ,
{ 0x1131, 0x5400, "TM100", "TriMedia" } ,
{ 0x1131, 0x7145, "SAA7145", "" } ,
{ 0x1131, 0x7146, "SAA7146", "Multi Media Bridge Scaler" } ,
{ 0x1133, 0x7901, "EiconCard S90", "" } ,
{ 0x1133, 0x7902, "", "" } ,
{ 0x1133, 0x7911, "", "" } ,
{ 0x1133, 0x7912, "", "" } ,
{ 0x1133, 0x7941, "", "" } ,
{ 0x1133, 0x7942, "", "" } ,
{ 0x1133, 0xB921, "", "" } ,
{ 0x1133, 0xB922, "", "" } ,
{ 0x1133, 0xE001, "DIVA Pro 2.0 S/T", "" } ,
{ 0x1133, 0xE002, "DIVA 2.0 S/T", "" } ,
{ 0x1133, 0xE003, "DIVA Pro 2.0 U", "" } ,
{ 0x1133, 0xE004, "DIVA 2.0 U", "" } ,
{ 0x1133, 0xE005, "DIVA 2.01 S/T", "Eicon ISDN card using Siemens IPAC chip" } ,
{ 0x1133, 0xE010, "DIVA Server BRI-2M", "" } ,
{ 0x1133, 0xE014, "DIVA Server PRI-30M", "" } ,
{ 0x1134, 0x0001, "", "Raceway Bridge" } ,
{ 0x1135, 0x0001, "", "Printer Cntrlr" } ,
{ 0x1138, 0x8905, "8905", "STD 32 Bridge" } ,
{ 0x113C, 0x0000, "PCI9060", "i960 Bridge" } ,
{ 0x113C, 0x0001, "PCI9060", "i960 Bridge / Evaluation Platform" } ,
{ 0x113C, 0x0911, "PCI911", "i960Jx I/O Controller" } ,
{ 0x113C, 0x0912, "PCI912", "i960Cx I/O Controller" } ,
{ 0x113C, 0x0913, "PCI913", "i960Hx I/O Controller" } ,
{ 0x113C, 0x0914, "PCI914", "I/O Controller with secondary PCI bus" } ,
{ 0x113F, 0x0808, "SST-64P", "Adapter" } ,
{ 0x113F, 0x1010, "SST-128P", "Adapter" } ,
{ 0x113F, 0x80C0, "", "" } ,
{ 0x113F, 0x80C4, "", "" } ,
{ 0x113F, 0x80C8, "", "" } ,
{ 0x113F, 0x8888, "", "" } ,
{ 0x113F, 0x9090, "", "" } ,
{ 0x1141, 0x0001, "", "EIDE/ATAPI super adapter" } ,
{ 0x1142, 0x3210, "ProMotion 3210", "VGA/AVI Playback Accelerator" } ,
{ 0x1142, 0x6410, "", "GUI Accelerator" } ,
{ 0x1142, 0x6412, "", "GUI Accelerator" } ,
{ 0x1142, 0x6420, "", "GUI Accelerator" } ,
{ 0x1142, 0x6422, "Provideo 6422", "" } ,
{ 0x1142, 0x6424, "ProVideo 6424", "GUI Accelerator" } ,
{ 0x1142, 0x6425, "ProMotion AT25", "" } ,
{ 0x1142, 0x6426, "", "GUI Accelerator" } ,
{ 0x1142, 0x643D, "AT25", "ProMotion-AT3D" } ,
{ 0x1144, 0x0001, "", "Noservo Cntrlr" } ,
{ 0x1148, 0x4000, "", "FDDI adapter" } ,
{ 0x1148, 0x4200, "", "Token Ring" } ,
{ 0x1148, 0x4300, "SK-984x", "SK-NET Gigabit Ethernet Adapter" } ,
{ 0x114A, 0x7587, "VMIVME-7587", "" } ,
{ 0x114F, 0x0002, "AccelePort EPC", "" } ,
{ 0x114F, 0x0003, "RightSwitch SE-6", "" } ,
{ 0x114F, 0x0004, "AccelePort Xem", "" } ,
{ 0x114F, 0x0005, "AccelePort Xr", "" } ,
{ 0x114F, 0x0006, "AccelePort C/X", "" } ,
{ 0x114F, 0x0009, "AccelePort Xr/J", "" } ,
{ 0x114F, 0x000A, "AccelePort EPC/J", "" } ,
{ 0x114F, 0x000C, "DataFirePRIme T1", "" } ,
{ 0x114F, 0x000D, "SyncPort", "X.25/FR 2-port" } ,
{ 0x114F, 0x0011, "AccelePort8r EIA-232", "" } ,
{ 0x114F, 0x0012, "AccelePort8r EIA-422", "" } ,
{ 0x114F, 0x0013, "AccelePort Xr", "" } ,
{ 0x114F, 0x0014, "AccelePort8r EIA-422", "" } ,
{ 0x114F, 0x0015, "AccelePort Xem", "" } ,
{ 0x114F, 0x0016, "AccelePort EPC/X", "" } ,
{ 0x114F, 0x0017, "AccelePort C/X", "" } ,
{ 0x114F, 0x001A, "DataFirePRIme E1", "" } ,
{ 0x114F, 0x001B, "AccelePort C/X (IBM)", "" } ,
{ 0x114F, 0x001D, "DataFire RAS", "T1/E1/PRI" } ,
{ 0x114F, 0x0023, "AccelePort RAS", "" } ,
{ 0x114F, 0x0024, "DataFire RAS B4 ST/U", "" } ,
{ 0x114F, 0x0026, "AccelePort 4r 920", "" } ,
{ 0x114F, 0x0027, "AccelePort 8r 920", "" } ,
{ 0x114F, 0x0034, "AccelePort 2r 920", "" } ,
{ 0x114F, 0x0035, "DataFire DSP", "T1/E1/PRI, Compact PCI" } ,
{ 0x114F, 0x6001, "Avanstar", "" } ,
{ 0x1155, 0x0810, "", "486 CPU/PCI Bridge" } ,
{ 0x1155, 0x0922, "", "Pentium CPU/PCI Bridge" } ,
{ 0x1155, 0x0926, "", "PCI/ISA Bridge" } ,
{ 0x1158, 0x3011, "", "Tokenet/vg 1001/10m anylan" } ,
{ 0x1158, 0x9050, "", "Lanfleet/Truevalue" } ,
{ 0x1158, 0x9051, "", "Lanfleet/Truevalue" } ,
{ 0x1159, 0x0001, "MV1000", "" } ,
{ 0x1159, 0x0002, "MV-1500", "Frame Grabber" } ,
{ 0x115D, 0x0003, "", "CardBus Ethernet 10/100" } ,
{ 0x115D, 0x0005, "", "CardBus Ethernet 10/100" } ,
{ 0x115D, 0x0007, "", "CardBus Ethernet 10/100" } ,
{ 0x115D, 0x000B, "", "CardBus Ethernet 10/100" } ,
{ 0x115D, 0x000C, "", "Mini-PCI V.90 56k Modem" } ,
{ 0x115D, 0x000F, "", "CardBus Ethernet 10/100" } ,
{ 0x115D, 0x0101, "", "CardBus 56k Modem" } ,
{ 0x115D, 0x0103, "", "CardBus Ehternet + 56k Modem" } ,
{ 0x1161, 0x0001, "", "Host Bridge" } ,
{ 0x1163, 0x0001, "Verite 1000", "3D Blaster" } ,
{ 0x1163, 0x2000, "Verite 2000", "" } ,
{ 0x1165, 0x0001, "", "Motion JPEG rec/play w/audio" } ,
{ 0x1166, 0x0005, "CNB20-LE", "PCI Host Bridge (Southbridge copy)" } ,
{ 0x1166, 0x0007, "CNB20-LE", "CPU to PCI Bridge" } ,
{ 0x1166, 0x0008, "CNB20HE", "" } ,
{ 0x1166, 0x0009, "CNB20-HE", "" } ,
{ 0x1166, 0x0010, "CIOB30", "" } ,
{ 0x1166, 0x0011, "CMIC-HE", "" } ,
{ 0x1166, 0x0200, "OSB4", "PCI to ISA Bridge" } ,
{ 0x1166, 0x0201, "CSB5", "" } ,
{ 0x1166, 0x0211, "", "EIDE Controller" } ,
{ 0x1166, 0x0220, "", "OpenHCI Compliant USB Controller" } ,
{ 0x116A, 0x6100, "", "Bus/Tag Channel" } ,
{ 0x116A, 0x6800, "", "Escon Channel" } ,
{ 0x116A, 0x7100, "", "Bus/Tag Channel" } ,
{ 0x116A, 0x7800, "", "Escon Channel" } ,
{ 0x1178, 0xAFA1, "", "Fast Ethernet" } ,
{ 0x1179, 0x0404, "", "" } ,
{ 0x1179, 0x0406, "Tecra", "Video Capture device" } ,
{ 0x1179, 0x0407, "", "" } ,
{ 0x1179, 0x0601, "", "Toshiba CPU to PCI bridge" } ,
{ 0x1179, 0x0602, "", "PCI to ISA Bridge for Notebooks" } ,
{ 0x1179, 0x0603, "ToPIC95", "PCI to CardBus Bridge for Notebooks" } ,
{ 0x1179, 0x0604, "", "PCI to PCI Bridge for Notebooks" } ,
{ 0x1179, 0x0605, "", "PCI to ISA Bridge for Notebooks" } ,
{ 0x1179, 0x0606, "", "PCI to ISA Bridge for Notebooks" } ,
{ 0x1179, 0x0609, "", "PCI to PCI Bridge for Notebooks" } ,
{ 0x1179, 0x060A, "", "Toshiba ToPIC95 CardBus Controller" } ,
{ 0x1179, 0x060F, "ToPIC97", "CardBus Controller" } ,
{ 0x1179, 0x0611, "", "PCI to ISA Bridge" } ,
{ 0x1179, 0x0617, "ToPIC95", "PCI to CardBus Bridge with ZV support" } ,
{ 0x1179, 0x0618, "", "CPU to PCI and PCI to ISA Bridge" } ,
{ 0x1179, 0x0701, "", "PCI Communication Device" } ,
{ 0x1179, 0x0D01, "", "FIR Port Type-DO" } ,
{ 0x117E, 0x0001, "", "Printer Host" } ,
{ 0x1180, 0x0465, "RL5C465", "CardBus controller" } ,
{ 0x1180, 0x0466, "RL5C466", "CardBus controller" } ,
{ 0x1180, 0x0475, "RL5C475", "CardBus controller" } ,
{ 0x1180, 0x0476, "RL5C476", "CardBus controller" } ,
{ 0x1180, 0x0477, "RLc477", "CardBus Controller" } ,
{ 0x1180, 0x0478, "RLc478", "CardBus Controller" } ,
{ 0x1185, 0x8929, "", "EIDE Controller" } ,
{ 0x1186, 0x0100, "DC21041", "Ethernet Adapter" } ,
{ 0x1186, 0x1100, "", "Fast Ethernet Adapter" } ,
{ 0x1189, 0x1592, "", "VL/PCI Bridge" } ,
{ 0x118C, 0x0014, "PCIB", "C-bus II to PCI bus host bridge chip" } ,
{ 0x118C, 0x1117, "MAC-94C201B3", "Corollary/Intel Memory Controller Chip" } ,
{ 0x118D, 0x0001, "n/a", "Raptor-PCI framegrabber" } ,
{ 0x118D, 0x0012, "Model 12", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0014, "Model 14", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0024, "Model 24", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0044, "Model 44", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0112, "Model 12", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0114, "Model 14", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0124, "Model 24", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0144, "Model 44", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0212, "Model 12", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0214, "Model 14", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0224, "Model 24", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0244, "Model 44", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0312, "Model 12", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0314, "Model 14", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0324, "Model 24", "Road Runner Frame Grabber" } ,
{ 0x118D, 0x0344, "Model 44", "Road Runner Frame Grabber" } ,
{ 0x1190, 0x2550, "TC-2550", "Single Chip Ultra (Wide) SCSI Processor" } ,
{ 0x1190, 0xC721, "", "EIDE" } ,
{ 0x1190, 0xC731, "TP-910/920/940", "PCI Ultra (Wide) SCSI Adapter" } ,
{ 0x1191, 0x0001, "", "IDE Ctrlr" } ,
{ 0x1191, 0x0002, "ATP850UF", "UltraDMA33 EIDE Controller (AEC6210UF)" } ,
{ 0x1191, 0x0003, "", "SCSI-2 cache Cntrlr" } ,
{ 0x1191, 0x0004, "atp8400a", "ASIC cache controller" } ,
{ 0x1191, 0x0005, "ATP850UF", "UltraDMA33 EIDE Controller (AEC6210UF)" } ,
{ 0x1191, 0x0006, "ATP860A", "UltraDMA66 EDIE Controller (AEC6260)" } ,
{ 0x1191, 0x0007, "ATP860A", "UltraDMA66 EIDE Controller (AEC6260)" } ,
{ 0x1191, 0x8001, "ATP8600", "SCSI-2 RAID (cache?) Adapter (AEC6820U)" } ,
{ 0x1191, 0x8002, "ATP850S", "SCSI-2 Host Adapter (AEC6710L/F)" } ,
{ 0x1191, 0x8010, "ATP870", "Ultra Wide SCSI Controller" } ,
{ 0x1191, 0x8020, "ATP870", "Ultra SCSI Controller" } ,
{ 0x1191, 0x8030, "ATP870", "Ultra SCSI Controller" } ,
{ 0x1191, 0x8040, "ATP870", "SCSI Controller" } ,
{ 0x1191, 0x8050, "", "Ultra Wide SCSI Controller" } ,
{ 0x1193, 0x0001, "1221", "" } ,
{ 0x1193, 0x0002, "1225", "" } ,
{ 0x1199, 0x0001, "", "IRMA 3270 PCI Adapter" } ,
{ 0x1199, 0x0002, "", "Advanced ISCA PCI Adapter" } ,
{ 0x1199, 0x0201, "", "SDLC PCI Adapter" } ,
{ 0x119B, 0x1221, "82C092G", "" } ,
{ 0x11A9, 0x4240, "AMCC S5933Q", "Intelligent Serial Card" } ,
{ 0x11AB, 0x0146, "GT-64010", "System ctrlr w/PCI for R46xx CPU" } ,
{ 0x11ab, 0x4620, "GT64120", "System Ctrlr for R5K & R7K w/64bit PCI" } ,
{ 0x11AB, 0x4801, "GT-48001", "8 port switched ethernet ctrlr" } ,
{ 0x11AB, 0x4809, "EV-48300", "Evaluation board for the GT-48300" } ,
{ 0x11AB, 0xF003, "GT-64010", "Primary Image Piranha Image Generator" } ,
{ 0x11AB, 0xF004, "GT64120", "Primary Image Barracuda Image Generator" } ,
{ 0x11ab, 0xF006, "GT64120A", "Primary Image Cruncher Geometry Acclrtr" } ,
{ 0x11AD, 0x0002, "NGMC169B", "10/100 Ethernet (NetGear FA310TX)" } ,
{ 0x11AD, 0xC115, "LC82C115", "PNIC II 10/100 PCI MAC/PHY" } ,
{ 0x11AE, 0x4153, "", "Bridge Controller" } ,
{ 0x11AE, 0x5842, "", "Bridge Controller" } ,
{ 0x11B0, 0x0292, "V292PBC", "Am29030/40 Bridge" } ,
{ 0x11B0, 0x0960, "V96xPBC", "i960 Bridges for i960 Processors" } ,
{ 0x11B0, 0xC960, "V96DPC", "i960 Dual PCI Bridge" } ,
{ 0x11b3, 0001, "", "CHANNEL-IN (BT) Rev 1" } ,
{ 0x11b3, 0002, "", "CHANNEL-OUT (BT) Rev 1" } ,
{ 0x11b3, 0010, "", "CHANNEL-IN (ES)" } ,
{ 0x11b3, 0100, "", "SYNC MAX PCI" } ,
{ 0x11b3, 1001, "", "CHANNEL-IN (BT) Rev 2" } ,
{ 0x11b3, 1002, "", "CHANNEL-OUT (BT) Rev 2" } ,
{ 0x11B8, 0x0001, "Quad PeerMaster", "" } ,
{ 0x11B9, 0xC0ED, "SSA Ctrlr", "" } ,
{ 0x11BC, 0x0001, "NPI NuCard", "PCI FDDI" } ,
{ 0x11C1, 0x0440, "LT Winmodem 56k", "Data+Fax+Voice+DSVD" } ,
{ 0x11C1, 0x0441, "LT Winmodem 56k", "Data+Fax" } ,
{ 0x11C1, 0x0442, "1646T00", "V.90 Lucent Modem" } ,
{ 0x11C1, 0x0443, "LT Winmodem", "" } ,
{ 0x11C1, 0x0444, "LT Winmodem", "" } ,
{ 0x11C1, 0x0445, "LT Winmodem", "" } ,
{ 0x11C1, 0x0446, "LT Winmodem", "" } ,
{ 0x11C1, 0x0447, "LT Winmodem", "" } ,
{ 0x11C1, 0x0448, "LT Winmodem 56k", "" } ,
{ 0x11C1, 0x0449, "LT Winmodem 56k", "" } ,
{ 0x11C1, 0x044A, "LT Winmodem 56k", "" } ,
{ 0x11C1, 0x044B, "LT Winmodem", "" } ,
{ 0x11C1, 0x044C, "LT Winmodem", "" } ,
{ 0x11C1, 0x044D, "LT Winmodem", "" } ,
{ 0x11C1, 0x044E, "LT Winmodem", "" } ,
{ 0x11C1, 0x0450, "LT Winmodem", "" } ,
{ 0x11C1, 0x0451, "LT Winmodem", "" } ,
{ 0x11C1, 0x0452, "LT Winmodem", "" } ,
{ 0x11C1, 0x0453, "LT Winmodem", "" } ,
{ 0x11C1, 0x0454, "LT Winmodem", "" } ,
{ 0x11C1, 0x0455, "LT Winmodem", "" } ,
{ 0x11C1, 0x0456, "LT Winmodem", "" } ,
{ 0x11C1, 0x0457, "LT Winmodem", "" } ,
{ 0x11C1, 0x0458, "LT Winmodem", "" } ,
{ 0x11C1, 0x0459, "LT Winmodem", "" } ,
{ 0x11C1, 0x045A, "LT Winmodem", "" } ,
{ 0x11C1, 0x0480, "Venus Winmodem", "" } ,
{ 0x11c1, 0x5400, "Lucent OR3TP12 FPSC", "FPGA w embedded PCI core" } ,
{ 0x11C1, 0x5801, "", "USB Open Host Controller" } ,
{ 0x11C8, 0x0658, "PSB", "PCI-SCI Bridge" } ,
{ 0x11C8, 0xD665, "PSB64", "" } ,
{ 0x11C8, 0xD667, "PSB66", "" } ,
{ 0x11C9, 0x0010, "", "16-line serial port w/DMA" } ,
{ 0x11C9, 0x0011, "", "4-line serial port w/DMA" } ,
{ 0x11CB, 0x2000, "PCI-9050", "Target Interface" } ,
{ 0x11CB, 0x4000, "SUPI-1", "XIO/SIO Host" } ,
{ 0x11CB, 0x8000, "T225", "Bridge RIO Host" } ,
{ 0x11D1, 0x01F7, "VxP524", "PCI Video Processor" } ,
{ 0x11D4, 0x2F44, "ADSP-2141", "SafeNet Crypto Accelerator chip" } ,
{ 0x11D5, 0x0115, "10115", "Greensheet" } ,
{ 0x11D5, 0x0117, "10117", "Greensheet" } ,
{ 0x11DE, 0x6057, "ZR36057", "MotionJPEG/TV Card" } ,
{ 0x11de, 0x6120, "ZR36120", "DVD Decoder" } ,
{ 0x11F0, 0x4231, "", "" } ,
{ 0x11F0, 0x4232, "FASTline UTP Quattro", "" } ,
{ 0x11F0, 0x4233, "FASTline FO", "" } ,
{ 0x11F0, 0x4234, "FASTline UTP", "" } ,
{ 0x11F0, 0x4235, "FASTline-II UTP", "" } ,
{ 0x11F0, 0x4236, "FASTline-II FO", "" } ,
{ 0x11F0, 0x4731, "GIGAline", "" } ,
{ 0x11F4, 0x2915, "2915", "" } ,
{ 0x11F6, 0x0112, "", "ReadyLink ENET100-VG4" } ,
{ 0x11F6, 0x1401, "", "ReadyLink 2000 (Winbod W89C940)" } ,
{ 0x11F6, 0x2011, "RL100-ATX", "10/100Ethernet Adapter" } ,
{ 0x11F6, 0x2201, "", "ReadyLink 100TX (Winbond W89C840)" } ,
{ 0x11F6, 0x9881, "RL100TX", "Fast Ethernet Adapter" } ,
{ 0x11F8, 0x7375, "PM7375", "LASAR-155 ATM SAR" } ,
{ 0x11FE, 0x0001, "RocketPort", "" } ,
{ 0x11FE, 0x0002, "RocketPort", "" } ,
{ 0x11FE, 0x0003, "RocketPort", "" } ,
{ 0x11FE, 0x0004, "RocketPort", "" } ,
{ 0x11FE, 0x0005, "RocketPort", "" } ,
{ 0x11FE, 0x0006, "RocketPort", "" } ,
{ 0x11FE, 0x0008, "RocketPort", "" } ,
{ 0x11FE, 0x0009, "RocketPort", "" } ,
{ 0x11FE, 0x000A, "RocketPort", "" } ,
{ 0x11FE, 0x000B, "RocketPort", "" } ,
{ 0x11FE, 0x000C, "RocketPort", "" } ,
{ 0x1208, 0x4853, "", "HS-Link Device" } ,
{ 0x120E, 0x0100, "Cyclom-Y", "Multiport Serial Card" } ,
{ 0x120E, 0x0101, "Cyclom-Y", "Multiport Serial Card" } ,
{ 0x120E, 0x0102, "Cyclom-4Y", "Multiport Serial Card" } ,
{ 0x120E, 0x0103, "Cyclom-4Y", "Multiport Serial Card" } ,
{ 0x120E, 0x0104, "Cyclom-8Y", "Multiport Serial Card" } ,
{ 0x120E, 0x0105, "Cyclom-8Y", "Multiport Serial Card" } ,
{ 0x120E, 0x0200, "Cyclom-Z", "Intelligent Multiport Serial" } ,
{ 0x120E, 0x0201, "Cyclom-Z", "Intelligent Serial Card" } ,
{ 0x120F, 0x0001, "Roadrunner", "" } ,
{ 0x1217, 0x673A, "OZ6730", "PCI to PCMCIA Bridge" } ,
{ 0x1217, 0x6792, "OZ6729", "PCI to PCMCIA Bridge" } ,
{ 0x1217, 0x6832, "OZ6832/3", "CardBus Controller" } ,
{ 0x1217, 0x6836, "OZ6836/6860", "CardBus Controller" } ,
{ 0x1217, 0x6872, "OZ6812", "CardBus Controller" } ,
{ 0x1217, 0x6933, "OZ6933", "CardBus Controller" } ,
{ 0x121A, 0x0001, "Voodoo", "Voodoo 3D Acceleration Chip" } ,
{ 0x121A, 0x0002, "Voodoo2", "Voodoo 2 3D Accelerator" } ,
{ 0x121A, 0x0003, "Voodoo Banshee", "Voodoo Banshee" } ,
{ 0x121A, 0x0005, "Voodoo3", "All Voodoo3 chips, 3000" } ,
{ 0x121a, 0x4, "", "Voodoo3 2000" } ,
{ 0x1220, 0x1220, "", "AMCC 5933 TMS320C80 DSP/Imaging Board" } ,
{ 0x122D, 0x1206, "368DSP", "" } ,
{ 0x122D, 0x50DC, "3328", "Audio" } ,
{ 0x122D, 0x80DA, "3328", "Audio" } ,
{ 0x1236, 0x0000, "RealMagic64/GX", "" } ,
{ 0x1236, 0x6401, "REALmagic64/GX", "GUI Accelerator" } ,
{ 0x123D, 0x0000, "EasyConnect 8/32", "" } ,
{ 0x123D, 0x0002, "EasyConnect 8/64", "" } ,
{ 0x123D, 0x0003, "EasyIO", "" } ,
{ 0x123F, 0x00E4, "", "MPEG" } ,
{ 0x123F, 0x8120, "176", "E4?" } ,
{ 0x123F, 0x8888, "", "Cinemaster C 3.0 DVD Decoder" } ,
{ 0x1242, 0x4643, "FCI-1063", "Fibre Channel Adapter" } ,
{ 0x1244, 0x0700, "B1", "ISDN controller" } ,
{ 0x1244, 0x0a00, "A1", "AVM Fritz!Card" } ,
{ 0x1244, 0xa00, "A1", "AVM Fritz!Card" } ,
{ 0x124D, 0x0000, "EasyConnect 8/32", "" } ,
{ 0x124D, 0x0002, "EasyConnect 8/64", "" } ,
{ 0x124D, 0x0003, "EasyIO PCI", "" } ,
{ 0x124F, 0x0041, "IFT-2000", "PCI RAID Controller" } ,
{ 0x1255, 0x1110, "MPEG Forge", "" } ,
{ 0x1255, 0x1210, "MPEG Fusion", "" } ,
{ 0x1255, 0x2110, "VideoPlex", "" } ,
{ 0x1255, 0x2120, "VideoPlex CC", "" } ,
{ 0x1255, 0x2130, "VideoQuest", "" } ,
{ 0x1256, 0x4401, "PCI-2220i", "Dale EIDE Adapter" } ,
{ 0x1256, 0x5201, "PCI-2000", "IntelliCache SCSI Adapter" } ,
{ 0x1259, 0x2560, "", "AT-2560 Fast Ethernet Adapter (i82557B)" } ,
{ 0x125D, 0x0000, "ESS336H", "PCI Fax Modem (early model)" } ,
{ 0x125D, 0x1968, "ES1968", "Maestro-2 PCI audio accelerator" } ,
{ 0x125D, 0x1969, "ES1938/41/46", "Solo-1 PCI AudioDrive family" } ,
{ 0x125d, 0x1978, "ES1978", "Maestro-2 PCI Audio Accelerator" } ,
{ 0x125d, 0x1988, "ES1989", "Allegro-1 Audiodrive" } ,
{ 0x125d, 0x1989, "ES56CVM-PI", "Allegro-1.COMM PCI Voice+Fax Modem" } ,
{ 0x125d, 0x1998, "ES1980", "Maestro-3 PCI Audio Accelerator" } ,
{ 0x125d, 0x1999, "ES1983", "Maestro-3.COMM PCI Voice+Fax Modem" } ,
{ 0x125d, 0x199A, "ES1980", "Maestro-3 PCI Audio Accelerator" } ,
{ 0x125D, 0x199B, "ES1938", "Maestro-3.COMM PCI Voice+Fax Modem" } ,
{ 0x125D, 0x2808, "ES336H", "PCI Fax Modem (later model)" } ,
{ 0x125D, 0x2898, "ES2898", "ES56-PI Family V.90 PCI Modem" } ,
{ 0x1260, 0x8130, "HMP8130", "NTSC/PAL Video Decoder" } ,
{ 0x1260, 0x8131, "HMP8131", "NTSC/PAL Video Decoder" } ,
{ 0x1266, 0x0001, "", "NE10/100 Adapter (i82557B)" } ,
{ 0x1266, 0x1910, "", "NE2000Plus (RT8029) Ethernet Adapter" } ,
{ 0x1267, 0x5352, "PCR2101", "" } ,
{ 0x1267, 0x5A4B, "telsatturbo", "" } ,
{ 0x126F, 0x0710, "SM710", "LynxEM" } ,
{ 0x126F, 0x0712, "SM712", "LynxEM+" } ,
{ 0x126F, 0x0720, "SM720", "Lynx3DM" } ,
{ 0x126F, 0x0810, "SM810", "LynxE" } ,
{ 0x126F, 0x0811, "SM811", "LynxE" } ,
{ 0x126F, 0x0820, "SM820", "Lynx3D" } ,
{ 0x126F, 0x0910, "SM910", "Lynx" } ,
{ 0x1273, 0x0002, "DirecPC", "" } ,
{ 0x1274, 0x1371, "ES1371", "AudioPCI" } ,
{ 0x1274, 0x5000, "ES1370", "AudioPCI" } ,
{ 0x1274, 0x5880, "5880", "AudioPCI" } ,
{ 0x1279, 0x0295, "", "Virtual Northbridge" } ,
{ 0x127A, 0x1002, "RC56HCFPCI", "Modem enumerator" } ,
{ 0x127A, 0x1003, "", "HCF 56k V.90 Modem" } ,
{ 0x127A, 0x1004, "", "HCF 56k V.90 Modem" } ,
{ 0x127A, 0x1005, "", "HCF 56k V.90 Speakerphone Modem" } ,
{ 0x127A, 0x1025, "", "HCF 56k PCI Modem" } ,
{ 0x127A, 0x1026, "", "HCF 56k V.90 Speakerphone Modem" } ,
{ 0x127A, 0x1035, "", "HCF 56k Speakerphone Modem" } ,
{ 0x127A, 0x1085, "", "Volcano HCF 56k PCI Modem" } ,
{ 0x127A, 0x2004, "SoftK56VB2.1V2.08.02", "K56 modem" } ,
{ 0x127a, 0x2005, "RS56/SP-PCI11P1", "Single chip 56K V90 modem/spkrphone" } ,
{ 0x127A, 0x2013, "", "Soft 56K PCI modem" } ,
{ 0x127A, 0x2014, "", "PCI modem" } ,
{ 0x127A, 0x2015, "", "Conexant SoftK56 Speakerphone Modem" } ,
{ 0x127A, 0x4320, "", "Riptide PCI Audio Controller" } ,
{ 0x127A, 0x4321, "", "Riptide HCF 56k PCI Modem" } ,
{ 0x127A, 0x4322, "", "Riptide PCI Game Controller" } ,
{ 0x127A, 0x8234, "", "RapidFire 616X ATM155 Adapter" } ,
{ 0x1282, 0x9102, "DM9102/A", "GFast Ethernet Adapter" } ,
{ 0x1283, 0x673A, "IT8330G", "IDE Controller" } ,
{ 0x1283, 0x8172, "IT8172", "Ultra RISC (MIPS, SH4) Companion Chip" } ,
{ 0x1283, 0x8330, "IT8330G", "Host Bridge" } ,
{ 0x1283, 0x8872, "IT8871/72", "PCI to ISA I/O chip" } ,
{ 0x1283, 0x8888, "IT8888F", "PCI to ISA Bridge with SMB" } ,
{ 0x1283, 0x8889, "IT8889F", "PCI to ISA Bridge" } ,
{ 0x1283, 0xE886, "IT8330G", "PCI to ISA Bridge" } ,
{ 0x1285, 0x0100, "ES1849", "Maestro-1 AudioDrive" } ,
{ 0x1287, 0x001E, "LS220D", "DVD Decoder" } ,
{ 0x1287, 0x001F, "LS220C", "DVD Decoder" } ,
{ 0x128A, 0xF001, "Ethernet 10/100", "AsanteFAST 10/100 PCI Ethernet Adapter" } ,
{ 0x128D, 0x0021, "", "ATM Adapter" } ,
{ 0x128E, 0x0008, "ST128", "WSS/SB" } ,
{ 0x128E, 0x0009, "ST128", "SAM9407" } ,
{ 0x128E, 0x000A, "ST128", "Game Port" } ,
{ 0x128E, 0x000B, "ST128", "MPU Port" } ,
{ 0x128E, 0x000C, "ST128", "Control Port" } ,
{ 0x12aa, 0x5568, "", "WANic 400 series" } ,
{ 0x12AB, 0x3000, "TUN-200/MPG-200C", "PCI TV (and DVD Decoder?) Card" } ,
{ 0x12AE, 0x0001, "ACENIC", "" } ,
{ 0x12B9, 0x1006, "", "USR 56k Internal WinModem" } ,
{ 0x12B9, 0x1007, "", "USR 56k Internal WinModem" } ,
{ 0x12B9, 0x1008, "", "USR 56k Internal Modem" } ,
{ 0x12BE, 0x3041, "AN3041Q", "CO-MEM PCI Bus Interface and Cache" } ,
{ 0x12be, 0x3042, "AN3042", "PCI Generic Host Bridge/Shared Memory" } ,
{ 0x12C5, 0x007F, "ISE", "PEI Imaging Subsystem Engine" } ,
{ 0x12C5, 0x0081, "PCIVST", "PCI Thresholding Engine" } ,
{ 0x12C5, 0x0085, "", "Video Simulator/Sender" } ,
{ 0x12C5, 0x0086, "THR2", "Multi-scale Thresholder" } ,
{ 0x12D2, 0x0008, "NV1", "" } ,
{ 0x12D2, 0x0009, "DAC64", "" } ,
{ 0x12D2, 0x0018, "RIVA 128", "Riva 128 2D/3D GUI Accelerator" } ,
{ 0x12D2, 0x0019, "RIVA 128ZX", "2D/3D GUI Accelerator" } ,
{ 0x12D2, 0x0020, "TNT", "" } ,
{ 0x12D2, 0x0028, "TNT2", "" } ,
{ 0x12D2, 0x0029, "UTNT2", "" } ,
{ 0x12D2, 0x002C, "VTNT2", "" } ,
{ 0x12D2, 0x00A0, "ITNT2", "" } ,
{ 0x12DB, 0x0003, "", "FoxFire II" } ,
{ 0x12DE, 0x0200, "", "Cryptoswift 200" } ,
{ 0x12E0, 0x0010, "ST16C654", "Quad UART" } ,
{ 0x12E0, 0x0020, "ST16C654", "Quad UART" } ,
{ 0x12E0, 0x0030, "ST16C654", "Quad UART" } ,
{ 0x12E4, 0x1140, "", "ISDN Controller" } ,
{ 0x12EB, 0x0001, "AU8820", "Vortex Digital Audio Processor" } ,
{ 0x12eb, 0x0002, "AU8830", "Vortex 3D Digital Audio Processor" } ,
{ 0x12eb, 0x0003, "AU8810", "Vortex Digital Audio Processor" } ,
{ 0x12eb, 0x8803, "", "Vortex 56k Software Modem" } ,
{ 0x12F8, 0x0002, "VideoMaker", "" } ,
{ 0x1307, 0x0001, "PCI-DAS1602/16", "" } ,
{ 0x1307, 0x0006, "PCI-GPIB", "" } ,
{ 0x1307, 0x000B, "PCI-DIO48H", "" } ,
{ 0x1307, 0x000C, "PCI-PDISO8", "" } ,
{ 0x1307, 0x000D, "PCI-PDISO16", "" } ,
{ 0x1307, 0x000F, "PCI-DAS1200", "" } ,
{ 0x1307, 0x0010, "PCI-DAS1602/12", "" } ,
{ 0x1307, 0x0014, "PCI-DIO24H", "" } ,
{ 0x1307, 0x0015, "PCI-DIO24H/CTR3", "" } ,
{ 0x1307, 0x0016, "PCI-DIO24H/CTR16", "" } ,
{ 0x1307, 0x0017, "PCI-DIO96H", "" } ,
{ 0x1307, 0x0018, "PCI-CTR05", "" } ,
{ 0x1307, 0x0019, "PCI-DAS1200/JR", "" } ,
{ 0x1307, 0x001A, "PCI-DAS1001", "" } ,
{ 0x1307, 0x001B, "PCI-DAS1002", "" } ,
{ 0x1307, 0x001C, "PCI-DAS1602JR/16", "" } ,
{ 0x1307, 0x001D, "PCI-DAS6402/16", "" } ,
{ 0x1307, 0x001E, "PCI-DAS6402/12", "" } ,
{ 0x1307, 0x001F, "PCI-DAS16/M1", "" } ,
{ 0x1307, 0x0020, "PCI-DDA02/12", "" } ,
{ 0x1307, 0x0021, "PCI-DDA04/12", "" } ,
{ 0x1307, 0x0022, "PCI-DDA08/12", "" } ,
{ 0x1307, 0x0023, "PCI-DDA02/16", "" } ,
{ 0x1307, 0x0024, "PCI-DDA04/16", "" } ,
{ 0x1307, 0x0025, "PCI-DDA08/16", "" } ,
{ 0x1307, 0x0026, "PCI-DAC04/12-HS", "" } ,
{ 0x1307, 0x0027, "PCI-DAC04/16-HS", "" } ,
{ 0x1307, 0x0028, "CIO-DIO24", "24 Bit Digital Input/Output Board" } ,
{ 0x1307, 0x0029, "PCI-DAS08", "" } ,
{ 0x1307, 0x002C, "PCI-INT32", "" } ,
{ 0x1307, 0x0033, "PCI-DUAL-AC5", "" } ,
{ 0x1307, 0x0034, "PCI-DAS-TC", "" } ,
{ 0x1307, 0x0035, "PCI-DAS64/M1/16", "" } ,
{ 0x1307, 0x0036, "PCI-DAS64/M2/16", "" } ,
{ 0x1307, 0x0037, "PCI-DAS64/M3/16", "" } ,
{ 0x1307, 0x004C, "PCI-DAS1000", "" } ,
{ 0x1308, 0x0001, "", "NetCelerator Adapter" } ,
{ 0x1317, 0x0985, "", "" } ,
{ 0x1318, 0x0911, "G-NIC II", "1000BT Network Interface Card" } ,
{ 0x1319, 0x0801, "FM801", "PCI audio controller" } ,
{ 0x1319, 0x0802, "FM801", "PCI Joystick" } ,
{ 0x1319, 0x1000, "FM801", "PCI Audio" } ,
{ 0x1319, 0x1001, "FM801", "PCI Joystick" } ,
{ 0x131f, 0x1000, "", "PCI Serial Card" } ,
{ 0x131f, 0x1001, "", "CyberSerial 16550 (1-port)" } ,
{ 0x131f, 0x1002, "", "CyberSerial 16850 (1-port)" } ,
{ 0x131f, 0x1010, "", "Duet1S(16550)+1P" } ,
{ 0x131f, 0x1011, "", "Duet 1S(16550)+1P" } ,
{ 0x131f, 0x1012, "", "Duet 1S(16550)+1P" } ,
{ 0x131f, 0x1020, "", "CyberParallel PCI Card" } ,
{ 0x131f, 0x1021, "", "CyberParallel PCI Card" } ,
{ 0x131f, 0x1030, "", "CyberSerial 16550" } ,
{ 0x131f, 0x1031, "", "CyberSerial 16650" } ,
{ 0x131f, 0x1032, "", "CyberSerial 16850" } ,
{ 0x131f, 0x1034, "", "Trio 2S(16550)+1P" } ,
{ 0x131f, 0x1035, "", "Trio 2S(16650)+1P" } ,
{ 0x131f, 0x1036, "", "Trio 2S(16850)+1P" } ,
{ 0x131f, 0x1050, "", "CyberSerial 16550" } ,
{ 0x131f, 0x1051, "", "CyberSerial 16650" } ,
{ 0x131f, 0x1052, "", "CyberSerial 16850" } ,
{ 0x131f, 0x2000, "", "CyberSerial 16550" } ,
{ 0x131f, 0x2001, "", "CyberSerial 16650" } ,
{ 0x131f, 0x2002, "", "CyberSerial 16850" } ,
{ 0x131f, 0x2010, "", "Duet 1S(16550)+1P" } ,
{ 0x131f, 0x2011, "", "Duet 1S(16650)+1P" } ,
{ 0x131f, 0x2012, "", "Duet 1S(16850)+1P" } ,
{ 0x131f, 0x2020, "CyberParallel", "" } ,
{ 0x131f, 0x2021, "CyberParallel", "" } ,
{ 0x131f, 0x2030, "", "CyberSerial 16550?" } ,
{ 0x131f, 0x2031, "", "CyberSerial 16650" } ,
{ 0x131f, 0x2032, "", "CyberSerial 16850" } ,
{ 0x131f, 0x2040, "", "Trio 1S(16550)+2P" } ,
{ 0x131f, 0x2041, "", "Trio 1S(16650)+2P" } ,
{ 0x131f, 0x2042, "", "Trio 1S(16850)+2P" } ,
{ 0x131f, 0x2050, "", "CyberSerial 16550" } ,
{ 0x131f, 0x2051, "", "CyberSerial 16650" } ,
{ 0x131f, 0x2052, "", "CyberSerial 16850" } ,
{ 0x131f, 0x2060, "", "Trio 2S(16550)+1P" } ,
{ 0x131f, 0x2061, "", "Trio 2S(16650)+1P" } ,
{ 0x131f, 0x2062, "", "Trio 2S(16850)+1P" } ,
{ 0x134A, 0x0001, "", "Domex DMX 3191 PCI SCSI Controller" } ,
{ 0x134A, 0x0002, "", "Domex DMX3194UP SCSI Adapter" } ,
{ 0x134D, 0x7890, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7891, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7892, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7893, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7894, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7895, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7896, "", "HSP MicroModem 56" } ,
{ 0x134D, 0x7897, "97860963", "HSP MicroModem 56" } ,
{ 0x135E, 0x7101, "", "Single Port RS-232/422/485/520" } ,
{ 0x135E, 0x7201, "", "Dual Port RS-232/422/485 Interface" } ,
{ 0x135E, 0x7202, "", "Dual Port RS-232 Interface" } ,
{ 0x135E, 0x7401, "", "Four Port RS-232 Interface" } ,
{ 0x135E, 0x7402, "", "Four Port RS-422/485 Interface" } ,
{ 0x135E, 0x7801, "", "Eight Port RS-232 Interface" } ,
{ 0x135E, 0x8001, "8001", "Digital I/O Adapter" } ,
{ 0x1385, 0x620A, "GA620", "" } ,
{ 0x1389, 0x0001, "PCI1500PFB", "Intelligent fieldbus Adapter" } ,
{ 0x1397, 0x2BD0, "BIPAC-PCI", "Billion ISDN Card" } ,
{ 0x13C0, 0x0010, "", "SyncLink PCI WAN Adapter" } ,
{ 0x13C1, 0x1000, "", "ATA-RAID" } ,
{ 0x13DF, 0x0001, "PCI56RVP", "Modem" } ,
{ 0x13F6, 0x0100, "CMI8338-031", "PCI Audio Device" } ,
{ 0x13F6, 0x0101, "CMI8338-031", "PCI Audio Device" } ,
{ 0x13F6, 0x0111, "CMI8738/C3DX", "PCI Audio Device" } ,
{ 0x13F6, 0x0211, "HSP56", "Audiomodem Riser" } ,
{ 0x1407, 0x8000, "", "Lava Parallel" } ,
{ 0x1407, 0x8001, "", "Lava Dual Parallel port A" } ,
{ 0x1407, 0x8002, "", "Lava Dual Parallel port A" } ,
{ 0x1407, 0x8003, "", "Lava Dual Parallel port B" } ,
{ 0x1407, 0x8800, "", "BOCA Research IOPPAR" } ,
{ 0x1412, 0x1712, "ICE1712", "Envy24 PCI Multi-Channel I/O Ctrlr" } ,
{ 0x1448, 0x0001, "ADAT/EDIT", "Audio Editing" } ,
{ 0x144A, 0x7296, "PCI-7296", "" } ,
{ 0x144A, 0x7432, "PCI-7432", "" } ,
{ 0x144A, 0x7433, "PCI-7433", "" } ,
{ 0x144A, 0x7434, "PCI-7434", "" } ,
{ 0x144A, 0x7841, "PCI-7841", "" } ,
{ 0x144A, 0x8133, "PCI-8133", "" } ,
{ 0x144A, 0x8554, "PCI-8554", "" } ,
{ 0x144A, 0x9111, "PCI-9111", "" } ,
{ 0x144A, 0x9113, "PCI-9113", "" } ,
{ 0x144A, 0x9114, "PCI-9114", "" } ,
{ 0x144B, 0x0601, "", "" } ,
{ 0x145F, 0x0001, "NextMove PCI", "" } ,
{ 0x148D, 0x1003, "", "Creative ModemBlaster V.90 PCI DI5635" } ,
{ 0x14B3, 0x0000, "", "DSL NIC" } ,
{ 0x14B7, 0x0001, "Symphony 4110", "" } ,
{ 0x14B9, 0x0001, "PC4800", "" } ,
{ 0x14D4, 0x0400, "Panacom 7", "Interface chip" } ,
{ 0x14DB, 0x2100, "PCI IO 1S", "" } ,
{ 0x14DB, 0x2101, "PCI IO 1S-650", "" } ,
{ 0x14DB, 0x2102, "PCI IO 1S-850", "" } ,
{ 0x14DB, 0x2110, "PCI IO 1S1P", "" } ,
{ 0x14DB, 0x2111, "PCI IO 1S1P-650", "" } ,
{ 0x14DB, 0x2112, "PCI IO 1S1P-850", "" } ,
{ 0x14DB, 0x2120, "PCI IO 1P", "" } ,
{ 0x14DB, 0x2121, "PCI IO 2P", "" } ,
{ 0x14DB, 0x2130, "PCI IO 2S", "" } ,
{ 0x14DB, 0x2131, "PCI IO 2S-650", "" } ,
{ 0x14DB, 0x2132, "PCI IO 2S-850", "" } ,
{ 0x14DB, 0x2140, "PCI IO 2P1S", "" } ,
{ 0x14DB, 0x2141, "PCI IO 2P1S-650", "" } ,
{ 0x14DB, 0x2142, "PCI IO 2P1S-850", "" } ,
{ 0x14DB, 0x2144, "PCI IO 2P2S", "" } ,
{ 0x14DB, 0x2145, "PCI IO 2P2S-650", "" } ,
{ 0x14DB, 0x2146, "PCI IO 2P2S-850", "" } ,
{ 0x14DB, 0x2150, "PCI IO 4S", "" } ,
{ 0x14DB, 0x2151, "PCI IO 4S-654", "" } ,
{ 0x14DB, 0x2152, "PCI IO 4S-850", "" } ,
{ 0x14DB, 0x2160, "PCI IO 2S1P", "" } ,
{ 0x14DB, 0x2161, "PCI IO 2S1P-650", "" } ,
{ 0x14DB, 0x2162, "PCI IO 2S1P-850", "" } ,
{ 0x14DB, 0x2180, "PCI IO 8S", "" } ,
{ 0x14DB, 0x2181, "PCI IO 8S-654", "" } ,
{ 0x14DB, 0x2182, "PCI IO 8S-850", "" } ,
{ 0x14DC, 0x0000, "PCI230", "" } ,
{ 0x14DC, 0x0001, "PCI242", "" } ,
{ 0x14DC, 0x0002, "PCI244", "" } ,
{ 0x14DC, 0x0003, "PCI247", "" } ,
{ 0x14DC, 0x0004, "PCI248", "" } ,
{ 0x14DC, 0x0005, "PCI249", "" } ,
{ 0x14DC, 0x0006, "PCI260", "" } ,
{ 0x14DC, 0x0007, "PCI224", "" } ,
{ 0x14DC, 0x0008, "PCI234", "" } ,
{ 0x14DC, 0x0009, "PCI236", "" } ,
{ 0x14f1, 0x1033, "", "56k Winmodem" } ,
{ 0x14f1, 0x1035, "", "PCI Modem Enumerator" } ,
{ 0x14f1, 0x2003, "", "SoftK56 Winmodem" } ,
{ 0x14f1, 0x2004, "", "SoftK56 RemoteTAM Winmodem" } ,
{ 0x14f1, 0x2005, "", "SoftK56 Speakerphone Winmodem" } ,
{ 0x14f1, 0x2006, "", "SoftK56 Speakerphone Winmodem" } ,
{ 0x14f1, 0x2013, "", "SoftK56 Winmodem" } ,
{ 0x14f1, 0x2014, "", "SoftK56 RemoteTAM Winmodem" } ,
{ 0x14f1, 0x2015, "", "SoftK56 Speakerphone Winmodem" } ,
{ 0x14f1, 0x2016, "", "SoftK56 Speakerphone Winmodem" } ,
{ 0x14f1, 0x2443, "", "SoftK56 Data,Fax PCI Modem" } ,
{ 0x14F2, 0x0120, "", "Mobility Split Bridge" } ,
{ 0x1500, 0x1300, "SIS900", "10/100M PCI Fast Ethernet Controller" } ,
{ 0x1500, 0x1320, "VT86C100A", "10/100M PCI Fast Ethernet Controler" } ,
{ 0x1500, 0x1360, "RTL8139A", "10/100 Mbps PCI Fast Ethernet Controller" } ,
{ 0x1500, 0x1380, "DEC21143PD", "10/100M PCI Fast Ethernet Controller" } ,
{ 0x1507, 0x0001, "MPC105 Eagle", "" } ,
{ 0x1507, 0x0002, "MPC106 Grackle", "" } ,
{ 0x1507, 0x0003, "MPC8240 Kahlua", "" } ,
{ 0x1507, 0x0100, "MPC145575 HFC-PCI", "" } ,
{ 0x1507, 0x0431, "KTI829c 100VG", "" } ,
{ 0x1507, 0x4801, "Raven", "" } ,
{ 0x1507, 0x4802, "Falcon", "" } ,
{ 0x1507, 0x4803, "Hawk", "" } ,
{ 0x1507, 0x4806, "CPX8216", "" } ,
{ 0x151A, 0x1002, "PCI-1002", "" } ,
{ 0x151A, 0x1004, "PCI-1004", "" } ,
{ 0x151A, 0x1008, "PCI-1008", "" } ,
{ 0x151c, 0x0002, "Xilinx PLD", "CardDeluxe" } ,
{ 0x1571, 0xA001, "CCSI PCI20-485", "ARCnet" } ,
{ 0x1571, 0xA002, "CCSI PCI20-485D", "ARCnet" } ,
{ 0x1571, 0xA003, "CCSI PCI20-485X", "ARCnet" } ,
{ 0x1571, 0xA004, "CCSI PCI20-CXB", "ARCnet" } ,
{ 0x1571, 0xA005, "CCSI PCI20-CXS", "ARCnet" } ,
{ 0x1571, 0xA006, "CCSI PCI20-FOG-SMA", "ARCnet" } ,
{ 0x1571, 0xA007, "CCSI PCI20-FOG-ST", "ARCnet" } ,
{ 0x1571, 0xA008, "CCSI PCI20-TB5", "ARCnet" } ,
{ 0x1571, 0xA009, "CCSI PCI20-5-485", "5 Mbit ARCnet" } ,
{ 0x1571, 0xA00A, "CCSI PCI20-5-485D", "5 Mbit ARCnet" } ,
{ 0x1571, 0xA00B, "CCSI PCI20-5-485X", "5 Mbit ARCnet" } ,
{ 0x1571, 0xA00C, "CCSI PIC20-5-FOG-ST", "5 Mbit ARCnet" } ,
{ 0x1571, 0xA00D, "CCSI PCI20-5-FOG-SMA", "5 Mbit ARCnet" } ,
{ 0x1571, 0xA201, "CCSI PCI22-485", "10 Mbit ARCnet" } ,
{ 0x1571, 0xA202, "CCSI PCI22-485D", "10 Mbit ARCnet" } ,
{ 0x1571, 0xA203, "CCSI PCI22-485X", "10 Mbit ARCnet" } ,
{ 0x1571, 0xA204, "CCSI PCI22-CHB", "10 Mbit ARCnet" } ,
{ 0x1571, 0xA205, "CCSI PCI22-FOG-ST", "10 Mbit ARCnet" } ,
{ 0x1571, 0xA206, "CCSI PCI22-THB", "10 Mbit ARCnet" } ,
{ 0x157C, 0x8001, "Fix2000", "PCI Y2K Compliance Card" } ,
{ 0x1592, 0x0781, "", "Multi-IO Card" } ,
{ 0x1592, 0x0782, "", "Dual Parallel Port Card (EPP)" } ,
{ 0x1592, 0x0783, "", "Multi-IO Card" } ,
{ 0x1592, 0x0785, "", "Multi-IO Card" } ,
{ 0x1592, 0x0786, "", "Multi-IO Card" } ,
{ 0x1592, 0x0787, "", "Multi-IO Card 2 series" } ,
{ 0x1592, 0x0788, "", "Multi-IO Card" } ,
{ 0x1592, 0x078A, "", "Multi-IO Card" } ,
{ 0x15AD, 0x0710, "", "Virtual SVGA" } ,
{ 0x15bc, 0x2922, "E2922A", "64 Bit, 133MHz PCI-X Exerciser/Observer" } ,
{ 0x15bc, 0x2929, "E2929A", "64 Bit, 133MHz PCI-X Exerciser/Analyzer" } ,
{ 0x15D8, 9001, "", "" } ,
{ 0x15DC, 0x0001, "Argus 300", "PCI Cryptography Module" } ,
{ 0x1619, 0x0400, "FarSync T2P", "Two Port Intelligent Sync Comms Card" } ,
{ 0x1619, 0x0440, "FarSync T4P", "Four Port Intelligent Sync Comms Card" } ,
{ 0x1A08, 0x0000, "SC15064", "" } ,
{ 0x1C1C, 0x0001, "82C101", "IDE Ctrlr" } ,
{ 0x1C1C, 0x0001, "FR710", "EIDE Ctrlr" } ,
{ 0x1D44, 0xA400, "PM2x24/3224", "SCSI Adapter" } ,
{ 0x1DE1, 0x0391, "TRM-S1040", "SCSI ASIC" } ,
{ 0x1DE1, 0x2020, "DC-390", "SCSI Controller" } ,
{ 0x1DE1, 0x690C, "DC-690C", "IDE Cache Controller" } ,
{ 0x1DE1, 0xDC29, "DC290M", "Bus Master IDE PCI 2 controllers" } ,
{ 0x2348, 0x2010, "8142", "100VG/AnyLAN" } ,
{ 0x3388, 0x8011, "", "CPU to PCI Bridge" } ,
{ 0x3388, 0x8012, "", "PCI to ISA Bridge" } ,
{ 0x3388, 0x8013, "", "EIDE Controller" } ,
{ 0x3D3D, 0x0001, "GLint 300SX", "3D Accelerator" } ,
{ 0x3D3D, 0x0002, "GLint 500TX", "Sapphire 3D Accelerator" } ,
{ 0x3D3D, 0x0003, "GLint", "Delta Geometry processor" } ,
{ 0x3D3D, 0x0004, "3C0SX", "2D+3D Accelerator" } ,
{ 0x3D3D, 0x0005, "Permedia", "2D+3D Accelerator" } ,
{ 0x3D3D, 0x0006, "GLint MX", "3D Accelerator" } ,
{ 0x3D3D, 0x0007, "3D Extreme", "Permedia II 2D+3D Accelerator" } ,
{ 0x3D3D, 0x0008, "GLint Gamma G1", "" } ,
{ 0x3D3D, 0x0009, "Permedia 3", "2D+3D Accelerator" } ,
{ 0x3D3D, 0x000A, "GLint R3", "" } ,
{ 0x3D3D, 0x0100, "Permedia II", "2D+3D Accelerator" } ,
{ 0x3D3D, 0x1004, "Permedia", "3D+3D Accelerator" } ,
{ 0x3D3D, 0x3D04, "Permedia", "2D+3D Accelerator" } ,
{ 0x3D3D, 0xFFFF, "GLint VGA", "" } ,
{ 0x4005, 0x0300, "ALS300", "PCI Audio Device" } ,
{ 0x4005, 0x0308, "ALS300+", "PCI Audio Device" } ,
{ 0x4005, 0x0309, "ALS300+", "PCI Input Controller" } ,
{ 0x4005, 0x1064, "ALG2064", "GUI Accelerator" } ,
{ 0x4005, 0x2064, "ALG2032/2064i", "GUI Accelerator" } ,
{ 0x4005, 0x2128, "ALG2364A", "GUI Accelerator" } ,
{ 0x4005, 0x2301, "ALG2301", "GUI Accelerator" } ,
{ 0x4005, 0x2302, "ALG2302", "GUI Accelerator" } ,
{ 0x4005, 0x2303, "AVG2302", "GUI Accelerator" } ,
{ 0x4005, 0x2364, "ALG2364", "GUI Accelerator" } ,
{ 0x4005, 0x2464, "ALG2464", "GUI Accelerator" } ,
{ 0x4005, 0x2501, "ALG2564A/25128A", "GUI Accelerator" } ,
{ 0x4005, 0x4000, "ALS4000", "Audio Chipset" } ,
{ 0x4033, 0x1300, "SIS900", "10/100Mbps Fast Ethernet Controller" } ,
{ 0x4033, 0x1320, "VT86C100A", "10/100M PCI Fast Ethernet Controller" } ,
{ 0x4033, 0x1360, "RTL8139A", "10/100 Mbps PCI Fast Ethernet Controller" } ,
{ 0x4033, 0x1380, "DEC 21143PD", "10/100M PCI Fast Ethernet Controller" } ,
{ 0x4A14, 0x5000, "", "NV5000 RT8029-based Ethernet Adapter" } ,
{ 0x4B10, 0x3080, "", "SCSI Host Adapter" } ,
{ 0x4B10, 0x4010, "", "Fast/wide SCSI-2" } ,
{ 0x4D51, 0x0200, "MQ-200", "" } ,
{ 0x5053, 0x2010, "", "Daytona Audio Adapter" } ,
{ 0x5145, 0x3031, "Concert", "AudioPCI" } ,
{ 0x5301, 0x0001, "ProMotion aT3D", "" } ,
{ 0x5333, 0x0551, "86C551", "Plato/PX" } ,
{ 0x5333, 0x5631, "86C325", "Virge 3D GUI Accelerator" } ,
{ 0x5333, 0x8800, "", "Vision 866 GUI Accelerator" } ,
{ 0x5333, 0x8801, "", "Vision 964 GUI Accelerator" } ,
{ 0x5333, 0x8810, "86C732", "Trio 32 GUI Accelerator rev. 0" } ,
{ 0x5333, 0x8811, "86C764/765", "Trio 64/64V+ GUI Accelerator" } ,
{ 0x5333, 0x8812, "86CM65?", "Aurora 64V+" } ,
{ 0x5333, 0x8813, "86C764", "Trio 32/64 GUI Accelerator v3" } ,
{ 0x5333, 0x8814, "86C767", "Trio 64UV+ GUI Accelerator" } ,
{ 0x5333, 0x8815, "86CM66", "Aurora128" } ,
{ 0x5333, 0x883D, "86C988", "ViRGE/VX 3D GUI Accelerator" } ,
{ 0x5333, 0x8870, "Fire GL", "" } ,
{ 0x5333, 0x8880, "86C868", "Vision 868 GUI Accelerator VRAM rev. 0" } ,
{ 0x5333, 0x8881, "86C868", "Vision 868 GUI Accelerator VRAM rev. 1" } ,
{ 0x5333, 0x8882, "86C868", "Vision 868 GUI Accelerator VRAM rev. 2" } ,
{ 0x5333, 0x8883, "86C868", "Vision 868 GUI Accelerator VRAM rev. 3" } ,
{ 0x5333, 0x88B0, "86C928", "Vision 928 GUI Accelerator VRAM rev. 0" } ,
{ 0x5333, 0x88B1, "86C928", "Vision 928 GUI Accelerator VRAM rev. 1" } ,
{ 0x5333, 0x88B2, "86C928", "Vision 928 GUI Accelerator VRAM rev. 2" } ,
{ 0x5333, 0x88B3, "86C928", "Vision 928 GUI Accelerator VRAM rev. 3" } ,
{ 0x5333, 0x88C0, "86C864", "Vision 864 GUI Accelerator DRAM rev. 0" } ,
{ 0x5333, 0x88C1, "86C864", "Vision 864 GUI Accelerator DRAM rev. 1" } ,
{ 0x5333, 0x88C2, "86C864", "Vision 864 GUI Accelerator DRAM rev. 2" } ,
{ 0x5333, 0x88C3, "86C864", "Vision 864 GUI Accelerator DRAM rev. 3" } ,
{ 0x5333, 0x88D0, "86C964", "Vision 964 GUI Accelerator VRAM rev. 0" } ,
{ 0x5333, 0x88D1, "86C964", "Vision 964-P GUI Accelerator VRAM rev. 1" } ,
{ 0x5333, 0x88D2, "86C964", "Vision 964-P GUI Accelerator DRAM rev 2" } ,
{ 0x5333, 0x88D3, "86C964", "Vision 964-P GUI Accelerator VRAM rev. 3" } ,
{ 0x5333, 0x88F0, "86C968", "Vision 968 GUI Accelerator VRAM rev. 0" } ,
{ 0x5333, 0x88F1, "86C968", "Vision 968 GUI Accelerator VRAM rev. 1" } ,
{ 0x5333, 0x88F2, "86C968", "Vision 968 GUI Accelerator VRAM rev. 2" } ,
{ 0x5333, 0x88F3, "86C968", "Vision 968 GUI Accelerator VRAM rev. 3" } ,
{ 0x5333, 0x8900, "86C775", "Trio64V2/DX" } ,
{ 0x5333, 0x8901, "86C775/86C785", "Trio 64V2 DX/GX" } ,
{ 0x5333, 0x8902, "86C551", "SMA Family" } ,
{ 0x5333, 0x8903, "", "TrioV Family" } ,
{ 0x5333, 0x8904, "86C365/366", "Trio3D" } ,
{ 0x5333, 0x8905, "", "86C765 Trio64V+ comatible" } ,
{ 0x5333, 0x8906, "", "86C765 Trio64V+ comatible" } ,
{ 0x5333, 0x8907, "", "86C765 Trio64V+ comatible" } ,
{ 0x5333, 0x8908, "", "86C765 Trio64V+ comatible" } ,
{ 0x5333, 0x8909, "", "86C765 Trio64V+ comatible" } ,
{ 0x5333, 0x890A, "", "86C765 Trio64V+ comatible" } ,
{ 0x5333, 0x890B, "", "86C765 Trio64V+ compatible" } ,
{ 0x5333, 0x890C, "", "86C765 Trio64V+ compatible" } ,
{ 0x5333, 0x890D, "", "86C765 Trio64V+ compatible" } ,
{ 0x5333, 0x890E, "", "86C765 Trio64V+ compatible" } ,
{ 0x5333, 0x890F, "", "86C765 Trio64V+ compatible" } ,
{ 0x5333, 0x8A01, "82C375/86C385", "ViRGE /DX & /GX" } ,
{ 0x5333, 0x8A10, "86C357/86C359", "ViRGE /GX2 & /GX2+" } ,
{ 0x5333, 0x8A11, "86C359", "ViRGE /GX2+ Macrovision" } ,
{ 0x5333, 0x8A12, "86C359", "ViRGE /GX2+" } ,
{ 0x5333, 0x8A13, "86C362/86C368", "Trio3D2x & Trio3D2x+ AGP" } ,
{ 0x5333, 0x8A20, "86C390/391", "Savage3D" } ,
{ 0x5333, 0x8A21, "86C390", "Savage3D/MV" } ,
{ 0x5333, 0x8A22, "86C394-397", "Savage 4" } ,
{ 0x5333, 0x8A23, "86C394-397", "Savage 4" } ,
{ 0x5333, 0x8A25, "", "Savege4 ProSavage PM133" } ,
{ 0x5333, 0x8C00, "85C260", "ViRGE/M3 (ViRGE/MX)" } ,
{ 0x5333, 0x8C01, "86C260", "ViRGE/M5 (ViRGE/MX)" } ,
{ 0x5333, 0x8C02, "86C240", "ViRGE/MXC" } ,
{ 0x5333, 0x8C03, "86C280", "ViRGE /MX+ Macrovision" } ,
{ 0x5333, 0x8C10, "86C270/274/290/294", "Savage MX/IX/MX+MV/IX+MV" } ,
{ 0x5333, 0x8C12, "86C270/274/290/294", "Savage MX/IX/MX+MV/IX+MV" } ,
{ 0x5333, 0x9102, "86C410", "Savage 2000" } ,
{ 0x5333, 0xCA00, "86C617", "SonicVibes PCI Audio Accelerator" } ,
{ 0x5356, 0x4002, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4102, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4202, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4302, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4402, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4502, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4602, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4702, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4802, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4902, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4A02, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4B02, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4C02, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4D02, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4E02, "", "ULTRA24 SCSI Host" } ,
{ 0x5356, 0x4F02, "", "ULTRA24 SCSI Host" } ,
{ 0x5455, 0x4458, "S5933", "PCI-MyBus-Bridge" } ,
{ 0x5555, 0x0003, "", "TURBOstor HFP-832 HiPPI NIC" } ,
{ 0x6356, 0x4002, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4102, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4202, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4302, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4402, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4502, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4602, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4702, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4802, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4902, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4A02, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4B02, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4C02, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4D02, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4E02, "", "ULTRA24 SCSI Host" } ,
{ 0x6356, 0x4F02, "", "ULTRA24 SCSI Host" } ,
{ 0x6374, 0x6773, "GPPCI", "PCI Interface" } ,
{ 0x6666, 0x0001, "", "PCCOM4" } ,
{ 0x6666, 0x0002, "", "PCCOM8" } ,
{ 0x8001, 0x0010, "ispLSI1032E", "PCI-decoder" } ,
{ 0x8008, 0x0010, "PWDOG1/2", "PCI-Watchdog 1" } ,
{ 0x8008, 0x0011, "PWDOG1/2", "Watchdog2/PCI" } ,
{ 0x8008, 0x0016, "PROTO2", "" } ,
{ 0x8008, 0x0100, "PREL8", "" } ,
{ 0x8008, 0x0102, "PREL16", "" } ,
{ 0x8008, 0x0103, "POPTOREL16", "" } ,
{ 0x8008, 0x0105, "POPTO16IN", "" } ,
{ 0x8008, 0x0106, "PTTL24IO", "" } ,
{ 0x8008, 0x0107, "PUNIREL", "" } ,
{ 0x8008, 0x1000, "PDAC4", "" } ,
{ 0x8008, 0x1001, "PAD12DAC4", "" } ,
{ 0x8008, 0x1002, "PAD16DAC4", "" } ,
{ 0x8008, 0x1005, "PAD12", "" } ,
{ 0x8008, 0x1006, "PAD16", "" } ,
{ 0x8008, 0x3000, "POPTOLCA", "" } ,
{ 0x8086, 0x0008, "", "Extended Express System Support Ctrlr" } ,
{ 0x8086, 0x0482, "82375EB", "PCI-EISA Bridge (PCEB)" } ,
{ 0x8086, 0x0483, "82424TX/ZX", "CPU (i486) Bridge (Saturn)" } ,
{ 0x8086, 0x0484, "82378ZB/IB", "SIO ISA Bridge" } ,
{ 0x8086, 0x0486, "82425EX", "PCI System Controller (PSC) for i486 (Aries)" } ,
{ 0x8086, 0x04A3, "82434LX", "CPU (Pentium) Bridge (Mercury)" } ,
{ 0x8086, 0x0960, "80960RP", "i960 RP Microprocessor/Bridge" } ,
{ 0x8086, 0x0964, "", "i960 RP Microprocessor Bridge" } ,
{ 0x8086, 0x1000, "82542", "Gigabit Ethernet Controller" } ,
{ 0x8086, 0x1001, "82543GC", "10/100/1000 Ethernet Controller" } ,
{ 0x8086, 0x1029, "", "PRO/100 PCI Ethernet Adapter" } ,
{ 0x8086, 0x1030, "82559", "PCI Networking device" } ,
{ 0x8086, 0x1100, "82815", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x1101, "82815", "AGP Bridge" } ,
{ 0x8086, 0x1102, "82815", "Internal Graphics Device" } ,
{ 0x8086, 0x1110, "8x815", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x1112, "82815", "Internal Graphics Device" } ,
{ 0x8086, 0x1120, "82815", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x1121, "82815", "AGP Bridge" } ,
{ 0x8086, 0x1130, "82815/82815EM/EP", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x1131, "82815/82815EM/EP", "AGP Bridge" } ,
{ 0x8086, 0x1132, "82815", "Internal Graphics Device" } ,
{ 0x8086, 0x1161, "82806AA", "I/O APIC Device" } ,
{ 0x8086, 0x1209, "82559ER", "" } ,
{ 0x8086, 0x1221, "82092AA", "PCMCIA Bridge" } ,
{ 0x8086, 0x1222, "82092AA", "IDE Ctrlr" } ,
{ 0x8086, 0x1223, "SAA7116", "Video Controller" } ,
{ 0x8086, 0x1225, "82452KX/GX", "Orion Extended Express CPU to PCI Bridge" } ,
{ 0x8086, 0x1226, "82596", "EtherExpress PRO/10" } ,
{ 0x8086, 0x1227, "82865", "EtherExpress PRO100" } ,
{ 0x8086, 0x1228, "EE PRO/100 Smart", "Intelligent 10/100 Fast Ethernet Adapter" } ,
{ 0x8086, 0x1229, "82557/8/9", "Fast Ethernet LAN Controller" } ,
{ 0x8086, 0x122D, "82437FX", "System Controller (TSC)" } ,
{ 0x8086, 0x122E, "82371FB", "PCI to ISA Bridge (Triton)" } ,
{ 0x8086, 0x1230, "82371FB", "IDE Interface (Triton)" } ,
{ 0x8086, 0x1231, "", "DSVD Modem" } ,
{ 0x8086, 0x1234, "82371MX", "Mobile PCI I/O IDE Xcelerator (MPIIX)" } ,
{ 0x8086, 0x1235, "82437MX", "Mobile System Controller (MTSC)" } ,
{ 0x8086, 0x1237, "82441FX", "PCI & Memory Controller (PMC)" } ,
{ 0x8086, 0x1239, "82371FB", "IDE Interface (Triton)" } ,
{ 0x8086, 0x123C, "82380AB", "Mobile PCI-to-ISA Bridge (MISA)" } ,
{ 0x8086, 0x123D, "683053", "Programmable Interrupt Device" } ,
{ 0x8086, 0x1240, "82752", "AGP Graphics Accelerator" } ,
{ 0x8086, 0x124B, "82380FB", "82380FB(MPCI2)" } ,
{ 0x8086, 0x1250, "82439HX", "System Controller (TXC)" } ,
{ 0x8086, 0x1360, "82806AA", "Hub Interface to PCI Bridge" } ,
{ 0x8086, 0x1361, "82806AA", "Advanced Interrupt Controller" } ,
{ 0x8086, 0x1960, "80960RP", "i960RP Microprocessor" } ,
{ 0x8086, 0x1A21, "82840", "Host-Hub Interface A Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x1A23, "82840", "AGP Bridge" } ,
{ 0x8086, 0x1A24, "82840", "Hub Interface B Bridge" } ,
{ 0x8086, 0x2125, "82801AB", "AC97 Audio Controller" } ,
{ 0x8086, 0x2410, "82801AA", "LPC Interface" } ,
{ 0x8086, 0x2411, "82801AA", "IDE Controller" } ,
{ 0x8086, 0x2412, "82801AA", "USB Controller" } ,
{ 0x8086, 0x2413, "82801AA", "SMBus Controller" } ,
{ 0x8086, 0x2415, "82801AA", "AC97 Audio Controller" } ,
{ 0x8086, 0x2416, "82801AA", "AC97 Modem Controller" } ,
{ 0x8086, 0x2418, "82801AA", "Hub Interface-to-PCI Bridge" } ,
{ 0x8086, 0x2420, "82801AB", "LPC Interface" } ,
{ 0x8086, 0x2421, "82801AB", "IDE Controller" } ,
{ 0x8086, 0x2422, "82801AB", "USB Controller" } ,
{ 0x8086, 0x2423, "82801AB", "SMBus Controller" } ,
{ 0x8086, 0x2425, "82801AB", "AC97 Audio Controller" } ,
{ 0x8086, 0x2426, "82801AB", "AC97 Modem Controller" } ,
{ 0x8086, 0x2428, "82801AB", "Hub Interface-to-PCI Bridge" } ,
{ 0x8086, 0x2440, "82801BA", "LPC Interface Bridge" } ,
{ 0x8086, 0x2442, "82801BA/BAM", "USB Controller" } ,
{ 0x8086, 0x2443, "82801BA/BAM", "SMBus Controller" } ,
{ 0x8086, 0x2444, "82801BA/BAM", "USB Controller" } ,
{ 0x8086, 0x2445, "82801BA/BAM", "AC97 Audio Controller" } ,
{ 0x8086, 0x2446, "82801BA/BAM", "AC97 Modem Controller" } ,
{ 0x8086, 0x2448, "82801BAM", "Hub Interface to PCI Bridge" } ,
{ 0x8086, 0x2449, "82801BA/BAM", "LAN Controller" } ,
{ 0x8086, 0x244A, "82801BAM", "IDE Controller" } ,
{ 0x8086, 0x244B, "82801BA", "IDE Controller" } ,
{ 0x8086, 0x244C, "82801BAM", "LPC Interface Bridge" } ,
{ 0x8086, 0x244E, "82801BA", "Hub Interface to PCI Bridge" } ,
{ 0x8086, 0x2500, "82820", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x2501, "82820", "Host Bridge (MCH)" } ,
{ 0x8086, 0x250B, "82820", "Host Bridge (MCH)" } ,
{ 0x8086, 0x250F, "82820", "AGP Bridge" } ,
{ 0x8086, 0x2520, "82805AA", "Memory Translator Hub (MTH)" } ,
{ 0x8086, 0x2521, "82804AA", "Memory Repeater Hub for SDRAM (MRH-S)" } ,
{ 0x8086, 0x2530, "82850", "Host-Hub Interface Bridge" } ,
{ 0x8086, 0x2531, "82860", "Host-Hub Interface Bridge" } ,
{ 0x8086, 0x2532, "82850/82860", "AGP Bridge" } ,
{ 0x8086, 0x2533, "82860", "PCI Bridge" } ,
{ 0x8086, 0x2534, "82860", "PCI Bridge" } ,
{ 0x8086, 0x2535, "82860", "PCI Bridge" } ,
{ 0x8086, 0x2536, "82860", "PCI Bridge" } ,
{ 0x8086, 0x5200, "", "PCI to PCI Bridge" } ,
{ 0x8086, 0x5201, "", "Network Controller" } ,
{ 0x8086, 0x7000, "82371SB", "PIIX3 PCI-to-ISA Bridge (Triton II)" } ,
{ 0x8086, 0x7010, "82371SB", "PIIX3 IDE Interface (Triton II)" } ,
{ 0x8086, 0x7020, "82371SB", "PIIX3 USB Host Controller (Triton II)" } ,
{ 0x8086, 0x7030, "82437VX", "System Controller" } ,
{ 0x8086, 0x7051, "PB 642365-003", "Intel Business Video Conferencing Card" } ,
{ 0x8086, 0x7100, "82439TX", "System Controller (MTXC), part of 430TX chipset" } ,
{ 0x8086, 0x7110, "82371AB", "PIIX4 ISA Bridge" } ,
{ 0x8086, 0x7111, "82371AB", "PIIX4 IDE Controller" } ,
{ 0x8086, 0x7112, "82371AB", "PIIX4 USB Interface" } ,
{ 0x8086, 0x7113, "82371AB", "PIIX4 Power Management Controller" } ,
{ 0x8086, 0x7120, "82810", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x7121, "82810", "Graphics Device" } ,
{ 0x8086, 0x7122, "82810-DC100", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x7123, "82810-DC100", "Graphics Device" } ,
{ 0x8086, 0x7124, "82810E", "Host-Hub Interface Bridge / DRAM Ctrlr" } ,
{ 0x8086, 0x7125, "82810E", "Graphics Device" } ,
{ 0x8086, 0x7128, "82810M-DC100", "System and Graphics Controller" } ,
{ 0x8086, 0x712A, "82810M", "System and Graphics Controller" } ,
{ 0x8086, 0x7180, "82443LX/EX (PAC)", "Host/PCI bridge in 440LX/EX AGP chipset" } ,
{ 0x8086, 0x7181, "", "AGP device in 440LX/EX AGP chipset" } ,
{ 0x8086, 0x7190, "82443BX/ZX", "440BX/ZX AGPset Host Bridge" } ,
{ 0x8086, 0x7191, "82443BX/ZX", "440BX/ZX AGPset PCI-to-PCI bridge" } ,
{ 0x8086, 0x7192, "82443BX/ZX", "440BX/ZX chipset Host-to-PCI Bridge" } ,
{ 0x8086, 0x7194, "82443MX", "I/O Controller?" } ,
{ 0x8086, 0x7195, "82443MX?", "AC97 Audio Controller" } ,
{ 0x8086, 0x7198, "82443MX", "PCI to ISA Bridge" } ,
{ 0x8086, 0x7199, "82443MX", "EIDE Controller" } ,
{ 0x8086, 0x719A, "82443MX", "USB Universal Host Controller" } ,
{ 0x8086, 0x719B, "82443MX", "Power Management Controller" } ,
{ 0x8086, 0x71A0, "82443GX", "Host-to-PCI Bridge" } ,
{ 0x8086, 0x71A1, "82443GX", "PCI-to-PCI Bridge (AGP)" } ,
{ 0x8086, 0x71A2, "82443GX", "Host-to-PCI Bridge" } ,
{ 0x8086, 0x7600, "82372FB", "PCI to ISA Bridge" } ,
{ 0x8086, 0x7601, "82372FB", "EIDE Controller" } ,
{ 0x8086, 0x7602, "82372FB", "PCI to USB Universal Host Controller" } ,
{ 0x8086, 0x7603, "82372FB", "System Management Bus Controller" } ,
{ 0x8086, 0x7605, "82372FB", "IEEE1394 OpenHCI Host Controller" } ,
{ 0x8086, 0x7800, "82740", "AGP Graphics Accelerator" } ,
{ 0x8086, 0x84C4, "82450KX/GX", "450KX/GX PCI Bridge (Orion)" } ,
{ 0x8086, 0x84C5, "82453KX/GX", "450KX/GX Memory Controller (Orion)" } ,
{ 0x8086, 0x84CA, "82451NX", "450NX PCIset Memory & I/O Controller" } ,
{ 0x8086, 0x84CB, "82454NX", "450NX PCIset PCI Expander Bridge" } ,
{ 0x8086, 0xB154, "S21152BA", "PCI to PCI Bridge" } ,
{ 0x8800, 0x2008, "", "video assistant component" } ,
{ 0x8E2E, 0x3000, "Et32/Px", "Ethernet Adapter" } ,
{ 0x9004, 0x1078, "AIC-7810C", "RAID Coprocessor" } ,
{ 0x9004, 0x1160, "AIC-1160", "Fibre Channel Adapter" } ,
{ 0x9004, 0x2178, "AIC-7821", "SCSI Controller" } ,
{ 0x9004, 0x3860, "", "AIC-2930U Ultra SCSI Ctrlr" } ,
{ 0x9004, 0x3B78, "AHA-4944W/4944UW", "QuadChannel Fast-Wide/Ultra-Wide Diff. SCSI Ctrlr" } ,
{ 0x9004, 0x5075, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5078, "AIC-7850P", "Fast/Wide SCSI Controller" } ,
{ 0x9004, 0x5175, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5178, "AIC-7850", "FAST-SCSI Ctrlr" } ,
{ 0x9004, 0x5275, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5278, "AIC-7850", "Fast SCSI Ctrlr" } ,
{ 0x9004, 0x5375, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5378, "AIC-7850", "Fast SCSI Ctrlr" } ,
{ 0x9004, 0x5475, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5478, "AIC-7850", "Fast SCSI Ctrlr" } ,
{ 0x9004, 0x5575, "AVA-2930", "SCSI Ctrlr" } ,
{ 0x9004, 0x5578, "AIC-7855", "Fast SCSI Ctrlr" } ,
{ 0x9004, 0x5675, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5678, "AIC-7856", "Fast SCSI Ctrlr" } ,
{ 0x9004, 0x5775, "AIC-755x", "SCSI Ctrlr" } ,
{ 0x9004, 0x5778, "AIC-7850", "Fast SCSI Ctrlr" } ,
{ 0x9004, 0x5800, "AIC-5800", "PCI-to-1394 Ctrlr" } ,
{ 0x9004, 0x5900, "ANA-5910/30/40", "ATM155 & 25 LAN Controller" } ,
{ 0x9004, 0x5905, "ANA-5910A/30A/40A", "ATM Adpater" } ,
{ 0x9004, 0x6038, "AIC-3860", "SCSI Host Adpater" } ,
{ 0x9004, 0x6075, "AIC-7560?", "CardBus Ultra SCSI Controller" } ,
{ 0x9004, 0x6078, "AIC-7860", "SCSI Ctrlr" } ,
{ 0x9004, 0x6178, "AIC-7861", "SCSI Controller" } ,
{ 0x9004, 0x6278, "AIC-7860", "SCSI Ctrlr" } ,
{ 0x9004, 0x6378, "AIC-7860", "SCSI Ctrlr" } ,
{ 0x9004, 0x6478, "AIC-786x", "SCSI Ctrlr" } ,
{ 0x9004, 0x6578, "AIC-786x", "SCSI Ctrlr" } ,
{ 0x9004, 0x6678, "AIC-786x", "SCSI Ctrlr" } ,
{ 0x9004, 0x6778, "AIC-786x", "SCSI Ctrlr" } ,
{ 0x9004, 0x6915, "ANA620xx/69011A", "Fast Ethernet" } ,
{ 0x9004, 0x7078, "AIC-7870", "Fast and Wide SCSI Ctrlr" } ,
{ 0x9004, 0x7178, "AHA-2940/2940W", "Fast/Fast-Wide SCSI Ctrlr" } ,
{ 0x9004, 0x7278, "AHA-3940/3940W", "Multichannel Fast/Fast-Wide SCSI Ctrlr" } ,
{ 0x9004, 0x7378, "AHA-3985", "4-chan RAID SCSI Ctrlr" } ,
{ 0x9004, 0x7478, "AHA-2944", "SCSI Ctrlr" } ,
{ 0x9004, 0x7578, "AHA-3944/3944W", "Multichannel Fast/Fast-Wide Diff. SCSI Ctrlr" } ,
{ 0x9004, 0x7678, "AHA-4944W/4944UW", "QuadChannel Fast-Wide/Ultra-Wide Diff. SCSI Ctrlr" } ,
{ 0x9004, 0x7778, "AIC-787x", "SCSI Ctrlr" } ,
{ 0x9004, 0x7810, "aic 7810", "Memory control IC" } ,
{ 0x9004, 0x7815, "AIC-7515", "RAID + Memory Controller IC" } ,
{ 0x9004, 0x7850, "aic-7850", "Fast/Wide SCSI-2 Controller" } ,
{ 0x9004, 0x7855, "aha 2930", "Single SCSI channel" } ,
{ 0x9004, 0x7860, "AIC-7860", "SCSI Ctrlr" } ,
{ 0x9004, 0x7870, "aic-7870", "SCSI IC" } ,
{ 0x9004, 0x7871, "aha 2940", "SCSI" } ,
{ 0x9004, 0x7872, "aha 3940", "Multiple SCSI channels" } ,
{ 0x9004, 0x7873, "aha 3980", "Multiple SCSI channels" } ,
{ 0x9004, 0x7874, "aha 2944", "Differential SCSI" } ,
{ 0x9004, 0x7880, "aic7880", "Fast 20 SCSI" } ,
{ 0x9004, 0x7890, "AIC-7890", "SCSI controller" } ,
{ 0x9004, 0x7891, "AIC-789x", "SCSI controller" } ,
{ 0x9004, 0x7892, "AIC-789x", "SCSI controller" } ,
{ 0x9004, 0x7893, "AIC-789x", "SCSI controller" } ,
{ 0x9004, 0x7894, "AIC-789x", "SCSI controller" } ,
{ 0x9004, 0x7895, "AIC-7895", "Ultra-Wide SCSI Ctrlr on AHA-2940 AHA-394x" } ,
{ 0x9004, 0x7896, "AIC-789x", "SCSI controller" } ,
{ 0x9004, 0x7897, "AIC-789x", "SCSI controller" } ,
{ 0x9004, 0x8078, "AIC-7880", "Ultra Wide SCSI" } ,
{ 0x9004, 0x8178, "AHA-2940U/2940UW", "Ultra/Ultra-Wide SCSI Ctrlr" } ,
{ 0x9004, 0x8278, "AHA-3940Uxx", "AHA-3940U/3940UW/3940UWD SCSI Ctrlr" } ,
{ 0x9004, 0x8378, "AIC-7883U", "SCSI Controller" } ,
{ 0x9004, 0x8478, "AHA-2944UW", "Ultra-Wide Diff. SCSI Ctrlr" } ,
{ 0x9004, 0x8578, "AHA-3944U/3944UWD", "Fast-Wide/Ultra-Wide Diff. SCSI Ctrlr" } ,
{ 0x9004, 0x8678, "AHA-4944UW", "QuadChannel Ultra-Wide Diff. SCSI Ctrlr" } ,
{ 0x9004, 0x8778, "AIC-788x", "Ultra-Wide SCSI Ctrlr" } ,
{ 0x9004, 0x8878, "AIC-7888?", "Ultra Wide SCSI Controller" } ,
{ 0x9004, 0x8B78, "ABA-1030", "" } ,
{ 0x9004, 0xEC78, "AHA-4944W/4944UW", "QuadChannel Fast-Wide/Ultra-Wide Diff. SCSI Ctrlr" } ,
{ 0x9005, 0x0010, "", "AHA-2940U2W/U2B,2950U2W Ultra2 SCSI" } ,
{ 0x9005, 0x0011, "", "AHA-2930U2 Ultra2 SCSI Host Adapter" } ,
{ 0x9005, 0x0013, "AIC-7890/1", "SCSI Controller" } ,
{ 0x9005, 0x001f, "AIC-7890/1", "Ultra2-Wide SCSI controller" } ,
{ 0x9005, 0x0020, "AIC-789x", "SCSI Controller" } ,
{ 0x9005, 0x002F, "AIC-789x", "SCSI Controller" } ,
{ 0x9005, 0x0030, "AIC-789x", "SCSI Controller" } ,
{ 0x9005, 0x003F, "AIC-789x", "SCSI Controller" } ,
{ 0x9005, 0x0050, "", "AHA-3940U2x/3950U2x Ultra2 SCSI Adapter" } ,
{ 0x9005, 0x0051, "", "AHA-3950U2x Ultra2 SCSI Adapter" } ,
{ 0x9005, 0x0053, "AIC-7896", "SCSI Controller" } ,
{ 0x9005, 0x005F, "AIC-7896/7", "Ultra2 SCSI Controller" } ,
{ 0x9005, 0x0080, "AIC-7892A", "Ultra160/m PCI SCSI Controller" } ,
{ 0x9005, 0x0081, "AIC-7892B", "Ultra160 SCSI Controller" } ,
{ 0x9005, 0x0083, "AIC-7892D", "Ultra160 SCSI Controller" } ,
{ 0x9005, 0x008F, "AIC-7892", "Ultra160 SCSI Controller" } ,
{ 0x9005, 0x00C0, "AIC-7899A", "Ultra160 SCSI Controller" } ,
{ 0x9005, 0x00C1, "AIC-7899B", "Ultra160 SCSI Controller" } ,
{ 0x9005, 0x00C3, "AIC-7899D", "Ultra160 SCSI Controller" } ,
{ 0x9005, 0x00CF, "AIC-7899", "Ultra160 SCSI Controller" } ,
{ 0x907F, 0x2015, "IDE-2015PL", "EIDE Ctrlr" } ,
{ 0x9412, 0x6565, "HT6565", "IDE Controller?" } ,
{ 0xD4D4, 0x0601, "", "" } ,
{ 0xE000, 0xE000, "W89C940", "Ethernet Adapter" } ,
{ 0xE159, 0x001, "Tiger 300/320", "PCI interface" } ,
{ 0xE159, 0x0600, "Tiger 600", "PCI-to-PCI Bridge" } ,
{ 0xEDD8, 0xA091, "ARK1000PV", "Stingray GUI Accelerator" } ,
{ 0xEDD8, 0xA099, "ARK2000PV", "Stingray GUI Accelerator" } ,
{ 0xEDD8, 0xA0A1, "ARK2000MT", "Stingray 64" } ,
{ 0xEDD8, 0xA0A9, "ARK2000MI", "Quadro645" } ,
{ 0xFEDA, 0xa0fa, "BCM4210", "OEM Chip for 10meg/s over phone line" } ,
{ 0xFFFE, 0x0710, "", "Virtual SVGA" } ,
{ 0xFFFF, 0x0140, "BAD !", "BAD Buslogic BT-946C SCSI?" } ,
} ;
 
// Use this value for loop control during searching:
#define PCI_DEVTABLE_LEN (sizeof(PciDevTable)/sizeof(PCI_DEVTABLE))
 
 
typedef struct _PCI_CLASSCODETABLE
{
unsigned char BaseClass ;
unsigned char SubClass ;
unsigned char ProgIf ;
char * BaseDesc ;
char * SubDesc ;
char * ProgDesc ;
} PCI_CLASSCODETABLE, *PPCI_CLASSCODETABLE ;
 
PCI_CLASSCODETABLE PciClassCodeTable [] =
{
{ 0x00, 0x00, 0x00, "Pre-2.0 PCI Specification Device", "Non-VGA","" } ,
{ 0x00, 0x01, 0x00, "Pre-2.0 PCI Specification Device", "VGA Compatible", "" } ,
 
{ 0x01, 0x00, 0x00, "Mass Storage Controller", "SCSI", "" } ,
{ 0x01, 0x01, 0x00, "Mass Storage Controller", "IDE", "" } ,
{ 0x01, 0x02, 0x00, "Mass Storage Controller", "Floppy", "" } ,
{ 0x01, 0x03, 0x00, "Mass Storage Controller", "IPI", "" } ,
{ 0x01, 0x04, 0x00, "Mass Storage Controller", "RAID", "" } ,
{ 0x01, 0x80, 0x00, "Mass Storage Controller", "Other", "" } ,
 
{ 0x02, 0x00, 0x00, "Network Controller", "Ethernet", "" } ,
{ 0x02, 0x01, 0x00, "Network Controller", "Token Ring", "" } ,
{ 0x02, 0x02, 0x00, "Network Controller", "FDDI", "" } ,
{ 0x02, 0x03, 0x00, "Network Controller", "ATM", "" } ,
{ 0x02, 0x80, 0x00, "Network Controller", "Other", "" } ,
 
{ 0x03, 0x00, 0x00, "Display Controller", "PC Compatible", "VGA" } ,
{ 0x03, 0x00, 0x01, "Display Controller", "PC Compatible", "8514" } ,
{ 0x03, 0x01, 0x00, "Display Controller", "XGA", "" } ,
{ 0x03, 0x80, 0x00, "Display Controller", "Other", "" } ,
 
{ 0x04, 0x00, 0x00, "Multimedia Device", "Video", "" } ,
{ 0x04, 0x01, 0x00, "Multimedia Device", "Audio", "" } ,
{ 0x04, 0x80, 0x00, "Multimedia Device", "Other", "" } ,
 
{ 0x05, 0x00, 0x00, "Memory Controller", "RAM", "" } ,
{ 0x05, 0x01, 0x00, "Memory Controller", "Flash", "" } ,
{ 0x05, 0x80, 0x00, "Memory Controller", "Other", "" } ,
 
{ 0x06, 0x00, 0x00, "Bridge Device", "Host/PCI", "" } ,
{ 0x06, 0x01, 0x00, "Bridge Device", "PCI/ISA", "" } ,
{ 0x06, 0x02, 0x00, "Bridge Device", "PCI/EISA", "" } ,
{ 0x06, 0x03, 0x00, "Bridge Device", "PCI/Micro Channel", "" } ,
{ 0x06, 0x04, 0x00, "Bridge Device", "PCI/PCI", "" } ,
{ 0x06, 0x05, 0x00, "Bridge Device", "PCI/PCMCIA", "" } ,
{ 0x06, 0x06, 0x00, "Bridge Device", "PCI/NuBus", "" } ,
{ 0x06, 0x07, 0x00, "Bridge Device", "PCI/CardBus", "" } ,
{ 0x06, 0x80, 0x00, "Bridge Device", "Other", "" } ,
 
{ 0x07, 0x00, 0x00, "Simple Communications Controller", "Serial", "Generic XT Compatible" } ,
{ 0x07, 0x00, 0x01, "Simple Communications Controller", "Serial", "16450 Compatible" } ,
{ 0x07, 0x00, 0x02, "Simple Communications Controller", "Serial", "16550 Compatible" } ,
{ 0x07, 0x01, 0x00, "Simple Communications Controller", "Parallel", "Standard" } ,
{ 0x07, 0x01, 0x00, "Simple Communications Controller", "Parallel", "Bidirectional" } ,
{ 0x07, 0x01, 0x01, "Simple Communications Controller", "Parallel", "ECP 1.X Compliant" } ,
{ 0x07, 0x80, 0x02, "Simple Communications Controller", "Other", "" } ,
 
{ 0x08, 0x00, 0x00, "Base Systems Peripheral", "PIC (Programmable Interrupt Controller)", "Generic 8259" } ,
{ 0x08, 0x00, 0x01, "Base Systems Peripheral", "PIC (Programmable Interrupt Controller)", "ISA" } ,
{ 0x08, 0x00, 0x02, "Base Systems Peripheral", "PIC (Programmable Interrupt Controller)", "PCI" } ,
{ 0x08, 0x01, 0x00, "Base Systems Peripheral", "DMA (Direct Memory Access)", "Generic 8259" } ,
{ 0x08, 0x01, 0x01, "Base Systems Peripheral", "DMA (Direct Memory Access)", "ISA" } ,
{ 0x08, 0x01, 0x02, "Base Systems Peripheral", "DMA (Direct Memory Access)", "EISA" } ,
{ 0x08, 0x02, 0x00, "Base Systems Peripheral", "System Timer", "Generic 8259" } ,
{ 0x08, 0x02, 0x01, "Base Systems Peripheral", "System Timer", "ISA" } ,
{ 0x08, 0x02, 0x02, "Base Systems Peripheral", "System Timer", "EISA" } ,
{ 0x08, 0x03, 0x00, "Base Systems Peripheral", "RTC (Real Time Clock)", "Generic" } ,
{ 0x08, 0x03, 0x01, "Base Systems Peripheral", "RTC (Real Time Clock)", "ISA" } ,
{ 0x08, 0x80, 0x00, "Base Systems Peripheral", "Other", "" } ,
 
{ 0x09, 0x00, 0x00, "Input Device", "Keyboard", "" } ,
{ 0x09, 0x01, 0x00, "Input Device", "Digitizer (Pen)", "" } ,
{ 0x09, 0x02, 0x00, "Input Device", "Mouse", "" } ,
{ 0x09, 0x80, 0x00, "Input Device", "Other", "" } ,
 
{ 0x0A, 0x00, 0x00, "Docking Station", "Generic", "" } ,
{ 0x0A, 0x80, 0x00, "Docking Station", "Other", "" } ,
 
{ 0x0B, 0x00, 0x00, "Processor", "i386", "" } ,
{ 0x0B, 0x01, 0x00, "Processor", "i486", "" } ,
{ 0x0B, 0x02, 0x00, "Processor", "Pentium", "" } ,
{ 0x0B, 0x10, 0x00, "Processor", "Alpha", "" } ,
{ 0x0B, 0x20, 0x00, "Processor", "Power PC", "" } ,
{ 0x0B, 0x80, 0x00, "Processor", "Co-processor", "" } ,
 
{ 0x0C, 0x00, 0x00, "Serial Bus Controller", "Firewire (IEEE 1394)", "" } ,
{ 0x0C, 0x01, 0x00, "Serial Bus Controller", "ACCESS.bus", "" } ,
{ 0x0C, 0x02, 0x00, "Serial Bus Controller", "SSA (Serial Storage Archetecture)", "" } ,
{ 0x0C, 0x03, 0x00, "Serial Bus Controller", "USB (Universal Serial Bus)", "" } ,
{ 0x0C, 0x04, 0x00, "Serial Bus Controller", "Fibre Channel", "" } ,
 
{ 0xFF, 0x00, 0x00, "Unknown", "Device Does Not Fit In Class Codes", "UDF" } ,
} ;
 
// Use this value for loop control during searching:
#define PCI_CLASSCODETABLE_LEN (sizeof(PciClassCodeTable)/sizeof(PCI_CLASSCODETABLE))
 
 
char * PciCommandFlags [] =
{
"I/O Access",
"Memory Access",
"Bus Mastering",
"Special Cycles",
"Memory Write & Invalidate",
"Palette Snoop",
"Parity Errors",
"Wait Cycles",
"System Errors",
"Fast Back-To-Back",
"Reserved 10",
"Reserved 11",
"Reserved 12",
"Reserved 13",
"Reserved 14",
"Reserved 15"
} ;
 
// Use this value for loop control during searching:
#define PCI_COMMANDFLAGS_LEN (sizeof(PciCommandFlags)/sizeof(char *))
 
 
char * PciStatusFlags [] =
{
"Reserved 0",
"Reserved 1",
"Reserved 2",
"Reserved 3",
"Reserved 4",
"66 MHz Capable",
"User-Defined Features",
"Fast Back-To-Back",
"Data Parity Reported",
"",
"",
"Signalled Target Abort",
"Received Target Abort",
"Received Master Abort",
"Signalled System Error",
"Detected Parity Error"
} ;
 
// Use this value for loop control during searching:
#define PCI_STATUSFLAGS_LEN (sizeof(PciStatusFlags)/sizeof(char *))
 
 
char * PciDevSelFlags [] =
{
"Fast Devsel Speed", // TypeC
"Medium Devsel Speed", // TypeB
"Slow Devsel Speed", // TypeA
"Reserved 9&10"
} ;
 
// Use this value for loop control during searching:
#define PCI_DEVSELFLAGS_LEN (sizeof(PciDevSelFlags)/sizeof(char *))
 
/v2_0/tests/pci1.c
0,0 → 1,454
//==========================================================================
//
// pci1.c
//
// Test PCI library API
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors: jskov
// Date: 1999-03-17
// Description: Simple test that:
// Checks API (compile time)
// Prints out information about found PCI devices.
// Allocates resources to devices (but does not enable
// them).
//####DESCRIPTIONEND####
 
#include <pkgconf/system.h>
 
#include <cyg/infra/diag.h> // diag_printf
#include <cyg/infra/testcase.h> // test macros
#include <cyg/infra/cyg_ass.h> // assertion macros
 
// Package requirements
#if defined(CYGPKG_IO_PCI) && defined(CYGPKG_KERNEL) && defined(CYGPKG_ISOINFRA)
 
#include <pkgconf/kernel.h>
#include <pkgconf/io_pci.h>
#include <cyg/io/pci.h>
#include <cyg/hal/hal_arch.h>
#include <string.h>
 
// Package option requirements
#if defined(CYGFUN_KERNEL_API_C) && defined(CYG_PCI_PRESENT)
 
#include <cyg/kernel/kapi.h>
 
// If the target has limited memory resources, undef the below to
// avoid inclusion of the big PCI code tables.
//
// The header file is created from http://www.yourvote.com/pci
// maintained by Jim Boemler (jboemler@halcyon.com).
//
// If you have PCI devices not listed in this list, please consider
// registering the codes in the database.
#define USE_PCI_CODE_LIST
 
#ifdef USE_PCI_CODE_LIST
#include "pcihdr.h"
#endif
 
// You may want to use this code to do some simple testing of the
// devices on the PCI bus. By enabling the below definition, the
// devices will get PCI IO and MEM access activated after configuration
// so you can play with IO registers and display/set contents of MEM.
#define nENABLE_PCI_DEVICES
 
unsigned char stack[CYGNUM_HAL_STACK_SIZE_TYPICAL];
cyg_thread thread_data;
cyg_handle_t thread_handle;
 
void pci_scan( void );
 
cyg_bool
pci_api_test(int dummy)
{
cyg_pci_device dev_info;
cyg_pci_device_id devid = CYG_PCI_NULL_DEVID;
cyg_bool ret;
CYG_PCI_ADDRESS64 mem_base = 0;
CYG_PCI_ADDRESS32 io_base = 0;
CYG_ADDRWORD vec;
cyg_uint8 var_uint8;
cyg_uint16 var_uint16;
cyg_uint32 var_uint32;
 
 
// Always return...
if (dummy)
return true;
 
CYG_TEST_FAIL_FINISH("Not reached");
 
// PCI library API
cyg_pci_init();
 
cyg_pci_get_device_info (devid, &dev_info);
cyg_pci_set_device_info (devid, &dev_info);
 
ret = cyg_pci_find_device(0, 0, &devid);
ret |= cyg_pci_find_class(0, &devid);
ret |= cyg_pci_find_next(devid, &devid);
 
ret |= cyg_pci_configure_device(&dev_info);
 
cyg_pci_set_memory_base(mem_base);
cyg_pci_set_io_base(io_base);
 
ret |= cyg_pci_allocate_memory(&dev_info, 0, &mem_base);
ret |= cyg_pci_allocate_io(&dev_info, 0, &io_base);
 
ret |= cyg_pci_translate_interrupt(&dev_info, &vec);
 
cyg_pci_read_config_uint8(devid, 0, &var_uint8);
cyg_pci_read_config_uint16(devid, 0, &var_uint16);
cyg_pci_read_config_uint32(devid, 0, &var_uint32);
 
cyg_pci_write_config_uint8(devid, 0, var_uint8);
cyg_pci_write_config_uint16(devid, 0, var_uint16);
cyg_pci_write_config_uint32(devid, 0, var_uint32);
 
return ret;
}
 
void
pci_test( void )
{
cyg_pci_device dev_info;
cyg_pci_device_id devid;
CYG_ADDRWORD irq;
int i;
#ifdef USE_PCI_CODE_LIST
cyg_bool no_match = false;
cyg_uint16 vendor, device;
cyg_uint8 bc, sc, pi;
PCI_VENTABLE* vtbl;
PCI_DEVTABLE* dtbl;
PCI_CLASSCODETABLE* ctbl;
#endif
 
pci_api_test(1);
 
cyg_pci_init();
 
diag_printf( "========== Finding and configuring devices\n" );
 
if (cyg_pci_find_next(CYG_PCI_NULL_DEVID, &devid)) {
do {
// Get device info
cyg_pci_get_device_info(devid, &dev_info);
 
 
// Print stuff
diag_printf("Found device on bus %d, devfn 0x%02x:\n",
CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid));
 
if (dev_info.command & CYG_PCI_CFG_COMMAND_ACTIVE) {
diag_printf(" Note that board is active. Probed"
" sizes and CPU addresses invalid!\n");
}
 
// Configure the device
if (cyg_pci_configure_device(&dev_info)) {
diag_printf(" Device configuration succeeded\n");
#ifdef ENABLE_PCI_DEVICES
{
cyg_uint16 cmd;
 
// Don't use cyg_pci_set_device_info since it clears
// some of the fields we want to print out below.
cyg_pci_read_config_uint16(dev_info.devid,
CYG_PCI_CFG_COMMAND, &cmd);
cmd |= CYG_PCI_CFG_COMMAND_IO|CYG_PCI_CFG_COMMAND_MEMORY;
cyg_pci_write_config_uint16(dev_info.devid,
CYG_PCI_CFG_COMMAND, cmd);
}
diag_printf(" **** Device IO and MEM access enabled\n");
#endif
} else {
diag_printf(" Device configuration failed");
if (dev_info.command & CYG_PCI_CFG_COMMAND_ACTIVE)
diag_printf(" - device already enabled\n");
else
diag_printf(" - resource problem\n");
}
 
diag_printf(" Vendor 0x%04x", dev_info.vendor);
#ifdef USE_PCI_CODE_LIST
vendor = dev_info.vendor;
vtbl = PciVenTable;
for (i = 0; i < PCI_VENTABLE_LEN; i++, vtbl++)
if (vendor == vtbl->VenId)
break;
 
if (i < PCI_VENTABLE_LEN) {
diag_printf(" [%s][%s]", vtbl->VenShort, vtbl->VenFull);
} else {
diag_printf(" [UNKNOWN]");
no_match = true;
}
#endif
diag_printf("\n Device 0x%04x", dev_info.device);
#ifdef USE_PCI_CODE_LIST
device = dev_info.device;
dtbl = PciDevTable;
for (i = 0; i < PCI_DEVTABLE_LEN; i++, dtbl++)
if (vendor == dtbl->VenId && device == dtbl->DevId)
break;
 
if (i < PCI_DEVTABLE_LEN) {
diag_printf(" [%s][%s]", dtbl->Chip, dtbl->ChipDesc);
} else {
diag_printf(" [UNKNOWN]");
no_match = true;
}
#endif
 
diag_printf("\n Command 0x%04x, Status 0x%04x\n",
dev_info.command, dev_info.status);
 
diag_printf(" Class/Rev 0x%08x", dev_info.class_rev);
#ifdef USE_PCI_CODE_LIST
bc = (dev_info.class_rev >> 24) & 0xff;
sc = (dev_info.class_rev >> 16) & 0xff;
pi = (dev_info.class_rev >> 8) & 0xff;
ctbl = PciClassCodeTable;
for (i = 0; i < PCI_CLASSCODETABLE_LEN; i++, ctbl++)
if (bc == ctbl->BaseClass
&& sc == ctbl->SubClass
&& pi == ctbl->ProgIf)
break;
 
if (i < PCI_CLASSCODETABLE_LEN) {
diag_printf(" [%s][%s][%s]", ctbl->BaseDesc,
ctbl->SubDesc, ctbl->ProgDesc);
} else {
diag_printf(" [UNKNOWN]");
no_match = true;
}
#endif
diag_printf("\n Header 0x%02x\n", dev_info.header_type);
 
diag_printf(" SubVendor 0x%04x, Sub ID 0x%04x\n",
dev_info.header.normal.sub_vendor,
dev_info.header.normal.sub_id);
 
 
for(i = 0; i < CYG_PCI_MAX_BAR; i++) {
diag_printf(" BAR[%d] 0x%08x /", i, dev_info.base_address[i]);
diag_printf(" probed size 0x%08x / CPU addr 0x%08x\n",
dev_info.base_size[i], dev_info.base_map[i]);
}
if (cyg_pci_translate_interrupt(&dev_info, &irq))
diag_printf(" Wired to HAL vector %d\n", irq);
else
diag_printf(" Does not generate interrupts.\n");
 
} while (cyg_pci_find_next(devid, &devid));
 
 
#ifdef USE_PCI_CODE_LIST
diag_printf("\nStrings in [] are from the PCI Code List at http://www.yourvote.com/pci\n");
if (no_match) {
diag_printf("It seems that some of the device information has not been registered in\n");
diag_printf("the PCI Code List. Please consider improving the database by registering\n");
diag_printf("the [UNKNOWN] information for your devices. Thanks.\n");
}
#endif
} else {
diag_printf("No PCI devices found.");
}
 
pci_scan();
 
CYG_TEST_PASS_FINISH("pci1 test OK");
}
 
void
pci_scan( void )
{
cyg_pci_device dev_info;
cyg_pci_device_id devid;
CYG_ADDRWORD irq;
int i;
#ifdef USE_PCI_CODE_LIST
cyg_bool no_match = false;
cyg_uint16 vendor, device;
cyg_uint8 bc, sc, pi;
PCI_VENTABLE* vtbl;
PCI_DEVTABLE* dtbl;
PCI_CLASSCODETABLE* ctbl;
#endif
 
diag_printf( "========== Scanning initialized devices\n" );
 
if (cyg_pci_find_next(CYG_PCI_NULL_DEVID, &devid)) {
do {
// Since we are NOT about to configure the device, set the
// devinfo record so we don't mistake garbage for data.
memset( &dev_info, 0xAAAAAAAAu, sizeof( dev_info ) );
 
// Get device info
cyg_pci_get_device_info(devid, &dev_info);
 
// Print stuff
diag_printf("Found device on bus %d, devfn 0x%02x:\n",
CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid));
 
if (dev_info.command & CYG_PCI_CFG_COMMAND_ACTIVE) {
diag_printf(" Note that board is active. Probed"
" sizes and CPU addresses invalid!\n");
}
 
diag_printf(" Vendor 0x%04x", dev_info.vendor);
#ifdef USE_PCI_CODE_LIST
vendor = dev_info.vendor;
vtbl = PciVenTable;
for (i = 0; i < PCI_VENTABLE_LEN; i++, vtbl++)
if (vendor == vtbl->VenId)
break;
 
if (i < PCI_VENTABLE_LEN) {
diag_printf(" [%s][%s]", vtbl->VenShort, vtbl->VenFull);
} else {
diag_printf(" [UNKNOWN]");
no_match = true;
}
#endif
diag_printf("\n Device 0x%04x", dev_info.device);
#ifdef USE_PCI_CODE_LIST
device = dev_info.device;
dtbl = PciDevTable;
for (i = 0; i < PCI_DEVTABLE_LEN; i++, dtbl++)
if (vendor == dtbl->VenId && device == dtbl->DevId)
break;
 
if (i < PCI_DEVTABLE_LEN) {
diag_printf(" [%s][%s]", dtbl->Chip, dtbl->ChipDesc);
} else {
diag_printf(" [UNKNOWN]");
no_match = true;
}
#endif
 
diag_printf("\n Command 0x%04x, Status 0x%04x\n",
dev_info.command, dev_info.status);
 
diag_printf(" Class/Rev 0x%08x", dev_info.class_rev);
#ifdef USE_PCI_CODE_LIST
bc = (dev_info.class_rev >> 24) & 0xff;
sc = (dev_info.class_rev >> 16) & 0xff;
pi = (dev_info.class_rev >> 8) & 0xff;
ctbl = PciClassCodeTable;
for (i = 0; i < PCI_CLASSCODETABLE_LEN; i++, ctbl++)
if (bc == ctbl->BaseClass
&& sc == ctbl->SubClass
&& pi == ctbl->ProgIf)
break;
 
if (i < PCI_CLASSCODETABLE_LEN) {
diag_printf(" [%s][%s][%s]", ctbl->BaseDesc,
ctbl->SubDesc, ctbl->ProgDesc);
} else {
diag_printf(" [UNKNOWN]");
no_match = true;
}
#endif
diag_printf("\n Header 0x%02x\n", dev_info.header_type);
 
diag_printf(" SubVendor 0x%04x, Sub ID 0x%04x\n",
dev_info.header.normal.sub_vendor,
dev_info.header.normal.sub_id);
 
 
for(i = 0; i < CYG_PCI_MAX_BAR; i++) {
diag_printf(" BAR[%d] 0x%08x /", i, dev_info.base_address[i]);
diag_printf(" probed size 0x%08x / CPU addr 0x%08x\n",
dev_info.base_size[i], dev_info.base_map[i]);
}
if (cyg_pci_translate_interrupt(&dev_info, &irq))
diag_printf(" Wired to HAL vector %d\n", irq);
else
diag_printf(" Does not generate interrupts.\n");
 
} while (cyg_pci_find_next(devid, &devid));
} else {
diag_printf("No PCI devices found.");
}
}
 
void
cyg_start(void)
{
CYG_TEST_INIT();
cyg_thread_create(10, // Priority - just a number
(cyg_thread_entry_t*)pci_test, // entry
0, //
"pci_thread", // Name
&stack[0], // Stack
CYGNUM_HAL_STACK_SIZE_TYPICAL, // Size
&thread_handle, // Handle
&thread_data // Thread data structure
);
cyg_thread_resume(thread_handle);
cyg_scheduler_start();
}
 
#else // CYGFUN_KERNEL_API_C && CYG_PCI_PRESENT
#define N_A_MSG "Needs kernel C API & PCI platform support"
#endif
 
#else // CYGPKG_IO_PCI && CYGPKG_KERNEL
#define N_A_MSG "Needs IO/PCI, ISOINFRA, and Kernel"
#endif
 
#ifdef N_A_MSG
void
cyg_start( void )
{
CYG_TEST_INIT();
CYG_TEST_NA( N_A_MSG);
}
#endif // N_A_MSG
 
// EOF pci1.c
/v2_0/tests/pci2.c
0,0 → 1,230
//==========================================================================
//
// pci2.c
//
// Test PCI library's resource allocation.
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors: jskov
// Date: 1999-03-17
// Description: Simple test that prints out information about found
// PCI devices. Entirely passive - no configuration happens.
//
//####DESCRIPTIONEND####
 
#include <pkgconf/system.h>
 
#include <cyg/infra/diag.h> // diag_printf
#include <cyg/infra/testcase.h> // test macros
#include <cyg/infra/cyg_ass.h> // assertion macros
 
// Package requirements
#if defined(CYGPKG_IO_PCI) && defined(CYGPKG_KERNEL)
 
#include <pkgconf/kernel.h>
#include <pkgconf/io_pci.h>
#include <cyg/io/pci.h>
#include <cyg/hal/hal_arch.h>
 
// Package option requirements
#if defined(CYGFUN_KERNEL_API_C) && defined(CYG_PCI_PRESENT)
 
#include <cyg/kernel/kapi.h>
 
unsigned char stack[CYGNUM_HAL_STACK_SIZE_TYPICAL];
cyg_thread thread_data;
cyg_handle_t thread_handle;
 
void
pci_test( void )
{
cyg_pci_device dev_info;
CYG_PCI_ADDRESS64 mem_base;
CYG_PCI_ADDRESS64 mem_assigned_addr;
CYG_PCI_ADDRESS32 io_base;
CYG_PCI_ADDRESS32 io_assigned_addr;
 
// Verify that space type requests are checked.
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO;
CYG_TEST_CHECK(!cyg_pci_allocate_memory_priv(&dev_info, 0, &mem_base,
&mem_assigned_addr),
"cyg_pci_allocate_memory_priv accepted IO request");
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_MEM;
CYG_TEST_CHECK(!cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
&io_assigned_addr),
"cyg_pci_allocate_io_priv accepted MEM request");
 
// Check allocation and alignment of IO space
io_base = 0x0000;
// Size 4
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xfffffffc;
CYG_TEST_CHECK(cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
&io_assigned_addr),
"cyg_pci_allocate_io_priv(4) failed");
CYG_TEST_CHECK(0x0004 == io_base,
"cyg_pci_allocate_io_priv(4) size failed");
CYG_TEST_CHECK(0x0000 == io_assigned_addr,
"cyg_pci_allocate_io_priv(4) align failed");
// Size 8 (alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xfffffff8;
CYG_TEST_CHECK(cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
&io_assigned_addr),
"cyg_pci_allocate_io_priv(8) failed");
CYG_TEST_CHECK(0x0010 == io_base,
"cyg_pci_allocate_io_priv(8) size failed");
CYG_TEST_CHECK(0x0008 == io_assigned_addr,
"cyg_pci_allocate_io_priv(8) align failed");
// Size 16 (no alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xfffffff0;
CYG_TEST_CHECK(cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
&io_assigned_addr),
"cyg_pci_allocate_io_priv(16) failed");
CYG_TEST_CHECK(0x0020 == io_base,
"cyg_pci_allocate_io_priv(16) size failed");
CYG_TEST_CHECK(0x0010 == io_assigned_addr,
"cyg_pci_allocate_io_priv(16) align failed");
// Size 64 (alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xffffffc0;
CYG_TEST_CHECK(cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
&io_assigned_addr),
"cyg_pci_allocate_io_priv(64) failed");
CYG_TEST_CHECK(0x0080 == io_base,
"cyg_pci_allocate_io_priv(64) size failed");
CYG_TEST_CHECK(0x0040 == io_assigned_addr,
"cyg_pci_allocate_io_priv(64) align failed");
// Size 256 (alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xffffff00;
CYG_TEST_CHECK(cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
&io_assigned_addr),
"cyg_pci_allocate_io_priv(256) failed");
CYG_TEST_CHECK(0x0200 == io_base,
"cyg_pci_allocate_io_priv(256) size failed");
CYG_TEST_CHECK(0x0100 == io_assigned_addr,
"cyg_pci_allocate_io_priv(256) align failed");
 
// Check allocation and alignment of MEM space
mem_base = 0x00000000;
// Size 16 (no alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_MEM | 0xfffffff0;
CYG_TEST_CHECK(cyg_pci_allocate_memory_priv(&dev_info, 0, &mem_base,
&mem_assigned_addr),
"cyg_pci_allocate_memory_priv(16) failed");
CYG_TEST_CHECK(0x00000010 == mem_base,
"cyg_pci_allocate_memory_priv(16) size failed");
CYG_TEST_CHECK(0x00000000 == mem_assigned_addr,
"cyg_pci_allocate_memory_priv(16) align failed");
// Size 64 (alignment required - <1MB)
dev_info.base_size[0] = (CYG_PCI_CFG_BAR_SPACE_MEM
| CYG_PRI_CFG_BAR_MEM_TYPE_1M
| 0xffffffc0);
CYG_TEST_CHECK(cyg_pci_allocate_memory_priv(&dev_info, 0, &mem_base,
&mem_assigned_addr),
"cyg_pci_allocate_memory_priv(64/<1MB) failed");
CYG_TEST_CHECK(0x00000080 == mem_base,
"cyg_pci_allocate_memory_priv(64/<1MB) size failed");
CYG_TEST_CHECK(0x00000040 == mem_assigned_addr,
"cyg_pci_allocate_memory_priv(64/<1MB) align failed");
// Size 1MB (alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_MEM | 0xfff00000;
CYG_TEST_CHECK(cyg_pci_allocate_memory_priv(&dev_info, 0, &mem_base,
&mem_assigned_addr),
"cyg_pci_allocate_memory_priv(1MB) failed");
CYG_TEST_CHECK(0x00200000 == mem_base,
"cyg_pci_allocate_memory_priv(1MB) size failed");
CYG_TEST_CHECK(0x00100000 == mem_assigned_addr,
"cyg_pci_allocate_memory_priv(1MB) align failed");
// Size 16MB (alignment required)
dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_MEM | 0xff000000;
CYG_TEST_CHECK(cyg_pci_allocate_memory_priv(&dev_info, 0, &mem_base,
&mem_assigned_addr),
"cyg_pci_allocate_memory_priv(16MB) failed");
CYG_TEST_CHECK(0x02000000 == mem_base,
"cyg_pci_allocate_memory_priv(16MB) size failed");
CYG_TEST_CHECK(0x01000000 == mem_assigned_addr,
"cyg_pci_allocate_memory_priv(16MB) align failed");
// Size 32 (no alignment required - <1MB - FAILS!)
// Note: When more clever allocation has been made for the bottom
// 1MB of PCI memory space, this test needs to be made more elaborate.
dev_info.base_size[0] = (CYG_PCI_CFG_BAR_SPACE_MEM
| CYG_PRI_CFG_BAR_MEM_TYPE_1M
| 0xffffffe0);
CYG_TEST_CHECK(!cyg_pci_allocate_memory_priv(&dev_info, 0, &mem_base,
&mem_assigned_addr),
"cyg_pci_allocate_memory_priv(32/<1MB) unexpectedly worked!");
// TBD: Check 64bit MEM allocation.
 
CYG_TEST_PASS_FINISH("pci2 test OK");
}
 
void
cyg_start(void)
{
CYG_TEST_INIT();
cyg_thread_create(10, // Priority - just a number
(cyg_thread_entry_t*)pci_test, // entry
0, //
"pci_thread", // Name
&stack[0], // Stack
CYGNUM_HAL_STACK_SIZE_TYPICAL, // Size
&thread_handle, // Handle
&thread_data // Thread data structure
);
cyg_thread_resume(thread_handle);
cyg_scheduler_start();
}
 
#else // CYGFUN_KERNEL_API_C && CYG_PCI_PRESENT
#define N_A_MSG "Needs kernel C API & PCI platform support"
#endif
 
#else // CYGPKG_IO_PCI && CYGPKG_KERNEL
#define N_A_MSG "Needs IO/PCI and Kernel"
#endif
 
#ifdef N_A_MSG
void
cyg_start( void )
{
CYG_TEST_INIT();
CYG_TEST_NA( N_A_MSG);
}
#endif // N_A_MSG
 
// EOF pci1.c
/v2_0/include/pci_hw.h
0,0 → 1,119
#ifndef CYGONCE_PCI_HW_H
#define CYGONCE_PCI_HW_H
//=============================================================================
//
// pci_hw.h
//
// PCI hardware library
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov, from design by nickg
// Contributors: jskov
// Date: 1999-08-09
// Purpose: PCI hardware configuration access
// Usage:
// #include <cyg/io/pci_hw.h>
// Description:
// This API is used by the PCI library to access the PCI bus
// configuration space. Although this should not normally be
// necessary, this API may also be used by device driver or
// application code to perform PCI bus operations not supported
// by the PCI library.
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
// Rely on hal_io.h to include plf_io.h if it exists for the selected target.
#include <cyg/hal/hal_io.h> // HAL_PCI_ macros
 
#ifdef HAL_PCI_INIT
 
// This varible selects whether the PCI library gets built (requires
// HAL_PCI_INIT to be defined by the platform io header file)
#define CYG_PCI_PRESENT
 
#include <cyg/infra/cyg_type.h>
 
#include <cyg/io/pci_cfg.h>
 
 
// This is the lowest level where devfns are used.
#define CYG_PCI_DEV_MAKE_DEVFN(__dev, __fn) (((__dev)<<3)|(__fn))
#define CYG_PCI_DEV_GET_DEV(__devfn) ((__devfn>>3)&0x1f)
#define CYG_PCI_DEV_GET_FN(__devfn) (__devfn&0x7)
 
// Some buggy PCI chips force us to ignore certain devices so that
// they may be handled specially.
#ifdef HAL_PCI_IGNORE_DEVICE
#define CYG_PCI_IGNORE_DEVICE(__bus, __dev, __fn) \
HAL_PCI_IGNORE_DEVICE((__bus), (__dev), (__fn))
#else
#define CYG_PCI_IGNORE_DEVICE(__bus, __dev, __fn) 0
#endif
 
 
// Init
externC void cyg_pcihw_init(void);
 
// Read functions
externC void cyg_pcihw_read_config_uint8( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint8 *val);
externC void cyg_pcihw_read_config_uint16( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint16 *val);
externC void cyg_pcihw_read_config_uint32( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint32 *val);
 
// Write functions
externC void cyg_pcihw_write_config_uint8( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint8 val);
externC void cyg_pcihw_write_config_uint16( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint16 val);
externC void cyg_pcihw_write_config_uint32( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint32 val);
 
// Interrupt translation
externC cyg_bool cyg_pcihw_translate_interrupt( cyg_uint8 bus, cyg_uint8 devfn,
CYG_ADDRWORD *vec);
 
#endif // ifdef HAL_PCI_INIT
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_PCI_HW_H
// End of pci_hw.h
 
/v2_0/include/pci_cfg.h
0,0 → 1,1065
#ifndef CYGONCE_PCI_CFG_H
#define CYGONCE_PCI_CFG_H
//=============================================================================
//
// pci_cfg.h
//
// PCI configuration definitions
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors: jskov
// Date: 1999-08-09
// Purpose: Provides PCI configuration information
// (common structure layout & defined vendor/class codes)
// Usage:
// #include <cyg/io/pci_cfg.h>
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
//----------------------------------------------------------------------
// PCI Configuration structure offsets
#define CYG_PCI_CFG_VENDOR 0x00
#define CYG_PCI_CFG_DEVICE 0x02
#define CYG_PCI_CFG_COMMAND 0x04
#define CYG_PCI_CFG_STATUS 0x06
#define CYG_PCI_CFG_CLASS_REV 0x08
#define CYG_PCI_CFG_CACHE_LINE_SIZE 0x0c
#define CYG_PCI_CFG_LATENCY_TIMER 0x0d
#define CYG_PCI_CFG_HEADER_TYPE 0x0e
#define CYG_PCI_CFG_BIST 0x0f
#define CYG_PCI_CFG_BAR_BASE 0x10
#define CYG_PCI_CFG_BAR_0 0x10
#define CYG_PCI_CFG_BAR_1 0x14
#define CYG_PCI_CFG_BAR_2 0x18
#define CYG_PCI_CFG_BAR_3 0x1c
#define CYG_PCI_CFG_BAR_4 0x20
#define CYG_PCI_CFG_BAR_5 0x24
#define CYG_PCI_CFG_CARDBUS_CIS 0x28
#define CYG_PCI_CFG_SUB_VENDOR 0x2c
#define CYG_PCI_CFG_SUB_ID 0x2e
#define CYG_PCI_CFG_ROM_ADDRESS 0x30
#define CYG_PCI_CFG_CAP_LIST 0x34
#define CYG_PCI_CFG_INT_LINE 0x3c
#define CYG_PCI_CFG_INT_PIN 0x3d
#define CYG_PCI_CFG_MIN_GNT 0x3e
#define CYG_PCI_CFG_MAX_LAT 0x3f
 
// Bridge configuration offsets
#define CYG_PCI_CFG_PRI_BUS 0x18
#define CYG_PCI_CFG_SEC_BUS 0x19
#define CYG_PCI_CFG_SUB_BUS 0x1a
#define CYG_PCI_CFG_SEC_LATENCY_TIMER 0x1b
#define CYG_PCI_CFG_IO_BASE 0x1c
#define CYG_PCI_CFG_IO_LIMIT 0x1d
#define CYG_PCI_CFG_SEC_STATUS 0x1e
#define CYG_PCI_CFG_MEM_BASE 0x20
#define CYG_PCI_CFG_MEM_LIMIT 0x22
#define CYG_PCI_CFG_PREFETCH_BASE 0x24
#define CYG_PCI_CFG_PREFETCH_LIMIT 0x26
#define CYG_PCI_CFG_PREFETCH_BASE_UPPER32 0x28
#define CYG_PCI_CFG_PREFETCH_LIMIT_UPPER32 0x2c
#define CYG_PCI_CFG_IO_BASE_UPPER16 0x30
#define CYG_PCI_CFG_IO_LIMIT_UPPER16 0x32
#define CYG_PCI_CFG_BRIDGE_ROM_ADDRESS 0x38
#define CYG_PCI_CFG_BRIDGE_CONTROL 0x3e
 
 
//-----------------------------------------------------------------
// PCI Control bits
 
// Command
#define CYG_PCI_CFG_COMMAND_IO 0x0001
#define CYG_PCI_CFG_COMMAND_MEMORY 0x0002
#define CYG_PCI_CFG_COMMAND_MASTER 0x0004
#define CYG_PCI_CFG_COMMAND_SPECIAL 0x0008
#define CYG_PCI_CFG_COMMAND_INVALIDATE 0x0010
#define CYG_PCI_CFG_COMMAND_VGA_SNOOP 0x0020
#define CYG_PCI_CFG_COMMAND_PARITY 0x0040
#define CYG_PCI_CFG_COMMAND_WAIT 0x0080
#define CYG_PCI_CFG_COMMAND_SERR 0x0100
#define CYG_PCI_CFG_COMMAND_FAST_BACK 0x0200
 
// Consider the device active if any of these bits are set.
#define CYG_PCI_CFG_COMMAND_ACTIVE \
(CYG_PCI_CFG_COMMAND_IO \
|CYG_PCI_CFG_COMMAND_MEMORY \
|CYG_PCI_CFG_COMMAND_MASTER)
 
// Header type
#define CYG_PCI_CFG_HEADER_TYPE_MASK 0x7f
#define CYG_PCI_CFG_HEADER_TYPE_MF 0x80
 
// BAR
#define CYG_PCI_CFG_BAR_SPACE_MASK 0x00000001
#define CYG_PCI_CFG_BAR_SPACE_MEM 0x00000000
#define CYG_PCI_CFG_BAR_SPACE_IO 0x00000001
 
#define CYG_PRI_CFG_BAR_MEM_TYPE_MASK 0x00000006
#define CYG_PRI_CFG_BAR_MEM_TYPE_32 0x00000000
#define CYG_PRI_CFG_BAR_MEM_TYPE_1M 0x00000002
#define CYG_PRI_CFG_BAR_MEM_TYPE_64 0x00000004
 
#define CYG_PRI_CFG_BAR_MEM_PREFETCH 0x00000008
 
#define CYG_PRI_CFG_BAR_MEM_MASK 0xfffffff0
#define CYG_PRI_CFG_BAR_IO_MASK 0xfffffffc
 
// Bridge control
#define CYG_PCI_CFG_BRIDGE_CTL_PARITY 0x0001
#define CYG_PCI_CFG_BRIDGE_CTL_SERR 0x0002
#define CYG_PCI_CFG_BRIDGE_CTL_ISA 0x0004
#define CYG_PCI_CFG_BRIDGE_CTL_VGA 0x0008
#define CYG_PCI_CFG_BRIDGE_CTL_MASTER 0x0020
#define CYG_PCI_CFG_BRIDGE_CTL_RESET 0x0040
#define CYG_PCI_CFG_BRIDGE_CTL_FAST_BACK 0x0080
 
//----------------------------------------------------------------------
// PCI Vendor IDs
/***********************************************************************
Can be extracted from the PCICODE List at http://www.yourvote.com/pci
maintained by Jib Boemler. Use the below Perl script and fix any
bad vendor names by hand.
 
#!/usr/bin/perl
while(<>) {
if (/PCI_VENTABLE/) {
%mvendors = {};
@vendors = ();
@codes = ();
while(<>) {
# Collect vendor names and codes.
if (m!.*0x([0-9A-F]{4}), \"([^\"]*)\".*!) {
$c = lc($1);
$v = uc($2);
$v =~ tr/-+ \/&.!/______ /;
$v =~ s/__/_/g;
$v =~ s/_$//;
push @vendors, $v;
push @codes, $c;
# Count occurences of vendor name.
$mvendors{$v} += 1;
}
last if (/;/);
}
# Ouput definitions.
while ($#vendors >= 0) {
$v = shift @vendors;
$c = shift @codes;
 
$o = "#define CYG_PCI_VENDOR_$v";
# If a vendor name occurs more than once, append code
# to get unique definitions.
if ($mvendors{$v} > 1) {
$o .= "_0x$c";
}
print $o . " " x (60-length($o)) . "0x$c\n";
}
}
}
***********************************************************************/
 
//---------------------- AUTO GENERATED START --------------------------
#define CYG_PCI_VENDOR_LOCKHEED_MARTIN 0x003d
#define CYG_PCI_VENDOR_COMPAQ_0x0e11 0x0e11
#define CYG_PCI_VENDOR_SYM 0x1000
#define CYG_PCI_VENDOR_ATI 0x1002
#define CYG_PCI_VENDOR_ULSI 0x1003
#define CYG_PCI_VENDOR_VLSI 0x1004
#define CYG_PCI_VENDOR_AVANCE_0x1005 0x1005
#define CYG_PCI_VENDOR_REPLY 0x1006
#define CYG_PCI_VENDOR_NETFRAME 0x1007
#define CYG_PCI_VENDOR_EPSON 0x1008
#define CYG_PCI_VENDOR_PHOENIX 0x100a
#define CYG_PCI_VENDOR_NSC 0x100b
#define CYG_PCI_VENDOR_TSENG_0x100c 0x100c
#define CYG_PCI_VENDOR_AST 0x100d
#define CYG_PCI_VENDOR_WEITEK 0x100e
#define CYG_PCI_VENDOR_VLOGIC 0x1010
#define CYG_PCI_VENDOR_DEC_0x1011 0x1011
#define CYG_PCI_VENDOR_MICRONICS 0x1012
#define CYG_PCI_VENDOR_CIRRUS 0x1013
#define CYG_PCI_VENDOR_IBM 0x1014
#define CYG_PCI_VENDOR_LSIL 0x1015
#define CYG_PCI_VENDOR_FUJITSU_ICL 0x1016
#define CYG_PCI_VENDOR_SPEA 0x1017
#define CYG_PCI_VENDOR_UNISYS 0x1018
#define CYG_PCI_VENDOR_ECS 0x1019
#define CYG_PCI_VENDOR_NCR 0x101a
#define CYG_PCI_VENDOR_VITESSE 0x101b
#define CYG_PCI_VENDOR_WD 0x101c
#define CYG_PCI_VENDOR_AMI 0x101e
#define CYG_PCI_VENDOR_PICTURETEL 0x101f
#define CYG_PCI_VENDOR_HITACHI_0x1020 0x1020
#define CYG_PCI_VENDOR_OKI 0x1021
#define CYG_PCI_VENDOR_AMD 0x1022
#define CYG_PCI_VENDOR_TRIDENT 0x1023
#define CYG_PCI_VENDOR_ZENITH_0x1024 0x1024
#define CYG_PCI_VENDOR_ACER 0x1025
#define CYG_PCI_VENDOR_DELL 0x1028
#define CYG_PCI_VENDOR_SIEM_NIX 0x1029
#define CYG_PCI_VENDOR_LSI 0x102a
#define CYG_PCI_VENDOR_MATROX 0x102b
#define CYG_PCI_VENDOR_C_T 0x102c
#define CYG_PCI_VENDOR_WYSE 0x102d
#define CYG_PCI_VENDOR_OLIVETTI 0x102e
#define CYG_PCI_VENDOR_TOSHIBA_0x102f 0x102f
#define CYG_PCI_VENDOR_TMC_0x1030 0x1030
#define CYG_PCI_VENDOR_MIRO 0x1031
#define CYG_PCI_VENDOR_COMPAQ_0x1032 0x1032
#define CYG_PCI_VENDOR_NEC_0x1033 0x1033
#define CYG_PCI_VENDOR_BURNDY 0x1034
#define CYG_PCI_VENDOR_C_CRL 0x1035
#define CYG_PCI_VENDOR_FDOMAIN 0x1036
#define CYG_PCI_VENDOR_HITACHI_0x1037 0x1037
#define CYG_PCI_VENDOR_AMP 0x1038
#define CYG_PCI_VENDOR_SIS 0x1039
#define CYG_PCI_VENDOR_SEIKO 0x103a
#define CYG_PCI_VENDOR_TATUNG 0x103b
#define CYG_PCI_VENDOR_HP 0x103c
#define CYG_PCI_VENDOR_SOLLIDAY 0x103e
#define CYG_PCI_VENDOR_LOGIC_MOD 0x103f
#define CYG_PCI_VENDOR_KUBOTA 0x1040
#define CYG_PCI_VENDOR_COMPUTREND 0x1041
#define CYG_PCI_VENDOR_PC_TECH 0x1042
#define CYG_PCI_VENDOR_ASUSTEK 0x1043
#define CYG_PCI_VENDOR_DPT 0x1044
#define CYG_PCI_VENDOR_OPTI 0x1045
#define CYG_PCI_VENDOR_IPC 0x1046
#define CYG_PCI_VENDOR_GENOA 0x1047
#define CYG_PCI_VENDOR_ELSA 0x1048
#define CYG_PCI_VENDOR_FOUNTAIN 0x1049
#define CYG_PCI_VENDOR_STM 0x104a
#define CYG_PCI_VENDOR_BUSLOGOC 0x104b
#define CYG_PCI_VENDOR_TI 0x104c
#define CYG_PCI_VENDOR_SONY 0x104d
#define CYG_PCI_VENDOR_OAK 0x104e
#define CYG_PCI_VENDOR_CO_TIME 0x104f
#define CYG_PCI_VENDOR_WINBOND 0x1050
#define CYG_PCI_VENDOR_ANIGMA 0x1051
#define CYG_PCI_VENDOR_YOUNG 0x1052
#define CYG_PCI_VENDOR_HITACHI_0x1054 0x1054
#define CYG_PCI_VENDOR_EFAR 0x1055
#define CYG_PCI_VENDOR_ICL 0x1056
#define CYG_PCI_VENDOR_MOTOROLA_0x1057 0x1057
#define CYG_PCI_VENDOR_E_TR 0x1058
#define CYG_PCI_VENDOR_TEKNOR 0x1059
#define CYG_PCI_VENDOR_PROMISE 0x105a
#define CYG_PCI_VENDOR_FOXCONN 0x105b
#define CYG_PCI_VENDOR_WIPRO 0x105c
#define CYG_PCI_VENDOR_NUMBER_NINE 0x105d
#define CYG_PCI_VENDOR_VTECH 0x105e
#define CYG_PCI_VENDOR_INFOTRONIC 0x105f
#define CYG_PCI_VENDOR_UMC 0x1060
#define CYG_PCI_VENDOR_8X8 0x1061
#define CYG_PCI_VENDOR_MASPAR 0x1062
#define CYG_PCI_VENDOR_OOA 0x1063
#define CYG_PCI_VENDOR_ALCATEL 0x1064
#define CYG_PCI_VENDOR_TM 0x1065
#define CYG_PCI_VENDOR_PICOPOWER 0x1066
#define CYG_PCI_VENDOR_MITSUBISHI_0x1067 0x1067
#define CYG_PCI_VENDOR_DIV_TECH 0x1068
#define CYG_PCI_VENDOR_MYLEX 0x1069
#define CYG_PCI_VENDOR_ATEN 0x106a
#define CYG_PCI_VENDOR_APPLE 0x106b
#define CYG_PCI_VENDOR_HYUNDAI 0x106c
#define CYG_PCI_VENDOR_SEQUENT 0x106d
#define CYG_PCI_VENDOR_DFI 0x106e
#define CYG_PCI_VENDOR_CITYGATE 0x106f
#define CYG_PCI_VENDOR_DAEWOO 0x1070
#define CYG_PCI_VENDOR_MITAC 0x1071
#define CYG_PCI_VENDOR_GIT 0x1072
#define CYG_PCI_VENDOR_YAMAHA 0x1073
#define CYG_PCI_VENDOR_NEXGEN 0x1074
#define CYG_PCI_VENDOR_AIR 0x1075
#define CYG_PCI_VENDOR_CHAINTECH_0x1076 0x1076
#define CYG_PCI_VENDOR_Q_LOGIC 0x1077
#define CYG_PCI_VENDOR_CYRIX 0x1078
#define CYG_PCI_VENDOR_I_BUS 0x1079
#define CYG_PCI_VENDOR_NETWORTH 0x107a
#define CYG_PCI_VENDOR_GATEWAY 0x107b
#define CYG_PCI_VENDOR_GOLDSTAR 0x107c
#define CYG_PCI_VENDOR_LEADTEK 0x107d
#define CYG_PCI_VENDOR_INTERPHASE 0x107e
#define CYG_PCI_VENDOR_DTC 0x107f
#define CYG_PCI_VENDOR_CONTAQ 0x1080
#define CYG_PCI_VENDOR_SUPERMAC 0x1081
#define CYG_PCI_VENDOR_EFA 0x1082
#define CYG_PCI_VENDOR_FOREX 0x1083
#define CYG_PCI_VENDOR_PARADOR 0x1084
#define CYG_PCI_VENDOR_TULIP 0x1085
#define CYG_PCI_VENDOR_J_BOND 0x1086
#define CYG_PCI_VENDOR_CACHE 0x1087
#define CYG_PCI_VENDOR_MS_SON 0x1088
#define CYG_PCI_VENDOR_DG 0x1089
#define CYG_PCI_VENDOR_BIT3 0x108a
#define CYG_PCI_VENDOR_ELONEX 0x108c
#define CYG_PCI_VENDOR_OLICOM 0x108d
#define CYG_PCI_VENDOR_SUN 0x108e
#define CYG_PCI_VENDOR_SYSTEMSOFT 0x108f
#define CYG_PCI_VENDOR_ENCORE 0x1090
#define CYG_PCI_VENDOR_INTERGRAPH 0x1091
#define CYG_PCI_VENDOR_DIAMOND 0x1092
#define CYG_PCI_VENDOR_NAT_INST 0x1093
#define CYG_PCI_VENDOR_FIC 0x1094
#define CYG_PCI_VENDOR_CMD 0x1095
#define CYG_PCI_VENDOR_ALACRON 0x1096
#define CYG_PCI_VENDOR_APPIAN 0x1097
#define CYG_PCI_VENDOR_QUANTUM_0x1098 0x1098
#define CYG_PCI_VENDOR_SAMSUNG_0x1099 0x1099
#define CYG_PCI_VENDOR_PACKARD_BELL 0x109a
#define CYG_PCI_VENDOR_GEMLIGHT 0x109b
#define CYG_PCI_VENDOR_MEGACHIPS 0x109c
#define CYG_PCI_VENDOR_ZIDA 0x109d
#define CYG_PCI_VENDOR_BROOKTREE 0x109e
#define CYG_PCI_VENDOR_TRIGEM_0x109f 0x109f
#define CYG_PCI_VENDOR_MEIDENSHA 0x10a0
#define CYG_PCI_VENDOR_JUKO 0x10a1
#define CYG_PCI_VENDOR_QUANTUM_0x10a2 0x10a2
#define CYG_PCI_VENDOR_EVEREX 0x10a3
#define CYG_PCI_VENDOR_GLOBE 0x10a4
#define CYG_PCI_VENDOR_RACAL 0x10a5
#define CYG_PCI_VENDOR_INFORMTECH 0x10a6
#define CYG_PCI_VENDOR_BENCHMARQ 0x10a7
#define CYG_PCI_VENDOR_SIERRA_0x10a8 0x10a8
#define CYG_PCI_VENDOR_SG 0x10a9
#define CYG_PCI_VENDOR_ACC 0x10aa
#define CYG_PCI_VENDOR_DIGICOM 0x10ab
#define CYG_PCI_VENDOR_HONEYWELL 0x10ac
#define CYG_PCI_VENDOR_SYMPHONY_0x10ad 0x10ad
#define CYG_PCI_VENDOR_CORNERSTONE 0x10ae
#define CYG_PCI_VENDOR_MCS_0x10af 0x10af
#define CYG_PCI_VENDOR_CARDEXPERT 0x10b0
#define CYG_PCI_VENDOR_CABLETRON 0x10b1
#define CYG_PCI_VENDOR_RAYTHEON 0x10b2
#define CYG_PCI_VENDOR_DATABOOK 0x10b3
#define CYG_PCI_VENDOR_STB 0x10b4
#define CYG_PCI_VENDOR_PLX 0x10b5
#define CYG_PCI_VENDOR_MADGE 0x10b6
#define CYG_PCI_VENDOR_3COM 0x10b7
#define CYG_PCI_VENDOR_STANDARD 0x10b8
#define CYG_PCI_VENDOR_ALI 0x10b9
#define CYG_PCI_VENDOR_MITSUBISHI_0x10ba 0x10ba
#define CYG_PCI_VENDOR_DAPHA 0x10bb
#define CYG_PCI_VENDOR_ALR 0x10bc
#define CYG_PCI_VENDOR_SURECOM 0x10bd
#define CYG_PCI_VENDOR_TSENG_0x10be 0x10be
#define CYG_PCI_VENDOR_MOST 0x10bf
#define CYG_PCI_VENDOR_BOCA 0x10c0
#define CYG_PCI_VENDOR_ICM 0x10c1
#define CYG_PCI_VENDOR_AUSPEX 0x10c2
#define CYG_PCI_VENDOR_SAMSUNG_0x10c3 0x10c3
#define CYG_PCI_VENDOR_AWARD 0x10c4
#define CYG_PCI_VENDOR_XEROX 0x10c5
#define CYG_PCI_VENDOR_RAMBUS 0x10c6
#define CYG_PCI_VENDOR_MEDIA_VISION 0x10c7
#define CYG_PCI_VENDOR_NEOMAGIC 0x10c8
#define CYG_PCI_VENDOR_DATAEXPERT 0x10c9
#define CYG_PCI_VENDOR_FUJITSU_0x10ca 0x10ca
#define CYG_PCI_VENDOR_OMRON 0x10cb
#define CYG_PCI_VENDOR_MENTOR 0x10cc
#define CYG_PCI_VENDOR_ADVANSYS 0x10cd
#define CYG_PCI_VENDOR_RADIUS 0x10ce
#define CYG_PCI_VENDOR_TTI 0x10cf
#define CYG_PCI_VENDOR_FUJITSU_0x10d0 0x10d0
#define CYG_PCI_VENDOR_FUTURE 0x10d1
#define CYG_PCI_VENDOR_MOLEX 0x10d2
#define CYG_PCI_VENDOR_JABIL 0x10d3
#define CYG_PCI_VENDOR_HUALON 0x10d4
#define CYG_PCI_VENDOR_AUTOLOGIC 0x10d5
#define CYG_PCI_VENDOR_CETIA 0x10d6
#define CYG_PCI_VENDOR_BCM 0x10d7
#define CYG_PCI_VENDOR_APL 0x10d8
#define CYG_PCI_VENDOR_MACRONIX 0x10d9
#define CYG_PCI_VENDOR_T_C 0x10da
#define CYG_PCI_VENDOR_ROHM 0x10db
#define CYG_PCI_VENDOR_CERN 0x10dc
#define CYG_PCI_VENDOR_E_S 0x10dd
#define CYG_PCI_VENDOR_NVIDIA_0x10de 0x10de
#define CYG_PCI_VENDOR_EMULEX 0x10df
#define CYG_PCI_VENDOR_IMS 0x10e0
#define CYG_PCI_VENDOR_TEKRAM_0x10e1 0x10e1
#define CYG_PCI_VENDOR_APTIX 0x10e2
#define CYG_PCI_VENDOR_TUNDRA 0x10e3
#define CYG_PCI_VENDOR_TANDEM 0x10e4
#define CYG_PCI_VENDOR_MIC 0x10e5
#define CYG_PCI_VENDOR_GAINBERY 0x10e6
#define CYG_PCI_VENDOR_VADEM 0x10e7
#define CYG_PCI_VENDOR_AMCC 0x10e8
#define CYG_PCI_VENDOR_ALPS 0x10e9
#define CYG_PCI_VENDOR_INTERGRAPHICS 0x10ea
#define CYG_PCI_VENDOR_ARTIST 0x10eb
#define CYG_PCI_VENDOR_REALTEK 0x10ec
#define CYG_PCI_VENDOR_ASCII 0x10ed
#define CYG_PCI_VENDOR_XILINX 0x10ee
#define CYG_PCI_VENDOR_RACORE 0x10ef
#define CYG_PCI_VENDOR_PERITEK 0x10f0
#define CYG_PCI_VENDOR_TYAN 0x10f1
#define CYG_PCI_VENDOR_ACHME 0x10f2
#define CYG_PCI_VENDOR_ALARIS 0x10f3
#define CYG_PCI_VENDOR_S_MOS 0x10f4
#define CYG_PCI_VENDOR_NKK 0x10f5
#define CYG_PCI_VENDOR_CREATIVE 0x10f6
#define CYG_PCI_VENDOR_MATSUSHITA_0x10f7 0x10f7
#define CYG_PCI_VENDOR_ALTOS 0x10f8
#define CYG_PCI_VENDOR_PC_DIRECT 0x10f9
#define CYG_PCI_VENDOR_TRUEVISION 0x10fa
#define CYG_PCI_VENDOR_THESYS 0x10fb
#define CYG_PCI_VENDOR_I_O 0x10fc
#define CYG_PCI_VENDOR_SOYO 0x10fd
#define CYG_PCI_VENDOR_FAST 0x10fe
#define CYG_PCI_VENDOR_NCUBE 0x10ff
#define CYG_PCI_VENDOR_JAZZ 0x1100
#define CYG_PCI_VENDOR_INITIO 0x1101
#define CYG_PCI_VENDOR_CREATIVE_LABS 0x1102
#define CYG_PCI_VENDOR_TRIONES 0x1103
#define CYG_PCI_VENDOR_RASTEROPS 0x1104
#define CYG_PCI_VENDOR_SIGMA_0x1105 0x1105
#define CYG_PCI_VENDOR_VIA 0x1106
#define CYG_PCI_VENDOR_STRATUS 0x1107
#define CYG_PCI_VENDOR_PROTEON 0x1108
#define CYG_PCI_VENDOR_COGENT 0x1109
#define CYG_PCI_VENDOR_SIEMENS 0x110a
#define CYG_PCI_VENDOR_CHROMATIC 0x110b
#define CYG_PCI_VENDOR_MINI_MAX 0x110c
#define CYG_PCI_VENDOR_ZNYX 0x110d
#define CYG_PCI_VENDOR_CPU_TECH 0x110e
#define CYG_PCI_VENDOR_ROSS 0x110f
#define CYG_PCI_VENDOR_POWERHOUSE 0x1110
#define CYG_PCI_VENDOR_SCO 0x1111
#define CYG_PCI_VENDOR_OSICOM 0x1112
#define CYG_PCI_VENDOR_ACCTON 0x1113
#define CYG_PCI_VENDOR_ATMEL 0x1114
#define CYG_PCI_VENDOR_DUPONT 0x1115
#define CYG_PCI_VENDOR_DATA_TRANS 0x1116
#define CYG_PCI_VENDOR_DATACUBE 0x1117
#define CYG_PCI_VENDOR_BERG 0x1118
#define CYG_PCI_VENDOR_VORTEX 0x1119
#define CYG_PCI_VENDOR_EFF_NET 0x111a
#define CYG_PCI_VENDOR_TELEDYNE 0x111b
#define CYG_PCI_VENDOR_TRICORD 0x111c
#define CYG_PCI_VENDOR_IDT 0x111d
#define CYG_PCI_VENDOR_ELDEC 0x111e
#define CYG_PCI_VENDOR_PDI 0x111f
#define CYG_PCI_VENDOR_EMC 0x1120
#define CYG_PCI_VENDOR_ZILOG 0x1121
#define CYG_PCI_VENDOR_MULTI_TECH 0x1122
#define CYG_PCI_VENDOR_EDI 0x1123
#define CYG_PCI_VENDOR_LEUTRON 0x1124
#define CYG_PCI_VENDOR_EUROCORE 0x1125
#define CYG_PCI_VENDOR_VIGRA 0x1126
#define CYG_PCI_VENDOR_FORE 0x1127
#define CYG_PCI_VENDOR_FIRMWORKS 0x1129
#define CYG_PCI_VENDOR_HERMES 0x112a
#define CYG_PCI_VENDOR_LINOTYPE 0x112b
#define CYG_PCI_VENDOR_ZENITH_0x112c 0x112c
#define CYG_PCI_VENDOR_RAVICAD 0x112d
#define CYG_PCI_VENDOR_INFOMEDIA 0x112e
#define CYG_PCI_VENDOR_IMAGTECH 0x112f
#define CYG_PCI_VENDOR_COMPUTERVISION 0x1130
#define CYG_PCI_VENDOR_PHILIPS 0x1131
#define CYG_PCI_VENDOR_MITEL 0x1132
#define CYG_PCI_VENDOR_EIC 0x1133
#define CYG_PCI_VENDOR_MCS_0x1134 0x1134
#define CYG_PCI_VENDOR_FUJI 0x1135
#define CYG_PCI_VENDOR_MOMENTUM 0x1136
#define CYG_PCI_VENDOR_CISCO 0x1137
#define CYG_PCI_VENDOR_ZIATECH 0x1138
#define CYG_PCI_VENDOR_DYN_PICT 0x1139
#define CYG_PCI_VENDOR_FWB 0x113a
#define CYG_PCI_VENDOR_NCD 0x113b
#define CYG_PCI_VENDOR_CYCLONE 0x113c
#define CYG_PCI_VENDOR_LEADING_EDGE 0x113d
#define CYG_PCI_VENDOR_SANYO 0x113e
#define CYG_PCI_VENDOR_EQUINOX 0x113f
#define CYG_PCI_VENDOR_INTERVOICE 0x1140
#define CYG_PCI_VENDOR_CREST 0x1141
#define CYG_PCI_VENDOR_ALLIANCE 0x1142
#define CYG_PCI_VENDOR_NETPOWER_0x1143 0x1143
#define CYG_PCI_VENDOR_CINN_MIL 0x1144
#define CYG_PCI_VENDOR_WORKBIT 0x1145
#define CYG_PCI_VENDOR_FORCE 0x1146
#define CYG_PCI_VENDOR_INTERFACE 0x1147
#define CYG_PCI_VENDOR_S_K 0x1148
#define CYG_PCI_VENDOR_WIN_SYSTEM 0x1149
#define CYG_PCI_VENDOR_VMIC 0x114a
#define CYG_PCI_VENDOR_CANOPUS 0x114b
#define CYG_PCI_VENDOR_ANNABOOKS 0x114c
#define CYG_PCI_VENDOR_IC_CORP 0x114d
#define CYG_PCI_VENDOR_NIKON 0x114e
#define CYG_PCI_VENDOR_STARGATE 0x114f
#define CYG_PCI_VENDOR_TMC_0x1150 0x1150
#define CYG_PCI_VENDOR_JAE 0x1151
#define CYG_PCI_VENDOR_MEGATEK 0x1152
#define CYG_PCI_VENDOR_LAND_WIN 0x1153
#define CYG_PCI_VENDOR_MELCO 0x1154
#define CYG_PCI_VENDOR_PINE 0x1155
#define CYG_PCI_VENDOR_PERISCOPE 0x1156
#define CYG_PCI_VENDOR_AVSYS 0x1157
#define CYG_PCI_VENDOR_VOARX 0x1158
#define CYG_PCI_VENDOR_MUTECH 0x1159
#define CYG_PCI_VENDOR_HARLEQUIN 0x115a
#define CYG_PCI_VENDOR_PARALLAX 0x115b
#define CYG_PCI_VENDOR_PHOTRON 0x115c
#define CYG_PCI_VENDOR_XIRCOM 0x115d
#define CYG_PCI_VENDOR_PEER 0x115e
#define CYG_PCI_VENDOR_MAXTOR 0x115f
#define CYG_PCI_VENDOR_MEGASOFT 0x1160
#define CYG_PCI_VENDOR_PFU 0x1161
#define CYG_PCI_VENDOR_OA_LAB 0x1162
#define CYG_PCI_VENDOR_RENDITION 0x1163
#define CYG_PCI_VENDOR_APT 0x1164
#define CYG_PCI_VENDOR_IMAGRAPH 0x1165
#define CYG_PCI_VENDOR_PEQUR 0x1166
#define CYG_PCI_VENDOR_MUTOH 0x1167
#define CYG_PCI_VENDOR_THINE 0x1168
#define CYG_PCI_VENDOR_CDAC 0x1169
#define CYG_PCI_VENDOR_POLARIS 0x116a
#define CYG_PCI_VENDOR_CONNECTWARE 0x116b
#define CYG_PCI_VENDOR_INT_RES 0x116c
#define CYG_PCI_VENDOR_EFI 0x116e
#define CYG_PCI_VENDOR_WKSTA_TECH 0x116f
#define CYG_PCI_VENDOR_INVENTEC 0x1170
#define CYG_PCI_VENDOR_LOUGH_SOUND 0x1171
#define CYG_PCI_VENDOR_ALTERA 0x1172
#define CYG_PCI_VENDOR_ADOBE 0x1173
#define CYG_PCI_VENDOR_BRIDGEPORT 0x1174
#define CYG_PCI_VENDOR_MITRON 0x1175
#define CYG_PCI_VENDOR_SBE 0x1176
#define CYG_PCI_VENDOR_SILICON_ENG 0x1177
#define CYG_PCI_VENDOR_ALFA 0x1178
#define CYG_PCI_VENDOR_TOSHIBA_0x1179 0x1179
#define CYG_PCI_VENDOR_A_TREND 0x117a
#define CYG_PCI_VENDOR_LG_ELEC 0x117b
#define CYG_PCI_VENDOR_ATTO 0x117c
#define CYG_PCI_VENDOR_B_D 0x117d
#define CYG_PCI_VENDOR_T_R 0x117e
#define CYG_PCI_VENDOR_ICS 0x117f
#define CYG_PCI_VENDOR_RICOH 0x1180
#define CYG_PCI_VENDOR_TELMATICS 0x1181
#define CYG_PCI_VENDOR_FUJIKURA 0x1183
#define CYG_PCI_VENDOR_FORKS_0x1184 0x1184
#define CYG_PCI_VENDOR_DATAWORLD 0x1185
#define CYG_PCI_VENDOR_D_LINK 0x1186
#define CYG_PCI_VENDOR_ATL 0x1187
#define CYG_PCI_VENDOR_SHIMA 0x1188
#define CYG_PCI_VENDOR_MATSUSHITA_0x1189 0x1189
#define CYG_PCI_VENDOR_HILEVEL 0x118a
#define CYG_PCI_VENDOR_HYPERTEC 0x118b
#define CYG_PCI_VENDOR_COROLLARY 0x118c
#define CYG_PCI_VENDOR_BITFLOW 0x118d
#define CYG_PCI_VENDOR_HERMSTEDT 0x118e
#define CYG_PCI_VENDOR_GREEN 0x118f
#define CYG_PCI_VENDOR_ARTOP 0x1191
#define CYG_PCI_VENDOR_DENSAN 0x1192
#define CYG_PCI_VENDOR_ZEITNET 0x1193
#define CYG_PCI_VENDOR_TOUCAN 0x1194
#define CYG_PCI_VENDOR_RATOC 0x1195
#define CYG_PCI_VENDOR_HYTEC 0x1196
#define CYG_PCI_VENDOR_GAGE 0x1197
#define CYG_PCI_VENDOR_LAMBDA 0x1198
#define CYG_PCI_VENDOR_ATTACHMATE 0x1199
#define CYG_PCI_VENDOR_MIND_SHARE 0x119a
#define CYG_PCI_VENDOR_OMEGA 0x119b
#define CYG_PCI_VENDOR_ITI 0x119c
#define CYG_PCI_VENDOR_BUG 0x119d
#define CYG_PCI_VENDOR_FUJITSU_0x119e 0x119e
#define CYG_PCI_VENDOR_BULL 0x119f
#define CYG_PCI_VENDOR_CONVEX 0x11a0
#define CYG_PCI_VENDOR_HAMAMATSU 0x11a1
#define CYG_PCI_VENDOR_SIERRA_0x11a2 0x11a2
#define CYG_PCI_VENDOR_DEURETZBACHER 0x11a3
#define CYG_PCI_VENDOR_BARCO 0x11a4
#define CYG_PCI_VENDOR_MICROUNITY 0x11a5
#define CYG_PCI_VENDOR_PURE_DATA 0x11a6
#define CYG_PCI_VENDOR_POWER_COMP 0x11a7
#define CYG_PCI_VENDOR_SYSTECH 0x11a8
#define CYG_PCI_VENDOR_INNOSYS 0x11a9
#define CYG_PCI_VENDOR_ACTEL 0x11aa
#define CYG_PCI_VENDOR_GALILEO 0x11ab
#define CYG_PCI_VENDOR_CANON 0x11ac
#define CYG_PCI_VENDOR_LITE_ON 0x11ad
#define CYG_PCI_VENDOR_SCITEX 0x11ae
#define CYG_PCI_VENDOR_PRO_LOG 0x11af
#define CYG_PCI_VENDOR_V3 0x11b0
#define CYG_PCI_VENDOR_APRICOT 0x11b1
#define CYG_PCI_VENDOR_KODAK 0x11b2
#define CYG_PCI_VENDOR_BARR 0x11b3
#define CYG_PCI_VENDOR_LEITCH 0x11b4
#define CYG_PCI_VENDOR_RADSTONE 0x11b5
#define CYG_PCI_VENDOR_UNITED_VIDEO 0x11b6
#define CYG_PCI_VENDOR_MOTOROLA_0x11b7 0x11b7
#define CYG_PCI_VENDOR_XPOINT 0x11b8
#define CYG_PCI_VENDOR_PATHLIGHT 0x11b9
#define CYG_PCI_VENDOR_VIDEOTRON 0x11ba
#define CYG_PCI_VENDOR_PYRAMID 0x11bb
#define CYG_PCI_VENDOR_NET_PERIPH 0x11bc
#define CYG_PCI_VENDOR_PINNACLE 0x11bd
#define CYG_PCI_VENDOR_IMI 0x11be
#define CYG_PCI_VENDOR_ASTRODESIGN 0x11bf
#define CYG_PCI_VENDOR_H_P 0x11c0
#define CYG_PCI_VENDOR_AT_T 0x11c1
#define CYG_PCI_VENDOR_SAND 0x11c2
#define CYG_PCI_VENDOR_NEC_0x11c3 0x11c3
#define CYG_PCI_VENDOR_DOC_TECH 0x11c4
#define CYG_PCI_VENDOR_SHIVA 0x11c5
#define CYG_PCI_VENDOR_DAINIPPON 0x11c6
#define CYG_PCI_VENDOR_D_C_M 0x11c7
#define CYG_PCI_VENDOR_DOLPHIN 0x11c8
#define CYG_PCI_VENDOR_MAGMA 0x11c9
#define CYG_PCI_VENDOR_LSI_SYS 0x11ca
#define CYG_PCI_VENDOR_SPECIALIX 0x11cb
#define CYG_PCI_VENDOR_M_K 0x11cc
#define CYG_PCI_VENDOR_HAL 0x11cd
#define CYG_PCI_VENDOR_PRI 0x11ce
#define CYG_PCI_VENDOR_PEC 0x11cf
#define CYG_PCI_VENDOR_LORAL 0x11d0
#define CYG_PCI_VENDOR_AURAVISION 0x11d1
#define CYG_PCI_VENDOR_INTERCOM 0x11d2
#define CYG_PCI_VENDOR_TRANCELL 0x11d3
#define CYG_PCI_VENDOR_AD 0x11d4
#define CYG_PCI_VENDOR_IKON 0x11d5
#define CYG_PCI_VENDOR_TEKELEC 0x11d6
#define CYG_PCI_VENDOR_TRENTON 0x11d7
#define CYG_PCI_VENDOR_ITD 0x11d8
#define CYG_PCI_VENDOR_TEC 0x11d9
#define CYG_PCI_VENDOR_NOVELL 0x11da
#define CYG_PCI_VENDOR_SEGA 0x11db
#define CYG_PCI_VENDOR_QUESTRA 0x11dc
#define CYG_PCI_VENDOR_CROSFIELD 0x11dd
#define CYG_PCI_VENDOR_ZORAN 0x11de
#define CYG_PCI_VENDOR_NEW_WAVE 0x11df
#define CYG_PCI_VENDOR_CRAY 0x11e0
#define CYG_PCI_VENDOR_GEC_PLESSEY 0x11e1
#define CYG_PCI_VENDOR_SAMSUNG_0x11e2 0x11e2
#define CYG_PCI_VENDOR_QUICKLOGIC 0x11e3
#define CYG_PCI_VENDOR_SECOND_WAVE 0x11e4
#define CYG_PCI_VENDOR_IIX 0x11e5
#define CYG_PCI_VENDOR_MITSUI 0x11e6
#define CYG_PCI_VENDOR_TOSHIBA_0x11e7 0x11e7
#define CYG_PCI_VENDOR_DPSI 0x11e8
#define CYG_PCI_VENDOR_HIGHWATER 0x11e9
#define CYG_PCI_VENDOR_ELSAG 0x11ea
#define CYG_PCI_VENDOR_FORMATION 0x11eb
#define CYG_PCI_VENDOR_CORECO 0x11ec
#define CYG_PCI_VENDOR_MEDIAMATICS 0x11ed
#define CYG_PCI_VENDOR_DOME 0x11ee
#define CYG_PCI_VENDOR_NICOLET 0x11ef
#define CYG_PCI_VENDOR_COMPU_SHACK 0x11f0
#define CYG_PCI_VENDOR_SYMBIOS 0x11f1
#define CYG_PCI_VENDOR_PIC_TEL 0x11f2
#define CYG_PCI_VENDOR_KEITHLEY 0x11f3
#define CYG_PCI_VENDOR_KINETIC 0x11f4
#define CYG_PCI_VENDOR_COMP_DEV 0x11f5
#define CYG_PCI_VENDOR_POWERMATIC 0x11f6
#define CYG_PCI_VENDOR_S_A 0x11f7
#define CYG_PCI_VENDOR_PMC_SIERRA 0x11f8
#define CYG_PCI_VENDOR_I_CUBE 0x11f9
#define CYG_PCI_VENDOR_KASAN 0x11fa
#define CYG_PCI_VENDOR_DATEL 0x11fb
#define CYG_PCI_VENDOR_SILICON_MAGIC 0x11fc
#define CYG_PCI_VENDOR_HIGH_STREET 0x11fd
#define CYG_PCI_VENDOR_COMTROL 0x11fe
#define CYG_PCI_VENDOR_SCION 0x11ff
#define CYG_PCI_VENDOR_CSS 0x1200
#define CYG_PCI_VENDOR_VISTA 0x1201
#define CYG_PCI_VENDOR_NETWORK_GEN 0x1202
#define CYG_PCI_VENDOR_AGFA 0x1203
#define CYG_PCI_VENDOR_LATTICE 0x1204
#define CYG_PCI_VENDOR_ARRAY 0x1205
#define CYG_PCI_VENDOR_AMDAHL 0x1206
#define CYG_PCI_VENDOR_PARSYTEC 0x1208
#define CYG_PCI_VENDOR_SCI_SYS 0x1209
#define CYG_PCI_VENDOR_SYNAPTEL 0x120a
#define CYG_PCI_VENDOR_ADAPTIVE 0x120b
#define CYG_PCI_VENDOR_COMP_LABS 0x120d
#define CYG_PCI_VENDOR_CYCLADES 0x120e
#define CYG_PCI_VENDOR_ESSENTIAL 0x120f
#define CYG_PCI_VENDOR_HYPERPARALLEL 0x1210
#define CYG_PCI_VENDOR_BRAINTECH 0x1211
#define CYG_PCI_VENDOR_KINGSTON 0x1212
#define CYG_PCI_VENDOR_AISI 0x1213
#define CYG_PCI_VENDOR_PERF_TECH 0x1214
#define CYG_PCI_VENDOR_INTERWARE 0x1215
#define CYG_PCI_VENDOR_PURUP 0x1216
#define CYG_PCI_VENDOR_O2MICRO 0x1217
#define CYG_PCI_VENDOR_HYBRICON 0x1218
#define CYG_PCI_VENDOR_FIRST_VIRTUAL 0x1219
#define CYG_PCI_VENDOR_3DFX 0x121a
#define CYG_PCI_VENDOR_ATM 0x121b
#define CYG_PCI_VENDOR_NIPPON_TEXA 0x121c
#define CYG_PCI_VENDOR_LIPPERT 0x121d
#define CYG_PCI_VENDOR_CSPI 0x121e
#define CYG_PCI_VENDOR_ARCUS 0x121f
#define CYG_PCI_VENDOR_ARIEL 0x1220
#define CYG_PCI_VENDOR_CONTEC 0x1221
#define CYG_PCI_VENDOR_ANCOR 0x1222
#define CYG_PCI_VENDOR_HEURIKON 0x1223
#define CYG_PCI_VENDOR_INT_IMG 0x1224
#define CYG_PCI_VENDOR_POWER_IO 0x1225
#define CYG_PCI_VENDOR_TECH_SOURCE 0x1227
#define CYG_PCI_VENDOR_NORSK 0x1228
#define CYG_PCI_VENDOR_DATA_KIN 0x1229
#define CYG_PCI_VENDOR_INT_TELECOM 0x122a
#define CYG_PCI_VENDOR_LG_IND 0x122b
#define CYG_PCI_VENDOR_SICAN 0x122c
#define CYG_PCI_VENDOR_AZTECH 0x122d
#define CYG_PCI_VENDOR_XYRATEX 0x122e
#define CYG_PCI_VENDOR_ANDREW 0x122f
#define CYG_PCI_VENDOR_FISHCAMP 0x1230
#define CYG_PCI_VENDOR_W_MCCOACH 0x1231
#define CYG_PCI_VENDOR_GPT 0x1232
#define CYG_PCI_VENDOR_BUS_TECH 0x1233
#define CYG_PCI_VENDOR_TECHNICAL 0x1234
#define CYG_PCI_VENDOR_RISQ_MOD 0x1235
#define CYG_PCI_VENDOR_SIGMA_0x1236 0x1236
#define CYG_PCI_VENDOR_ALTA_TECH 0x1237
#define CYG_PCI_VENDOR_ADTRAN 0x1238
#define CYG_PCI_VENDOR_3DO 0x1239
#define CYG_PCI_VENDOR_VISICOM 0x123a
#define CYG_PCI_VENDOR_SEEQ 0x123b
#define CYG_PCI_VENDOR_CENTURY_SYS 0x123c
#define CYG_PCI_VENDOR_EDT 0x123d
#define CYG_PCI_VENDOR_C_CUBE 0x123f
#define CYG_PCI_VENDOR_MARATHON 0x1240
#define CYG_PCI_VENDOR_DSC 0x1241
#define CYG_PCI_VENDOR_DELPHAX 0x1243
#define CYG_PCI_VENDOR_AVM 0x1244
#define CYG_PCI_VENDOR_APD 0x1245
#define CYG_PCI_VENDOR_DIPIX 0x1246
#define CYG_PCI_VENDOR_XYLON 0x1247
#define CYG_PCI_VENDOR_CENTRAL_DATA 0x1248
#define CYG_PCI_VENDOR_SAMSUNG_0x1249 0x1249
#define CYG_PCI_VENDOR_AEG 0x124a
#define CYG_PCI_VENDOR_GREENSPRING 0x124b
#define CYG_PCI_VENDOR_SOLITRON 0x124c
#define CYG_PCI_VENDOR_STALLION 0x124d
#define CYG_PCI_VENDOR_CYLINK 0x124e
#define CYG_PCI_VENDOR_INFORTREND 0x124f
#define CYG_PCI_VENDOR_HITACHI_0x1250 0x1250
#define CYG_PCI_VENDOR_VLSI_SOL 0x1251
#define CYG_PCI_VENDOR_GUZIK 0x1253
#define CYG_PCI_VENDOR_LINEAR_SYSTEMS 0x1254
#define CYG_PCI_VENDOR_OPTIBASE 0x1255
#define CYG_PCI_VENDOR_PERCEPTIVE 0x1256
#define CYG_PCI_VENDOR_VERTEX 0x1257
#define CYG_PCI_VENDOR_GILBARCO 0x1258
#define CYG_PCI_VENDOR_ALLIED_TSYN 0x1259
#define CYG_PCI_VENDOR_ABB_PWR 0x125a
#define CYG_PCI_VENDOR_ASIX 0x125b
#define CYG_PCI_VENDOR_AURORA 0x125c
#define CYG_PCI_VENDOR_ESS 0x125d
#define CYG_PCI_VENDOR_SPECVIDEO 0x125e
#define CYG_PCI_VENDOR_CONCURRENT 0x125f
#define CYG_PCI_VENDOR_HARRIS 0x1260
#define CYG_PCI_VENDOR_MATSUSHITA_0x1261 0x1261
#define CYG_PCI_VENDOR_ES_COMP 0x1262
#define CYG_PCI_VENDOR_SONIC_SOL 0x1263
#define CYG_PCI_VENDOR_AVAL_NAG 0x1264
#define CYG_PCI_VENDOR_CASIO 0x1265
#define CYG_PCI_VENDOR_MICRODYNE 0x1266
#define CYG_PCI_VENDOR_SA_TELECOM 0x1267
#define CYG_PCI_VENDOR_TEKTRONIX 0x1268
#define CYG_PCI_VENDOR_THOMSON_CSF 0x1269
#define CYG_PCI_VENDOR_LEXMARK 0x126a
#define CYG_PCI_VENDOR_ADAX 0x126b
#define CYG_PCI_VENDOR_NORTEL 0x126c
#define CYG_PCI_VENDOR_SPLASH 0x126d
#define CYG_PCI_VENDOR_SUMITOMO 0x126e
#define CYG_PCI_VENDOR_SIL_MOTION 0x126f
#define CYG_PCI_VENDOR_OLYMPUS 0x1270
#define CYG_PCI_VENDOR_GW_INSTR 0x1271
#define CYG_PCI_VENDOR_TELEMATICS 0x1272
#define CYG_PCI_VENDOR_HUGHES 0x1273
#define CYG_PCI_VENDOR_ENSONIQ 0x1274
#define CYG_PCI_VENDOR_NETAPP 0x1275
#define CYG_PCI_VENDOR_SW_NET_TECH 0x1276
#define CYG_PCI_VENDOR_COMSTREAM 0x1277
#define CYG_PCI_VENDOR_TRANSTECH 0x1278
#define CYG_PCI_VENDOR_TRANSMETA 0x1279
#define CYG_PCI_VENDOR_ROCKWELL_SEMI 0x127a
#define CYG_PCI_VENDOR_PIXERA 0x127b
#define CYG_PCI_VENDOR_CROSSPOINT 0x127c
#define CYG_PCI_VENDOR_VELA_RES 0x127d
#define CYG_PCI_VENDOR_WINNOW 0x127e
#define CYG_PCI_VENDOR_FUJIFILM_0x127f 0x127f
#define CYG_PCI_VENDOR_PHOTOSCRIPT 0x1280
#define CYG_PCI_VENDOR_YOKOGAWA 0x1281
#define CYG_PCI_VENDOR_DAVICOM 0x1282
#define CYG_PCI_VENDOR_ITEXPRESS 0x1283
#define CYG_PCI_VENDOR_SAHARA 0x1284
#define CYG_PCI_VENDOR_PLAT_TECH 0x1285
#define CYG_PCI_VENDOR_MAZET 0x1286
#define CYG_PCI_VENDOR_LUXSONOR 0x1287
#define CYG_PCI_VENDOR_TIMESTEP 0x1288
#define CYG_PCI_VENDOR_AVC_TECH 0x1289
#define CYG_PCI_VENDOR_ASANTE 0x128a
#define CYG_PCI_VENDOR_TRANSWITCH 0x128b
#define CYG_PCI_VENDOR_RETIX 0x128c
#define CYG_PCI_VENDOR_G2_NET 0x128d
#define CYG_PCI_VENDOR_SAMHO 0x128e
#define CYG_PCI_VENDOR_TATENO 0x128f
#define CYG_PCI_VENDOR_SORD 0x1290
#define CYG_PCI_VENDOR_NCS_COMP 0x1291
#define CYG_PCI_VENDOR_TRITECH 0x1292
#define CYG_PCI_VENDOR_M_REALITY 0x1293
#define CYG_PCI_VENDOR_RHETOREX 0x1294
#define CYG_PCI_VENDOR_IMAGENATION 0x1295
#define CYG_PCI_VENDOR_KOFAX 0x1296
#define CYG_PCI_VENDOR_HOLCO 0x1297
#define CYG_PCI_VENDOR_SPELLCASTER 0x1298
#define CYG_PCI_VENDOR_KNOW_TECH 0x1299
#define CYG_PCI_VENDOR_VMETRO 0x129a
#define CYG_PCI_VENDOR_IMG_ACCESS 0x129b
#define CYG_PCI_VENDOR_COMPCORE 0x129d
#define CYG_PCI_VENDOR_VICTOR_JPN 0x129e
#define CYG_PCI_VENDOR_OEC_MED 0x129f
#define CYG_PCI_VENDOR_A_B 0x12a0
#define CYG_PCI_VENDOR_SIMPACT 0x12a1
#define CYG_PCI_VENDOR_NEWGEN 0x12a2
#define CYG_PCI_VENDOR_LUCENT 0x12a3
#define CYG_PCI_VENDOR_NTT_ELECT 0x12a4
#define CYG_PCI_VENDOR_VISION_DYN 0x12a5
#define CYG_PCI_VENDOR_SCALABLE 0x12a6
#define CYG_PCI_VENDOR_AMO 0x12a7
#define CYG_PCI_VENDOR_NEWS_DATACOM 0x12a8
#define CYG_PCI_VENDOR_XIOTECH 0x12a9
#define CYG_PCI_VENDOR_SDL 0x12aa
#define CYG_PCI_VENDOR_YUAN_YUAN 0x12ab
#define CYG_PCI_VENDOR_MEASUREX 0x12ac
#define CYG_PCI_VENDOR_MULTIDATA 0x12ad
#define CYG_PCI_VENDOR_ALTEON 0x12ae
#define CYG_PCI_VENDOR_TDK_USA 0x12af
#define CYG_PCI_VENDOR_JORGE_SCI 0x12b0
#define CYG_PCI_VENDOR_GAMMALINK 0x12b1
#define CYG_PCI_VENDOR_GEN_SIGNAL 0x12b2
#define CYG_PCI_VENDOR_INTER_FACE 0x12b3
#define CYG_PCI_VENDOR_FUTURE_TEL 0x12b4
#define CYG_PCI_VENDOR_GRANITE 0x12b5
#define CYG_PCI_VENDOR_NAT_MICRO 0x12b6
#define CYG_PCI_VENDOR_ACUMEN 0x12b7
#define CYG_PCI_VENDOR_KORG 0x12b8
#define CYG_PCI_VENDOR_US_ROBOTICS 0x12b9
#define CYG_PCI_VENDOR_BITTWARE 0x12ba
#define CYG_PCI_VENDOR_NIPPON_UNI 0x12bb
#define CYG_PCI_VENDOR_ARRAY_MICRO 0x12bc
#define CYG_PCI_VENDOR_COMPUTERM 0x12bd
#define CYG_PCI_VENDOR_ANCHOR_CHIPS 0x12be
#define CYG_PCI_VENDOR_FUJIFILM_0x12bf 0x12bf
#define CYG_PCI_VENDOR_INFIMED 0x12c0
#define CYG_PCI_VENDOR_GMM_RES 0x12c1
#define CYG_PCI_VENDOR_MENTEC 0x12c2
#define CYG_PCI_VENDOR_HOLTEK 0x12c3
#define CYG_PCI_VENDOR_CONN_TECH 0x12c4
#define CYG_PCI_VENDOR_PICTUREL 0x12c5
#define CYG_PCI_VENDOR_MITANI 0x12c6
#define CYG_PCI_VENDOR_DIALOGIC 0x12c7
#define CYG_PCI_VENDOR_G_FORCE 0x12c8
#define CYG_PCI_VENDOR_GIGI_OPS 0x12c9
#define CYG_PCI_VENDOR_I_C_ENGINES 0x12ca
#define CYG_PCI_VENDOR_ANTEX 0x12cb
#define CYG_PCI_VENDOR_PLUTO 0x12cc
#define CYG_PCI_VENDOR_AIMS_LAB 0x12cd
#define CYG_PCI_VENDOR_NETSPEED 0x12ce
#define CYG_PCI_VENDOR_PROPHET 0x12cf
#define CYG_PCI_VENDOR_GDE_SYS 0x12d0
#define CYG_PCI_VENDOR_PSITECH 0x12d1
#define CYG_PCI_VENDOR_NVIDIA_0x12d2 0x12d2
#define CYG_PCI_VENDOR_VINGMED 0x12d3
#define CYG_PCI_VENDOR_DGM_S 0x12d4
#define CYG_PCI_VENDOR_EQUATOR 0x12d5
#define CYG_PCI_VENDOR_ANALOGIC 0x12d6
#define CYG_PCI_VENDOR_BIOTRONIC 0x12d7
#define CYG_PCI_VENDOR_PERICOM 0x12d8
#define CYG_PCI_VENDOR_ACULAB 0x12d9
#define CYG_PCI_VENDOR_TRUE_TIME 0x12da
#define CYG_PCI_VENDOR_ANNAPOLIS 0x12db
#define CYG_PCI_VENDOR_SYMICRON 0x12dc
#define CYG_PCI_VENDOR_MGI 0x12dd
#define CYG_PCI_VENDOR_RAINBOW 0x12de
#define CYG_PCI_VENDOR_SBS_TECH 0x12df
#define CYG_PCI_VENDOR_CHASE 0x12e0
#define CYG_PCI_VENDOR_NINTENDO 0x12e1
#define CYG_PCI_VENDOR_DATUM 0x12e2
#define CYG_PCI_VENDOR_IMATION 0x12e3
#define CYG_PCI_VENDOR_BROOKTROUT 0x12e4
#define CYG_PCI_VENDOR_CIREL 0x12e6
#define CYG_PCI_VENDOR_SEBRING 0x12e7
#define CYG_PCI_VENDOR_CRISC 0x12e8
#define CYG_PCI_VENDOR_GE_SPACENET 0x12e9
#define CYG_PCI_VENDOR_ZUKEN 0x12ea
#define CYG_PCI_VENDOR_AUREAL 0x12eb
#define CYG_PCI_VENDOR_3A_INTL 0x12ec
#define CYG_PCI_VENDOR_OPTIVISION 0x12ed
#define CYG_PCI_VENDOR_ORANGE_MICRO 0x12ee
#define CYG_PCI_VENDOR_VIENNA 0x12ef
#define CYG_PCI_VENDOR_PENTEK 0x12f0
#define CYG_PCI_VENDOR_SORENSON 0x12f1
#define CYG_PCI_VENDOR_GAMMAGRAPHX 0x12f2
#define CYG_PCI_VENDOR_MEGATEL 0x12f4
#define CYG_PCI_VENDOR_FORKS_0x12f5 0x12f5
#define CYG_PCI_VENDOR_DAWSON_FR 0x12f6
#define CYG_PCI_VENDOR_COGNEX 0x12f7
#define CYG_PCI_VENDOR_ELECTRONIC_DESIGN 0x12f8
#define CYG_PCI_VENDOR_FFT 0x12f9
#define CYG_PCI_VENDOR_ESD 0x12fe
#define CYG_PCI_VENDOR_RADISYS 0x1331
#define CYG_PCI_VENDOR_VIDEOMAIL 0x1335
#define CYG_PCI_VENDOR_ODETICS 0x1347
#define CYG_PCI_VENDOR_ABB_NETWORK_PARTN 0x135d
#define CYG_PCI_VENDOR_PTSC 0x137e
#define CYG_PCI_VENDOR_SYMPHONY_0x1c1c 0x1c1c
#define CYG_PCI_VENDOR_TEKRAM_0x1de1 0x1de1
#define CYG_PCI_VENDOR_CHAINTECH_0x270f 0x270f
#define CYG_PCI_VENDOR_HANSOL 0x3000
#define CYG_PCI_VENDOR_3DLABS 0x3d3d
#define CYG_PCI_VENDOR_AVANCE_0x4005 0x4005
#define CYG_PCI_VENDOR_DEC_0x4143 0x4143
#define CYG_PCI_VENDOR_UMAX_COMP 0x4680
#define CYG_PCI_VENDOR_BUSLOGIC 0x4b10
#define CYG_PCI_VENDOR_S3 0x5333
#define CYG_PCI_VENDOR_TU_BERLIN 0x5455
#define CYG_PCI_VENDOR_NETPOWER_0x5700 0x5700
#define CYG_PCI_VENDOR_C4T 0x6374
#define CYG_PCI_VENDOR_QUANCOM 0x8008
#define CYG_PCI_VENDOR_INTEL 0x8086
#define CYG_PCI_VENDOR_TRIGEM_0x8800 0x8800
#define CYG_PCI_VENDOR_SIL_MAGIC 0x8888
#define CYG_PCI_VENDOR_COMPUTONE 0x8e0e
#define CYG_PCI_VENDOR_ADAPTEC_0x9004 0x9004
#define CYG_PCI_VENDOR_ADAPTEC_0x9005 0x9005
#define CYG_PCI_VENDOR_ATRONICS 0x907f
#define CYG_PCI_VENDOR_MOT_ENGRG 0xc0fe
#define CYG_PCI_VENDOR_DY4 0xd4d4
#define CYG_PCI_VENDOR_TIGER_JET 0xe159
#define CYG_PCI_VENDOR_ARC 0xedd8
#define CYG_PCI_VENDOR_BAD 0xffff
//----------------------- AUTO GENERATED END ---------------------------
 
#define CYG_PCI_VENDOR_UNDEFINED 0xffff
 
//----------------------------------------------------------------------
// PCI Class IDs
#define CYG_PCI_CLASS_OLD_NONVGA 0x000000
#define CYG_PCI_CLASS_OLD_VGA 0x000100
 
#define CYG_PCI_CLASS_STORAGE_SCSI 0x010000
#define CYG_PCI_CLASS_STORAGE_IDE 0x010100
#define CYG_PCI_CLASS_STORAGE_FLOPPY 0x010200
#define CYG_PCI_CLASS_STORAGE_IPI 0x010300
#define CYG_PCI_CLASS_STORAGE_RAID 0x010400
#define CYG_PCI_CLASS_STORAGE_OTHER 0x018000
 
#define CYG_PCI_CLASS_NET_ETHERNET 0x020000
#define CYG_PCI_CLASS_NET_TOKEN_RING 0x020100
#define CYG_PCI_CLASS_NET_FDDI 0x020200
#define CYG_PCI_CLASS_NET_ATM 0x020300
#define CYG_PCI_CLASS_NET_OTHER 0x028000
 
#define CYG_PCI_CLASS_DISPLAY_PC_COMPAT_VGA 0x030000
#define CYG_PCI_CLASS_DISPLAY_PC_COMPAT_8514 0x030001
#define CYG_PCI_CLASS_DISPLAY_XGA 0x030100
#define CYG_PCI_CLASS_DISPLAY_OTHER 0x038000
 
#define CYG_PCI_CLASS_MM_VIDEO 0x040000
#define CYG_PCI_CLASS_MM_AUDIO 0x040100
#define CYG_PCI_CLASS_MM_OTHER 0x048000
 
#define CYG_PCI_CLASS_MEM_RAM 0x050000
#define CYG_PCI_CLASS_MEM_FLASH 0x050100
#define CYG_PCI_CLASS_MEM_OTHER 0x058000
 
#define CYG_PCI_CLASS_BRIDGE_HOST_PCI 0x060000
#define CYG_PCI_CLASS_BRIDGE_PCI_ISA 0x060100
#define CYG_PCI_CLASS_BRIDGE_PCI_EISA 0x060200
#define CYG_PCI_CLASS_BRIDGE_PCI_MC 0x060300
#define CYG_PCI_CLASS_BRIDGE_PCI_PCI 0x060400
#define CYG_PCI_CLASS_BRIDGE_PCI_PCMCIA 0x060500
#define CYG_PCI_CLASS_BRIDGE_PCI_NUBUS 0x060600
#define CYG_PCI_CLASS_BRIDGE_PCI_CARDBUS 0x060700
#define CYG_PCI_CLASS_BRIDGE_OTHER 0x068000
 
#define CYG_PCI_CLASS_SCC_SERIAL_GENERIC 0x070000
#define CYG_PCI_CLASS_SCC_SERIAL_16450 0x070001
#define CYG_PCI_CLASS_SCC_SERIAL_16550 0x070002
#define CYG_PCI_CLASS_SCC_PARALLEL_STANDARD 0x070100
#define CYG_PCI_CLASS_SCC_PARALLEL_BIDRECTIONAL 0x070101
#define CYG_PCI_CLASS_SCC_PARALLEL_ECP 0x070102
#define CYG_PCI_CLASS_SCC_OTHER 0x078000
 
#define CYG_PCI_CLASS_BSP_PIC_GENERIC 0x080000
#define CYG_PCI_CLASS_BSP_PIC_ISA 0x080001
#define CYG_PCI_CLASS_BSP_PIC_PCI 0x080002
#define CYG_PCI_CLASS_BSP_DMA_GENERIC 0x080100
#define CYG_PCI_CLASS_BSP_DMA_ISA 0x080101
#define CYG_PCI_CLASS_BSP_DMA_EISA 0x080102
#define CYG_PCI_CLASS_BSP_TIMER_GENERIC 0x080200
#define CYG_PCI_CLASS_BSP_TIMER_ISA 0x080201
#define CYG_PCI_CLASS_BSP_TIMER_EISA 0x080202
#define CYG_PCI_CLASS_BSP_RTC_GENERIC 0x080300
#define CYG_PCI_CLASS_BSP_RTC_ISA 0x080301
#define CYG_PCI_CLASS_BSP_OTHER 0x088000
 
#define CYG_PCI_CLASS_INPUT_KEYBOARD 0x090000
#define CYG_PCI_CLASS_INPUT_DIGITIZER 0x090100
#define CYG_PCI_CLASS_INPUT_MOUSE 0x090200
#define CYG_PCI_CLASS_INPUT_OTHER 0x098000
 
#define CYG_PCI_CLASS_DOCKING_GENERIC 0x0a0000
#define CYG_PCI_CLASS_DOCKING_OTHER 0x0a8000
 
#define CYG_PCI_CLASS_CPU_I386 0x0b0000
#define CYG_PCI_CLASS_CPU_I486 0x0b0100
#define CYG_PCI_CLASS_CPU_PENTIUM 0x0b0200
#define CYG_PCI_CLASS_CPU_ALPHA 0x0b1000
#define CYG_PCI_CLASS_CPU_POWERPC 0x0b2000
#define CYG_PCI_CLASS_CPU_COPROCESSOR 0x0b8000
 
#define CYG_PCI_CLASS_SBC_FIREWIRE 0x0c0000
#define CYG_PCI_CLASS_SBC_ACCESSBUS 0x0c0100
#define CYG_PCI_CLASS_SBC_SSA 0x0c0200
#define CYG_PCI_CLASS_SBC_USB 0x0c0300
#define CYG_PCI_CLASS_SBC_FIBRE_CHANNEL 0x0c0400
 
#define CYG_PCI_CLASS_UNKNOWN 0xff0000
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_PCI_CFG_H
// End of pci_cfg.h
/v2_0/include/pci.h
0,0 → 1,359
#ifndef CYGONCE_PCI_H
#define CYGONCE_PCI_H
//=============================================================================
//
// pci.h
//
// PCI library
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov, from design by nickg
// Contributors: jskov
// Date: 1999-08-09
// Purpose: PCI configuration access
// Usage:
// #include <cyg/io/pci.h>
// Description:
// This library provides a set of routines for accessing
// the PCI bus configuration space in a portable manner.
// This is provided by two APIs. The high level API (defined
// by this file) is used by device drivers, or other code, to
// access the PCI configuration space portably. The low level
// API (see pci_hw.h) is used by the PCI library itself
// to access the hardware in a platform-specific manner and
// may also be used by device drivers to access the PCI
// configuration space directly.
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <cyg/infra/cyg_type.h>
#include <cyg/io/pci_cfg.h>
#include <cyg/io/pci_hw.h>
 
//------------------------------------------------------------------
// The PCI memory space can span 64 bits, IO space only 32 bits
typedef CYG_WORD64 CYG_PCI_ADDRESS64;
typedef CYG_WORD32 CYG_PCI_ADDRESS32;
 
//------------------------------------------------------------------
// Macros for manufacturing and decomposing device ids
typedef CYG_WORD32 cyg_pci_device_id; // PCI device ID
 
#define CYG_PCI_DEV_MAKE_ID(__bus,__devfn) (((__bus)<<16)|((__devfn)<<8))
#define CYG_PCI_DEV_GET_BUS(__devid) ((__devid>>16)&0xFF)
#define CYG_PCI_DEV_GET_DEVFN(__devid) ((__devid>>8)&0xFF)
 
#define CYG_PCI_NULL_DEVID 0xffffffff
#define CYG_PCI_NULL_DEVFN 0xffff
 
//------------------------------------------------------------------
// PCI device data definitions and structures
 
typedef enum {
CYG_PCI_HEADER_NORMAL = 0,
CYG_PCI_HEADER_BRIDGE = 1,
CYG_PCI_HEADER_CARDBUS_BRIDGE = 2
} cyg_pci_header_type;
 
typedef struct // PCI device data
{
cyg_pci_device_id devid; // ID of this device
 
// The following fields are read out of the
// config space for this device.
 
cyg_uint16 vendor; // vendor ID
cyg_uint16 device; // device ID
cyg_uint16 command; // command register
cyg_uint16 status; // status register
cyg_uint32 class_rev; // class+revision
cyg_uint8 cache_line_size; // cache line size
cyg_uint8 latency_timer; // latency timer
cyg_pci_header_type header_type; // header type
cyg_uint8 bist; // Built-in Self-Test
cyg_uint32 base_address[6]; // Memory base address registers
 
// The following fields are used by the resource allocation
// routines to keep track of allocated resources.
cyg_uint32 num_bars;
cyg_uint32 base_size[6]; // Memory size for each base address
cyg_uint32 base_map[6]; // Physical address mapped
 
CYG_ADDRWORD hal_vector; // HAL interrupt vector used by
// device if int_line!=0
 
// One of the following unions will be filled in according to
// the value of the header_type field.
 
union
{
struct
{
cyg_uint32 cardbus_cis; // CardBus CIS Pointer
cyg_uint16 sub_vendor; // subsystem vendor id
cyg_uint16 sub_id; // subsystem id
cyg_uint32 rom_address; // ROM address register
cyg_uint8 cap_list; // capability list
cyg_uint8 reserved1[7];
cyg_uint8 int_line; // interrupt line
cyg_uint8 int_pin; // interrupt pin
cyg_uint8 min_gnt; // timeslice request
cyg_uint8 max_lat; // priority-level request
} normal;
struct
{
cyg_uint8 pri_bus; // primary bus number
cyg_uint8 sec_bus; // secondary bus number
cyg_uint8 sub_bus; // subordinate bus number
cyg_uint8 sec_latency_timer; // secondary bus latency
cyg_uint8 io_base;
cyg_uint8 io_limit;
cyg_uint16 sec_status; // secondary bus status
cyg_uint16 mem_base;
cyg_uint16 mem_limit;
cyg_uint16 prefetch_base;
cyg_uint16 prefetch_limit;
cyg_uint32 prefetch_base_upper32;
cyg_uint32 prefetch_limit_upper32;
cyg_uint16 io_base_upper16;
cyg_uint16 io_limit_upper16;
cyg_uint8 reserved1[4];
cyg_uint32 rom_address; // ROM address register
cyg_uint8 int_line; // interrupt line
cyg_uint8 int_pin; // interrupt pin
cyg_uint16 control; // bridge control
} bridge;
struct
{
// Not yet supported
} cardbus_bridge;
} header;
} cyg_pci_device;
//------------------------------------------------------------------------
// Init
externC void cyg_pci_init( void );
 
//------------------------------------------------------------------------
// Common device configuration access functions
 
// This function gets the PCI configuration information for the
// device indicated in devid. The common fields of the cyg_pci_device
// structure, and the appropriate fields of the relevant header union
// member are filled in from the device's configuration space. If the
// device has not been enabled, then this function will also fetch
// the size and type information from the base address registers and
// place it in the base_size[] array.
externC void cyg_pci_get_device_info ( cyg_pci_device_id devid,
cyg_pci_device *dev_info );
 
 
// This function sets the PCI configuration information for the
// device indicated in devid. Only the configuration space registers
// that are writable are actually written. Once all the fields have
// been written, the device info will be read back into *dev_info, so
// that it reflects the true state of the hardware.
externC void cyg_pci_set_device_info ( cyg_pci_device_id devid,
cyg_pci_device *dev_info );
 
//------------------------------------------------------------------------
// Device find functions
 
// Searches the PCI bus configuration space for a device with the
// given vendor and device ids. The search starts at the device
// pointed to by devid, or at the first slot if it contains
// CYG_PCI_NULL_DEVID. *devid will be updated with the ID of the next
// device found. Returns true if one is found and false if not.
externC cyg_bool cyg_pci_find_device( cyg_uint16 vendor, cyg_uint16 device,
cyg_pci_device_id *devid );
 
 
// Searches the PCI bus configuration space for a device with the
// given class code. The search starts at the device pointed to by
// devid, or at the first slot if it contains CYG_PCI_NULL_DEVID.
// *devid will be updated with the ID of the next device found.
// Returns true if one is found and false if not.
externC cyg_bool cyg_pci_find_class( cyg_uint32 dev_class,
cyg_pci_device_id *devid );
 
 
 
// Searches the PCI bus configuration space for a device whose properties
// match those required by the match_func, which the user supplies. The
// match_func's arguments are vendor, device, class exactly as they might
// be in the two APIs above. The additional parameter is for any state
// which a caller might wish available to its callback routine.
// The search starts at the device pointed to by
// devid, or at the first slot if it contains CYG_PCI_NULL_DEVID. *devid
// will be updated with the ID of the next device found. Returns true if
// one is found and false if not.
typedef cyg_bool (cyg_pci_match_func)( cyg_uint16,/* vendor */
cyg_uint16,/* device */
cyg_uint32,/* class */
void * /* arbitrary user data */ );
externC cyg_bool cyg_pci_find_matching( cyg_pci_match_func *matchp,
void * match_callback_data,
cyg_pci_device_id *devid );
 
 
// Searches the PCI configuration space for the next valid device
// after cur_devid. If cur_devid is given the value
// CYG_PCI_NULL_DEVID, then the search starts at the first slot. It
// is permitted for next_devid to point to the cur_devid. Returns
// true if another device is found and false if not.
externC cyg_bool cyg_pci_find_next( cyg_pci_device_id cur_devid,
cyg_pci_device_id *next_devid );
 
//------------------------------------------------------------------------
// Resource Allocation
// These routines allocate memory and IO space to PCI devices.
 
// Allocate memory and IO space to all base address registers using
// the current memory and IO base addresses in the library. If
// dev_info does not contain valid base_size[] entries, then the
// result is false.
externC cyg_bool cyg_pci_configure_device( cyg_pci_device *dev_info );
 
// Allocate memory and IO space for all devices found on the given
// bus and its subordinate busses. This routine recurses when a
// PCI-to-PCI bridge is encountered. The next_bus argument points
// to a variable holding the bus number of the next PCI bus to
// be allocated when a bridge is encountered. This routine returns
// true if successful, false if unsuccessful.
externC cyg_bool cyg_pci_configure_bus( cyg_uint8 bus,
cyg_uint8 *next_bus );
 
// These routines set the base addresses for memory and IO mappings
// to be used by the memory allocation routines. Normally these base
// addresses will be set to default values based on the platform,
// these routines allow those to be changed by application code if
// necessary.
externC void cyg_pci_set_memory_base( CYG_PCI_ADDRESS64 base );
externC void cyg_pci_set_io_base( CYG_PCI_ADDRESS32 base );
 
// These routines allocate memory or IO space to the base address
// register indicated by bar. The base address in *base will be
// correctly aligned and the address of the next free location will
// be written back into it if the allocation succeeds. If the base
// address register is of the wrong type for this allocation, or
// dev_info does not contain valid base_size[] entries, the result is
// false.
externC cyg_bool cyg_pci_allocate_memory( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS64 *base );
externC cyg_bool cyg_pci_allocate_io( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS32 *base );
 
// Translate the device's PCI interrupt (INTA#-INTD#) to the
// associated HAL vector. This may also depend on which slot the
// device occupies. If the device may generate interrupts, the
// translated vector number will be stored in vec and the result is
// true. Otherwise the result is false.
externC cyg_bool cyg_pci_translate_interrupt( cyg_pci_device *dev_info,
CYG_ADDRWORD *vec );
 
 
//----------------------------------------------------------------------
// Specific device configuration access functions
 
// Read functions
// These functions read registers of the appropriate size from the
// configuration space of the given device. They should mainly be
// used to access registers that are device specific. General PCI
// registers are best accessed through cyg_pci_get_device_info().
externC void cyg_pci_read_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 *val);
externC void cyg_pci_read_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 *val);
externC void cyg_pci_read_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 *val);
 
// Write functions
// These functions write registers of the appropriate size to the
// configuration space of the given device. They should mainly be
// used to access registers that are device specific. General PCI
// registers are best accessed through
// cyg_pci_get_device_info(). Writing the general registers this way
// may render the contents of a cyg_pci_device structure invalid.
externC void cyg_pci_write_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 val);
externC void cyg_pci_write_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 val);
externC void cyg_pci_write_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 val);
 
 
//----------------------------------------------------------------------
// Functions private to the PCI library. These should only be used by
// tests.
externC cyg_bool cyg_pci_allocate_memory_priv(cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS64 *base,
CYG_PCI_ADDRESS64 *assigned_addr);
externC cyg_bool cyg_pci_allocate_io_priv( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS32 *base,
CYG_PCI_ADDRESS32 *assigned_addr);
 
 
//----------------------------------------------------------------------
// Bus probing limits.
// Note: these can be overridden by the platform
#ifndef CYG_PCI_MAX_BUS
#define CYG_PCI_MAX_BUS 8 // Eight is enough?
#endif
#ifndef CYG_PCI_MAX_DEV
#define CYG_PCI_MAX_DEV 32
#endif
#ifndef CYG_PCI_MIN_DEV
#define CYG_PCI_MIN_DEV 0
#endif
#ifndef CYG_PCI_MAX_FN
#define CYG_PCI_MAX_FN 8
#endif
#ifndef CYG_PCI_MAX_BAR
#define CYG_PCI_MAX_BAR 6
#endif
 
//-----------------------------------------------------------------------------
#endif // ifndef CYGONCE_PCI_H
// End of pci.h
/v2_0/doc/pci.sgml
0,0 → 1,630
<!-- {{{ Banner -->
 
<!-- =============================================================== -->
<!-- -->
<!-- pci.sgml -->
<!-- -->
<!-- eCos PCI support -->
<!-- -->
<!-- =============================================================== -->
<!-- ####COPYRIGHTBEGIN#### -->
<!-- -->
<!-- =============================================================== -->
<!-- Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. -->
<!-- This material may be distributed only subject to the terms -->
<!-- and conditions set forth in the Open Publication License, v1.0 -->
<!-- or later (the latest version is presently available at -->
<!-- http://www.opencontent.org/openpub/) -->
<!-- Distribution of the work or derivative of the work in any -->
<!-- standard (paper) book form is prohibited unless prior -->
<!-- permission obtained from the copyright holder -->
<!-- =============================================================== -->
<!-- -->
<!-- ####COPYRIGHTEND#### -->
<!-- =============================================================== -->
<!-- #####DESCRIPTIONBEGIN#### -->
<!-- -->
<!-- ####DESCRIPTIONEND#### -->
<!-- =============================================================== -->
 
<!-- }}} -->
 
<PART id="io-pci">
<TITLE>PCI Library</TITLE>
<CHAPTER id="ecos-pci-library">
<TITLE>The eCos PCI Library</TITLE>
<PARA>The PCI library is an optional part of eCos, and is only
applicable to some platforms.</PARA>
<SECT1 id="pci-library">
<TITLE>PCI Library</TITLE>
<PARA>The eCos PCI library provides the following functionality:</PARA>
<orderedlist>
<listitem><para>Scan the PCI bus for specific devices or devices of a certain
class.</para></listitem>
<listitem><para>Read and change generic PCI information.</para></listitem>
<listitem><para>Read and change device-specific PCI information.</para></listitem>
<listitem><para>Allocate PCI memory and IO space to devices.</para></listitem>
<listitem><para>Translate a device's PCI interrupts to equivalent HAL
vectors.</para></listitem>
</orderedlist>
<PARA>Example code fragments are from the pci1 test (see <filename>io/pci/&lt;release&gt;/tests/pci1.c</filename>).</PARA>
<PARA>All of the functions described below are declared in the header
file <filename>&lt;cyg/io/pci.h&gt;</filename> which all
clients of the PCI library should include.</PARA>
<SECT2>
<TITLE>PCI Overview</TITLE>
<PARA>The PCI bus supports several address spaces: memory, IO, and configuration. All PCI
devices must support mandatory configuration space registers. Some devices may also present
IO mapped and/or memory mapped resources. Before devices on the bus can be used, they must
be configured. Basically, configuration will assign PCI IO and/or memory address ranges to
each device and then enable that device. All PCI devices have a unique address in
configuration space. This address is comprised of a bus number, a device number, and a
function number. Special devices called bridges are used to connect two PCI busses together.
The PCI standard supports up to 255 busses with each bus having up to 32 devices and each
device having up to 8 functions.
</PARA>
<PARA>The environment in which a platform operates will dictate if and how eCos should
configure devices on the PCI bus. If the platform acts as a host on a single PCI bus,
then devices may be configured individually from the relevant device driver. If the
platform is not the primary host, such as a PCI card plugged into a PC, configuration
of PCI devices may be left to the PC BIOS. If PCI-PCI bridges are involved, configuration
of all devices is best done all at once early in the boot process. This is because all
devices on the secondary side of a bridge must be evaluated for their IO and memory space
requirements before the bridge can be configured.
</PARA>
</SECT2>
<SECT2>
<TITLE>Initializing the bus</TITLE>
<PARA>The PCI bus needs to be initialized before it can be used.
This only needs to be done once - some HALs may do it as part of
the platform initialization procedure, other HALs may leave it to
the application or device drivers to do it. The following function
will do the initialization only once, so it's safe to call from
multiple drivers:</PARA>
<PROGRAMLISTING>void cyg_pci_init( void );</PROGRAMLISTING>
</SECT2>
<SECT2>
<TITLE>Scanning for devices</TITLE>
<PARA>After the bus has been initialized, it is possible to scan
it for devices. This is done using the function:</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_find_next( cyg_pci_device_id cur_devid,
cyg_pci_device_id *next_devid );
</PROGRAMLISTING>
<PARA>It will scan the bus for devices starting at <parameter>cur_devid
</parameter>. If a device is found, its devid is stored in <parameter>
next_devid</parameter> and the function returns <constant>true</constant>.
</PARA>
<PARA>The <filename>pci1</filename> test's outer loop looks like:</PARA>
<PROGRAMLISTING>
cyg_pci_init();
if (cyg_pci_find_next(CYG_PCI_NULL_DEVID, &amp;devid)) {
do {
&lt;use devid&gt;
} while (cyg_pci_find_next(devid, &amp;devid));
}</PROGRAMLISTING>
<PARA>What happens is that the bus gets initialized and a scan is
started. <literal>CYG_PCI_NULL_DEVID</literal> causes <function>
cyg_pci_find_next()</function> to restart its scan. If the bus does not
contain any devices, the first call to <function>cyg_pci_find_next()</function>
will return <constant>false</constant>.</PARA>
<PARA>If the call returns <constant>true</constant>, a loop is entered where
the found devid is used. After devid processing has completed, the next device
on the bus is searched for; <function>cyg_pci_find_next()</function>
continues its scan from the current devid. The loop terminates when
no more devices are found on the bus.</PARA>
<PARA>This is the generic way of scanning the bus, enumerating all
the devices on the bus. But if the application is looking for a
device of a given device class (e.g., a SCSI controller), or a specific
vendor device, these functions simplify the task a bit:</PARA>
<PROGRAMLISTING>
cyg_bool cyg_pci_find_class( cyg_uint32 dev_class,
cyg_pci_device_id *devid );
cyg_bool cyg_pci_find_device( cyg_uint16 vendor, cyg_uint16 device,
cyg_pci_device_id *devid );</PROGRAMLISTING>
<PARA>They work just like <function>cyg_pci_find_next()</function>,
but only return true when the dev_class or vendor/device
qualifiers match those of a device on the bus. The devid serves
as both an input and an output operand: the scan starts at the given
device, and if a device is found devid is updated with the value
for the found device.</PARA>
<PARA>The <filename>&lt;cyg/io/pci_cfg.h&gt;</filename> header
file (included by <filename>pci.h</filename>) contains definitions for PCI
class, vendor and device codes which can be used as arguments to the find
functions.
The list of vendor and device codes is not complete: add new codes
as necessary. If possible also register the codes at the PCI Code
List (<ulink url="http://www.yourvote.com/pci">http://www.yourvote.com/pci)
</ulink> which is where the eCos definitions are generated from.</PARA>
</SECT2>
<SECT2>
<TITLE>Generic config information</TITLE>
<PARA>When a valid device ID (devid) is found using one of the above
functions, the associated device can be queried and controlled using
the functions:</PARA>
<PROGRAMLISTING>
void cyg_pci_get_device_info ( cyg_pci_device_id devid,
cyg_pci_device *dev_info );
void cyg_pci_set_device_info ( cyg_pci_device_id devid,
cyg_pci_device *dev_info );</PROGRAMLISTING>
<PARA>The <structname>cyg_pci_device structure</structname> (defined in
<filename>pci.h</filename>) primarily holds information as described by the PCI
specification <link linkend=pci-spec>[1]</link>.
The <filename>pci1</filename> test prints out some of this information:</PARA>
<PROGRAMLISTING> // Get device info
cyg_pci_get_device_info(devid, &amp;dev_info);
diag_printf("\n Command 0x%04x, Status 0x%04x\n",
dev_info.command, dev_info.status);</PROGRAMLISTING>
<PARA>The command register can also be written to, controlling (among
other things) whether the device responds to IO and memory access
from the bus. </PARA>
</SECT2>
<SECT2>
<TITLE>Specific config information</TITLE>
<PARA>The above functions only allow access to generic PCI config
registers. A device can have extra config registers not specified
by the PCI specification. These can be accessed with these functions:</PARA>
<PROGRAMLISTING>
void cyg_pci_read_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 *val);
void cyg_pci_read_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 *val);
void cyg_pci_read_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 *val);
void cyg_pci_write_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 val);
void cyg_pci_write_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 val);
void cyg_pci_write_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 val);
</PROGRAMLISTING>
<PARA>The write functions should only be used for device-specific
config registers since using them on generic registers may invalidate
the contents of a previously fetched cyg_pci_device
structure.</PARA>
</SECT2>
<SECT2>
<TITLE>Allocating memory</TITLE>
<PARA>A PCI device ignores all IO and memory access from the PCI
bus until it has been activated. Activation cannot happen until
after device configuration. Configuration means telling the device
where it should map its IO and memory resources. This is done with
one of the following functions::</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_configure_device( cyg_pci_device *dev_info );
cyg_bool cyg_pci_configure_bus( cyg_uint8 bus, cyg_uint8 *next_bus );
</PROGRAMLISTING>
<PARA>The <function>cyg_pci_configure_device</function> handles all IO
and memory regions that need configuration on non-bridge devices. On
platforms with multiple busses connected by bridges, the <function>
cyg_pci_configure_bus</function> function should be used. It will recursively
configure all devices on the given <parameter>bus</parameter> and all
subordinate busses. <function>cyg_pci_configure_bus</function> will
use <function>cyg_pci_configure_device</function> to configure
individual non-bridge devices.
</PARA>
<PARA> Each region is represented in the PCI device's config space by BARs
(Base Address Registers) and is handled individually according to type
using these functions:</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_allocate_memory( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS64 *base );
cyg_bool cyg_pci_allocate_io( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS32 *base );</PROGRAMLISTING>
<PARA>The memory bases (in two distinct address spaces) are increased
as memory regions are allocated to devices. Allocation will fail
(the function returns false) if the base exceeds the limits of the
address space (IO is 1MB, memory is 2^32 or 2^64 bytes).</PARA>
<PARA>These functions can also be called directly by the application/driver
if necessary, but this should not be necessary.</PARA>
<PARA>The bases are initialized with default values provided by
the HAL. It is possible for an application to override these using
the following functions: </PARA>
<PROGRAMLISTING>void cyg_pci_set_memory_base( CYG_PCI_ADDRESS64 base );
void cyg_pci_set_io_base( CYG_PCI_ADDRESS32 base );</PROGRAMLISTING>
<PARA>When a device has been configured, the cyg_pci_device
structure will contain the physical address in the CPU's
address space where the device's memory regions can be
accessed. </PARA>
<PARA>This information is provided in <varname>base_map[]</varname> -
there is a 32 bit word for each of the device's BARs. For
32 bit PCI memory regions, each 32 bit word will be an actual pointer
that can be used immediately by the driver: the memory space will normally
be linearly addressable by the CPU.</PARA>
<PARA>However, for 64 bit PCI memory regions, some (or all) of the
region may be outside of the CPUs address space. In this case the
driver will need to know how to access the region in segments. This
functionality may be adopted by the eCos HAL if deemed useful in
the future. The 2GB available on many systems should suffice though.</PARA>
</SECT2>
<SECT2 id="pci-interrupts">
<TITLE>Interrupts</TITLE>
<PARA>A device may generate interrupts. The HAL vector associated
with a given device on the bus is platform specific. This function
allows a driver to find the actual interrupt vector for a given
device:</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_translate_interrupt( cyg_pci_device *dev_info,
CYG_ADDRWORD *vec );</PROGRAMLISTING>
<PARA>If the function returns false, no interrupts will be generated
by the device. If it returns true, the CYG_ADDRWORD pointed
to by vec is updated with the HAL interrupt vector the device will
be using. This is how the function is used in the <filename>pci1</filename>
test:</PARA>
<PROGRAMLISTING> if (cyg_pci_translate_interrupt(&amp;dev_info, &amp;irq))
diag_printf(" Wired to HAL vector %d\n", irq);
else
diag_printf(" Does not generate interrupts.\n");</PROGRAMLISTING>
<PARA>The application/drive should attach an interrupt
handler to a device's interrupt before activating the device.</PARA>
</SECT2>
<SECT2>
<TITLE>Activating a device</TITLE>
<PARA>When the device has been allocated memory space it can be
activated. This is not done by the library since a driver may have
to initialize more state on the device before it can be safely activated.</PARA>
<PARA>Activating the device is done by enabling flags in its command
word. As an example, see the <filename>pci1</filename> test which can be
configured to enable the devices it finds. This allows these to be accessed from
GDB (if a breakpoint is set on <function>cyg_test_exit</function>):</PARA>
<PROGRAMLISTING>#ifdef ENABLE_PCI_DEVICES
{
cyg_uint16 cmd;
 
// Don't use cyg_pci_set_device_info since it clears
// some of the fields we want to print out below.
cyg_pci_read_config_uint16(dev_info.devid,
CYG_PCI_CFG_COMMAND, &amp;cmd);
cmd |= CYG_PCI_CFG_COMMAND_IO|CYG_PCI_CFG_COMMAND_MEMORY;
cyg_pci_write_config_uint16(dev_info.devid,
CYG_PCI_CFG_COMMAND, cmd);
}
diag_printf(" **** Device IO and MEM access enabled\n");
#endif</PROGRAMLISTING>
<note><title>Note</title><PARA>The best way to activate a device is actually
through <function>cyg_pci_set_device_info()</function>,
but in this particular case the <structname>cyg_pci_device</structname>
structure contents from before the activation is required for printout
further down in the code.</PARA></note>
</SECT2>
<SECT2>
<TITLE>Links</TITLE>
<PARA>See these links for more information about PCI:</PARA>
<orderedlist>
<listitem><PARA><anchor id="pci-spec"><ulink url="http://www.pcisig.com/">
http://www.pcisig.com/</ulink> - information on the PCI specifications
</para></listitem>
<listitem><para>
<ulink url="http://www.yourvote.com/pci/">http://www.yourvote.com/pci/
</ulink> - list of vendor and device IDs
</para>
</listitem>
<listitem><para><ulink url="http://www.picmg.org/">http://www.picmg.org/
</ulink> - PCI Industrial Computer Manufacturers Group</PARA>
</listitem>
</orderedlist>
</SECT2>
</SECT1>
<SECT1 id="pci-library-reference">
<TITLE>PCI Library reference</TITLE>
<PARA>This document defines the PCI Support Library for eCos.</PARA>
<PARA>The PCI support library provides a set of routines for accessing
the PCI bus configuration space in a portable manner. This is provided
by two APIs. The high level API is used by device drivers, or other
code, to access the PCI configuration space portably. The low level
API is used by the PCI library itself to access the hardware in
a platform-specific manner, and may also be used by device drivers
to access the PCI configuration space directly.</PARA>
<PARA>Underlying the low-level API is HAL support for the basic
configuration space operations. These should not generally be used
by any code other than the PCI library, and are present in the HAL
to allow low level initialization of the PCI bus and devices to
take place if necessary.</PARA>
<SECT2>
<TITLE>PCI Library API</TITLE>
<PARA>The PCI library provides the following routines and types
for accessing the PCI configuration space.</PARA>
<PARA>The API for the PCI library is found in the header file
<filename class=headerfile>&lt;cyg/io/pci.h&gt;</filename>.</PARA>
</SECT2>
<SECT2>
<TITLE>Definitions</TITLE>
<PARA>The header file contains definitions for the common configuration
structure offsets and specimen values for device, vendor and class
code.</PARA>
</SECT2>
<SECT2>
<TITLE>Types and data structures</TITLE>
<PARA>The following types are defined:</PARA>
<PROGRAMLISTING>typedef CYG_WORD32 cyg_pci_device_id;</PROGRAMLISTING>
<PARA>This is comprised of the bus number, device number and functional
unit numbers packed into a single word. The macro <function>CYG_PCI_DEV_MAKE_ID()
</function>, in conjunction with the <function>CYG_PCI_DEV_MAKE_DEVFN()</function>
macro, may be used to construct a device id from the bus, device and functional
unit numbers. Similarly the macros <function>CYG_PCI_DEV_GET_BUS()</function>,
<function>CYG_PCI_DEV_GET_DEVFN()</function>,
<function>CYG_PCI_DEV_GET_DEV()</function>, and
<function>CYG_PCI_DEV_GET_FN()</function> may be used to extract the
constituent parts of a device id. It should not be necessary to use these
macros under normal circumstances. The following code fragment demonstrates
how these macros may be used:</PARA>
<PROGRAMLISTING>
// Create a packed representation of device 1, function 0
cyg_uint8 devfn = CYG_PCI_DEV_MAKE_DEVFN(1,0);
 
// Create a packed devid for that device on bus 2
cyg_pci_device_id devid = CYG_PCI_DEV_MAKE_ID(2, devfn);
 
diag_printf("bus %d, dev %d, func %d\n",
CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEV(CYG_PCI_DEV_GET_DEVFN(devid)),
CYG_PCI_DEV_GET_FN(CYG_PCI_DEV_GET_DEVFN(devid));
</PROGRAMLISTING>
<PROGRAMLISTING>typedef struct cyg_pci_device;</PROGRAMLISTING>
<PARA>This structure is used to contain data read from a PCI device's
configuration header by <function>cyg_pci_get_device_info()</function>.
It is also used to record the resource allocations made to the device.</PARA>
<PROGRAMLISTING>typedef CYG_WORD64 CYG_PCI_ADDRESS64;
typedef CYG_WORD32 CYG_PCI_ADDRESS32;</PROGRAMLISTING>
<PARA>Pointers in the PCI address space are 32 bit (IO space) or
32/64 bit (memory space). In most platform and device configurations
all of PCI memory will be linearly addressable using only 32 bit
pointers as read from <varname>base_map[]</varname>.</PARA>
<PARA>The 64 bit type is used to allow handling 64 bit devices in
the future, should it be necessary, without changing the library's
API.</PARA>
</SECT2>
<SECT2>
<TITLE>Functions</TITLE>
<PROGRAMLISTING>void cyg_pci_init(void);</PROGRAMLISTING>
<PARA>Initialize the PCI library and establish contact with the
hardware. This function is idempotent and can be called either by
all drivers in the system, or just from an application initialization
function.</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_find_device( cyg_uint16 vendor,
cyg_uint16 device,
cyg_pci_device_id *devid );</PROGRAMLISTING>
<PARA>Searches the PCI bus configuration space for a device with
the given <parameter>vendor</parameter> and <parameter>device</parameter>
ids. The search starts at the device pointed to by <parameter>devid</parameter>,
or at the first slot if it contains <literal>CYG_PCI_NULL_DEVID</literal>.
<parameter>*devid</parameter> will be updated with the ID of the next device
found. Returns <constant>true</constant> if one is found and <constant>false
</constant> if not.</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_find_class( cyg_uint32 dev_class,
cyg_pci_device_id *devid );</PROGRAMLISTING>
<PARA>Searches the PCI bus configuration space for a device with
the given <parameter>dev_class</parameter> class code. The search starts at the
device pointed to by <parameter>devid</parameter>, or at the first slot if it
contains <literal>CYG_PCI_NULL_DEVID</literal>.</PARA>
<PARA><parameter>*devid</parameter> will be updated with the ID of the next
device found. Returns <constant>true</constant> if one is found and
<constant>false</constant> if not.</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_find_next( cyg_pci_device_id cur_devid,
cyg_pci_device_id *next_devid );</PROGRAMLISTING>
<PARA>Searches the PCI configuration space for the next valid device
after <parameter>cur_devid</parameter>. If <parameter>cur_devid</parameter>
is given the value <literal>CYG_PCI_NULL_DEVID</literal>, then the search starts
at the first slot. It is permitted for <parameter>next_devid</parameter> to
point to <parameter>cur_devid</parameter>. Returns <constant>true</constant>
if another device is found and <constant>false</constant> if not.</PARA>
<PROGRAMLISTING>
cyg_bool cyg_pci_find_matching( cyg_pci_match_func *matchp,
void * match_callback_data,
cyg_pci_device_id *devid );
</PROGRAMLISTING>
<PARA>Searches the PCI bus configuration space for a device whose properties
match those required by the caller supplied <parameter>cyg_pci_match_func</parameter>.
The search starts at the device pointed to by <parameter>devid</parameter>, or
at the first slot if it contains <constant>CYG_PCI_NULL_DEVID</constant>. The
<parameter>devid</parameter> will be updated with the ID of the next device found.
This function returns <constant>true</constant> if a matching device is found
and <constant>false</constant> if not.
</PARA>
<PARA>The match_func has a type declared as:</PARA>
<PROGRAMLISTING>
typedef cyg_bool (cyg_pci_match_func)( cyg_uint16 vendor,
cyg_uint16 device,
cyg_uint32 class,
void * user_data);
</PROGRAMLISTING>
<PARA>The <parameter>vendor</parameter>, <parameter>device</parameter>, and
<parameter>class</parameter> are from the device configuration space. The
<parameter>user_data</parameter> is the callback data passed to <function>
cyg_pci_find_matching</function>.
</PARA>
<PROGRAMLISTING>void cyg_pci_get_device_info ( cyg_pci_device_id devid,
cyg_pci_device *dev_info );</PROGRAMLISTING>
<PARA>This function gets the PCI configuration information for the
device indicated in <parameter>devid</parameter>. The common fields of the
<structname>cyg_pci_device</structname> structure, and the appropriate fields
of the relevant header union member are filled in from the device's
configuration space.
If the device has not been enabled, then this function will also fetch
the size and type information from the base address registers and
place it in the <varname>base_size[]</varname> array.</PARA>
<PROGRAMLISTING>void cyg_pci_set_device_info ( cyg_pci_device_id devid,
cyg_pci_device *dev_info );</PROGRAMLISTING>
<PARA>This function sets the PCI configuration information for the
device indicated in <parameter>devid</parameter>. Only the configuration space
registers that are writable are actually written. Once all the fields have
been written, the device info will be read back into <parameter>*dev_info
</parameter>, so that it reflects the true state of the hardware.</PARA>
<PROGRAMLISTING>
void cyg_pci_read_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 *val );
void cyg_pci_read_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 *val );
void cyg_pci_read_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 *val );
</PROGRAMLISTING>
<PARA>These functions read registers of the appropriate size from
the configuration space of the given device. They should mainly
be used to access registers that are device specific. General PCI
registers are best accessed through <function>cyg_pci_get_device_info()
</function>.</PARA>
<PROGRAMLISTING>
void cyg_pci_write_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 val );
void cyg_pci_write_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 val );
void cyg_pci_write_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 val );
</PROGRAMLISTING>
<PARA>These functions write registers of the appropriate size to
the configuration space of the given device. They should mainly
be used to access registers that are device specific. General PCI
registers are best accessed through <function>cyg_pci_get_device_info()
</function>. Writing the general registers this way may render the contents of
a <structname>cyg_pci_device</structname> structure invalid.</PARA>
</SECT2>
<SECT2>
<TITLE>Resource allocation</TITLE>
<PARA>These routines allocate memory and I/O space to PCI devices.</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_configure_device( cyg_pci_device *dev_info )</PROGRAMLISTING>
<PARA>Allocate memory and IO space to all base address registers
using the current memory and IO base addresses in the library. The
allocated base addresses, translated into directly usable values,
will be put into the matching <varname>base_map[]</varname> entries
in <parameter>*dev_info</parameter>. If <parameter>*dev_info</parameter> does
not contain valid <varname>base_size[]</varname> entries, then the result is
<constant>false</constant>. This function will also call <function>
cyg_pci_translate_interrupt()</function> to put the interrupt vector into the
HAL vector entry.</PARA>
<PROGRAMLISTING>cyg_bool cyg_pci_configure_bus( cyg_uint8 bus, cyg_uint8 *next_bus )
</PROGRAMLISTING>
<PARA>Allocate memory and IO space to all base address registers on all devices
on the given bus and all subordinate busses. If a PCI-PCI bridge is found on
<parameter>bus</parameter>, this function will call itself recursively in order
to configure the bus on the other side of the bridge. Because of the nature of
bridge devices, all devices on the secondary side of a bridge must be allocated
memory and IO space before the memory and IO windows on the bridge device can be
properly configured. The <parameter>next_bus</parameter> argument points to the
bus number to assign to the next subordinate bus found. The number will be
incremented as new busses are discovered. If successful, <constant>true</constant>
is returned. Otherwise, <constant>false</constant> is returned.
</PARA>
<PROGRAMLISTING>
cyg_bool cyg_pci_translate_interrupt( cyg_pci_device *dev_info,
CYG_ADDRWORD *vec );
</PROGRAMLISTING>
<PARA>Translate the device's PCI interrupt (INTA#-INTD#)
to the associated HAL vector. This may also depend on which slot
the device occupies. If the device may generate interrupts, the
translated vector number will be stored in <parameter>vec</parameter> and the
result is <constant>true</constant>. Otherwise the result is <constant>false
</constant>.</PARA>
<PROGRAMLISTING>
cyg_bool cyg_pci_allocate_memory( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS64 *base );
cyg_bool cyg_pci_allocate_io( cyg_pci_device *dev_info,
cyg_uint32 bar,
CYG_PCI_ADDRESS32 *base );
</PROGRAMLISTING>
<PARA>These routines allocate memory or I/O space to the base address
register indicated by <parameter>bar</parameter>. The base address in
<parameter>*base</parameter> will be correctly aligned and the address of the
next free location will be written back into it if the allocation succeeds. If
the base address register is of the wrong type for this allocation, or
<parameter>dev_info</parameter> does not contain valid <varname>base_size[]
</varname> entries, the result is <constant>false</constant>. These functions
allow a device driver to set up its own mappings if it wants. Most devices
should probably use <function>cyg_pci_configure_device()</function>.</PARA>
<PROGRAMLISTING>void cyg_pci_set_memory_base( CYG_PCI_ADDRESS64 base );
void cyg_pci_set_io_base( CYG_PCI_ADDRESS32 base );</PROGRAMLISTING>
<PARA>These routines set the base addresses for memory and I/O mappings
to be used by the memory allocation routines. Normally these base
addresses will be set to default values based on the platform. These
routines allow these to be changed by application code if necessary.</PARA>
</SECT2>
<SECT2>
<TITLE>PCI Library Hardware API</TITLE>
<PARA>This API is used by the PCI library to access the PCI bus
configuration space. Although it should not normally be necessary,
this API may also be used by device driver or application code to
perform PCI bus operations not supported by the PCI library.</PARA>
<PROGRAMLISTING>void cyg_pcihw_init(void);</PROGRAMLISTING>
<PARA>Initialize the PCI hardware so that the configuration space
may be accessed.</PARA>
<PROGRAMLISTING>
void cyg_pcihw_read_config_uint8( cyg_uint8 bus,
cyg_uint8 devfn, cyg_uint8 offset, cyg_uint8 *val);
void cyg_pcihw_read_config_uint16( cyg_uint8 bus,
cyg_uint8 devfn, cyg_uint8 offset, cyg_uint16 *val);
void cyg_pcihw_read_config_uint32( cyg_uint8 bus,
cyg_uint8 devfn, cyg_uint8 offset, cyg_uint32 *val);
</PROGRAMLISTING>
<PARA>These functions read a register of the appropriate size from
the PCI configuration space at an address composed from the <parameter>bus
</parameter>, <parameter>devfn</parameter> and <parameter>offset</parameter>
arguments.</PARA>
<PROGRAMLISTING>
void cyg_pcihw_write_config_uint8( cyg_uint8 bus,
cyg_uint8 devfn, cyg_uint8 offset, cyg_uint8 val);
void cyg_pcihw_write_config_uint16( cyg_uint8 bus,
cyg_uint8 devfn, cyg_uint8 offset, cyg_uint16 val);
void cyg_pcihw_write_config_uint32( cyg_uint8 bus,
cyg_uint8 devfn, cyg_uint8 offset, cyg_uint32 val);
</PROGRAMLISTING>
<PARA>These functions write a register of the appropriate size to
the PCI configuration space at an address composed from the
<parameter>bus</parameter>, <parameter>devfn</parameter> and
<parameter>offset</parameter> arguments.</PARA>
<PROGRAMLISTING>
cyg_bool cyg_pcihw_translate_interrupt( cyg_uint8 bus,
cyg_uint8 devfn,
CYG_ADDRWORD *vec);
</PROGRAMLISTING>
<PARA>This function interrogates the device and determines which
HAL interrupt vector it is connected to.</PARA>
</SECT2>
<SECT2>
<TITLE>HAL PCI support</TITLE>
<PARA>HAL support consists of a set of C macros that provide the
implementation of the low level PCI API.</PARA>
<PROGRAMLISTING>HAL_PCI_INIT()</PROGRAMLISTING>
<PARA>Initialize the PCI bus.</PARA>
<PROGRAMLISTING>HAL_PCI_READ_UINT8( bus, devfn, offset, val )
HAL_PCI_READ_UINT16( bus, devfn, offset, val )
HAL_PCI_READ_UINT32( bus, devfn, offset, val )</PROGRAMLISTING>
<PARA>Read a value from the PCI configuration space of the appropriate
size at an address composed from the <parameter>bus</parameter>, <parameter>
devfn</parameter> and <parameter>offset</parameter>.</PARA>
<PROGRAMLISTING>HAL_PCI_WRITE_UINT8( bus, devfn, offset, val )
HAL_PCI_WRITE_UINT16( bus, devfn, offset, val )
HAL_PCI_WRITE_UINT32( bus, devfn, offset, val )</PROGRAMLISTING>
<PARA>Write a value to the PCI configuration space of the appropriate
size at an address composed from the <parameter>bus</parameter>, <parameter>
devfn</parameter> and <parameter>offset</parameter>.</PARA>
<PROGRAMLISTING>HAL_PCI_TRANSLATE_INTERRUPT( bus, devfn, *vec, valid )</PROGRAMLISTING>
<PARA>Translate the device's interrupt line into a HAL
interrupt vector.</PARA>
<PROGRAMLISTING>HAL_PCI_ALLOC_BASE_MEMORY
HAL_PCI_ALLOC_BASE_IO</PROGRAMLISTING>
<PARA>These macros define the default base addresses used to initialize
the memory and I/O allocation pointers.</PARA>
<PROGRAMLISTING>HAL_PCI_PHYSICAL_MEMORY_BASE
HAL_PCI_PHYSICAL_IO_BASE</PROGRAMLISTING>
<PARA>PCI memory and IO range do not always correspond directly
to physical memory or IO addresses. Frequently the PCI address spaces
are windowed into the processor's address range at some
offset. These macros define offsets to be added to the PCI base
addresses to translate PCI bus addresses into physical memory addresses
that can be used to access the allocated memory or IO space.</PARA>
<NOTE>
<PARA>The chunk of PCI memory space directly addressable though
the window by the CPU may be smaller than the amount of PCI memory
actually provided. In that case drivers will have to access PCI
memory space in segments. Doing this will be platform specific and
is currently beyond the scope of the HAL.</PARA>
</NOTE>
<PROGRAMLISTING>HAL_PCI_IGNORE_DEVICE( bus, dev, fn )</PROGRAMLISTING
<PARA>This macro, if defined, may be used to limit the devices which are
found by the bus scanning functions. This is sometimes necessary for
devices which need special handling. If this macro evaluates to <constant>true
</constant>, the given device will not be found by <function>cyg_pci_find_next
</function> or other bus scanning functions.
</PARA>
</SECT2>
</SECT1>
</CHAPTER>
</PART>
/v2_0/ChangeLog
0,0 → 1,317
2003-02-24 Jonathan Larmour <jifl@eCosCentric.com>
 
* cdl/io_pci.cdl: Fix doc link.
 
2002-05-14 Jesper Skov <jskov@redhat.com>
 
* tests/pci1.c: Fix warning.
 
2002-02-13 Hugo Tyson <hmt@redhat.com>
 
* doc/pci.sgml: Tidy up some typos and PROGRAMLISTING width
issues.
 
2002-02-11 Mark Salter <msalter@redhat.com>
 
* doc/pci.sgml: Brought docs up to date with current code.
 
2002-01-31 Mark Salter <msalter@redhat.com>
 
* src/pci.c (cyg_pci_init): Set default memory and io bases here
as the HAL_PCI_ALLOC_BASE_* macros may not be static values.
 
2002-01-21 Mark Salter <msalter@redhat.com>
 
* src/pci.c (cyg_pci_get_device_info): Fix setting of upper 32 bits
for 64-bit BAR.
 
2001-09-28 Gary Thomas <gthomas@redhat.com>
 
* src/pci.c (cyg_pci_find_next):
* include/pci.h: Allow platforms to restrict PCI bus/device ranges.
 
2001-08-22 Gary Thomas <gthomas@redhat.com>
 
* src/pci.c:
printf() is no longer a part of RedBoot. Thus all programs
must use diag_printf() and related functions instead.
 
2001-02-28 Hugo Tyson <hmt@redhat.com>
 
* tests/pci1.c (pci_scan): Added a new function to re-scan the
device list after configuring to let a human confirm that we truly
are seeing distinct devices - ie. do they retain their distinct
resource allocations in the BARs? This was useful to me in
investigating a recalcitrant target...
 
2001-02-02 Jesper Skov <jskov@redhat.com>
 
* tests/pci2.c (pci_test): Removed bogus check for 1MB IO limit.
 
2001-01-10 Jesper Skov <jskov@redhat.com>
 
* src/pci.c (cyg_pci_get_device_info): Do correct casting of
header_type. Do not make assumptions about structure layout.
 
* tests/pcihdr.h: Updated.
 
2001-01-02 Hugo Tyson <hmt@redhat.com>
 
* include/pci.h: Define new API to perform more generalized matching
on device properties.
 
* src/pci.c (cyg_pci_find_matching): New API implementation.
 
2000-12-21 Mark Salter <msalter@redhat.com>
 
* include/pci_hw.h: Add platform hook so certain devices
can be skipped by generic PCI io code. This is a workaround
for a hw problem where configuration space cycles on some
devices cause a bus lockup.
* src/pci.c (cyg_pci_find_next): Use platform hook to ignore
certain devices during device search.
 
2000-12-02 Gary Thomas <gthomas@redhat.com>
 
* src/pci.c:
* cdl/io_pci.cdl: Add CDL to control debug prints.
 
2000-11-30 Gary Thomas <gthomas@redhat.com>
 
* src/pci.c (cyg_pci_find_next): Improve debug prints when
scanning the bus, showing vendor and device code for each slot.
 
2000-11-19 Gary Thomas <gthomas@redhat.com>
 
* src/pci.c (cyg_pci_find_device): Don't update 'devid' if no
suitable devices found. This allows for simpler rescan for
multiple device types.
 
2000-11-12 Gary Thomas <gthomas@redhat.com>
 
* src/pci_hw.c:
* src/pci.c: Layout changes require <pkgconf/hal.h>
 
2000-11-06 Jonathan Larmour <jlarmour@redhat.com>
 
* src/pci.c (cyg_pci_find_next): Conditionalize debug printfs
 
2000-11-04 Mark Salter <msalter@redhat.com>
 
* src/pci.c (cyg_pci_get_device_info): Add bridge support. Handle
already configured devices.
(cyg_pci_set_device_info): Add bridge support.
(cyg_pci_find_next): Support device id with valid bus number
combined with CYG_PCI_NULL_DEVFN.
(cyg_pci_configure_device): Return true if device already configured.
Fixed for devices which use no BARs.
(cyg_pci_allocate_io_priv): Remove bogus limit check.
(cyg_pci_configure_bus): New function to recursively configure a
bus and its subordinate bases.
 
* include/pci_cfg.h: Added bridge definitions.
(CYG_PCI_CFG_BAR_5): Corrected.
 
* include/pci.h (CYG_PCI_NULL_DEVFN): Define.
(cyg_pci_device): Add bridge support. Add num_bars. Add
declaration for cyg_pci_configure_bus.
(CYG_PCI_MAX_BUS): Increase to (arbitrary) 8.
 
2000-03-28 John Dallaway <jld@cygnus.co.uk>
 
* cdl/io_pci.cdl:
 
Adjust documentation URLs.
 
2000-01-31 Simon FitzMaurice <sdf@cygnus.co.uk>
* cdl\io_pci.cdl:
 
Adjust help URLs in line with new doc layout.
2000-01-28 Simon FitzMaurice <sdf@cygnus.co.uk>
* cdl\io_pci.cdl:
 
Adjust help URLs in line with new doc layout.
2000-01-19 Hugo Tyson <hmt@cygnus.co.uk>
 
* cdl/*.cdl: Add descriptions to a number of options &c which were
lacking same, also tidied up other typos as noticed en passant.
 
1999-12-21 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* cdl/io_pci.cdl (CYGPKG_IO_PCI): Relevant to more than one platform
so reparent under IO package
(CYGPKG_IO_PCI_CFLAGS_REMOVE): Fix display line typo
 
1999-11-03 John Dallaway <jld@cygnus.co.uk>
 
* cdl/io_pci.cdl: Define build options.
 
1999-09-24 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/pci2.c (pci_test): Replaced CYG_ASSERT with CYG_TEST_CHECK
 
1999-09-10 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/io_pci.h: Reparent under CYGPKG_IO - this is used under
more than one target now and the library itself is generic.
 
1999-08-25 Jesper Skov <jskov@cygnus.co.uk>
 
* src/pci.c (cyg_pci_init): Made it idempotent.
 
* tests/pci1.c:
* tests/pci2.c:
* src/pci.c:
* include/pci.h:
All functions that deal with addresses in PCI space now use PCI
ADDRESS types.
1999-08-24 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/pci1.c:
* tests/pci2.c:
* include/pci.h:
* src/pci.c:
Handle requests for memory regions in 64bit space.
1999-08-24 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/pci1.c: Added more output, resource allocation, debug help
(enable devices).
 
* src/pci.c (cyg_pci_find_next): Handle multi-function devices.
 
* include/pci_cfg.h (CYG_PCI_CFG_COMMAND_ACTIVE): Added MASTER.
Added HEADER_TYPE definitions.
 
1999-08-23 Nick Garnett <nickg@cygnus.co.uk>
 
* tests/pci1.c: Fixed a couple of bugs in the vendor/device/class
table search code.
 
1999-08-23 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/pcihdr.h: [Added]
* tests/pci1.c: Added Vendor/Device ID description output.
 
* include/pci_cfg.h: Added vendor and class IDs.
Also added Prog/IF IDs.
 
1999-08-19 Nick Garnett <nickg@cygnus.co.uk>
 
* tests/pci1.c (pci_test): Added printf() of class_rev code to
output of bus scan.
 
* include/pci.h (CYG_PCI_MAX_FN): Increased to 8.
 
1999-08-19 Jesper Skov <jskov@cygnus.co.uk>
 
* src/pci.c (cyg_pci_allocate_memory, cyg_pci_allocate_io):
Check that device is inactive. Ensure that 1MB limits (IO/MEM1MB)
are observed.
 
* tests/pci2.c (pci_test): Added tests of io/mem allocators.
 
1999-08-17 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/pci2.c (pci_test): Added (empty for now)
* tests/pci1.c: Added API checks.
* include/pci.h: Fixed typo.
 
* include/pci.h (CYG_PCI_NULL_DEVID): Changed initializer.
* src/pci.c (cyg_pci_find_next): Correct check for initializer.
 
* tests/pci1.c: Added.
Fixed output.
 
* include/pci_cfg.h:
* include/pci.h:
* include/pci_hw.h:
* src/pci_hw.c:
* src/pci.c:
Renamed cyg_pci_config_interrupt to cyg_pci_translate_interrupt.
Untabified.
1999-08-16 John Dallaway <jld@cygnus.co.uk>
 
* cdl/io_pci.cdl:
 
Parent PCI library package under package on which it depends.
 
1999-08-16 John Dallaway <jld@cygnus.co.uk>
 
* include/pkgconf/io_pci.h:
 
Parent PCI package under package on which it depends.
 
1999-08-16 Jesper Skov <jskov@cygnus.co.uk>
 
* include/pci.h:
* src/pci.c (cyg_pci_config_interrupt):
* include/pci_hw.h:
* src/pci_hw.c (cyg_pcihw_config_interrupt):
Added interrupt configuration functions.
1999-08-13 Jesper Skov <jskov@cygnus.co.uk>
 
* include/pci_cfg.h:
* include/pci.h:
* src/pci_hw.c:
* src/pci.c:
Extended cyg_pci_device and API.
Renamed HAL macros.
Put physical address in base_map.
 
(cyg_pci_get_device_info): Fix switch. Clear base_size when device
enabled.
 
1999-08-12 Jesper Skov <jskov@cygnus.co.uk>
 
* include/pci_hw.h:
* include/pci_cfg.h:
* include/pci.h:
* src/pci_hw.c:
* src/pci.c:
Renamed some registers. Fixed some bad arguments. Added forgotten
externCs.
cyg_pci_configure_device fleshed out a bit.
* First half-empty files checked in.
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/v2_0/src/pci_hw.c
0,0 → 1,126
//=============================================================================
//
// pci_hw.c
//
// PCI hardware library
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov, from design by nickg
// Contributors: jskov
// Date: 1999-08-09
// Purpose: PCI hardware configuration access
// Description:
//
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
#include <cyg/io/pci_hw.h>
 
// CYG_PCI_PRESENT only gets defined for targets that provide PCI HAL support.
// See pci_hw.h for details.
#ifdef CYG_PCI_PRESENT
 
// Init
void
cyg_pcihw_init(void)
{
HAL_PCI_INIT();
}
 
// Read functions
void
cyg_pcihw_read_config_uint8( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint8 *val)
{
HAL_PCI_CFG_READ_UINT8(bus, devfn, offset, *val);
}
 
void
cyg_pcihw_read_config_uint16( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint16 *val)
{
HAL_PCI_CFG_READ_UINT16(bus, devfn, offset, *val);
}
 
void
cyg_pcihw_read_config_uint32( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint32 *val)
{
HAL_PCI_CFG_READ_UINT32(bus, devfn, offset, *val);
}
 
// Write functions
void
cyg_pcihw_write_config_uint8( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint8 val)
{
HAL_PCI_CFG_WRITE_UINT8(bus, devfn, offset, val);
}
 
void
cyg_pcihw_write_config_uint16( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint16 val)
{
HAL_PCI_CFG_WRITE_UINT16(bus, devfn, offset, val);
}
 
void
cyg_pcihw_write_config_uint32( cyg_uint8 bus, cyg_uint8 devfn,
cyg_uint8 offset, cyg_uint32 val)
{
HAL_PCI_CFG_WRITE_UINT32(bus, devfn, offset, val);
}
 
// Interrupt translation
cyg_bool
cyg_pcihw_translate_interrupt( cyg_uint8 bus, cyg_uint8 devfn,
CYG_ADDRWORD *vec)
{
cyg_bool valid;
 
HAL_PCI_TRANSLATE_INTERRUPT(bus, devfn, *vec, valid);
 
return valid;
}
 
#endif // ifdef CYG_PCI_PRESENT
 
//-----------------------------------------------------------------------------
// end of pci_hw.c
/v2_0/src/pci.c
0,0 → 1,1040
//=============================================================================
//
// pci.c
//
// PCI library
//
//=============================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=============================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov, from design by nickg
// Contributors: jskov
// Date: 1999-08-09
// Purpose: PCI configuration
// Description:
// PCI bus support library.
// Handles simple resource allocation for devices.
// Can configure 64bit devices, but drivers may need special
// magic to access all of this memory space - this is platform
// specific and the driver must know how to handle it on its own.
//####DESCRIPTIONEND####
//
//=============================================================================
 
#include <pkgconf/hal.h>
#include <pkgconf/io_pci.h>
#include <cyg/io/pci_hw.h>
 
// CYG_PCI_PRESENT only gets defined for targets that provide PCI HAL support.
// See pci_hw.h for details.
#ifdef CYG_PCI_PRESENT
 
#include <cyg/io/pci.h>
#include <cyg/infra/cyg_ass.h>
 
static cyg_bool cyg_pci_lib_initialized = false;
 
void
cyg_pci_init( void )
{
if (!cyg_pci_lib_initialized) {
 
cyg_pci_set_memory_base(HAL_PCI_ALLOC_BASE_MEMORY);
cyg_pci_set_io_base(HAL_PCI_ALLOC_BASE_IO);
 
// Initialize the PCI bus, preparing it for general access.
cyg_pcihw_init();
 
cyg_pci_lib_initialized = true;
}
}
 
//---------------------------------------------------------------------------
// Common device configuration access functions
 
void
cyg_pci_get_device_info ( cyg_pci_device_id devid, cyg_pci_device *dev_info )
{
int i;
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(devid);
cyg_uint8 header_type;
 
dev_info->devid = devid;
 
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_VENDOR,
&dev_info->vendor);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_DEVICE,
&dev_info->device);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_COMMAND,
&dev_info->command);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_STATUS,
&dev_info->status);
cyg_pcihw_read_config_uint32(bus, devfn, CYG_PCI_CFG_CLASS_REV,
&dev_info->class_rev);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_CACHE_LINE_SIZE,
&dev_info->cache_line_size);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_LATENCY_TIMER,
&dev_info->latency_timer);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_HEADER_TYPE,
&header_type);
dev_info->header_type = (cyg_pci_header_type) header_type;
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_BIST,
&dev_info->bist);
 
if ((dev_info->header_type & CYG_PCI_CFG_HEADER_TYPE_MASK) == CYG_PCI_HEADER_BRIDGE)
dev_info->num_bars = 2;
else
dev_info->num_bars = 6;
 
for (i = 0; i < dev_info->num_bars; i++)
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE + 4*i,
&dev_info->base_address[i]);
 
// If device is disabled, probe BARs for sizes.
if ((dev_info->command & CYG_PCI_CFG_COMMAND_ACTIVE) == 0) {
 
for (i = 0; i < dev_info->num_bars; i++){
cyg_uint32 size;
 
cyg_pcihw_write_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE + 4*i,
0xffffffff);
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE + 4*i,
&size);
dev_info->base_size[i] = size;
dev_info->base_map[i] = 0xffffffff;
 
// No reason to scan beyond first inactive BAR.
if (size == 0) {
dev_info->num_bars = i;
break;
}
 
// Check for a 64bit memory region.
if (CYG_PCI_CFG_BAR_SPACE_MEM ==
(size & CYG_PCI_CFG_BAR_SPACE_MASK)) {
if (size & CYG_PRI_CFG_BAR_MEM_TYPE_64) {
// Clear fields for next BAR - it's the upper 32 bits.
i++;
dev_info->base_size[i] = 0;
dev_info->base_map[i] = 0xffffffff;
}
}
}
} else {
// If the device is already configured. Fill in the base_map.
CYG_PCI_ADDRESS64 tmp_addr;
cyg_uint32 bar;
 
for (i = 0; i < dev_info->num_bars; i++){
 
dev_info->base_size[i] = 0;
 
bar = dev_info->base_address[i];
 
// No reason to scan beyond first inactive BAR.
if (bar == 0) {
dev_info->num_bars = i;
break;
}
 
if ((bar & CYG_PCI_CFG_BAR_SPACE_MASK) == CYG_PCI_CFG_BAR_SPACE_IO) {
dev_info->base_map[i] = (bar & CYG_PRI_CFG_BAR_IO_MASK) + HAL_PCI_PHYSICAL_IO_BASE;
} else {
tmp_addr = bar & CYG_PRI_CFG_BAR_MEM_MASK;
 
if ((bar & CYG_PRI_CFG_BAR_MEM_TYPE_MASK) == CYG_PRI_CFG_BAR_MEM_TYPE_64)
tmp_addr |= ((CYG_PCI_ADDRESS64)(dev_info->base_address[i+1] & CYG_PRI_CFG_BAR_MEM_MASK)) << 32;
tmp_addr += HAL_PCI_PHYSICAL_MEMORY_BASE;
 
dev_info->base_map[i] = tmp_addr;
if ((bar & CYG_PRI_CFG_BAR_MEM_TYPE_MASK) == CYG_PRI_CFG_BAR_MEM_TYPE_64)
dev_info->base_map[++i] = tmp_addr >> 32;
}
}
}
 
switch (dev_info->header_type & CYG_PCI_CFG_HEADER_TYPE_MASK) {
case CYG_PCI_HEADER_NORMAL:
cyg_pcihw_read_config_uint32(bus, devfn, CYG_PCI_CFG_CARDBUS_CIS,
&dev_info->header.normal.cardbus_cis);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_SUB_VENDOR,
&dev_info->header.normal.sub_vendor);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_SUB_ID,
&dev_info->header.normal.sub_id);
cyg_pcihw_read_config_uint32(bus, devfn, CYG_PCI_CFG_ROM_ADDRESS,
&dev_info->header.normal.rom_address);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_CAP_LIST,
&dev_info->header.normal.cap_list);
 
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_INT_LINE,
&dev_info->header.normal.int_line);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_INT_PIN,
&dev_info->header.normal.int_pin);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_MIN_GNT,
&dev_info->header.normal.min_gnt);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_MAX_LAT,
&dev_info->header.normal.max_lat);
break;
case CYG_PCI_HEADER_BRIDGE:
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_PRI_BUS,
&dev_info->header.bridge.pri_bus);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_SEC_BUS,
&dev_info->header.bridge.sec_bus);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_SUB_BUS,
&dev_info->header.bridge.sub_bus);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_SEC_LATENCY_TIMER,
&dev_info->header.bridge.sec_latency_timer);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_IO_BASE,
&dev_info->header.bridge.io_base);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_IO_LIMIT,
&dev_info->header.bridge.io_limit);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_SEC_STATUS,
&dev_info->header.bridge.sec_status);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_MEM_BASE,
&dev_info->header.bridge.mem_base);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_MEM_LIMIT,
&dev_info->header.bridge.mem_limit);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_PREFETCH_BASE,
&dev_info->header.bridge.prefetch_base);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_PREFETCH_LIMIT,
&dev_info->header.bridge.prefetch_limit);
cyg_pcihw_read_config_uint32(bus, devfn, CYG_PCI_CFG_PREFETCH_BASE_UPPER32,
&dev_info->header.bridge.prefetch_base_upper32);
cyg_pcihw_read_config_uint32(bus, devfn, CYG_PCI_CFG_PREFETCH_LIMIT_UPPER32,
&dev_info->header.bridge.prefetch_limit_upper32);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_IO_BASE_UPPER16,
&dev_info->header.bridge.io_base_upper16);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_IO_LIMIT_UPPER16,
&dev_info->header.bridge.io_limit_upper16);
cyg_pcihw_read_config_uint32(bus, devfn, CYG_PCI_CFG_BRIDGE_ROM_ADDRESS,
&dev_info->header.bridge.rom_address);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_INT_LINE,
&dev_info->header.bridge.int_line);
cyg_pcihw_read_config_uint8(bus, devfn, CYG_PCI_CFG_INT_PIN,
&dev_info->header.bridge.int_pin);
cyg_pcihw_read_config_uint16(bus, devfn, CYG_PCI_CFG_BRIDGE_CONTROL,
&dev_info->header.bridge.control);
break;
case CYG_PCI_HEADER_CARDBUS_BRIDGE:
CYG_FAIL("PCI device header 'cardbus bridge' support not implemented");
break;
default:
CYG_FAIL("Unknown PCI device header type");
break;
}
}
 
void
cyg_pci_set_device_info ( cyg_pci_device_id devid, cyg_pci_device *dev_info )
{
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(devid);
int i;
 
// Only writable entries are updated.
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_COMMAND,
dev_info->command);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_STATUS,
dev_info->status);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_CACHE_LINE_SIZE,
dev_info->cache_line_size);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_LATENCY_TIMER,
dev_info->latency_timer);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_BIST,
dev_info->bist);
 
for (i = 0; i < dev_info->num_bars; i++) {
cyg_pcihw_write_config_uint32(bus, devfn, CYG_PCI_CFG_BAR_BASE+4*i,
dev_info->base_address[i]);
}
 
switch (dev_info->header_type & CYG_PCI_CFG_HEADER_TYPE_MASK) {
case CYG_PCI_HEADER_NORMAL:
cyg_pcihw_write_config_uint32(bus, devfn, CYG_PCI_CFG_CARDBUS_CIS,
dev_info->header.normal.cardbus_cis);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_SUB_VENDOR,
dev_info->header.normal.sub_vendor);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_SUB_ID,
dev_info->header.normal.sub_id);
cyg_pcihw_write_config_uint32(bus, devfn, CYG_PCI_CFG_ROM_ADDRESS,
dev_info->header.normal.rom_address);
 
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_INT_LINE,
dev_info->header.normal.int_line);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_INT_PIN,
dev_info->header.normal.int_pin);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_MIN_GNT,
dev_info->header.normal.min_gnt);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_MAX_LAT,
dev_info->header.normal.max_lat);
break;
case CYG_PCI_HEADER_BRIDGE:
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_PRI_BUS,
dev_info->header.bridge.pri_bus);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_SEC_BUS,
dev_info->header.bridge.sec_bus);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_SUB_BUS,
dev_info->header.bridge.sub_bus);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_SEC_LATENCY_TIMER,
dev_info->header.bridge.sec_latency_timer);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_IO_BASE,
dev_info->header.bridge.io_base);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_IO_LIMIT,
dev_info->header.bridge.io_limit);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_SEC_STATUS,
dev_info->header.bridge.sec_status);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_MEM_BASE,
dev_info->header.bridge.mem_base);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_MEM_LIMIT,
dev_info->header.bridge.mem_limit);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_PREFETCH_BASE,
dev_info->header.bridge.prefetch_base);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_PREFETCH_LIMIT,
dev_info->header.bridge.prefetch_limit);
cyg_pcihw_write_config_uint32(bus, devfn, CYG_PCI_CFG_PREFETCH_BASE_UPPER32,
dev_info->header.bridge.prefetch_base_upper32);
cyg_pcihw_write_config_uint32(bus, devfn, CYG_PCI_CFG_PREFETCH_LIMIT_UPPER32,
dev_info->header.bridge.prefetch_limit_upper32);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_IO_BASE_UPPER16,
dev_info->header.bridge.io_base_upper16);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_IO_LIMIT_UPPER16,
dev_info->header.bridge.io_limit_upper16);
cyg_pcihw_write_config_uint32(bus, devfn, CYG_PCI_CFG_BRIDGE_ROM_ADDRESS,
dev_info->header.bridge.rom_address);
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_INT_LINE,
dev_info->header.bridge.int_line);
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_BRIDGE_CONTROL,
dev_info->header.bridge.control);
break;
case CYG_PCI_HEADER_CARDBUS_BRIDGE:
CYG_FAIL("PCI device header 'cardbus bridge' support not implemented");
break;
default:
CYG_FAIL("Unknown PCI device header type");
break;
}
 
// Update values in dev_info.
cyg_pci_get_device_info(devid, dev_info);
}
 
 
//---------------------------------------------------------------------------
// Specific device configuration access functions
void
cyg_pci_read_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 *val)
{
cyg_pcihw_read_config_uint8(CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid),
offset, val);
}
 
void
cyg_pci_read_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 *val)
{
cyg_pcihw_read_config_uint16(CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid),
offset, val);
}
 
void
cyg_pci_read_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 *val)
{
cyg_pcihw_read_config_uint32(CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid),
offset, val);
}
 
 
// Write functions
void
cyg_pci_write_config_uint8( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint8 val)
{
cyg_pcihw_write_config_uint8(CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid),
offset, val);
}
 
void
cyg_pci_write_config_uint16( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint16 val)
{
cyg_pcihw_write_config_uint16(CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid),
offset, val);
}
 
void
cyg_pci_write_config_uint32( cyg_pci_device_id devid,
cyg_uint8 offset, cyg_uint32 val)
{
cyg_pcihw_write_config_uint32(CYG_PCI_DEV_GET_BUS(devid),
CYG_PCI_DEV_GET_DEVFN(devid),
offset, val);
}
 
//------------------------------------------------------------------------
// Device find functions
 
cyg_bool
cyg_pci_find_next( cyg_pci_device_id cur_devid,
cyg_pci_device_id *next_devid )
{
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(cur_devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(cur_devid);
cyg_uint8 dev = CYG_PCI_DEV_GET_DEV(devfn);
cyg_uint8 fn = CYG_PCI_DEV_GET_FN(devfn);
 
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("cyg_pci_find_next: start[%x] ...\n",(unsigned)cur_devid);
#endif
 
// If this is the initializer, start with 0/0/0
if (CYG_PCI_NULL_DEVID == cur_devid) {
bus = dev = fn = 0;
dev = CYG_PCI_MIN_DEV;
} else if (CYG_PCI_NULL_DEVFN == (cur_devid & CYG_PCI_NULL_DEVFN)) {
dev = fn = 0;
dev = CYG_PCI_MIN_DEV;
} else {
// Otherwise, check multi-function bit of device's first function
cyg_uint8 header;
 
devfn = CYG_PCI_DEV_MAKE_DEVFN(dev, 0);
cyg_pcihw_read_config_uint8(bus, devfn,
CYG_PCI_CFG_HEADER_TYPE, &header);
if (header & CYG_PCI_CFG_HEADER_TYPE_MF) {
// Multi-function device. Increase fn.
fn++;
if (fn >= CYG_PCI_MAX_FN) {
fn = 0;
dev++;
}
} else {
// Single-function device. Skip to next.
dev++;
}
}
 
// Note: Reset iterators in enclosing statement's "next" part.
// Allows resuming scan with given input values.
for (;bus < CYG_PCI_MAX_BUS; bus++, dev=CYG_PCI_MIN_DEV) {
for (;dev < CYG_PCI_MAX_DEV; dev++, fn=0) {
for (;fn < CYG_PCI_MAX_FN; fn++) {
cyg_uint16 vendor;
 
if (CYG_PCI_IGNORE_DEVICE(bus, dev, fn))
continue;
 
devfn = CYG_PCI_DEV_MAKE_DEVFN(dev, fn);
cyg_pcihw_read_config_uint16(bus, devfn,
CYG_PCI_CFG_VENDOR, &vendor);
if (CYG_PCI_VENDOR_UNDEFINED != vendor) {
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf(" Bus: %d, Dev: %d, Fn: %d, Vendor: %x\n", bus, dev, fn, vendor);
#endif
*next_devid = CYG_PCI_DEV_MAKE_ID(bus, devfn);
return true;
}
}
}
}
 
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("nothing.\n");
#endif
 
return false;
}
 
//
// Scan for a particular device, starting with 'devid'
// 'devid' is updated with the next device if found.
// is not changed if no suitable device is found.
cyg_bool
cyg_pci_find_device( cyg_uint16 vendor, cyg_uint16 device,
cyg_pci_device_id *devid )
{
cyg_pci_device_id new_devid = *devid;
 
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("cyg_pci_find_device - vendor: %x, device: %x\n", vendor, device);
#endif
// Scan entire bus, check for matches on valid devices.
while (cyg_pci_find_next(new_devid, &new_devid)) {
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(new_devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(new_devid);
cyg_uint16 v, d;
 
// Check that vendor matches.
cyg_pcihw_read_config_uint16(bus, devfn,
CYG_PCI_CFG_VENDOR, &v);
cyg_pcihw_read_config_uint16(bus, devfn,
CYG_PCI_CFG_DEVICE, &d);
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("... PCI vendor = %x, device = %x\n", v, d);
#endif
if (v != vendor) continue;
 
// Check that device matches.
if (d == device) {
*devid = new_devid;
return true;
}
}
 
return false;
}
 
cyg_bool
cyg_pci_find_class( cyg_uint32 dev_class, cyg_pci_device_id *devid )
{
// Scan entire bus, check for matches on valid devices.
while (cyg_pci_find_next(*devid, devid)) {
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(*devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(*devid);
cyg_uint32 c;
 
// Check that class code matches.
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_CLASS_REV, &c);
c >>= 8;
if (c == dev_class)
return true;
}
 
return false;
}
 
cyg_bool
cyg_pci_find_matching( cyg_pci_match_func *matchp,
void * match_callback_data,
cyg_pci_device_id *devid )
{
cyg_pci_device_id new_devid = *devid;
 
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("cyg_pci_find_matching - func is at %x\n", (unsigned int)matchp);
#endif
// Scan entire bus, check for matches on valid devices.
while (cyg_pci_find_next(new_devid, &new_devid)) {
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(new_devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(new_devid);
cyg_uint16 v, d;
cyg_uint32 c;
 
// Check that vendor, device and class match.
cyg_pcihw_read_config_uint16(bus, devfn,
CYG_PCI_CFG_VENDOR, &v);
cyg_pcihw_read_config_uint16(bus, devfn,
CYG_PCI_CFG_DEVICE, &d);
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_CLASS_REV, &c);
c >>= 8;
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("... PCI vendor = %x, device = %x, class %x\n", v, d, c);
#endif
// Check that device matches as the caller desires:
if ( (*matchp)(v, d, c, match_callback_data) ) {
*devid = new_devid;
return true;
}
}
 
return false;
}
 
//------------------------------------------------------------------------
// Resource Allocation
 
static CYG_PCI_ADDRESS64 cyg_pci_memory_base;
static CYG_PCI_ADDRESS32 cyg_pci_io_base;
 
void
cyg_pci_set_memory_base(CYG_PCI_ADDRESS64 base)
{
cyg_pci_memory_base = base;
}
 
void
cyg_pci_set_io_base(CYG_PCI_ADDRESS32 base)
{
cyg_pci_io_base = base;
}
 
cyg_bool
cyg_pci_configure_device( cyg_pci_device *dev_info )
{
int bar;
cyg_uint32 flags;
cyg_bool ret = true;
 
// If device is already active, just return true as
// cyg_pci_get_device_info has presumably filled in
// the base_map already.
if ((dev_info->command & CYG_PCI_CFG_COMMAND_ACTIVE) != 0)
return true;
 
if (dev_info->num_bars > 0) {
for (bar = 0; bar < dev_info->num_bars; bar++) {
flags = dev_info->base_size[bar];
 
ret = false;
 
if ((flags & CYG_PCI_CFG_BAR_SPACE_MASK) == CYG_PCI_CFG_BAR_SPACE_MEM){
ret |= cyg_pci_allocate_memory(dev_info, bar,
&cyg_pci_memory_base);
 
// If this is a 64bit memory region, skip the next bar
// since it will contain the top 32 bits.
if (flags & CYG_PRI_CFG_BAR_MEM_TYPE_64)
bar++;
} else
ret |= cyg_pci_allocate_io(dev_info, bar, &cyg_pci_io_base);
 
if (!ret)
return ret;
}
}
 
cyg_pci_translate_interrupt(dev_info, &dev_info->hal_vector);
 
return ret;
}
 
// This is the function that handles resource allocation. It doesn't
// affect the device state.
// Should not be called with top32bit-bar of a 64bit pair.
inline cyg_bool
cyg_pci_allocate_memory_priv( cyg_pci_device *dev_info, cyg_uint32 bar,
CYG_PCI_ADDRESS64 *base,
CYG_PCI_ADDRESS64 *assigned_addr)
{
cyg_uint32 mem_type, flags;
CYG_PCI_ADDRESS64 size, aligned_addr;
 
// Get the probed size and flags
flags = dev_info->base_size[bar];
 
// Decode size
size = (CYG_PCI_ADDRESS64) ((~(flags & CYG_PRI_CFG_BAR_MEM_MASK))+1);
 
// Calculate address we will assign the device.
// This can be made more clever, specifically:
// 1) The lowest 1MB should be reserved for devices with 1M memory type.
// : Needs to be handled.
// 2) The low 32bit space should be reserved for devices with 32bit type.
// : With the usual handful of devices it is unlikely that the
// low 4GB space will become full.
// 3) A bitmap can be used to avoid fragmentation.
// : Again, unlikely to be necessary.
//
// For now, simply align to required size.
aligned_addr = (*base+size-1) & ~(size-1);
 
// Is the request for memory space?
if (CYG_PCI_CFG_BAR_SPACE_MEM != (flags & CYG_PCI_CFG_BAR_SPACE_MASK))
return false;
 
// Check type of memory requested...
mem_type = CYG_PRI_CFG_BAR_MEM_TYPE_MASK & flags;
 
// We don't handle <1MB devices optimally yet.
if (CYG_PRI_CFG_BAR_MEM_TYPE_1M == mem_type
&& (aligned_addr + size) > 1024*1024)
return false;
 
// Update the resource pointer and return values.
*base = aligned_addr+size;
*assigned_addr = aligned_addr;
 
dev_info->base_map[bar] = (cyg_uint32)
(aligned_addr+HAL_PCI_PHYSICAL_MEMORY_BASE) & 0xffffffff;
 
// If a 64bit region, store upper 32 bits in the next bar.
// Note: The CPU is not necessarily able to access the region
// linearly - it may have to do it in segments. Driver must handle that.
if (CYG_PRI_CFG_BAR_MEM_TYPE_64 == mem_type) {
dev_info->base_map[bar+1] = (cyg_uint32)
((aligned_addr+HAL_PCI_PHYSICAL_MEMORY_BASE) >> 32) & 0xffffffff;
}
return true;
}
 
cyg_bool
cyg_pci_allocate_memory( cyg_pci_device *dev_info, cyg_uint32 bar,
CYG_PCI_ADDRESS64 *base)
{
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(dev_info->devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(dev_info->devid);
CYG_PCI_ADDRESS64 assigned_addr;
cyg_bool ret;
 
// Check that device is inactive.
if ((dev_info->command & CYG_PCI_CFG_COMMAND_ACTIVE) != 0)
return false;
 
// Allocate memory space for the device.
ret = cyg_pci_allocate_memory_priv(dev_info, bar, base, &assigned_addr);
 
if (ret) {
// Map the device and update the BAR in the dev_info structure.
cyg_pcihw_write_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE+4*bar,
(cyg_uint32)
(assigned_addr & 0xffffffff));
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE+4*bar,
&dev_info->base_address[bar]);
 
// Handle upper 32 bits if necessary.
if (dev_info->base_size[bar] & CYG_PRI_CFG_BAR_MEM_TYPE_64) {
cyg_pcihw_write_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE+4*(bar+1),
(cyg_uint32)
((assigned_addr >> 32)& 0xffffffff));
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE+4*(bar+1),
&dev_info->base_address[bar+1]);
}
}
 
return ret;
}
 
cyg_bool
cyg_pci_allocate_io_priv( cyg_pci_device *dev_info, cyg_uint32 bar,
CYG_PCI_ADDRESS32 *base,
CYG_PCI_ADDRESS32 *assigned_addr)
{
cyg_uint32 flags, size;
CYG_PCI_ADDRESS32 aligned_addr;
 
// Get the probed size and flags
flags = dev_info->base_size[bar];
 
// Decode size
size = (~(flags & CYG_PRI_CFG_BAR_IO_MASK))+1;
 
// Calculate address we will assign the device.
// This can be made more clever.
// For now, simply align to required size.
aligned_addr = (*base+size-1) & ~(size-1);
 
// Is the request for IO space?
if (CYG_PCI_CFG_BAR_SPACE_IO != (flags & CYG_PCI_CFG_BAR_SPACE_MASK))
return false;
 
// Update the resource pointer and return values.
*base = aligned_addr+size;
dev_info->base_map[bar] = aligned_addr+HAL_PCI_PHYSICAL_IO_BASE;
*assigned_addr = aligned_addr;
 
return true;
}
 
 
cyg_bool
cyg_pci_allocate_io( cyg_pci_device *dev_info, cyg_uint32 bar,
CYG_PCI_ADDRESS32 *base)
{
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(dev_info->devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(dev_info->devid);
CYG_PCI_ADDRESS32 assigned_addr;
cyg_bool ret;
// Check that device is inactive.
if ((dev_info->command & CYG_PCI_CFG_COMMAND_ACTIVE) != 0)
return false;
 
// Allocate IO space for the device.
ret = cyg_pci_allocate_io_priv(dev_info, bar, base, &assigned_addr);
 
if (ret) {
// Map the device and update the BAR in the dev_info structure.
cyg_pcihw_write_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE+4*bar,
assigned_addr);
cyg_pcihw_read_config_uint32(bus, devfn,
CYG_PCI_CFG_BAR_BASE+4*bar,
&dev_info->base_address[bar]);
}
 
return ret;
}
 
cyg_bool
cyg_pci_translate_interrupt( cyg_pci_device *dev_info,
CYG_ADDRWORD *vec )
{
cyg_uint8 bus = CYG_PCI_DEV_GET_BUS(dev_info->devid);
cyg_uint8 devfn = CYG_PCI_DEV_GET_DEVFN(dev_info->devid);
 
return cyg_pcihw_translate_interrupt(bus, devfn, vec);
}
 
 
// Initialize devices on a given bus and all subordinate busses.
cyg_bool
cyg_pci_configure_bus( cyg_uint8 bus,
cyg_uint8 *next_bus )
{
cyg_uint8 devfn, header_type;
cyg_pci_device_id devid;
cyg_pci_device dev_info;
 
CYG_PCI_ADDRESS64 mem_start, mem_limit, mem_base;
CYG_PCI_ADDRESS32 io_start, io_limit, io_base;
 
// Scan only this bus for valid devices.
devid = CYG_PCI_DEV_MAKE_ID(bus, 0) | CYG_PCI_NULL_DEVFN;
 
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("Configuring bus %d.\n", bus);
#endif
 
while (cyg_pci_find_next(devid, &devid) && bus == CYG_PCI_DEV_GET_BUS(devid)) {
 
devfn = CYG_PCI_DEV_GET_DEVFN(devid);
// Get the device info
cyg_pci_get_device_info(devid, &dev_info);
 
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("\n");
diag_printf("Configuring PCI Bus : %d\n", bus);
diag_printf(" PCI Device: %d\n", CYG_PCI_DEV_GET_DEV(devfn));
diag_printf(" PCI Func : %d\n", CYG_PCI_DEV_GET_FN(devfn));
diag_printf(" Vendor Id : 0x%08X\n", dev_info.vendor);
diag_printf(" Device Id : 0x%08X\n", dev_info.device);
#endif
 
header_type = dev_info.header_type & CYG_PCI_CFG_HEADER_TYPE_MASK;
 
// Check for supported header types.
if (header_type != CYG_PCI_HEADER_NORMAL &&
header_type != CYG_PCI_HEADER_BRIDGE) {
CYG_FAIL("Unsupported PCI header type");
continue;
}
 
// Only PCI-to-PCI bridges
if (header_type == CYG_PCI_HEADER_BRIDGE &&
(dev_info.class_rev >> 8) != CYG_PCI_CLASS_BRIDGE_PCI_PCI) {
CYG_FAIL("Unsupported PCI bridge class");
continue;
}
 
// Configure the base registers
if (!cyg_pci_configure_device(&dev_info)) {
// Apparently out of resources.
CYG_FAIL("cyg_pci_configure_device failed");
break;
}
// Activate non-bridge devices.
if (header_type != CYG_PCI_HEADER_BRIDGE) {
dev_info.command |= (CYG_PCI_CFG_COMMAND_IO // enable I/O space
| CYG_PCI_CFG_COMMAND_MEMORY // enable memory space
| CYG_PCI_CFG_COMMAND_MASTER); // enable bus master
cyg_pci_write_config_uint16(dev_info.devid, CYG_PCI_CFG_COMMAND, dev_info.command);
} else {
// Bridge Configuration
 
// Set up the bus numbers that define the bridge
dev_info.header.bridge.pri_bus = bus;
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_PRI_BUS,
dev_info.header.bridge.pri_bus);
 
dev_info.header.bridge.sec_bus = *next_bus;
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_SEC_BUS,
dev_info.header.bridge.sec_bus);
 
// Temporarily set to maximum so config cycles get passed along.
dev_info.header.bridge.sub_bus = CYG_PCI_MAX_BUS - 1;
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_SUB_BUS,
dev_info.header.bridge.sub_bus);
 
// increment bus counter
*next_bus += 1;
 
// To figure the sizes of the memory and I/O windows, save the
// current base of memory and I/O before configuring the bus
// or busses on the secondary side of the bridge. After the
// secondary side is configured, the difference between the
// current values and saved values will tell the size.
 
// For bridges, the memory window must start and end on a 1M
// boundary and the I/O window must start and end on a 4K
// boundary. We round up the mem and I/O allocation bases
// to appropriate boundaries before configuring the secondary
// bus. Save the pre-rounded values in case no mem or I/O
// is needed we can recover any space lost due to rounding.
 
// round up start of PCI memory space to a 1M boundary
mem_base = cyg_pci_memory_base;
cyg_pci_memory_base += 0xfffff;
cyg_pci_memory_base &= ~0xfffff;
mem_start = cyg_pci_memory_base;
 
// round up start of PCI I/O space to a 4 Kbyte start address
io_base = cyg_pci_io_base;
cyg_pci_io_base += 0xfff;
cyg_pci_io_base &= ~0xfff;
io_start = cyg_pci_io_base;
// configure the subordinate PCI bus
cyg_pci_configure_bus (dev_info.header.bridge.sec_bus, next_bus);
// set subordinate bus number to last assigned bus number
dev_info.header.bridge.sub_bus = *next_bus - 1;
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_SUB_BUS,
dev_info.header.bridge.sub_bus);
 
// Did sub bus configuration use any I/O?
if (cyg_pci_io_base > io_start) {
 
// round up end of bridge's I/O space to a 4K boundary
cyg_pci_io_base += 0xfff;
cyg_pci_io_base &= ~0xfff;
io_limit = cyg_pci_io_base - 0x1000;
 
// Enable I/O cycles across bridge
dev_info.command |= CYG_PCI_CFG_COMMAND_IO;
 
// 32 Bit I/O?
if ((dev_info.header.bridge.io_base & 0x0f) == 0x01) {
// I/O Base Upper 16 Bits Register
dev_info.header.bridge.io_base_upper16 = io_start >> 16;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_IO_BASE_UPPER16,
dev_info.header.bridge.io_base_upper16);
// I/O Limit Upper 16 Bits Register
dev_info.header.bridge.io_limit_upper16 = io_limit >> 16;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_IO_LIMIT_UPPER16,
dev_info.header.bridge.io_limit_upper16);
}
 
// I/O Base Register
dev_info.header.bridge.io_base = (io_start & 0xf000) >> 8;
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_IO_BASE,
dev_info.header.bridge.io_base);
// I/O Limit Register
dev_info.header.bridge.io_limit = (io_limit & 0xf000) >> 8;
cyg_pcihw_write_config_uint8(bus, devfn, CYG_PCI_CFG_IO_LIMIT,
dev_info.header.bridge.io_limit);
 
} else {
// No I/O space used on secondary bus.
// Recover any space lost on unnecessary rounding
cyg_pci_io_base = io_base;
}
 
// Did sub bus configuration use any memory?
if (cyg_pci_memory_base > mem_start) {
 
// round up end of bridge's PCI memory space to a 1M boundary
cyg_pci_memory_base += 0xfffff;
cyg_pci_memory_base &= ~0xfffff;
mem_limit = cyg_pci_memory_base - 0x100000;
 
// Enable memory cycles across bridge
dev_info.command |= CYG_PCI_CFG_COMMAND_MEMORY;
 
// Memory Base Register
dev_info.header.bridge.mem_base = (mem_start >> 16) & 0xfff0;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_MEM_BASE,
dev_info.header.bridge.mem_base);
 
// Memory Limit Register
dev_info.header.bridge.mem_limit = (mem_limit >> 16) & 0xfff0;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_MEM_LIMIT,
dev_info.header.bridge.mem_limit);
 
// Prefetchable memory not yet supported across bridges.
// Disable by making limit < base
{
cyg_uint16 tmp_word;
 
tmp_word = 0;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_PREFETCH_LIMIT,
tmp_word);
tmp_word = 0xfff0;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_PREFETCH_BASE,
tmp_word);
}
} else {
// No memory space used on secondary bus.
// Recover any space lost on unnecessary rounding
cyg_pci_memory_base = mem_base;
}
 
// Setup the bridge command register
dev_info.command |= CYG_PCI_CFG_COMMAND_MASTER;
dev_info.command |= CYG_PCI_CFG_COMMAND_SERR;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_COMMAND,
dev_info.command);
 
/* Setup the Bridge Control Register */
dev_info.header.bridge.control |= CYG_PCI_CFG_BRIDGE_CTL_PARITY;
dev_info.header.bridge.control |= CYG_PCI_CFG_BRIDGE_CTL_SERR;
dev_info.header.bridge.control |= CYG_PCI_CFG_BRIDGE_CTL_MASTER;
cyg_pcihw_write_config_uint16(bus, devfn, CYG_PCI_CFG_BRIDGE_CONTROL,
dev_info.header.bridge.control);
}
}
#ifdef CYGPKG_IO_PCI_DEBUG
diag_printf("Finished configuring bus %d.\n", bus);
#endif
 
return true;
}
 
 
#endif // ifdef CYG_PCI_PRESENT
 
//-----------------------------------------------------------------------------
// end of pci.c

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.