direct-io.hg
changeset 4755:6521227a93d4
bitkeeper revision 1.1389.5.5 (42788bdeo6dq0hEkwcye0RH_ljmY1Q)
Remove dead code from Xen.
Signed-off-by: Keir Fraser <keir@xensource.com>
Remove dead code from Xen.
Signed-off-by: Keir Fraser <keir@xensource.com>
author | kaf24@firebug.cl.cam.ac.uk |
---|---|
date | Wed May 04 08:46:22 2005 +0000 (2005-05-04) |
parents | 0e46eeba11c0 |
children | 4978be644202 |
files | .rootkeys xen/arch/ia64/xenmisc.c xen/arch/x86/Makefile xen/arch/x86/pci-irq.c xen/arch/x86/pci-pc.c xen/arch/x86/pci-x86.c xen/arch/x86/pci-x86.h xen/drivers/Makefile xen/drivers/acpi/Makefile xen/drivers/acpi/acpi_ksyms.c xen/drivers/pci/Makefile xen/drivers/pci/compat.c xen/drivers/pci/gen-devlist.c xen/drivers/pci/names.c xen/drivers/pci/pci.c xen/drivers/pci/pci.ids xen/drivers/pci/quirks.c xen/drivers/pci/setup-res.c xen/include/acpi/acdebug.h xen/include/acpi/acdisasm.h xen/include/acpi/acdispat.h xen/include/acpi/acevents.h xen/include/acpi/acinterp.h xen/include/acpi/acnamesp.h xen/include/acpi/acparser.h xen/include/acpi/acresrc.h xen/include/acpi/actables.h xen/include/acpi/actbl71.h xen/include/acpi/amlcode.h xen/include/acpi/amlresrc.h |
line diff
1.1 --- a/.rootkeys Tue May 03 17:44:12 2005 +0000 1.2 +++ b/.rootkeys Wed May 04 08:46:22 2005 +0000 1.3 @@ -1216,10 +1216,6 @@ 41aaf567tqrKGSTDK8OVeAbpeoccPw xen/arch/ 1.4 41aaf567a36esU-rUK7twPiv-yTFyw xen/arch/x86/mtrr/mtrr.h 1.5 41aaf567DcTL6pqVtLZJI5cSryyA1A xen/arch/x86/mtrr/state.c 1.6 3f12cff65EV3qOG2j37Qm0ShgvXGRw xen/arch/x86/nmi.c 1.7 -3ddb79bdHe6_Uij4-glW91vInNtBYQ xen/arch/x86/pci-irq.c 1.8 -3ddb79bcZ_2FxINljqNSkqa17ISyJw xen/arch/x86/pci-pc.c 1.9 -3ddb79bdeJ7_86z03yTAPIeeywOg3Q xen/arch/x86/pci-x86.c 1.10 -3ddb79bdIKgipvGoqExEQ7jawfVowA xen/arch/x86/pci-x86.h 1.11 3ddb79bc7KxGCEJsgBnkDX7XjD_ZEQ xen/arch/x86/rwlock.c 1.12 3ddb79bcrD6Z_rUvSDgrvjyb4846Eg xen/arch/x86/setup.c 1.13 405b8599xI_PoEr3zZoJ2on-jdn7iw xen/arch/x86/shadow.c 1.14 @@ -1274,50 +1270,29 @@ 3ddb79bd3zgV33PHdt-cgh3sxcb1hw xen/commo 1.15 4203fb92Qcy7mGpauBdq09J-WAqfoA xen/common/xmalloc.c 1.16 3ddb79c0ppNeJtjC4va8j41ADCnchA xen/drivers/Makefile 1.17 40715b2bi9gU43-cYzlmPDgreYQchw xen/drivers/acpi/Makefile 1.18 -40715b2bDxNCz5LFV8FAXihmYJZFUQ xen/drivers/acpi/acpi_ksyms.c 1.19 40715b2cNVOegtvyft_AHFKJYRprfA xen/drivers/acpi/tables.c 1.20 3e4a8cb7alzQCDKS7MlioPoHBKYkdQ xen/drivers/char/Makefile 1.21 4049e6bfNSIq7s7OV-Bd69QD0RpR2Q xen/drivers/char/console.c 1.22 3e4a8cb7nMChlro4wvOBo76n__iCFA xen/drivers/char/serial.c 1.23 -3ddb79beUWngyIhMHgyPtuTem4o4JA xen/drivers/pci/Makefile 1.24 -3ddb79beU9td0Mnm0VUMklerBa37qQ xen/drivers/pci/compat.c 1.25 -3ddb79beHkGQE58z5t5gyUCYiwOxvw xen/drivers/pci/gen-devlist.c 1.26 -3ddb79bfoQcFKLf5P6wZlDl36alWdQ xen/drivers/pci/names.c 1.27 -3ddb79bfyX7-pD6XdxY_mdNrJR20iw xen/drivers/pci/pci.c 1.28 -3ddb79bf2AS7YBGwooE_Kbv7XgUqNQ xen/drivers/pci/pci.ids 1.29 -3ddb79bf7sTn85WtP_8Nc2YEmmVExQ xen/drivers/pci/quirks.c 1.30 -3ddb79bfJaf0bkE1Y67bnll8-kjEPg xen/drivers/pci/setup-res.c 1.31 40715b2cFpte_UNWnBZW0Du7z9AhTQ xen/include/acpi/acconfig.h 1.32 -40715b2cEQWX-PaxEH30qI48K1krnQ xen/include/acpi/acdebug.h 1.33 -40715b2c_7j-oy3ZNAuqE3IFNPzArg xen/include/acpi/acdisasm.h 1.34 -40715b2cFdcPx-2FHGM1Q-M-592xYQ xen/include/acpi/acdispat.h 1.35 -40715b2cKqD_Lihnlmvnyl4AAl3EFw xen/include/acpi/acevents.h 1.36 40715b2ctNvVZ058w8eM8DR9hOat_A xen/include/acpi/acexcep.h 1.37 40715b2com8I01qcHcAw47e93XsCqQ xen/include/acpi/acglobal.h 1.38 40715b2cS1t4uI3sMsu-c0M4qqAIrw xen/include/acpi/achware.h 1.39 -40715b2chSz545A4Tq-y3WAtanzPMQ xen/include/acpi/acinterp.h 1.40 40715b2cGf23lRI58NphiaDQl698-w xen/include/acpi/aclocal.h 1.41 40715b2cdG7tCF2NMk0j1RCQQPzPXg xen/include/acpi/acmacros.h 1.42 -40715b2ckP2XZZDkSTehu6riuMogDA xen/include/acpi/acnamesp.h 1.43 40715b2c4AvHYn2-2YIyt3mx-Mm5tw xen/include/acpi/acobject.h 1.44 40715b2cPUXsHzmchvXx7QHAfW0nMw xen/include/acpi/acoutput.h 1.45 -40715b2cNbYpt9CHmCHg3RG7fBdACA xen/include/acpi/acparser.h 1.46 40715b2cWM_6zR14U9Tp0s_q8D002A xen/include/acpi/acpi.h 1.47 40715b2dcJDTiROgyMk9swD_veWktA xen/include/acpi/acpi_bus.h 1.48 40715b2dRFlZK6apnH7WkUCBdyFXWA xen/include/acpi/acpi_drivers.h 1.49 40715b2dtgZhNGAzlyBMe3kqve3mqw xen/include/acpi/acpiosxf.h 1.50 40715b2dpW5TY7n5rzCufsDhJVWuMQ xen/include/acpi/acpixf.h 1.51 -40715b2dp9-_D9LTjcvtf-Yopih5mQ xen/include/acpi/acresrc.h 1.52 40715b2djvd97KbIpt4wyJgxwqCqmg xen/include/acpi/acstruct.h 1.53 -40715b2dRIU9cQgmTjtCRNleIJDAYg xen/include/acpi/actables.h 1.54 40715b2dy8ECRkSo9x0tRRueAjPx1g xen/include/acpi/actbl.h 1.55 40715b2ds4J-XWn9Ix-lgBiJffNgxw xen/include/acpi/actbl1.h 1.56 40715b2d_aMKMjKKNImJR4km52KRHA xen/include/acpi/actbl2.h 1.57 -40715b2dxC03aemijgL-iDH_-BkKRw xen/include/acpi/actbl71.h 1.58 40715b2d0oQUijKwEw6SDJ4LhD8c4g xen/include/acpi/actypes.h 1.59 40715b2dBByvcAtRpN5mafyEYLcBWA xen/include/acpi/acutils.h 1.60 -40715b2d_iPcZ0uUVGblPvjsHOwE5Q xen/include/acpi/amlcode.h 1.61 -40715b2d3CdS6dIpZDTiCJRlDG3LCA xen/include/acpi/amlresrc.h 1.62 40715b2dKRW7A71SNaeV6zfrEzYxPw xen/include/acpi/platform/acenv.h 1.63 40715b2d8fYydJMcODFrV1ocLklGDg xen/include/acpi/platform/acgcc.h 1.64 40715b2d1yZkqyAt0kgx2xEwsatuuA xen/include/acpi/platform/aclinux.h
2.1 --- a/xen/arch/ia64/xenmisc.c Tue May 03 17:44:12 2005 +0000 2.2 +++ b/xen/arch/ia64/xenmisc.c Wed May 04 08:46:22 2005 +0000 2.3 @@ -133,73 +133,6 @@ void free_page_type(struct pfn_info *pag 2.4 } 2.5 2.6 /////////////////////////////// 2.7 -// from arch/x86/pci.c 2.8 -/////////////////////////////// 2.9 - 2.10 -int 2.11 -pcibios_prep_mwi (struct pci_dev *dev) 2.12 -{ 2.13 - dummy(); 2.14 -} 2.15 - 2.16 -/////////////////////////////// 2.17 -// from arch/x86/pci-irq.c 2.18 -/////////////////////////////// 2.19 - 2.20 -void pcibios_enable_irq(struct pci_dev *dev) 2.21 -{ 2.22 - dummy(); 2.23 -} 2.24 - 2.25 -/////////////////////////////// 2.26 -// from arch/ia64/pci-pc.c 2.27 -/////////////////////////////// 2.28 - 2.29 -#include <xen/pci.h> 2.30 - 2.31 -int pcibios_enable_device(struct pci_dev *dev, int mask) 2.32 -{ 2.33 - dummy(); 2.34 - return 0; 2.35 -} 2.36 - 2.37 -int (*pci_config_read)(int seg, int bus, int dev, int fn, int reg, int len, u32 *value) = NULL; 2.38 -int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value) = NULL; 2.39 - 2.40 -//struct pci_fixup pcibios_fixups[] = { { 0 } }; 2.41 -struct pci_fixup pcibios_fixups[] = { { 0 } }; 2.42 - 2.43 -void 2.44 -pcibios_align_resource(void *data, struct resource *res, 2.45 - unsigned long size, unsigned long align) 2.46 -{ 2.47 - dummy(); 2.48 -} 2.49 - 2.50 -void 2.51 -pcibios_update_resource(struct pci_dev *dev, struct resource *root, 2.52 - struct resource *res, int resource) 2.53 -{ 2.54 - dummy(); 2.55 -} 2.56 - 2.57 -void __devinit pcibios_fixup_bus(struct pci_bus *b) 2.58 -{ 2.59 - dummy(); 2.60 -} 2.61 - 2.62 -void __init pcibios_init(void) 2.63 -{ 2.64 - dummy(); 2.65 -} 2.66 - 2.67 -char * __devinit pcibios_setup(char *str) 2.68 -{ 2.69 - dummy(); 2.70 - return 0; 2.71 -} 2.72 - 2.73 -/////////////////////////////// 2.74 // from arch/ia64/traps.c 2.75 /////////////////////////////// 2.76
3.1 --- a/xen/arch/x86/Makefile Tue May 03 17:44:12 2005 +0000 3.2 +++ b/xen/arch/x86/Makefile Wed May 04 08:46:22 2005 +0000 3.3 @@ -11,8 +11,6 @@ ifneq ($(crash_debug),y) 3.4 OBJS := $(patsubst cdb%.o,,$(OBJS)) 3.5 endif 3.6 3.7 -OBJS := $(filter-out pci%,$(OBJS)) 3.8 - 3.9 default: $(TARGET) 3.10 3.11 $(TARGET): $(TARGET)-syms boot/mkelf32
4.1 --- a/xen/arch/x86/pci-irq.c Tue May 03 17:44:12 2005 +0000 4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 4.3 @@ -1,1084 +0,0 @@ 4.4 -/* 4.5 - * Low-Level PCI Support for PC -- Routing of Interrupts 4.6 - * 4.7 - * (c) 1999--2000 Martin Mares <mj@ucw.cz> 4.8 - */ 4.9 - 4.10 -#include <xen/config.h> 4.11 -#include <xen/types.h> 4.12 -#include <xen/kernel.h> 4.13 -#include <xen/pci.h> 4.14 -#include <xen/init.h> 4.15 -#include <xen/slab.h> 4.16 -#include <xen/irq.h> 4.17 -#include <asm/io.h> 4.18 -#include <asm/smp.h> 4.19 -#include <asm/io_apic.h> 4.20 -#include "pci-x86.h" 4.21 - 4.22 -#define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24)) 4.23 -#define PIRQ_VERSION 0x0100 4.24 - 4.25 -int broken_hp_bios_irq9; 4.26 - 4.27 -static struct irq_routing_table *pirq_table; 4.28 - 4.29 -/* 4.30 - * Never use: 0, 1, 2 (timer, keyboard, and cascade) 4.31 - * Avoid using: 13, 14 and 15 (FP error and IDE). 4.32 - * Penalize: 3, 4, 6, 7, 12 (known ISA uses: serial, floppy, parallel and mouse) 4.33 - */ 4.34 -unsigned int pcibios_irq_mask = 0xfff8; 4.35 - 4.36 -static int pirq_penalty[16] = { 4.37 - 1000000, 1000000, 1000000, 1000, 1000, 0, 1000, 1000, 4.38 - 0, 0, 0, 0, 1000, 100000, 100000, 100000 4.39 -}; 4.40 - 4.41 -struct irq_router { 4.42 - char *name; 4.43 - u16 vendor, device; 4.44 - int (*get)(struct pci_dev *router, struct pci_dev *dev, int pirq); 4.45 - int (*set)(struct pci_dev *router, struct pci_dev *dev, int pirq, int new); 4.46 -}; 4.47 - 4.48 -struct irq_router_handler { 4.49 - u16 vendor; 4.50 - int (*probe)(struct irq_router *r, struct pci_dev *router, u16 device); 4.51 -}; 4.52 - 4.53 -/* 4.54 - * Search 0xf0000 -- 0xfffff for the PCI IRQ Routing Table. 4.55 - */ 4.56 - 4.57 -static struct irq_routing_table * __init pirq_find_routing_table(void) 4.58 -{ 4.59 - u8 *addr; 4.60 - struct irq_routing_table *rt; 4.61 - int i; 4.62 - u8 sum; 4.63 - 4.64 - for(addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000); addr += 16) { 4.65 - rt = (struct irq_routing_table *) addr; 4.66 - if (rt->signature != PIRQ_SIGNATURE || 4.67 - rt->version != PIRQ_VERSION || 4.68 - rt->size % 16 || 4.69 - rt->size < sizeof(struct irq_routing_table)) 4.70 - continue; 4.71 - sum = 0; 4.72 - for(i=0; i<rt->size; i++) 4.73 - sum += addr[i]; 4.74 - if (!sum) { 4.75 - DBG("PCI: Interrupt Routing Table found at 0x%p\n", rt); 4.76 - return rt; 4.77 - } 4.78 - } 4.79 - return NULL; 4.80 -} 4.81 - 4.82 -/* 4.83 - * If we have a IRQ routing table, use it to search for peer host 4.84 - * bridges. It's a gross hack, but since there are no other known 4.85 - * ways how to get a list of buses, we have to go this way. 4.86 - */ 4.87 - 4.88 -static void __init pirq_peer_trick(void) 4.89 -{ 4.90 - struct irq_routing_table *rt = pirq_table; 4.91 - u8 busmap[256]; 4.92 - int i; 4.93 - struct irq_info *e; 4.94 - 4.95 - memset(busmap, 0, sizeof(busmap)); 4.96 - for(i=0; i < (rt->size - sizeof(struct irq_routing_table)) / sizeof(struct irq_info); i++) { 4.97 - e = &rt->slots[i]; 4.98 -#ifdef DEBUG 4.99 - { 4.100 - int j; 4.101 - DBG("%02x:%02x slot=%02x", e->bus, e->devfn/8, e->slot); 4.102 - for(j=0; j<4; j++) 4.103 - DBG(" %d:%02x/%04x", j, e->irq[j].link, e->irq[j].bitmap); 4.104 - DBG("\n"); 4.105 - } 4.106 -#endif 4.107 - busmap[e->bus] = 1; 4.108 - } 4.109 - for(i=1; i<256; i++) 4.110 - /* 4.111 - * It might be a secondary bus, but in this case its parent is already 4.112 - * known (ascending bus order) and therefore pci_scan_bus returns immediately. 4.113 - */ 4.114 - if (busmap[i] && pci_scan_bus(i, pci_root_bus->ops, NULL)) 4.115 - printk(KERN_INFO "PCI: Discovered primary peer bus %02x [IRQ]\n", i); 4.116 - pcibios_last_bus = -1; 4.117 -} 4.118 - 4.119 -/* 4.120 - * Code for querying and setting of IRQ routes on various interrupt routers. 4.121 - */ 4.122 - 4.123 -void eisa_set_level_irq(unsigned int irq) 4.124 -{ 4.125 - unsigned char mask = 1 << (irq & 7); 4.126 - unsigned int port = 0x4d0 + (irq >> 3); 4.127 - unsigned char val = inb(port); 4.128 - 4.129 - if (!(val & mask)) { 4.130 - DBG(" -> edge"); 4.131 - outb(val | mask, port); 4.132 - } 4.133 -} 4.134 - 4.135 -/* 4.136 - * Common IRQ routing practice: nybbles in config space, 4.137 - * offset by some magic constant. 4.138 - */ 4.139 -static unsigned int read_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr) 4.140 -{ 4.141 - u8 x; 4.142 - unsigned reg = offset + (nr >> 1); 4.143 - 4.144 - pci_read_config_byte(router, reg, &x); 4.145 - return (nr & 1) ? (x >> 4) : (x & 0xf); 4.146 -} 4.147 - 4.148 -static void write_config_nybble(struct pci_dev *router, unsigned offset, unsigned nr, unsigned int val) 4.149 -{ 4.150 - u8 x; 4.151 - unsigned reg = offset + (nr >> 1); 4.152 - 4.153 - pci_read_config_byte(router, reg, &x); 4.154 - x = (nr & 1) ? ((x & 0x0f) | (val << 4)) : ((x & 0xf0) | val); 4.155 - pci_write_config_byte(router, reg, x); 4.156 -} 4.157 - 4.158 -/* 4.159 - * ALI pirq entries are damn ugly, and completely undocumented. 4.160 - * This has been figured out from pirq tables, and it's not a pretty 4.161 - * picture. 4.162 - */ 4.163 -static int pirq_ali_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.164 -{ 4.165 - static unsigned char irqmap[16] = { 0, 9, 3, 10, 4, 5, 7, 6, 1, 11, 0, 12, 0, 14, 0, 15 }; 4.166 - 4.167 - return irqmap[read_config_nybble(router, 0x48, pirq-1)]; 4.168 -} 4.169 - 4.170 -static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.171 -{ 4.172 - static unsigned char irqmap[16] = { 0, 8, 0, 2, 4, 5, 7, 6, 0, 1, 3, 9, 11, 0, 13, 15 }; 4.173 - unsigned int val = irqmap[irq]; 4.174 - 4.175 - if (val) { 4.176 - write_config_nybble(router, 0x48, pirq-1, val); 4.177 - return 1; 4.178 - } 4.179 - return 0; 4.180 -} 4.181 - 4.182 -/* 4.183 - * The Intel PIIX4 pirq rules are fairly simple: "pirq" is 4.184 - * just a pointer to the config space. 4.185 - */ 4.186 -static int pirq_piix_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.187 -{ 4.188 - u8 x; 4.189 - 4.190 - pci_read_config_byte(router, pirq, &x); 4.191 - return (x < 16) ? x : 0; 4.192 -} 4.193 - 4.194 -static int pirq_piix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.195 -{ 4.196 - pci_write_config_byte(router, pirq, irq); 4.197 - return 1; 4.198 -} 4.199 - 4.200 -/* 4.201 - * The VIA pirq rules are nibble-based, like ALI, 4.202 - * but without the ugly irq number munging. 4.203 - * However, PIRQD is in the upper instead of lower nibble. 4.204 - */ 4.205 -static int pirq_via_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.206 -{ 4.207 - return read_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq); 4.208 -} 4.209 - 4.210 -static int pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.211 -{ 4.212 - write_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq, irq); 4.213 - return 1; 4.214 -} 4.215 - 4.216 -/* 4.217 - * ITE 8330G pirq rules are nibble-based 4.218 - * FIXME: pirqmap may be { 1, 0, 3, 2 }, 4.219 - * 2+3 are both mapped to irq 9 on my system 4.220 - */ 4.221 -static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.222 -{ 4.223 - static unsigned char pirqmap[4] = { 1, 0, 2, 3 }; 4.224 - return read_config_nybble(router,0x43, pirqmap[pirq-1]); 4.225 -} 4.226 - 4.227 -static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.228 -{ 4.229 - static unsigned char pirqmap[4] = { 1, 0, 2, 3 }; 4.230 - write_config_nybble(router, 0x43, pirqmap[pirq-1], irq); 4.231 - return 1; 4.232 -} 4.233 - 4.234 -/* 4.235 - * OPTI: high four bits are nibble pointer.. 4.236 - * I wonder what the low bits do? 4.237 - */ 4.238 -static int pirq_opti_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.239 -{ 4.240 - return read_config_nybble(router, 0xb8, pirq >> 4); 4.241 -} 4.242 - 4.243 -static int pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.244 -{ 4.245 - write_config_nybble(router, 0xb8, pirq >> 4, irq); 4.246 - return 1; 4.247 -} 4.248 - 4.249 -/* 4.250 - * Cyrix: nibble offset 0x5C 4.251 - */ 4.252 -static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.253 -{ 4.254 - return read_config_nybble(router, 0x5C, (pirq-1)^1); 4.255 -} 4.256 - 4.257 -static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.258 -{ 4.259 - write_config_nybble(router, 0x5C, (pirq-1)^1, irq); 4.260 - return 1; 4.261 -} 4.262 - 4.263 -/* 4.264 - * PIRQ routing for SiS 85C503 router used in several SiS chipsets. 4.265 - * We have to deal with the following issues here: 4.266 - * - vendors have different ideas about the meaning of link values 4.267 - * - some onboard devices (integrated in the chipset) have special 4.268 - * links and are thus routed differently (i.e. not via PCI INTA-INTD) 4.269 - * - different revision of the router have a different layout for 4.270 - * the routing registers, particularly for the onchip devices 4.271 - * 4.272 - * For all routing registers the common thing is we have one byte 4.273 - * per routeable link which is defined as: 4.274 - * bit 7 IRQ mapping enabled (0) or disabled (1) 4.275 - * bits [6:4] reserved (sometimes used for onchip devices) 4.276 - * bits [3:0] IRQ to map to 4.277 - * allowed: 3-7, 9-12, 14-15 4.278 - * reserved: 0, 1, 2, 8, 13 4.279 - * 4.280 - * The config-space registers located at 0x41/0x42/0x43/0x44 are 4.281 - * always used to route the normal PCI INT A/B/C/D respectively. 4.282 - * Apparently there are systems implementing PCI routing table using 4.283 - * link values 0x01-0x04 and others using 0x41-0x44 for PCI INTA..D. 4.284 - * We try our best to handle both link mappings. 4.285 - * 4.286 - * Currently (2003-05-21) it appears most SiS chipsets follow the 4.287 - * definition of routing registers from the SiS-5595 southbridge. 4.288 - * According to the SiS 5595 datasheets the revision id's of the 4.289 - * router (ISA-bridge) should be 0x01 or 0xb0. 4.290 - * 4.291 - * Furthermore we've also seen lspci dumps with revision 0x00 and 0xb1. 4.292 - * Looks like these are used in a number of SiS 5xx/6xx/7xx chipsets. 4.293 - * They seem to work with the current routing code. However there is 4.294 - * some concern because of the two USB-OHCI HCs (original SiS 5595 4.295 - * had only one). YMMV. 4.296 - * 4.297 - * Onchip routing for router rev-id 0x01/0xb0 and probably 0x00/0xb1: 4.298 - * 4.299 - * 0x61: IDEIRQ: 4.300 - * bits [6:5] must be written 01 4.301 - * bit 4 channel-select primary (0), secondary (1) 4.302 - * 4.303 - * 0x62: USBIRQ: 4.304 - * bit 6 OHCI function disabled (0), enabled (1) 4.305 - * 4.306 - * 0x6a: ACPI/SCI IRQ: bits 4-6 reserved 4.307 - * 4.308 - * 0x7e: Data Acq. Module IRQ - bits 4-6 reserved 4.309 - * 4.310 - * We support USBIRQ (in addition to INTA-INTD) and keep the 4.311 - * IDE, ACPI and DAQ routing untouched as set by the BIOS. 4.312 - * 4.313 - * Currently the only reported exception is the new SiS 65x chipset 4.314 - * which includes the SiS 69x southbridge. Here we have the 85C503 4.315 - * router revision 0x04 and there are changes in the register layout 4.316 - * mostly related to the different USB HCs with USB 2.0 support. 4.317 - * 4.318 - * Onchip routing for router rev-id 0x04 (try-and-error observation) 4.319 - * 4.320 - * 0x60/0x61/0x62/0x63: 1xEHCI and 3xOHCI (companion) USB-HCs 4.321 - * bit 6-4 are probably unused, not like 5595 4.322 - */ 4.323 - 4.324 -#define PIRQ_SIS_IRQ_MASK 0x0f 4.325 -#define PIRQ_SIS_IRQ_DISABLE 0x80 4.326 -#define PIRQ_SIS_USB_ENABLE 0x40 4.327 -#define PIRQ_SIS_DETECT_REGISTER 0x40 4.328 - 4.329 -/* return value: 4.330 - * -1 on error 4.331 - * 0 for PCI INTA-INTD 4.332 - * 0 or enable bit mask to check or set for onchip functions 4.333 - */ 4.334 -static inline int pirq_sis5595_onchip(int pirq, int *reg) 4.335 -{ 4.336 - int ret = -1; 4.337 - 4.338 - *reg = pirq; 4.339 - switch(pirq) { 4.340 - case 0x01: 4.341 - case 0x02: 4.342 - case 0x03: 4.343 - case 0x04: 4.344 - *reg += 0x40; 4.345 - case 0x41: 4.346 - case 0x42: 4.347 - case 0x43: 4.348 - case 0x44: 4.349 - ret = 0; 4.350 - break; 4.351 - 4.352 - case 0x62: 4.353 - ret = PIRQ_SIS_USB_ENABLE; /* documented for 5595 */ 4.354 - break; 4.355 - 4.356 - case 0x61: 4.357 - case 0x6a: 4.358 - case 0x7e: 4.359 - printk(KERN_INFO "SiS pirq: IDE/ACPI/DAQ mapping not implemented: (%u)\n", 4.360 - (unsigned) pirq); 4.361 - /* fall thru */ 4.362 - default: 4.363 - printk(KERN_INFO "SiS router unknown request: (%u)\n", 4.364 - (unsigned) pirq); 4.365 - break; 4.366 - } 4.367 - return ret; 4.368 -} 4.369 - 4.370 -/* return value: 4.371 - * -1 on error 4.372 - * 0 for PCI INTA-INTD 4.373 - * 0 or enable bit mask to check or set for onchip functions 4.374 - */ 4.375 -static inline int pirq_sis96x_onchip(int pirq, int *reg) 4.376 -{ 4.377 - int ret = -1; 4.378 - 4.379 - *reg = pirq; 4.380 - switch(pirq) { 4.381 - case 0x01: 4.382 - case 0x02: 4.383 - case 0x03: 4.384 - case 0x04: 4.385 - *reg += 0x40; 4.386 - case 0x41: 4.387 - case 0x42: 4.388 - case 0x43: 4.389 - case 0x44: 4.390 - case 0x60: 4.391 - case 0x61: 4.392 - case 0x62: 4.393 - case 0x63: 4.394 - ret = 0; 4.395 - break; 4.396 - 4.397 - default: 4.398 - printk(KERN_INFO "SiS router unknown request: (%u)\n", 4.399 - (unsigned) pirq); 4.400 - break; 4.401 - } 4.402 - return ret; 4.403 -} 4.404 - 4.405 - 4.406 -static int pirq_sis5595_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.407 -{ 4.408 - u8 x; 4.409 - int reg, check; 4.410 - 4.411 - check = pirq_sis5595_onchip(pirq, ®); 4.412 - if (check < 0) 4.413 - return 0; 4.414 - 4.415 - pci_read_config_byte(router, reg, &x); 4.416 - if (check != 0 && !(x & check)) 4.417 - return 0; 4.418 - 4.419 - return (x & PIRQ_SIS_IRQ_DISABLE) ? 0 : (x & PIRQ_SIS_IRQ_MASK); 4.420 -} 4.421 - 4.422 -static int pirq_sis96x_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.423 -{ 4.424 - u8 x; 4.425 - int reg, check; 4.426 - 4.427 - check = pirq_sis96x_onchip(pirq, ®); 4.428 - if (check < 0) 4.429 - return 0; 4.430 - 4.431 - pci_read_config_byte(router, reg, &x); 4.432 - if (check != 0 && !(x & check)) 4.433 - return 0; 4.434 - 4.435 - return (x & PIRQ_SIS_IRQ_DISABLE) ? 0 : (x & PIRQ_SIS_IRQ_MASK); 4.436 -} 4.437 - 4.438 -static int pirq_sis5595_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.439 -{ 4.440 - u8 x; 4.441 - int reg, set; 4.442 - 4.443 - set = pirq_sis5595_onchip(pirq, ®); 4.444 - if (set < 0) 4.445 - return 0; 4.446 - 4.447 - x = (irq & PIRQ_SIS_IRQ_MASK); 4.448 - if (x == 0) 4.449 - x = PIRQ_SIS_IRQ_DISABLE; 4.450 - else 4.451 - x |= set; 4.452 - 4.453 - pci_write_config_byte(router, reg, x); 4.454 - 4.455 - return 1; 4.456 -} 4.457 - 4.458 -static int pirq_sis96x_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.459 -{ 4.460 - u8 x; 4.461 - int reg, set; 4.462 - 4.463 - set = pirq_sis96x_onchip(pirq, ®); 4.464 - if (set < 0) 4.465 - return 0; 4.466 - 4.467 - x = (irq & PIRQ_SIS_IRQ_MASK); 4.468 - if (x == 0) 4.469 - x = PIRQ_SIS_IRQ_DISABLE; 4.470 - else 4.471 - x |= set; 4.472 - 4.473 - pci_write_config_byte(router, reg, x); 4.474 - 4.475 - return 1; 4.476 -} 4.477 - 4.478 - 4.479 -/* 4.480 - * VLSI: nibble offset 0x74 - educated guess due to routing table and 4.481 - * config space of VLSI 82C534 PCI-bridge/router (1004:0102) 4.482 - * Tested on HP OmniBook 800 covering PIRQ 1, 2, 4, 8 for onboard 4.483 - * devices, PIRQ 3 for non-pci(!) soundchip and (untested) PIRQ 6 4.484 - * for the busbridge to the docking station. 4.485 - */ 4.486 - 4.487 -static int pirq_vlsi_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.488 -{ 4.489 - if (pirq > 8) { 4.490 - printk(KERN_INFO "VLSI router pirq escape (%d)\n", pirq); 4.491 - return 0; 4.492 - } 4.493 - return read_config_nybble(router, 0x74, pirq-1); 4.494 -} 4.495 - 4.496 -static int pirq_vlsi_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.497 -{ 4.498 - if (pirq > 8) { 4.499 - printk(KERN_INFO "VLSI router pirq escape (%d)\n", pirq); 4.500 - return 0; 4.501 - } 4.502 - write_config_nybble(router, 0x74, pirq-1, irq); 4.503 - return 1; 4.504 -} 4.505 - 4.506 -/* 4.507 - * ServerWorks: PCI interrupts mapped to system IRQ lines through Index 4.508 - * and Redirect I/O registers (0x0c00 and 0x0c01). The Index register 4.509 - * format is (PCIIRQ## | 0x10), e.g.: PCIIRQ10=0x1a. The Redirect 4.510 - * register is a straight binary coding of desired PIC IRQ (low nibble). 4.511 - * 4.512 - * The 'link' value in the PIRQ table is already in the correct format 4.513 - * for the Index register. There are some special index values: 4.514 - * 0x00 for ACPI (SCI), 0x01 for USB, 0x02 for IDE0, 0x04 for IDE1, 4.515 - * and 0x03 for SMBus. 4.516 - */ 4.517 -static int pirq_serverworks_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.518 -{ 4.519 - outb_p(pirq, 0xc00); 4.520 - return inb(0xc01) & 0xf; 4.521 -} 4.522 - 4.523 -static int pirq_serverworks_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.524 -{ 4.525 - outb_p(pirq, 0xc00); 4.526 - outb_p(irq, 0xc01); 4.527 - return 1; 4.528 -} 4.529 - 4.530 -/* Support for AMD756 PCI IRQ Routing 4.531 - * Jhon H. Caicedo <jhcaiced@osso.org.co> 4.532 - * Jun/21/2001 0.2.0 Release, fixed to use "nybble" functions... (jhcaiced) 4.533 - * Jun/19/2001 Alpha Release 0.1.0 (jhcaiced) 4.534 - * The AMD756 pirq rules are nibble-based 4.535 - * offset 0x56 0-3 PIRQA 4-7 PIRQB 4.536 - * offset 0x57 0-3 PIRQC 4-7 PIRQD 4.537 - */ 4.538 -static int pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq) 4.539 -{ 4.540 - u8 irq; 4.541 - irq = 0; 4.542 - if (pirq <= 4) 4.543 - { 4.544 - irq = read_config_nybble(router, 0x56, pirq - 1); 4.545 - } 4.546 - printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d get irq : %2d\n", 4.547 - dev->vendor, dev->device, pirq, irq); 4.548 - return irq; 4.549 -} 4.550 - 4.551 -static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.552 -{ 4.553 - printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d SET irq : %2d\n", 4.554 - dev->vendor, dev->device, pirq, irq); 4.555 - if (pirq <= 4) 4.556 - { 4.557 - write_config_nybble(router, 0x56, pirq - 1, irq); 4.558 - } 4.559 - return 1; 4.560 -} 4.561 - 4.562 -#ifdef CONFIG_PCI_BIOS 4.563 - 4.564 -static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq) 4.565 -{ 4.566 - struct pci_dev *bridge; 4.567 - int pin = pci_get_interrupt_pin(dev, &bridge); 4.568 - return pcibios_set_irq_routing(bridge, pin, irq); 4.569 -} 4.570 - 4.571 -#endif 4.572 - 4.573 - 4.574 -static __init int intel_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.575 -{ 4.576 - /* We must not touch 440GX even if we have tables. 440GX has 4.577 - different IRQ routing weirdness */ 4.578 - if(pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_0, NULL) || 4.579 - pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_2, NULL)) 4.580 - return 0; 4.581 - switch(device) 4.582 - { 4.583 - case PCI_DEVICE_ID_INTEL_82371FB_0: 4.584 - case PCI_DEVICE_ID_INTEL_82371SB_0: 4.585 - case PCI_DEVICE_ID_INTEL_82371AB_0: 4.586 - case PCI_DEVICE_ID_INTEL_82371MX: 4.587 - case PCI_DEVICE_ID_INTEL_82443MX_0: 4.588 - case PCI_DEVICE_ID_INTEL_82801AA_0: 4.589 - case PCI_DEVICE_ID_INTEL_82801AB_0: 4.590 - case PCI_DEVICE_ID_INTEL_82801BA_0: 4.591 - case PCI_DEVICE_ID_INTEL_82801BA_10: 4.592 - case PCI_DEVICE_ID_INTEL_82801CA_0: 4.593 - case PCI_DEVICE_ID_INTEL_82801CA_12: 4.594 - case PCI_DEVICE_ID_INTEL_82801DB_0: 4.595 - case PCI_DEVICE_ID_INTEL_82801E_0: 4.596 - case PCI_DEVICE_ID_INTEL_82801EB_0: 4.597 - case PCI_DEVICE_ID_INTEL_ESB_0: 4.598 - case PCI_DEVICE_ID_INTEL_ICH6_0: 4.599 - r->name = "PIIX/ICH"; 4.600 - r->get = pirq_piix_get; 4.601 - r->set = pirq_piix_set; 4.602 - return 1; 4.603 - } 4.604 - return 0; 4.605 -} 4.606 - 4.607 -static __init int via_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.608 -{ 4.609 - /* FIXME: We should move some of the quirk fixup stuff here */ 4.610 - switch(device) 4.611 - { 4.612 - case PCI_DEVICE_ID_VIA_82C586_0: 4.613 - case PCI_DEVICE_ID_VIA_82C596: 4.614 - case PCI_DEVICE_ID_VIA_82C686: 4.615 - case PCI_DEVICE_ID_VIA_8231: 4.616 - /* FIXME: add new ones for 8233/5 */ 4.617 - r->name = "VIA"; 4.618 - r->get = pirq_via_get; 4.619 - r->set = pirq_via_set; 4.620 - return 1; 4.621 - } 4.622 - return 0; 4.623 -} 4.624 - 4.625 -static __init int vlsi_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.626 -{ 4.627 - switch(device) 4.628 - { 4.629 - case PCI_DEVICE_ID_VLSI_82C534: 4.630 - r->name = "VLSI 82C534"; 4.631 - r->get = pirq_vlsi_get; 4.632 - r->set = pirq_vlsi_set; 4.633 - return 1; 4.634 - } 4.635 - return 0; 4.636 -} 4.637 - 4.638 - 4.639 -static __init int serverworks_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.640 -{ 4.641 - switch(device) 4.642 - { 4.643 - case PCI_DEVICE_ID_SERVERWORKS_OSB4: 4.644 - case PCI_DEVICE_ID_SERVERWORKS_CSB5: 4.645 - r->name = "ServerWorks"; 4.646 - r->get = pirq_serverworks_get; 4.647 - r->set = pirq_serverworks_set; 4.648 - return 1; 4.649 - } 4.650 - return 0; 4.651 -} 4.652 - 4.653 -static __init int sis_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.654 -{ 4.655 - u8 reg; 4.656 - u16 devid; 4.657 - 4.658 - if (device != PCI_DEVICE_ID_SI_503) 4.659 - return 0; 4.660 - 4.661 - /* 4.662 - * In case of SiS south bridge, we need to detect the two 4.663 - * kinds of routing tables we have seen so far (5595 and 96x). 4.664 - * Since the maintain the same device ID, we need to do poke 4.665 - * the PCI configuration space to find the router type we are 4.666 - * dealing with. 4.667 - */ 4.668 - 4.669 - /* 4.670 - * Factoid: writing bit6 of register 0x40 of the router config space 4.671 - * will make the SB to show up 0x096x inside the device id. Note, 4.672 - * we need to restore register 0x40 after the device id poke. 4.673 - */ 4.674 - 4.675 - pci_read_config_byte(router, PIRQ_SIS_DETECT_REGISTER, ®); 4.676 - pci_write_config_byte(router, PIRQ_SIS_DETECT_REGISTER, reg | (1 << 6)); 4.677 - pci_read_config_word(router, PCI_DEVICE_ID, &devid); 4.678 - pci_write_config_byte(router, PIRQ_SIS_DETECT_REGISTER, reg); 4.679 - 4.680 - if ((devid & 0xfff0) == 0x0960) { 4.681 - r->name = "SIS96x"; 4.682 - r->get = pirq_sis96x_get; 4.683 - r->set = pirq_sis96x_set; 4.684 - DBG("PCI: Detecting SiS router at %02x:%02x : SiS096x detected\n", 4.685 - rt->rtr_bus, rt->rtr_devfn); 4.686 - } else { 4.687 - r->name = "SIS5595"; 4.688 - r->get = pirq_sis5595_get; 4.689 - r->set = pirq_sis5595_set; 4.690 - DBG("PCI: Detecting SiS router at %02x:%02x : SiS5595 detected\n", 4.691 - rt->rtr_bus, rt->rtr_devfn); 4.692 - } 4.693 - return 1; 4.694 -} 4.695 - 4.696 -static __init int cyrix_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.697 -{ 4.698 - switch(device) 4.699 - { 4.700 - case PCI_DEVICE_ID_CYRIX_5520: 4.701 - r->name = "NatSemi"; 4.702 - r->get = pirq_cyrix_get; 4.703 - r->set = pirq_cyrix_set; 4.704 - return 1; 4.705 - } 4.706 - return 0; 4.707 -} 4.708 - 4.709 -static __init int opti_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.710 -{ 4.711 - switch(device) 4.712 - { 4.713 - case PCI_DEVICE_ID_OPTI_82C700: 4.714 - r->name = "OPTI"; 4.715 - r->get = pirq_opti_get; 4.716 - r->set = pirq_opti_set; 4.717 - return 1; 4.718 - } 4.719 - return 0; 4.720 -} 4.721 - 4.722 -static __init int ite_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.723 -{ 4.724 - switch(device) 4.725 - { 4.726 - case PCI_DEVICE_ID_ITE_IT8330G_0: 4.727 - r->name = "ITE"; 4.728 - r->get = pirq_ite_get; 4.729 - r->set = pirq_ite_set; 4.730 - return 1; 4.731 - } 4.732 - return 0; 4.733 -} 4.734 - 4.735 -static __init int ali_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.736 -{ 4.737 - switch(device) 4.738 - { 4.739 - case PCI_DEVICE_ID_AL_M1533: 4.740 - r->name = "ALI"; 4.741 - r->get = pirq_ali_get; 4.742 - r->set = pirq_ali_set; 4.743 - return 1; 4.744 - /* Should add 156x some day */ 4.745 - } 4.746 - return 0; 4.747 -} 4.748 - 4.749 -static __init int amd_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) 4.750 -{ 4.751 - switch(device) 4.752 - { 4.753 - case PCI_DEVICE_ID_AMD_VIPER_740B: 4.754 - r->name = "AMD756"; 4.755 - break; 4.756 - case PCI_DEVICE_ID_AMD_VIPER_7413: 4.757 - r->name = "AMD766"; 4.758 - break; 4.759 - case PCI_DEVICE_ID_AMD_VIPER_7443: 4.760 - r->name = "AMD768"; 4.761 - break; 4.762 - default: 4.763 - return 0; 4.764 - } 4.765 - r->get = pirq_amd756_get; 4.766 - r->set = pirq_amd756_set; 4.767 - return 1; 4.768 -} 4.769 - 4.770 -static __initdata struct irq_router_handler pirq_routers[] = { 4.771 - { PCI_VENDOR_ID_INTEL, intel_router_probe }, 4.772 - { PCI_VENDOR_ID_AL, ali_router_probe }, 4.773 - { PCI_VENDOR_ID_ITE, ite_router_probe }, 4.774 - { PCI_VENDOR_ID_VIA, via_router_probe }, 4.775 - { PCI_VENDOR_ID_OPTI, opti_router_probe }, 4.776 - { PCI_VENDOR_ID_SI, sis_router_probe }, 4.777 - { PCI_VENDOR_ID_CYRIX, cyrix_router_probe }, 4.778 - { PCI_VENDOR_ID_VLSI, vlsi_router_probe }, 4.779 - { PCI_VENDOR_ID_SERVERWORKS, serverworks_router_probe }, 4.780 - { PCI_VENDOR_ID_AMD, amd_router_probe }, 4.781 - /* Someone with docs needs to add the ATI Radeon IGP */ 4.782 - { 0, NULL } 4.783 -}; 4.784 -static struct irq_router pirq_router; 4.785 -static struct pci_dev *pirq_router_dev; 4.786 - 4.787 -/* 4.788 - * FIXME: should we have an option to say "generic for 4.789 - * chipset" ? 4.790 - */ 4.791 - 4.792 -static void __init pirq_find_router(struct irq_router *r) 4.793 -{ 4.794 - struct irq_routing_table *rt = pirq_table; 4.795 - struct irq_router_handler *h; 4.796 - 4.797 -#ifdef CONFIG_PCI_BIOS 4.798 - if (!rt->signature) { 4.799 - printk(KERN_INFO "PCI: Using BIOS for IRQ routing\n"); 4.800 - r->set = pirq_bios_set; 4.801 - r->name = "BIOS"; 4.802 - return; 4.803 - } 4.804 -#endif 4.805 - 4.806 - /* Default unless a driver reloads it */ 4.807 - r->name = "default"; 4.808 - r->get = NULL; 4.809 - r->set = NULL; 4.810 - 4.811 - DBG("PCI: Attempting to find IRQ router for %04x:%04x\n", 4.812 - rt->rtr_vendor, rt->rtr_device); 4.813 - 4.814 - pirq_router_dev = pci_find_slot(rt->rtr_bus, rt->rtr_devfn); 4.815 - if (!pirq_router_dev) { 4.816 - DBG("PCI: Interrupt router not found at %02x:%02x\n", rt->rtr_bus, rt->rtr_devfn); 4.817 - return; 4.818 - } 4.819 - 4.820 - for( h = pirq_routers; h->vendor; h++) { 4.821 - /* First look for a router match */ 4.822 - if (rt->rtr_vendor == h->vendor && h->probe(r, pirq_router_dev, rt->rtr_device)) 4.823 - break; 4.824 - /* Fall back to a device match */ 4.825 - if (pirq_router_dev->vendor == h->vendor && h->probe(r, pirq_router_dev, pirq_router_dev->device)) 4.826 - break; 4.827 - } 4.828 - printk(KERN_INFO "PCI: Using IRQ router %s [%04x/%04x] at %s\n", 4.829 - pirq_router.name, 4.830 - pirq_router_dev->vendor, 4.831 - pirq_router_dev->device, 4.832 - pirq_router_dev->slot_name); 4.833 -} 4.834 - 4.835 -static struct irq_info *pirq_get_info(struct pci_dev *dev) 4.836 -{ 4.837 - struct irq_routing_table *rt = pirq_table; 4.838 - int entries = (rt->size - sizeof(struct irq_routing_table)) / sizeof(struct irq_info); 4.839 - struct irq_info *info; 4.840 - 4.841 - for (info = rt->slots; entries--; info++) 4.842 - if (info->bus == dev->bus->number && PCI_SLOT(info->devfn) == PCI_SLOT(dev->devfn)) 4.843 - return info; 4.844 - return NULL; 4.845 -} 4.846 - 4.847 -static int pcibios_lookup_irq(struct pci_dev *dev, int assign) 4.848 -{ 4.849 - u8 pin; 4.850 - struct irq_info *info; 4.851 - int i, pirq, newirq; 4.852 - int irq = 0; 4.853 - u32 mask; 4.854 - struct irq_router *r = &pirq_router; 4.855 - struct pci_dev *dev2; 4.856 - char *msg = NULL; 4.857 - 4.858 - if (!pirq_table) 4.859 - return 0; 4.860 - 4.861 - /* Find IRQ routing entry */ 4.862 - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); 4.863 - if (!pin) { 4.864 - DBG(" -> no interrupt pin\n"); 4.865 - return 0; 4.866 - } 4.867 - pin = pin - 1; 4.868 - 4.869 - DBG("IRQ for %s:%d", dev->slot_name, pin); 4.870 - info = pirq_get_info(dev); 4.871 - if (!info) { 4.872 - DBG(" -> not found in routing table\n"); 4.873 - return 0; 4.874 - } 4.875 - pirq = info->irq[pin].link; 4.876 - mask = info->irq[pin].bitmap; 4.877 - if (!pirq) { 4.878 - DBG(" -> not routed\n"); 4.879 - return 0; 4.880 - } 4.881 - DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs); 4.882 - mask &= pcibios_irq_mask; 4.883 - 4.884 - /* Work around broken HP Pavilion Notebooks which assign USB to 4.885 - IRQ 9 even though it is actually wired to IRQ 11 */ 4.886 - 4.887 - if (broken_hp_bios_irq9 && pirq == 0x59 && dev->irq == 9) { 4.888 - dev->irq = 11; 4.889 - pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 11); 4.890 - r->set(pirq_router_dev, dev, pirq, 11); 4.891 - } 4.892 - 4.893 - /* 4.894 - * Find the best IRQ to assign: use the one 4.895 - * reported by the device if possible. 4.896 - */ 4.897 - newirq = dev->irq; 4.898 - if (!newirq && assign) { 4.899 - for (i = 0; i < 16; i++) { 4.900 - if (!(mask & (1 << i))) 4.901 - continue; 4.902 - if (pirq_penalty[i] < pirq_penalty[newirq] && 4.903 - pirq_guest_bindable(i,1)) 4.904 - newirq = i; 4.905 - } 4.906 - } 4.907 - DBG(" -> newirq=%d", newirq); 4.908 - 4.909 - /* Check if it is hardcoded */ 4.910 - if ((pirq & 0xf0) == 0xf0) { 4.911 - irq = pirq & 0xf; 4.912 - DBG(" -> hardcoded IRQ %d\n", irq); 4.913 - msg = "Hardcoded"; 4.914 - } else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq))) { 4.915 - DBG(" -> got IRQ %d\n", irq); 4.916 - msg = "Found"; 4.917 - } else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) { 4.918 - DBG(" -> assigning IRQ %d", newirq); 4.919 - if (r->set(pirq_router_dev, dev, pirq, newirq)) { 4.920 - eisa_set_level_irq(newirq); 4.921 - DBG(" ... OK\n"); 4.922 - msg = "Assigned"; 4.923 - irq = newirq; 4.924 - } 4.925 - } 4.926 - 4.927 - if (!irq) { 4.928 - DBG(" ... failed\n"); 4.929 - if (newirq && mask == (1 << newirq)) { 4.930 - msg = "Guessed"; 4.931 - irq = newirq; 4.932 - } else 4.933 - return 0; 4.934 - } 4.935 - printk(KERN_INFO "PCI: %s IRQ %d for device %s\n", msg, irq, dev->slot_name); 4.936 - 4.937 - /* Update IRQ for all devices with the same pirq value */ 4.938 - pci_for_each_dev(dev2) { 4.939 - pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin); 4.940 - if (!pin) 4.941 - continue; 4.942 - pin--; 4.943 - info = pirq_get_info(dev2); 4.944 - if (!info) 4.945 - continue; 4.946 - if (info->irq[pin].link == pirq) { 4.947 - /* We refuse to override the dev->irq information. Give a warning! */ 4.948 - if (dev2->irq && dev2->irq != irq) { 4.949 - printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n", 4.950 - dev2->slot_name, dev2->irq, irq); 4.951 - continue; 4.952 - } 4.953 - dev2->irq = irq; 4.954 - pirq_penalty[irq]++; 4.955 - if (dev != dev2) 4.956 - printk(KERN_INFO "PCI: Sharing IRQ %d with %s\n", irq, dev2->slot_name); 4.957 - } 4.958 - } 4.959 - return 1; 4.960 -} 4.961 - 4.962 -void __init pcibios_irq_init(void) 4.963 -{ 4.964 - DBG("PCI: IRQ init\n"); 4.965 - pirq_table = pirq_find_routing_table(); 4.966 -#ifdef CONFIG_PCI_BIOS 4.967 - if (!pirq_table && (pci_probe & PCI_BIOS_IRQ_SCAN)) 4.968 - pirq_table = pcibios_get_irq_routing_table(); 4.969 -#endif 4.970 - if (pirq_table) { 4.971 - pirq_peer_trick(); 4.972 - pirq_find_router(&pirq_router); 4.973 - if (pirq_table->exclusive_irqs) { 4.974 - int i; 4.975 - for (i=0; i<16; i++) 4.976 - if (!(pirq_table->exclusive_irqs & (1 << i))) 4.977 - pirq_penalty[i] += 100; 4.978 - } 4.979 - /* If we're using the I/O APIC, avoid using the PCI IRQ routing table */ 4.980 - if (io_apic_assign_pci_irqs) 4.981 - pirq_table = NULL; 4.982 - } 4.983 -} 4.984 - 4.985 -void __init pcibios_fixup_irqs(void) 4.986 -{ 4.987 - struct pci_dev *dev; 4.988 - u8 pin; 4.989 - 4.990 - DBG("PCI: IRQ fixup\n"); 4.991 - pci_for_each_dev(dev) { 4.992 - /* 4.993 - * If the BIOS has set an out of range IRQ number, just ignore it. 4.994 - * Also keep track of which IRQ's are already in use. 4.995 - */ 4.996 - if (dev->irq >= 16) { 4.997 - DBG("%s: ignoring bogus IRQ %d\n", dev->slot_name, dev->irq); 4.998 - dev->irq = 0; 4.999 - } 4.1000 - /* If the IRQ is already assigned to a PCI device, ignore its ISA use penalty */ 4.1001 - if (pirq_penalty[dev->irq] >= 100 && pirq_penalty[dev->irq] < 100000) 4.1002 - pirq_penalty[dev->irq] = 0; 4.1003 - pirq_penalty[dev->irq]++; 4.1004 - } 4.1005 - 4.1006 - pci_for_each_dev(dev) { 4.1007 - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); 4.1008 -#ifdef CONFIG_X86_IO_APIC 4.1009 - /* 4.1010 - * Recalculate IRQ numbers if we use the I/O APIC. 4.1011 - */ 4.1012 - if (io_apic_assign_pci_irqs) 4.1013 - { 4.1014 - int irq; 4.1015 - 4.1016 - if (pin) { 4.1017 - pin--; /* interrupt pins are numbered starting from 1 */ 4.1018 - irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin); 4.1019 - /* 4.1020 - * Busses behind bridges are typically not listed in the MP-table. 4.1021 - * In this case we have to look up the IRQ based on the parent bus, 4.1022 - * parent slot, and pin number. The SMP code detects such bridged 4.1023 - * busses itself so we should get into this branch reliably. 4.1024 - */ 4.1025 - if (irq < 0 && dev->bus->parent) { /* go back to the bridge */ 4.1026 - struct pci_dev * bridge = dev->bus->self; 4.1027 - 4.1028 - pin = (pin + PCI_SLOT(dev->devfn)) % 4; 4.1029 - irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number, 4.1030 - PCI_SLOT(bridge->devfn), pin); 4.1031 - if (irq >= 0) 4.1032 - printk(KERN_WARNING "PCI: using PPB(B%d,I%d,P%d) to get irq %d\n", 4.1033 - bridge->bus->number, PCI_SLOT(bridge->devfn), pin, irq); 4.1034 - } 4.1035 - if (irq >= 0) { 4.1036 - printk(KERN_INFO "PCI->APIC IRQ transform: (B%d,I%d,P%d) -> %d\n", 4.1037 - dev->bus->number, PCI_SLOT(dev->devfn), pin, irq); 4.1038 - dev->irq = irq; 4.1039 - } 4.1040 - } 4.1041 - } 4.1042 -#endif 4.1043 - /* 4.1044 - * Still no IRQ? Try to lookup one... 4.1045 - */ 4.1046 - if (pin && !dev->irq) 4.1047 - pcibios_lookup_irq(dev, 0); 4.1048 - } 4.1049 -} 4.1050 - 4.1051 -void pcibios_penalize_isa_irq(int irq) 4.1052 -{ 4.1053 - /* 4.1054 - * If any ISAPnP device reports an IRQ in its list of possible 4.1055 - * IRQ's, we try to avoid assigning it to PCI devices. 4.1056 - */ 4.1057 - pirq_penalty[irq] += 100; 4.1058 -} 4.1059 - 4.1060 -void pcibios_enable_irq(struct pci_dev *dev) 4.1061 -{ 4.1062 - u8 pin; 4.1063 - extern int interrupt_line_quirk; 4.1064 - 4.1065 - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); 4.1066 - if (pin && !pcibios_lookup_irq(dev, 1) && !dev->irq) { 4.1067 - char *msg; 4.1068 - 4.1069 - /* With IDE legacy devices the IRQ lookup failure is not a problem.. */ 4.1070 - if (dev->class >> 8 == PCI_CLASS_STORAGE_IDE && !(dev->class & 0x5)) 4.1071 - return; 4.1072 - 4.1073 - if (io_apic_assign_pci_irqs) 4.1074 - msg = " Probably buggy MP table."; 4.1075 - else if (pci_probe & PCI_BIOS_IRQ_SCAN) 4.1076 - msg = ""; 4.1077 - else 4.1078 - msg = " Please try using pci=biosirq."; 4.1079 - printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of device %s.%s\n", 4.1080 - 'A' + pin - 1, dev->slot_name, msg); 4.1081 - } 4.1082 - /* VIA bridges use interrupt line for apic/pci steering across 4.1083 - the V-Link */ 4.1084 - else if (interrupt_line_quirk) 4.1085 - pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 4.1086 - 4.1087 -}
5.1 --- a/xen/arch/x86/pci-pc.c Tue May 03 17:44:12 2005 +0000 5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 5.3 @@ -1,1557 +0,0 @@ 5.4 -/* 5.5 - * Low-Level PCI Support for PC 5.6 - * 5.7 - * (c) 1999--2000 Martin Mares <mj@ucw.cz> 5.8 - */ 5.9 - 5.10 -#include <xen/config.h> 5.11 -#include <xen/types.h> 5.12 -#include <xen/kernel.h> 5.13 -#include <xen/sched.h> 5.14 -#include <xen/pci.h> 5.15 -#include <xen/init.h> 5.16 -#include <xen/ioport.h> 5.17 -#include <xen/acpi.h> 5.18 - 5.19 -/*#include <asm/segment.h>*/ 5.20 -#include <asm/io.h> 5.21 -#include <asm/smp.h> 5.22 -#include <asm/smpboot.h> 5.23 - 5.24 -#include "pci-x86.h" 5.25 - 5.26 -extern int numnodes; 5.27 -#define __KERNEL_CS __HYPERVISOR_CS 5.28 -#define __KERNEL_DS __HYPERVISOR_DS 5.29 - 5.30 -unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2; 5.31 - 5.32 -int pcibios_last_bus = -1; 5.33 -struct pci_bus *pci_root_bus = NULL; 5.34 -struct pci_ops *pci_root_ops = NULL; 5.35 - 5.36 -int (*pci_config_read)(int seg, int bus, int dev, int fn, int reg, int len, u32 *value) = NULL; 5.37 -int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value) = NULL; 5.38 - 5.39 -static int pci_using_acpi_prt = 0; 5.40 - 5.41 -#ifdef CONFIG_MULTIQUAD 5.42 -#define BUS2QUAD(global) (mp_bus_id_to_node[global]) 5.43 -#define BUS2LOCAL(global) (mp_bus_id_to_local[global]) 5.44 -#define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local]) 5.45 -#else 5.46 -#define BUS2QUAD(global) (0) 5.47 -#define BUS2LOCAL(global) (global) 5.48 -#define QUADLOCAL2BUS(quad,local) (local) 5.49 -#endif 5.50 - 5.51 -/* 5.52 - * This interrupt-safe spinlock protects all accesses to PCI 5.53 - * configuration space. 5.54 - */ 5.55 -static spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED; 5.56 - 5.57 - 5.58 -/* 5.59 - * Functions for accessing PCI configuration space with type 1 accesses 5.60 - */ 5.61 - 5.62 -#ifdef CONFIG_PCI_DIRECT 5.63 - 5.64 -#ifdef CONFIG_MULTIQUAD 5.65 -#define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \ 5.66 - (0x80000000 | (BUS2LOCAL(bus) << 16) | (dev << 11) | (fn << 8) | (reg & ~3)) 5.67 - 5.68 -static int pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* CONFIG_MULTIQUAD */ 5.69 -{ 5.70 - unsigned long flags; 5.71 - 5.72 - if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 5.73 - return -EINVAL; 5.74 - 5.75 - spin_lock_irqsave(&pci_config_lock, flags); 5.76 - 5.77 - outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus)); 5.78 - 5.79 - switch (len) { 5.80 - case 1: 5.81 - *value = inb_quad(0xCFC + (reg & 3), BUS2QUAD(bus)); 5.82 - break; 5.83 - case 2: 5.84 - *value = inw_quad(0xCFC + (reg & 2), BUS2QUAD(bus)); 5.85 - break; 5.86 - case 4: 5.87 - *value = inl_quad(0xCFC, BUS2QUAD(bus)); 5.88 - break; 5.89 - } 5.90 - 5.91 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.92 - 5.93 - return 0; 5.94 -} 5.95 - 5.96 -static int pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* CONFIG_MULTIQUAD */ 5.97 -{ 5.98 - unsigned long flags; 5.99 - 5.100 - if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 5.101 - return -EINVAL; 5.102 - 5.103 - spin_lock_irqsave(&pci_config_lock, flags); 5.104 - 5.105 - outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus)); 5.106 - 5.107 - switch (len) { 5.108 - case 1: 5.109 - outb_quad((u8)value, 0xCFC + (reg & 3), BUS2QUAD(bus)); 5.110 - break; 5.111 - case 2: 5.112 - outw_quad((u16)value, 0xCFC + (reg & 2), BUS2QUAD(bus)); 5.113 - break; 5.114 - case 4: 5.115 - outl_quad((u32)value, 0xCFC, BUS2QUAD(bus)); 5.116 - break; 5.117 - } 5.118 - 5.119 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.120 - 5.121 - return 0; 5.122 -} 5.123 - 5.124 -static int pci_conf1_read_mq_config_byte(struct pci_dev *dev, int where, u8 *value) 5.125 -{ 5.126 - int result; 5.127 - u32 data; 5.128 - 5.129 - result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.130 - PCI_FUNC(dev->devfn), where, 1, &data); 5.131 - 5.132 - *value = (u8)data; 5.133 - 5.134 - return result; 5.135 -} 5.136 - 5.137 -static int pci_conf1_read_mq_config_word(struct pci_dev *dev, int where, u16 *value) 5.138 -{ 5.139 - int result; 5.140 - u32 data; 5.141 - 5.142 - result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.143 - PCI_FUNC(dev->devfn), where, 2, &data); 5.144 - 5.145 - *value = (u16)data; 5.146 - 5.147 - return result; 5.148 -} 5.149 - 5.150 -static int pci_conf1_read_mq_config_dword(struct pci_dev *dev, int where, u32 *value) 5.151 -{ 5.152 - if (!value) 5.153 - return -EINVAL; 5.154 - 5.155 - return pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.156 - PCI_FUNC(dev->devfn), where, 4, value); 5.157 -} 5.158 - 5.159 -static int pci_conf1_write_mq_config_byte(struct pci_dev *dev, int where, u8 value) 5.160 -{ 5.161 - return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.162 - PCI_FUNC(dev->devfn), where, 1, value); 5.163 -} 5.164 - 5.165 -static int pci_conf1_write_mq_config_word(struct pci_dev *dev, int where, u16 value) 5.166 -{ 5.167 - return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.168 - PCI_FUNC(dev->devfn), where, 2, value); 5.169 -} 5.170 - 5.171 -static int pci_conf1_write_mq_config_dword(struct pci_dev *dev, int where, u32 value) 5.172 -{ 5.173 - return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.174 - PCI_FUNC(dev->devfn), where, 4, value); 5.175 -} 5.176 - 5.177 -static struct pci_ops pci_direct_mq_conf1 = { 5.178 - pci_conf1_read_mq_config_byte, 5.179 - pci_conf1_read_mq_config_word, 5.180 - pci_conf1_read_mq_config_dword, 5.181 - pci_conf1_write_mq_config_byte, 5.182 - pci_conf1_write_mq_config_word, 5.183 - pci_conf1_write_mq_config_dword 5.184 -}; 5.185 - 5.186 -#endif /* !CONFIG_MULTIQUAD */ 5.187 -#define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \ 5.188 - (0x80000000 | (bus << 16) | (dev << 11) | (fn << 8) | (reg & ~3)) 5.189 - 5.190 -static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* !CONFIG_MULTIQUAD */ 5.191 -{ 5.192 - unsigned long flags; 5.193 - 5.194 - if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 5.195 - return -EINVAL; 5.196 - 5.197 - spin_lock_irqsave(&pci_config_lock, flags); 5.198 - 5.199 - outl(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8); 5.200 - 5.201 - switch (len) { 5.202 - case 1: 5.203 - *value = inb(0xCFC + (reg & 3)); 5.204 - break; 5.205 - case 2: 5.206 - *value = inw(0xCFC + (reg & 2)); 5.207 - break; 5.208 - case 4: 5.209 - *value = inl(0xCFC); 5.210 - break; 5.211 - } 5.212 - 5.213 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.214 - 5.215 - return 0; 5.216 -} 5.217 - 5.218 -static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* !CONFIG_MULTIQUAD */ 5.219 -{ 5.220 - unsigned long flags; 5.221 - 5.222 - if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 5.223 - return -EINVAL; 5.224 - 5.225 - spin_lock_irqsave(&pci_config_lock, flags); 5.226 - 5.227 - outl(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8); 5.228 - 5.229 - switch (len) { 5.230 - case 1: 5.231 - outb((u8)value, 0xCFC + (reg & 3)); 5.232 - break; 5.233 - case 2: 5.234 - outw((u16)value, 0xCFC + (reg & 2)); 5.235 - break; 5.236 - case 4: 5.237 - outl((u32)value, 0xCFC); 5.238 - break; 5.239 - } 5.240 - 5.241 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.242 - 5.243 - return 0; 5.244 -} 5.245 - 5.246 -#undef PCI_CONF1_ADDRESS 5.247 - 5.248 -static int pci_conf1_read_config_byte(struct pci_dev *dev, int where, u8 *value) 5.249 -{ 5.250 - int result; 5.251 - u32 data; 5.252 - 5.253 - result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.254 - PCI_FUNC(dev->devfn), where, 1, &data); 5.255 - 5.256 - *value = (u8)data; 5.257 - 5.258 - return result; 5.259 -} 5.260 - 5.261 -static int pci_conf1_read_config_word(struct pci_dev *dev, int where, u16 *value) 5.262 -{ 5.263 - int result; 5.264 - u32 data; 5.265 - 5.266 - result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.267 - PCI_FUNC(dev->devfn), where, 2, &data); 5.268 - 5.269 - *value = (u16)data; 5.270 - 5.271 - return result; 5.272 -} 5.273 - 5.274 -static int pci_conf1_read_config_dword(struct pci_dev *dev, int where, u32 *value) 5.275 -{ 5.276 - return pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.277 - PCI_FUNC(dev->devfn), where, 4, value); 5.278 -} 5.279 - 5.280 -static int pci_conf1_write_config_byte(struct pci_dev *dev, int where, u8 value) 5.281 -{ 5.282 - return pci_conf1_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.283 - PCI_FUNC(dev->devfn), where, 1, value); 5.284 -} 5.285 - 5.286 -static int pci_conf1_write_config_word(struct pci_dev *dev, int where, u16 value) 5.287 -{ 5.288 - return pci_conf1_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.289 - PCI_FUNC(dev->devfn), where, 2, value); 5.290 -} 5.291 - 5.292 -static int pci_conf1_write_config_dword(struct pci_dev *dev, int where, u32 value) 5.293 -{ 5.294 - return pci_conf1_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.295 - PCI_FUNC(dev->devfn), where, 4, value); 5.296 -} 5.297 - 5.298 -static struct pci_ops pci_direct_conf1 = { 5.299 - pci_conf1_read_config_byte, 5.300 - pci_conf1_read_config_word, 5.301 - pci_conf1_read_config_dword, 5.302 - pci_conf1_write_config_byte, 5.303 - pci_conf1_write_config_word, 5.304 - pci_conf1_write_config_dword 5.305 -}; 5.306 - 5.307 - 5.308 -/* 5.309 - * Functions for accessing PCI configuration space with type 2 accesses 5.310 - */ 5.311 - 5.312 -#define PCI_CONF2_ADDRESS(dev, reg) (u16)(0xC000 | (dev << 8) | reg) 5.313 - 5.314 -static int pci_conf2_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) 5.315 -{ 5.316 - unsigned long flags; 5.317 - 5.318 - if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 5.319 - return -EINVAL; 5.320 - 5.321 - if (dev & 0x10) 5.322 - return PCIBIOS_DEVICE_NOT_FOUND; 5.323 - 5.324 - spin_lock_irqsave(&pci_config_lock, flags); 5.325 - 5.326 - outb((u8)(0xF0 | (fn << 1)), 0xCF8); 5.327 - outb((u8)bus, 0xCFA); 5.328 - 5.329 - switch (len) { 5.330 - case 1: 5.331 - *value = inb(PCI_CONF2_ADDRESS(dev, reg)); 5.332 - break; 5.333 - case 2: 5.334 - *value = inw(PCI_CONF2_ADDRESS(dev, reg)); 5.335 - break; 5.336 - case 4: 5.337 - *value = inl(PCI_CONF2_ADDRESS(dev, reg)); 5.338 - break; 5.339 - } 5.340 - 5.341 - outb (0, 0xCF8); 5.342 - 5.343 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.344 - 5.345 - return 0; 5.346 -} 5.347 - 5.348 -static int pci_conf2_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) 5.349 -{ 5.350 - unsigned long flags; 5.351 - 5.352 - if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 5.353 - return -EINVAL; 5.354 - 5.355 - if (dev & 0x10) 5.356 - return PCIBIOS_DEVICE_NOT_FOUND; 5.357 - 5.358 - spin_lock_irqsave(&pci_config_lock, flags); 5.359 - 5.360 - outb((u8)(0xF0 | (fn << 1)), 0xCF8); 5.361 - outb((u8)bus, 0xCFA); 5.362 - 5.363 - switch (len) { 5.364 - case 1: 5.365 - outb ((u8)value, PCI_CONF2_ADDRESS(dev, reg)); 5.366 - break; 5.367 - case 2: 5.368 - outw ((u16)value, PCI_CONF2_ADDRESS(dev, reg)); 5.369 - break; 5.370 - case 4: 5.371 - outl ((u32)value, PCI_CONF2_ADDRESS(dev, reg)); 5.372 - break; 5.373 - } 5.374 - 5.375 - outb (0, 0xCF8); 5.376 - 5.377 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.378 - 5.379 - return 0; 5.380 -} 5.381 - 5.382 -#undef PCI_CONF2_ADDRESS 5.383 - 5.384 -static int pci_conf2_read_config_byte(struct pci_dev *dev, int where, u8 *value) 5.385 -{ 5.386 - int result; 5.387 - u32 data; 5.388 - result = pci_conf2_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.389 - PCI_FUNC(dev->devfn), where, 1, &data); 5.390 - *value = (u8)data; 5.391 - return result; 5.392 -} 5.393 - 5.394 -static int pci_conf2_read_config_word(struct pci_dev *dev, int where, u16 *value) 5.395 -{ 5.396 - int result; 5.397 - u32 data; 5.398 - result = pci_conf2_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.399 - PCI_FUNC(dev->devfn), where, 2, &data); 5.400 - *value = (u16)data; 5.401 - return result; 5.402 -} 5.403 - 5.404 -static int pci_conf2_read_config_dword(struct pci_dev *dev, int where, u32 *value) 5.405 -{ 5.406 - return pci_conf2_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.407 - PCI_FUNC(dev->devfn), where, 4, value); 5.408 -} 5.409 - 5.410 -static int pci_conf2_write_config_byte(struct pci_dev *dev, int where, u8 value) 5.411 -{ 5.412 - return pci_conf2_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.413 - PCI_FUNC(dev->devfn), where, 1, value); 5.414 -} 5.415 - 5.416 -static int pci_conf2_write_config_word(struct pci_dev *dev, int where, u16 value) 5.417 -{ 5.418 - return pci_conf2_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.419 - PCI_FUNC(dev->devfn), where, 2, value); 5.420 -} 5.421 - 5.422 -static int pci_conf2_write_config_dword(struct pci_dev *dev, int where, u32 value) 5.423 -{ 5.424 - return pci_conf2_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.425 - PCI_FUNC(dev->devfn), where, 4, value); 5.426 -} 5.427 - 5.428 -static struct pci_ops pci_direct_conf2 = { 5.429 - pci_conf2_read_config_byte, 5.430 - pci_conf2_read_config_word, 5.431 - pci_conf2_read_config_dword, 5.432 - pci_conf2_write_config_byte, 5.433 - pci_conf2_write_config_word, 5.434 - pci_conf2_write_config_dword 5.435 -}; 5.436 - 5.437 - 5.438 -/* 5.439 - * Before we decide to use direct hardware access mechanisms, we try to do some 5.440 - * trivial checks to ensure it at least _seems_ to be working -- we just test 5.441 - * whether bus 00 contains a host bridge (this is similar to checking 5.442 - * techniques used in XFree86, but ours should be more reliable since we 5.443 - * attempt to make use of direct access hints provided by the PCI BIOS). 5.444 - * 5.445 - * This should be close to trivial, but it isn't, because there are buggy 5.446 - * chipsets (yes, you guessed it, by Intel and Compaq) that have no class ID. 5.447 - */ 5.448 -static int __devinit pci_sanity_check(struct pci_ops *o) 5.449 -{ 5.450 - u16 x; 5.451 - /* XEN: static is important to prevent stack overflow! */ 5.452 - static struct pci_bus bus; /* Fake bus and device */ 5.453 - static struct pci_dev dev; 5.454 - 5.455 - if (pci_probe & PCI_NO_CHECKS) 5.456 - return 1; 5.457 - bus.number = 0; 5.458 - dev.bus = &bus; 5.459 - for(dev.devfn=0; dev.devfn < 0x100; dev.devfn++) 5.460 - if ((!o->read_word(&dev, PCI_CLASS_DEVICE, &x) && 5.461 - (x == PCI_CLASS_BRIDGE_HOST || x == PCI_CLASS_DISPLAY_VGA)) || 5.462 - (!o->read_word(&dev, PCI_VENDOR_ID, &x) && 5.463 - (x == PCI_VENDOR_ID_INTEL || x == PCI_VENDOR_ID_COMPAQ))) 5.464 - return 1; 5.465 - DBG("PCI: Sanity check failed\n"); 5.466 - return 0; 5.467 -} 5.468 - 5.469 -static struct pci_ops * __devinit pci_check_direct(void) 5.470 -{ 5.471 - unsigned int tmp; 5.472 - unsigned long flags; 5.473 - 5.474 - __save_flags(flags); __cli(); 5.475 - 5.476 - /* 5.477 - * Check if configuration type 1 works. 5.478 - */ 5.479 - if (pci_probe & PCI_PROBE_CONF1) { 5.480 - outb (0x01, 0xCFB); 5.481 - tmp = inl (0xCF8); 5.482 - outl (0x80000000, 0xCF8); 5.483 - if (inl (0xCF8) == 0x80000000 && 5.484 - pci_sanity_check(&pci_direct_conf1)) { 5.485 - outl (tmp, 0xCF8); 5.486 - __restore_flags(flags); 5.487 - printk(KERN_INFO "PCI: Using configuration type 1\n"); 5.488 - request_region(0xCF8, 8, "PCI conf1"); 5.489 - 5.490 -#ifdef CONFIG_MULTIQUAD 5.491 - /* Multi-Quad has an extended PCI Conf1 */ 5.492 - if(clustered_apic_mode == CLUSTERED_APIC_NUMAQ) 5.493 - return &pci_direct_mq_conf1; 5.494 -#endif 5.495 - return &pci_direct_conf1; 5.496 - } 5.497 - outl (tmp, 0xCF8); 5.498 - } 5.499 - 5.500 - /* 5.501 - * Check if configuration type 2 works. 5.502 - */ 5.503 - if (pci_probe & PCI_PROBE_CONF2) { 5.504 - outb (0x00, 0xCFB); 5.505 - outb (0x00, 0xCF8); 5.506 - outb (0x00, 0xCFA); 5.507 - if (inb (0xCF8) == 0x00 && inb (0xCFA) == 0x00 && 5.508 - pci_sanity_check(&pci_direct_conf2)) { 5.509 - __restore_flags(flags); 5.510 - printk(KERN_INFO "PCI: Using configuration type 2\n"); 5.511 - request_region(0xCF8, 4, "PCI conf2"); 5.512 - return &pci_direct_conf2; 5.513 - } 5.514 - } 5.515 - 5.516 - __restore_flags(flags); 5.517 - return NULL; 5.518 -} 5.519 - 5.520 -#endif 5.521 - 5.522 -/* 5.523 - * BIOS32 and PCI BIOS handling. 5.524 - */ 5.525 - 5.526 -#ifdef CONFIG_PCI_BIOS 5.527 - 5.528 -#define PCIBIOS_PCI_FUNCTION_ID 0xb1XX 5.529 -#define PCIBIOS_PCI_BIOS_PRESENT 0xb101 5.530 -#define PCIBIOS_FIND_PCI_DEVICE 0xb102 5.531 -#define PCIBIOS_FIND_PCI_CLASS_CODE 0xb103 5.532 -#define PCIBIOS_GENERATE_SPECIAL_CYCLE 0xb106 5.533 -#define PCIBIOS_READ_CONFIG_BYTE 0xb108 5.534 -#define PCIBIOS_READ_CONFIG_WORD 0xb109 5.535 -#define PCIBIOS_READ_CONFIG_DWORD 0xb10a 5.536 -#define PCIBIOS_WRITE_CONFIG_BYTE 0xb10b 5.537 -#define PCIBIOS_WRITE_CONFIG_WORD 0xb10c 5.538 -#define PCIBIOS_WRITE_CONFIG_DWORD 0xb10d 5.539 -#define PCIBIOS_GET_ROUTING_OPTIONS 0xb10e 5.540 -#define PCIBIOS_SET_PCI_HW_INT 0xb10f 5.541 - 5.542 -/* BIOS32 signature: "_32_" */ 5.543 -#define BIOS32_SIGNATURE (('_' << 0) + ('3' << 8) + ('2' << 16) + ('_' << 24)) 5.544 - 5.545 -/* PCI signature: "PCI " */ 5.546 -#define PCI_SIGNATURE (('P' << 0) + ('C' << 8) + ('I' << 16) + (' ' << 24)) 5.547 - 5.548 -/* PCI service signature: "$PCI" */ 5.549 -#define PCI_SERVICE (('$' << 0) + ('P' << 8) + ('C' << 16) + ('I' << 24)) 5.550 - 5.551 -/* PCI BIOS hardware mechanism flags */ 5.552 -#define PCIBIOS_HW_TYPE1 0x01 5.553 -#define PCIBIOS_HW_TYPE2 0x02 5.554 -#define PCIBIOS_HW_TYPE1_SPEC 0x10 5.555 -#define PCIBIOS_HW_TYPE2_SPEC 0x20 5.556 - 5.557 -/* 5.558 - * This is the standard structure used to identify the entry point 5.559 - * to the BIOS32 Service Directory, as documented in 5.560 - * Standard BIOS 32-bit Service Directory Proposal 5.561 - * Revision 0.4 May 24, 1993 5.562 - * Phoenix Technologies Ltd. 5.563 - * Norwood, MA 5.564 - * and the PCI BIOS specification. 5.565 - */ 5.566 - 5.567 -union bios32 { 5.568 - struct { 5.569 - unsigned long signature; /* _32_ */ 5.570 - unsigned long entry; /* 32 bit physical address */ 5.571 - unsigned char revision; /* Revision level, 0 */ 5.572 - unsigned char length; /* Length in paragraphs should be 01 */ 5.573 - unsigned char checksum; /* All bytes must add up to zero */ 5.574 - unsigned char reserved[5]; /* Must be zero */ 5.575 - } fields; 5.576 - char chars[16]; 5.577 -}; 5.578 - 5.579 -/* 5.580 - * Physical address of the service directory. I don't know if we're 5.581 - * allowed to have more than one of these or not, so just in case 5.582 - * we'll make pcibios_present() take a memory start parameter and store 5.583 - * the array there. 5.584 - */ 5.585 - 5.586 -static struct { 5.587 - unsigned long address; 5.588 - unsigned short segment; 5.589 -} bios32_indirect = { 0, __KERNEL_CS }; 5.590 - 5.591 -/* 5.592 - * Returns the entry point for the given service, NULL on error 5.593 - */ 5.594 - 5.595 -static unsigned long bios32_service(unsigned long service) 5.596 -{ 5.597 - unsigned char return_code; /* %al */ 5.598 - unsigned long address; /* %ebx */ 5.599 - unsigned long length; /* %ecx */ 5.600 - unsigned long entry; /* %edx */ 5.601 - unsigned long flags; 5.602 - 5.603 - __save_flags(flags); __cli(); 5.604 - __asm__("lcall *(%%edi); cld" 5.605 - : "=a" (return_code), 5.606 - "=b" (address), 5.607 - "=c" (length), 5.608 - "=d" (entry) 5.609 - : "0" (service), 5.610 - "1" (0), 5.611 - "D" (&bios32_indirect)); 5.612 - __restore_flags(flags); 5.613 - 5.614 - switch (return_code) { 5.615 - case 0: 5.616 - return address + entry; 5.617 - case 0x80: /* Not present */ 5.618 - printk(KERN_WARNING "bios32_service(0x%lx): not present\n", service); 5.619 - return 0; 5.620 - default: /* Shouldn't happen */ 5.621 - printk(KERN_WARNING "bios32_service(0x%lx): returned 0x%x -- BIOS bug!\n", 5.622 - service, return_code); 5.623 - return 0; 5.624 - } 5.625 -} 5.626 - 5.627 -static struct { 5.628 - unsigned long address; 5.629 - unsigned short segment; 5.630 -} pci_indirect = { 0, __KERNEL_CS }; 5.631 - 5.632 -static int pci_bios_present; 5.633 - 5.634 -static int __devinit check_pcibios(void) 5.635 -{ 5.636 - u32 signature, eax, ebx, ecx; 5.637 - u8 status, major_ver, minor_ver, hw_mech; 5.638 - unsigned long flags, pcibios_entry; 5.639 - 5.640 - if ((pcibios_entry = bios32_service(PCI_SERVICE))) { 5.641 - pci_indirect.address = pcibios_entry + PAGE_OFFSET; 5.642 - 5.643 - __save_flags(flags); __cli(); 5.644 - __asm__( 5.645 - "lcall *(%%edi); cld\n\t" 5.646 - "jc 1f\n\t" 5.647 - "xor %%ah, %%ah\n" 5.648 - "1:" 5.649 - : "=d" (signature), 5.650 - "=a" (eax), 5.651 - "=b" (ebx), 5.652 - "=c" (ecx) 5.653 - : "1" (PCIBIOS_PCI_BIOS_PRESENT), 5.654 - "D" (&pci_indirect) 5.655 - : "memory"); 5.656 - __restore_flags(flags); 5.657 - 5.658 - status = (eax >> 8) & 0xff; 5.659 - hw_mech = eax & 0xff; 5.660 - major_ver = (ebx >> 8) & 0xff; 5.661 - minor_ver = ebx & 0xff; 5.662 - if (pcibios_last_bus < 0) 5.663 - pcibios_last_bus = ecx & 0xff; 5.664 - DBG("PCI: BIOS probe returned s=%02x hw=%02x ver=%02x.%02x l=%02x\n", 5.665 - status, hw_mech, major_ver, minor_ver, pcibios_last_bus); 5.666 - if (status || signature != PCI_SIGNATURE) { 5.667 - printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found\n", 5.668 - status, signature); 5.669 - return 0; 5.670 - } 5.671 - printk(KERN_INFO "PCI: PCI BIOS revision %x.%02x entry at 0x%lx, last bus=%d\n", 5.672 - major_ver, minor_ver, pcibios_entry, pcibios_last_bus); 5.673 -#ifdef CONFIG_PCI_DIRECT 5.674 - if (!(hw_mech & PCIBIOS_HW_TYPE1)) 5.675 - pci_probe &= ~PCI_PROBE_CONF1; 5.676 - if (!(hw_mech & PCIBIOS_HW_TYPE2)) 5.677 - pci_probe &= ~PCI_PROBE_CONF2; 5.678 -#endif 5.679 - return 1; 5.680 - } 5.681 - return 0; 5.682 -} 5.683 - 5.684 -static int __devinit pci_bios_find_device (unsigned short vendor, unsigned short device_id, 5.685 - unsigned short index, unsigned char *bus, unsigned char *device_fn) 5.686 -{ 5.687 - unsigned short bx; 5.688 - unsigned short ret; 5.689 - unsigned long flags; 5.690 - 5.691 - __save_flags(flags); __cli(); 5.692 - __asm__("lcall *(%%edi); cld\n\t" 5.693 - "jc 1f\n\t" 5.694 - "xor %%ah, %%ah\n" 5.695 - "1:" 5.696 - : "=b" (bx), 5.697 - "=a" (ret) 5.698 - : "1" (PCIBIOS_FIND_PCI_DEVICE), 5.699 - "c" (device_id), 5.700 - "d" (vendor), 5.701 - "S" ((int) index), 5.702 - "D" (&pci_indirect)); 5.703 - __restore_flags(flags); 5.704 - *bus = (bx >> 8) & 0xff; 5.705 - *device_fn = bx & 0xff; 5.706 - return (int) (ret & 0xff00) >> 8; 5.707 -} 5.708 - 5.709 -static int pci_bios_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) 5.710 -{ 5.711 - unsigned long result = 0; 5.712 - unsigned long flags; 5.713 - unsigned long bx = ((bus << 8) | (dev << 3) | fn); 5.714 - 5.715 - if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 5.716 - return -EINVAL; 5.717 - 5.718 - spin_lock_irqsave(&pci_config_lock, flags); 5.719 - 5.720 - switch (len) { 5.721 - case 1: 5.722 - __asm__("lcall *(%%esi); cld\n\t" 5.723 - "jc 1f\n\t" 5.724 - "xor %%ah, %%ah\n" 5.725 - "1:" 5.726 - : "=c" (*value), 5.727 - "=a" (result) 5.728 - : "1" (PCIBIOS_READ_CONFIG_BYTE), 5.729 - "b" (bx), 5.730 - "D" ((long)reg), 5.731 - "S" (&pci_indirect)); 5.732 - break; 5.733 - case 2: 5.734 - __asm__("lcall *(%%esi); cld\n\t" 5.735 - "jc 1f\n\t" 5.736 - "xor %%ah, %%ah\n" 5.737 - "1:" 5.738 - : "=c" (*value), 5.739 - "=a" (result) 5.740 - : "1" (PCIBIOS_READ_CONFIG_WORD), 5.741 - "b" (bx), 5.742 - "D" ((long)reg), 5.743 - "S" (&pci_indirect)); 5.744 - break; 5.745 - case 4: 5.746 - __asm__("lcall *(%%esi); cld\n\t" 5.747 - "jc 1f\n\t" 5.748 - "xor %%ah, %%ah\n" 5.749 - "1:" 5.750 - : "=c" (*value), 5.751 - "=a" (result) 5.752 - : "1" (PCIBIOS_READ_CONFIG_DWORD), 5.753 - "b" (bx), 5.754 - "D" ((long)reg), 5.755 - "S" (&pci_indirect)); 5.756 - break; 5.757 - } 5.758 - 5.759 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.760 - 5.761 - return (int)((result & 0xff00) >> 8); 5.762 -} 5.763 - 5.764 -static int pci_bios_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) 5.765 -{ 5.766 - unsigned long result = 0; 5.767 - unsigned long flags; 5.768 - unsigned long bx = ((bus << 8) | (dev << 3) | fn); 5.769 - 5.770 - if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 5.771 - return -EINVAL; 5.772 - 5.773 - spin_lock_irqsave(&pci_config_lock, flags); 5.774 - 5.775 - switch (len) { 5.776 - case 1: 5.777 - __asm__("lcall *(%%esi); cld\n\t" 5.778 - "jc 1f\n\t" 5.779 - "xor %%ah, %%ah\n" 5.780 - "1:" 5.781 - : "=a" (result) 5.782 - : "0" (PCIBIOS_WRITE_CONFIG_BYTE), 5.783 - "c" (value), 5.784 - "b" (bx), 5.785 - "D" ((long)reg), 5.786 - "S" (&pci_indirect)); 5.787 - break; 5.788 - case 2: 5.789 - __asm__("lcall *(%%esi); cld\n\t" 5.790 - "jc 1f\n\t" 5.791 - "xor %%ah, %%ah\n" 5.792 - "1:" 5.793 - : "=a" (result) 5.794 - : "0" (PCIBIOS_WRITE_CONFIG_WORD), 5.795 - "c" (value), 5.796 - "b" (bx), 5.797 - "D" ((long)reg), 5.798 - "S" (&pci_indirect)); 5.799 - break; 5.800 - case 4: 5.801 - __asm__("lcall *(%%esi); cld\n\t" 5.802 - "jc 1f\n\t" 5.803 - "xor %%ah, %%ah\n" 5.804 - "1:" 5.805 - : "=a" (result) 5.806 - : "0" (PCIBIOS_WRITE_CONFIG_DWORD), 5.807 - "c" (value), 5.808 - "b" (bx), 5.809 - "D" ((long)reg), 5.810 - "S" (&pci_indirect)); 5.811 - break; 5.812 - } 5.813 - 5.814 - spin_unlock_irqrestore(&pci_config_lock, flags); 5.815 - 5.816 - return (int)((result & 0xff00) >> 8); 5.817 -} 5.818 - 5.819 -static int pci_bios_read_config_byte(struct pci_dev *dev, int where, u8 *value) 5.820 -{ 5.821 - int result; 5.822 - u32 data = 0; 5.823 - 5.824 - if (!value) 5.825 - BUG(); 5.826 - 5.827 - result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.828 - PCI_FUNC(dev->devfn), where, 1, &data); 5.829 - 5.830 - *value = (u8)data; 5.831 - 5.832 - return result; 5.833 -} 5.834 - 5.835 -static int pci_bios_read_config_word(struct pci_dev *dev, int where, u16 *value) 5.836 -{ 5.837 - int result; 5.838 - u32 data = 0; 5.839 - 5.840 - if (!value) 5.841 - BUG(); 5.842 - 5.843 - result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.844 - PCI_FUNC(dev->devfn), where, 2, &data); 5.845 - 5.846 - *value = (u16)data; 5.847 - 5.848 - return result; 5.849 -} 5.850 - 5.851 -static int pci_bios_read_config_dword(struct pci_dev *dev, int where, u32 *value) 5.852 -{ 5.853 - if (!value) 5.854 - BUG(); 5.855 - 5.856 - return pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.857 - PCI_FUNC(dev->devfn), where, 4, value); 5.858 -} 5.859 - 5.860 -static int pci_bios_write_config_byte(struct pci_dev *dev, int where, u8 value) 5.861 -{ 5.862 - return pci_bios_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.863 - PCI_FUNC(dev->devfn), where, 1, value); 5.864 -} 5.865 - 5.866 -static int pci_bios_write_config_word(struct pci_dev *dev, int where, u16 value) 5.867 -{ 5.868 - return pci_bios_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.869 - PCI_FUNC(dev->devfn), where, 2, value); 5.870 -} 5.871 - 5.872 -static int pci_bios_write_config_dword(struct pci_dev *dev, int where, u32 value) 5.873 -{ 5.874 - return pci_bios_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 5.875 - PCI_FUNC(dev->devfn), where, 4, value); 5.876 -} 5.877 - 5.878 - 5.879 -/* 5.880 - * Function table for BIOS32 access 5.881 - */ 5.882 - 5.883 -static struct pci_ops pci_bios_access = { 5.884 - pci_bios_read_config_byte, 5.885 - pci_bios_read_config_word, 5.886 - pci_bios_read_config_dword, 5.887 - pci_bios_write_config_byte, 5.888 - pci_bios_write_config_word, 5.889 - pci_bios_write_config_dword 5.890 -}; 5.891 - 5.892 -/* 5.893 - * Try to find PCI BIOS. 5.894 - */ 5.895 - 5.896 -static struct pci_ops * __devinit pci_find_bios(void) 5.897 -{ 5.898 - union bios32 *check; 5.899 - unsigned char sum; 5.900 - int i, length; 5.901 - 5.902 - /* 5.903 - * Follow the standard procedure for locating the BIOS32 Service 5.904 - * directory by scanning the permissible address range from 5.905 - * 0xe0000 through 0xfffff for a valid BIOS32 structure. 5.906 - */ 5.907 - 5.908 - for (check = (union bios32 *) __va(0xe0000); 5.909 - check <= (union bios32 *) __va(0xffff0); 5.910 - ++check) { 5.911 - if (check->fields.signature != BIOS32_SIGNATURE) 5.912 - continue; 5.913 - length = check->fields.length * 16; 5.914 - if (!length) 5.915 - continue; 5.916 - sum = 0; 5.917 - for (i = 0; i < length ; ++i) 5.918 - sum += check->chars[i]; 5.919 - if (sum != 0) 5.920 - continue; 5.921 - if (check->fields.revision != 0) { 5.922 - printk("PCI: unsupported BIOS32 revision %d at 0x%p\n", 5.923 - check->fields.revision, check); 5.924 - continue; 5.925 - } 5.926 - DBG("PCI: BIOS32 Service Directory structure at 0x%p\n", check); 5.927 - if (check->fields.entry >= 0x100000) { 5.928 - printk("PCI: BIOS32 entry (0x%p) in high memory, cannot use.\n", check); 5.929 - return NULL; 5.930 - } else { 5.931 - unsigned long bios32_entry = check->fields.entry; 5.932 - DBG("PCI: BIOS32 Service Directory entry at 0x%lx\n", bios32_entry); 5.933 - bios32_indirect.address = bios32_entry + PAGE_OFFSET; 5.934 - if (check_pcibios()) 5.935 - return &pci_bios_access; 5.936 - } 5.937 - break; /* Hopefully more than one BIOS32 cannot happen... */ 5.938 - } 5.939 - 5.940 - return NULL; 5.941 -} 5.942 - 5.943 -/* 5.944 - * Sort the device list according to PCI BIOS. Nasty hack, but since some 5.945 - * fool forgot to define the `correct' device order in the PCI BIOS specs 5.946 - * and we want to be (possibly bug-to-bug ;-]) compatible with older kernels 5.947 - * which used BIOS ordering, we are bound to do this... 5.948 - */ 5.949 - 5.950 -static void __devinit pcibios_sort(void) 5.951 -{ 5.952 - LIST_HEAD(sorted_devices); 5.953 - struct list_head *ln; 5.954 - struct pci_dev *dev, *d; 5.955 - int idx, found; 5.956 - unsigned char bus, devfn; 5.957 - 5.958 - DBG("PCI: Sorting device list...\n"); 5.959 - while (!list_empty(&pci_devices)) { 5.960 - ln = pci_devices.next; 5.961 - dev = pci_dev_g(ln); 5.962 - idx = found = 0; 5.963 - while (pci_bios_find_device(dev->vendor, dev->device, idx, &bus, &devfn) == PCIBIOS_SUCCESSFUL) { 5.964 - idx++; 5.965 - for (ln=pci_devices.next; ln != &pci_devices; ln=ln->next) { 5.966 - d = pci_dev_g(ln); 5.967 - if (d->bus->number == bus && d->devfn == devfn) { 5.968 - list_del(&d->global_list); 5.969 - list_add_tail(&d->global_list, &sorted_devices); 5.970 - if (d == dev) 5.971 - found = 1; 5.972 - break; 5.973 - } 5.974 - } 5.975 - if (ln == &pci_devices) { 5.976 - printk(KERN_WARNING "PCI: BIOS reporting unknown device %02x:%02x\n", bus, devfn); 5.977 - /* 5.978 - * We must not continue scanning as several buggy BIOSes 5.979 - * return garbage after the last device. Grr. 5.980 - */ 5.981 - break; 5.982 - } 5.983 - } 5.984 - if (!found) { 5.985 - printk(KERN_WARNING "PCI: Device %02x:%02x not found by BIOS\n", 5.986 - dev->bus->number, dev->devfn); 5.987 - list_del(&dev->global_list); 5.988 - list_add_tail(&dev->global_list, &sorted_devices); 5.989 - } 5.990 - } 5.991 - list_splice(&sorted_devices, &pci_devices); 5.992 -} 5.993 - 5.994 -/* 5.995 - * BIOS Functions for IRQ Routing 5.996 - */ 5.997 - 5.998 -struct irq_routing_options { 5.999 - u16 size; 5.1000 - struct irq_info *table; 5.1001 - u16 segment; 5.1002 -} __attribute__((packed)); 5.1003 - 5.1004 -struct irq_routing_table * __devinit pcibios_get_irq_routing_table(void) 5.1005 -{ 5.1006 - struct irq_routing_options opt; 5.1007 - struct irq_routing_table *rt = NULL; 5.1008 - int ret, map; 5.1009 - unsigned long page; 5.1010 - unsigned long flags; 5.1011 - 5.1012 - if (!pci_bios_present) 5.1013 - return NULL; 5.1014 - page = alloc_xenheap_page(); 5.1015 - if (!page) 5.1016 - return NULL; 5.1017 - opt.table = (struct irq_info *) page; 5.1018 - opt.size = PAGE_SIZE; 5.1019 - opt.segment = __KERNEL_DS; 5.1020 - 5.1021 - DBG("PCI: Fetching IRQ routing table... "); 5.1022 - __save_flags(flags); __cli(); 5.1023 - __asm__("push %%es\n\t" 5.1024 - "push %%ds\n\t" 5.1025 - "pop %%es\n\t" 5.1026 - "lcall *(%%esi); cld\n\t" 5.1027 - "pop %%es\n\t" 5.1028 - "jc 1f\n\t" 5.1029 - "xor %%ah, %%ah\n" 5.1030 - "1:" 5.1031 - : "=a" (ret), 5.1032 - "=b" (map) 5.1033 - : "0" (PCIBIOS_GET_ROUTING_OPTIONS), 5.1034 - "1" (0), 5.1035 - "D" (&opt), 5.1036 - "S" (&pci_indirect) 5.1037 - : "memory"); 5.1038 - __restore_flags(flags); 5.1039 - DBG("OK ret=%d, size=%d, map=%x\n", ret, opt.size, map); 5.1040 - if (ret & 0xff00) 5.1041 - printk(KERN_ERR "PCI: Error %02x when fetching IRQ routing table.\n", (ret >> 8) & 0xff); 5.1042 - else if (opt.size) { 5.1043 - rt = xmalloc_bytes(sizeof(struct irq_routing_table) + opt.size); 5.1044 - if (rt) { 5.1045 - memset(rt, 0, sizeof(struct irq_routing_table)); 5.1046 - rt->size = opt.size + sizeof(struct irq_routing_table); 5.1047 - rt->exclusive_irqs = map; 5.1048 - memcpy(rt->slots, (void *) page, opt.size); 5.1049 - printk(KERN_INFO "PCI: Using BIOS Interrupt Routing Table\n"); 5.1050 - } 5.1051 - } 5.1052 - free_xenheap_page(page); 5.1053 - return rt; 5.1054 -} 5.1055 - 5.1056 - 5.1057 -int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq) 5.1058 -{ 5.1059 - int ret; 5.1060 - unsigned long flags; 5.1061 - 5.1062 - __save_flags(flags); __cli(); 5.1063 - __asm__("lcall *(%%esi); cld\n\t" 5.1064 - "jc 1f\n\t" 5.1065 - "xor %%ah, %%ah\n" 5.1066 - "1:" 5.1067 - : "=a" (ret) 5.1068 - : "0" (PCIBIOS_SET_PCI_HW_INT), 5.1069 - "b" ((dev->bus->number << 8) | dev->devfn), 5.1070 - "c" ((irq << 8) | (pin + 10)), 5.1071 - "S" (&pci_indirect)); 5.1072 - __restore_flags(flags); 5.1073 - return !(ret & 0xff00); 5.1074 -} 5.1075 - 5.1076 -#endif 5.1077 - 5.1078 -/* 5.1079 - * Several buggy motherboards address only 16 devices and mirror 5.1080 - * them to next 16 IDs. We try to detect this `feature' on all 5.1081 - * primary buses (those containing host bridges as they are 5.1082 - * expected to be unique) and remove the ghost devices. 5.1083 - */ 5.1084 - 5.1085 -static void __devinit pcibios_fixup_ghosts(struct pci_bus *b) 5.1086 -{ 5.1087 - struct list_head *ln, *mn; 5.1088 - struct pci_dev *d, *e; 5.1089 - int mirror = PCI_DEVFN(16,0); 5.1090 - int seen_host_bridge = 0; 5.1091 - int i; 5.1092 - 5.1093 - DBG("PCI: Scanning for ghost devices on bus %d\n", b->number); 5.1094 - for (ln=b->devices.next; ln != &b->devices; ln=ln->next) { 5.1095 - d = pci_dev_b(ln); 5.1096 - if ((d->class >> 8) == PCI_CLASS_BRIDGE_HOST) 5.1097 - seen_host_bridge++; 5.1098 - for (mn=ln->next; mn != &b->devices; mn=mn->next) { 5.1099 - e = pci_dev_b(mn); 5.1100 - if (e->devfn != d->devfn + mirror || 5.1101 - e->vendor != d->vendor || 5.1102 - e->device != d->device || 5.1103 - e->class != d->class) 5.1104 - continue; 5.1105 - for(i=0; i<PCI_NUM_RESOURCES; i++) 5.1106 - if (e->resource[i].start != d->resource[i].start || 5.1107 - e->resource[i].end != d->resource[i].end || 5.1108 - e->resource[i].flags != d->resource[i].flags) 5.1109 - continue; 5.1110 - break; 5.1111 - } 5.1112 - if (mn == &b->devices) 5.1113 - return; 5.1114 - } 5.1115 - if (!seen_host_bridge) 5.1116 - return; 5.1117 - printk(KERN_WARNING "PCI: Ignoring ghost devices on bus %02x\n", b->number); 5.1118 - 5.1119 - ln = &b->devices; 5.1120 - while (ln->next != &b->devices) { 5.1121 - d = pci_dev_b(ln->next); 5.1122 - if (d->devfn >= mirror) { 5.1123 - list_del(&d->global_list); 5.1124 - list_del(&d->bus_list); 5.1125 - xfree(d); 5.1126 - } else 5.1127 - ln = ln->next; 5.1128 - } 5.1129 -} 5.1130 - 5.1131 -/* 5.1132 - * Discover remaining PCI buses in case there are peer host bridges. 5.1133 - * We use the number of last PCI bus provided by the PCI BIOS. 5.1134 - */ 5.1135 -static void __devinit pcibios_fixup_peer_bridges(void) 5.1136 -{ 5.1137 - int n; 5.1138 - /* XEN: static is important to prevent stack overflow! */ 5.1139 - static struct pci_bus bus; 5.1140 - static struct pci_dev dev; 5.1141 - u16 l; 5.1142 - 5.1143 - if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff) 5.1144 - return; 5.1145 - DBG("PCI: Peer bridge fixup\n"); 5.1146 - for (n=0; n <= pcibios_last_bus; n++) { 5.1147 - if (pci_bus_exists(&pci_root_buses, n)) 5.1148 - continue; 5.1149 - bus.number = n; 5.1150 - bus.ops = pci_root_ops; 5.1151 - dev.bus = &bus; 5.1152 - for(dev.devfn=0; dev.devfn<256; dev.devfn += 8) 5.1153 - if (!pci_read_config_word(&dev, PCI_VENDOR_ID, &l) && 5.1154 - l != 0x0000 && l != 0xffff) { 5.1155 - DBG("Found device at %02x:%02x [%04x]\n", n, dev.devfn, l); 5.1156 - printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n); 5.1157 - pci_scan_bus(n, pci_root_ops, NULL); 5.1158 - break; 5.1159 - } 5.1160 - } 5.1161 -} 5.1162 - 5.1163 -/* 5.1164 - * Exceptions for specific devices. Usually work-arounds for fatal design flaws. 5.1165 - */ 5.1166 - 5.1167 -static void __devinit pci_fixup_i450nx(struct pci_dev *d) 5.1168 -{ 5.1169 - /* 5.1170 - * i450NX -- Find and scan all secondary buses on all PXB's. 5.1171 - */ 5.1172 - int pxb, reg; 5.1173 - u8 busno, suba, subb; 5.1174 -#ifdef CONFIG_MULTIQUAD 5.1175 - int quad = BUS2QUAD(d->bus->number); 5.1176 -#endif 5.1177 - printk("PCI: Searching for i450NX host bridges on %s\n", d->slot_name); 5.1178 - reg = 0xd0; 5.1179 - for(pxb=0; pxb<2; pxb++) { 5.1180 - pci_read_config_byte(d, reg++, &busno); 5.1181 - pci_read_config_byte(d, reg++, &suba); 5.1182 - pci_read_config_byte(d, reg++, &subb); 5.1183 - DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb); 5.1184 - if (busno) 5.1185 - pci_scan_bus(QUADLOCAL2BUS(quad,busno), pci_root_ops, NULL); /* Bus A */ 5.1186 - if (suba < subb) 5.1187 - pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), pci_root_ops, NULL); /* Bus B */ 5.1188 - } 5.1189 - pcibios_last_bus = -1; 5.1190 -} 5.1191 - 5.1192 -static void __devinit pci_fixup_i450gx(struct pci_dev *d) 5.1193 -{ 5.1194 - /* 5.1195 - * i450GX and i450KX -- Find and scan all secondary buses. 5.1196 - * (called separately for each PCI bridge found) 5.1197 - */ 5.1198 - u8 busno; 5.1199 - pci_read_config_byte(d, 0x4a, &busno); 5.1200 - printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02x\n", d->slot_name, busno); 5.1201 - pci_scan_bus(busno, pci_root_ops, NULL); 5.1202 - pcibios_last_bus = -1; 5.1203 -} 5.1204 - 5.1205 -static void __devinit pci_fixup_umc_ide(struct pci_dev *d) 5.1206 -{ 5.1207 - /* 5.1208 - * UM8886BF IDE controller sets region type bits incorrectly, 5.1209 - * therefore they look like memory despite of them being I/O. 5.1210 - */ 5.1211 - int i; 5.1212 - 5.1213 - printk(KERN_WARNING "PCI: Fixing base address flags for device %s\n", d->slot_name); 5.1214 - for(i=0; i<4; i++) 5.1215 - d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO; 5.1216 -} 5.1217 - 5.1218 -static void __devinit pci_fixup_ncr53c810(struct pci_dev *d) 5.1219 -{ 5.1220 - /* 5.1221 - * NCR 53C810 returns class code 0 (at least on some systems). 5.1222 - * Fix class to be PCI_CLASS_STORAGE_SCSI 5.1223 - */ 5.1224 - if (!d->class) { 5.1225 - printk("PCI: fixing NCR 53C810 class code for %s\n", d->slot_name); 5.1226 - d->class = PCI_CLASS_STORAGE_SCSI << 8; 5.1227 - } 5.1228 -} 5.1229 - 5.1230 -static void __devinit pci_fixup_ide_bases(struct pci_dev *d) 5.1231 -{ 5.1232 - int i; 5.1233 - 5.1234 - /* 5.1235 - * PCI IDE controllers use non-standard I/O port decoding, respect it. 5.1236 - */ 5.1237 - if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE) 5.1238 - return; 5.1239 - DBG("PCI: IDE base address fixup for %s\n", d->slot_name); 5.1240 - for(i=0; i<4; i++) { 5.1241 - struct resource *r = &d->resource[i]; 5.1242 - if ((r->start & ~0x80) == 0x374) { 5.1243 - r->start |= 2; 5.1244 - r->end = r->start; 5.1245 - } 5.1246 - } 5.1247 -} 5.1248 - 5.1249 -static void __devinit pci_fixup_ide_trash(struct pci_dev *d) 5.1250 -{ 5.1251 - int i; 5.1252 - 5.1253 - /* 5.1254 - * There exist PCI IDE controllers which have utter garbage 5.1255 - * in first four base registers. Ignore that. 5.1256 - */ 5.1257 - DBG("PCI: IDE base address trash cleared for %s\n", d->slot_name); 5.1258 - for(i=0; i<4; i++) 5.1259 - d->resource[i].start = d->resource[i].end = d->resource[i].flags = 0; 5.1260 -} 5.1261 - 5.1262 -static void __devinit pci_fixup_latency(struct pci_dev *d) 5.1263 -{ 5.1264 - /* 5.1265 - * SiS 5597 and 5598 chipsets require latency timer set to 5.1266 - * at most 32 to avoid lockups. 5.1267 - */ 5.1268 - DBG("PCI: Setting max latency to 32\n"); 5.1269 - pcibios_max_latency = 32; 5.1270 -} 5.1271 - 5.1272 -static void __devinit pci_fixup_piix4_acpi(struct pci_dev *d) 5.1273 -{ 5.1274 - /* 5.1275 - * PIIX4 ACPI device: hardwired IRQ9 5.1276 - */ 5.1277 - d->irq = 9; 5.1278 -} 5.1279 - 5.1280 -/* 5.1281 - * Addresses issues with problems in the memory write queue timer in 5.1282 - * certain VIA Northbridges. This bugfix is per VIA's specifications, 5.1283 - * except for the KL133/KM133: clearing bit 5 on those Northbridges seems 5.1284 - * to trigger a bug in its integrated ProSavage video card, which 5.1285 - * causes screen corruption. We only clear bits 6 and 7 for that chipset, 5.1286 - * until VIA can provide us with definitive information on why screen 5.1287 - * corruption occurs, and what exactly those bits do. 5.1288 - * 5.1289 - * VIA 8363,8622,8361 Northbridges: 5.1290 - * - bits 5, 6, 7 at offset 0x55 need to be turned off 5.1291 - * VIA 8367 (KT266x) Northbridges: 5.1292 - * - bits 5, 6, 7 at offset 0x95 need to be turned off 5.1293 - * VIA 8363 rev 0x81/0x84 (KL133/KM133) Northbridges: 5.1294 - * - bits 6, 7 at offset 0x55 need to be turned off 5.1295 - */ 5.1296 - 5.1297 -#define VIA_8363_KL133_REVISION_ID 0x81 5.1298 -#define VIA_8363_KM133_REVISION_ID 0x84 5.1299 - 5.1300 -static void __init pci_fixup_via_northbridge_bug(struct pci_dev *d) 5.1301 -{ 5.1302 - u8 v; 5.1303 - u8 revision; 5.1304 - int where = 0x55; 5.1305 - int mask = 0x1f; /* clear bits 5, 6, 7 by default */ 5.1306 - 5.1307 - pci_read_config_byte(d, PCI_REVISION_ID, &revision); 5.1308 - 5.1309 - if (d->device == PCI_DEVICE_ID_VIA_8367_0) { 5.1310 - /* fix pci bus latency issues resulted by NB bios error 5.1311 - it appears on bug free^Wreduced kt266x's bios forces 5.1312 - NB latency to zero */ 5.1313 - pci_write_config_byte(d, PCI_LATENCY_TIMER, 0); 5.1314 - 5.1315 - where = 0x95; /* the memory write queue timer register is 5.1316 - different for the KT266x's: 0x95 not 0x55 */ 5.1317 - } else if (d->device == PCI_DEVICE_ID_VIA_8363_0 && 5.1318 - (revision == VIA_8363_KL133_REVISION_ID || 5.1319 - revision == VIA_8363_KM133_REVISION_ID)) { 5.1320 - mask = 0x3f; /* clear only bits 6 and 7; clearing bit 5 5.1321 - causes screen corruption on the KL133/KM133 */ 5.1322 - } 5.1323 - 5.1324 - pci_read_config_byte(d, where, &v); 5.1325 - if (v & ~mask) { 5.1326 - printk("Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02x\n", \ 5.1327 - d->device, revision, where, v, mask, v & mask); 5.1328 - v &= mask; 5.1329 - pci_write_config_byte(d, where, v); 5.1330 - } 5.1331 -} 5.1332 - 5.1333 -/* 5.1334 - * For some reasons Intel decided that certain parts of their 5.1335 - * 815, 845 and some other chipsets must look like PCI-to-PCI bridges 5.1336 - * while they are obviously not. The 82801 family (AA, AB, BAM/CAM, 5.1337 - * BA/CA/DB and E) PCI bridges are actually HUB-to-PCI ones, according 5.1338 - * to Intel terminology. These devices do forward all addresses from 5.1339 - * system to PCI bus no matter what are their window settings, so they are 5.1340 - * "transparent" (or subtractive decoding) from programmers point of view. 5.1341 - */ 5.1342 -static void __init pci_fixup_transparent_bridge(struct pci_dev *dev) 5.1343 -{ 5.1344 - if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && 5.1345 - (dev->device & 0xff00) == 0x2400) 5.1346 - dev->transparent = 1; 5.1347 -} 5.1348 - 5.1349 -struct pci_fixup pcibios_fixups[] = { 5.1350 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx }, 5.1351 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx }, 5.1352 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF, pci_fixup_umc_ide }, 5.1353 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, pci_fixup_ide_trash }, 5.1354 - { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases }, 5.1355 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, pci_fixup_latency }, 5.1356 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5598, pci_fixup_latency }, 5.1357 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci_fixup_piix4_acpi }, 5.1358 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, pci_fixup_via_northbridge_bug }, 5.1359 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8622, pci_fixup_via_northbridge_bug }, 5.1360 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, pci_fixup_via_northbridge_bug }, 5.1361 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_via_northbridge_bug }, 5.1362 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810 }, 5.1363 - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge }, 5.1364 - { 0 } 5.1365 -}; 5.1366 - 5.1367 -/* 5.1368 - * Called after each bus is probed, but before its children 5.1369 - * are examined. 5.1370 - */ 5.1371 - 5.1372 -void __devinit pcibios_fixup_bus(struct pci_bus *b) 5.1373 -{ 5.1374 - pcibios_fixup_ghosts(b); 5.1375 - pci_read_bridge_bases(b); 5.1376 -} 5.1377 - 5.1378 -struct pci_bus * __devinit pcibios_scan_root(int busnum) 5.1379 -{ 5.1380 - struct pci_bus *bus; 5.1381 - 5.1382 - pci_for_each_bus(bus) { 5.1383 - if (bus->number == busnum) { 5.1384 - /* Already scanned */ 5.1385 - return bus; 5.1386 - } 5.1387 - } 5.1388 - 5.1389 - printk("PCI: Probing PCI hardware (bus %02x)\n", busnum); 5.1390 - 5.1391 - return pci_scan_bus(busnum, pci_root_ops, NULL); 5.1392 -} 5.1393 - 5.1394 -void __devinit pcibios_config_init(void) 5.1395 -{ 5.1396 - /* 5.1397 - * Try all known PCI access methods. Note that we support using 5.1398 - * both PCI BIOS and direct access, with a preference for direct. 5.1399 - */ 5.1400 - 5.1401 -#ifdef CONFIG_PCI_DIRECT 5.1402 - struct pci_ops *tmp = NULL; 5.1403 -#endif 5.1404 - 5.1405 - 5.1406 -#ifdef CONFIG_PCI_BIOS 5.1407 - if ((pci_probe & PCI_PROBE_BIOS) 5.1408 - && ((pci_root_ops = pci_find_bios()))) { 5.1409 - pci_probe |= PCI_BIOS_SORT; 5.1410 - pci_bios_present = 1; 5.1411 - pci_config_read = pci_bios_read; 5.1412 - pci_config_write = pci_bios_write; 5.1413 - } 5.1414 -#endif 5.1415 - 5.1416 -#ifdef CONFIG_PCI_DIRECT 5.1417 - if ((pci_probe & (PCI_PROBE_CONF1 | PCI_PROBE_CONF2)) 5.1418 - && (tmp = pci_check_direct())) { 5.1419 - pci_root_ops = tmp; 5.1420 - if (pci_root_ops == &pci_direct_conf1) { 5.1421 - pci_config_read = pci_conf1_read; 5.1422 - pci_config_write = pci_conf1_write; 5.1423 - } 5.1424 - else { 5.1425 - pci_config_read = pci_conf2_read; 5.1426 - pci_config_write = pci_conf2_write; 5.1427 - } 5.1428 - } 5.1429 -#endif 5.1430 - 5.1431 - return; 5.1432 -} 5.1433 - 5.1434 -void __init pcibios_init(void) 5.1435 -{ 5.1436 - int quad; 5.1437 - 5.1438 - if (!pci_root_ops) 5.1439 - pcibios_config_init(); 5.1440 - if (!pci_root_ops) { 5.1441 - printk(KERN_WARNING "PCI: System does not support PCI\n"); 5.1442 - return; 5.1443 - } 5.1444 - 5.1445 - pcibios_set_cacheline_size(); 5.1446 - 5.1447 - printk(KERN_INFO "PCI: Probing PCI hardware\n"); 5.1448 -#ifdef CONFIG_ACPI_PCI 5.1449 - if (!acpi_noirq && !acpi_pci_irq_init()) { 5.1450 - pci_using_acpi_prt = 1; 5.1451 - printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n"); 5.1452 - printk(KERN_INFO "PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off'\n"); 5.1453 - } 5.1454 -#endif 5.1455 - if (!pci_using_acpi_prt) { 5.1456 - pci_root_bus = pcibios_scan_root(0); 5.1457 - pcibios_irq_init(); 5.1458 - pcibios_fixup_peer_bridges(); 5.1459 - pcibios_fixup_irqs(); 5.1460 - } 5.1461 - if (clustered_apic_mode && (numnodes > 1)) { 5.1462 - for (quad = 1; quad < numnodes; ++quad) { 5.1463 - printk("Scanning PCI bus %d for quad %d\n", 5.1464 - QUADLOCAL2BUS(quad,0), quad); 5.1465 - pci_scan_bus(QUADLOCAL2BUS(quad,0), 5.1466 - pci_root_ops, NULL); 5.1467 - } 5.1468 - } 5.1469 - 5.1470 - pcibios_resource_survey(); 5.1471 - 5.1472 -#ifdef CONFIG_PCI_BIOS 5.1473 - if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT)) 5.1474 - pcibios_sort(); 5.1475 -#endif 5.1476 -} 5.1477 - 5.1478 -char * __devinit pcibios_setup(char *str) 5.1479 -{ 5.1480 - if (!strcmp(str, "off")) { 5.1481 - pci_probe = 0; 5.1482 - return NULL; 5.1483 - } 5.1484 -#ifdef CONFIG_PCI_BIOS 5.1485 - else if (!strcmp(str, "bios")) { 5.1486 - pci_probe = PCI_PROBE_BIOS; 5.1487 - return NULL; 5.1488 - } else if (!strcmp(str, "nobios")) { 5.1489 - pci_probe &= ~PCI_PROBE_BIOS; 5.1490 - return NULL; 5.1491 - } else if (!strcmp(str, "nosort")) { 5.1492 - pci_probe |= PCI_NO_SORT; 5.1493 - return NULL; 5.1494 - } else if (!strcmp(str, "biosirq")) { 5.1495 - pci_probe |= PCI_BIOS_IRQ_SCAN; 5.1496 - return NULL; 5.1497 - } 5.1498 -#endif 5.1499 -#ifdef CONFIG_PCI_DIRECT 5.1500 - else if (!strcmp(str, "conf1")) { 5.1501 - pci_probe = PCI_PROBE_CONF1 | PCI_NO_CHECKS; 5.1502 - return NULL; 5.1503 - } 5.1504 - else if (!strcmp(str, "conf2")) { 5.1505 - pci_probe = PCI_PROBE_CONF2 | PCI_NO_CHECKS; 5.1506 - return NULL; 5.1507 - } 5.1508 -#endif 5.1509 - else if (!strcmp(str, "rom")) { 5.1510 - pci_probe |= PCI_ASSIGN_ROMS; 5.1511 - return NULL; 5.1512 - } else if (!strcmp(str, "assign-busses")) { 5.1513 - pci_probe |= PCI_ASSIGN_ALL_BUSSES; 5.1514 - return NULL; 5.1515 - } else if (!strncmp(str, "irqmask=", 8)) { 5.1516 - pcibios_irq_mask = simple_strtol(str+8, NULL, 0); 5.1517 - return NULL; 5.1518 - } else if (!strncmp(str, "lastbus=", 8)) { 5.1519 - pcibios_last_bus = simple_strtol(str+8, NULL, 0); 5.1520 - return NULL; 5.1521 - } else if (!strncmp(str, "noacpi", 6)) { 5.1522 - acpi_noirq_set(); 5.1523 - return NULL; 5.1524 - } 5.1525 - return str; 5.1526 -} 5.1527 - 5.1528 -unsigned int pcibios_assign_all_busses(void) 5.1529 -{ 5.1530 - return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0; 5.1531 -} 5.1532 - 5.1533 -int pcibios_enable_device(struct pci_dev *dev, int mask) 5.1534 -{ 5.1535 - int err; 5.1536 - 5.1537 - if ((err = pcibios_enable_resources(dev, mask)) < 0) 5.1538 - return err; 5.1539 - 5.1540 -#ifdef CONFIG_ACPI_PCI 5.1541 - if (pci_using_acpi_prt) { 5.1542 - acpi_pci_irq_enable(dev); 5.1543 - return 0; 5.1544 - } 5.1545 -#endif 5.1546 - 5.1547 - pcibios_enable_irq(dev); 5.1548 - 5.1549 - return 0; 5.1550 -} 5.1551 - 5.1552 -/* 5.1553 - * Local variables: 5.1554 - * mode: C 5.1555 - * c-set-style: "BSD" 5.1556 - * c-basic-offset: 8 5.1557 - * tab-width: 8 5.1558 - * indent-tabs-mode: t 5.1559 - * End: 5.1560 - */
6.1 --- a/xen/arch/x86/pci-x86.c Tue May 03 17:44:12 2005 +0000 6.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 6.3 @@ -1,402 +0,0 @@ 6.4 -/* 6.5 - * Low-Level PCI Access for i386 machines 6.6 - * 6.7 - * Copyright 1993, 1994 Drew Eckhardt 6.8 - * Visionary Computing 6.9 - * (Unix and Linux consulting and custom programming) 6.10 - * Drew@Colorado.EDU 6.11 - * +1 (303) 786-7975 6.12 - * 6.13 - * Drew's work was sponsored by: 6.14 - * iX Multiuser Multitasking Magazine 6.15 - * Hannover, Germany 6.16 - * hm@ix.de 6.17 - * 6.18 - * Copyright 1997--2000 Martin Mares <mj@ucw.cz> 6.19 - * 6.20 - * For more information, please consult the following manuals (look at 6.21 - * http://www.pcisig.com/ for how to get them): 6.22 - * 6.23 - * PCI BIOS Specification 6.24 - * PCI Local Bus Specification 6.25 - * PCI to PCI Bridge Specification 6.26 - * PCI System Design Guide 6.27 - * 6.28 - * 6.29 - * CHANGELOG : 6.30 - * Jun 17, 1994 : Modified to accommodate the broken pre-PCI BIOS SPECIFICATION 6.31 - * Revision 2.0 present on <thys@dennis.ee.up.ac.za>'s ASUS mainboard. 6.32 - * 6.33 - * Jan 5, 1995 : Modified to probe PCI hardware at boot time by Frederic 6.34 - * Potter, potter@cao-vlsi.ibp.fr 6.35 - * 6.36 - * Jan 10, 1995 : Modified to store the information about configured pci 6.37 - * devices into a list, which can be accessed via /proc/pci by 6.38 - * Curtis Varner, cvarner@cs.ucr.edu 6.39 - * 6.40 - * Jan 12, 1995 : CPU-PCI bridge optimization support by Frederic Potter. 6.41 - * Alpha version. Intel & UMC chipset support only. 6.42 - * 6.43 - * Apr 16, 1995 : Source merge with the DEC Alpha PCI support. Most of the code 6.44 - * moved to drivers/pci/pci.c. 6.45 - * 6.46 - * Dec 7, 1996 : Added support for direct configuration access of boards 6.47 - * with Intel compatible access schemes (tsbogend@alpha.franken.de) 6.48 - * 6.49 - * Feb 3, 1997 : Set internal functions to static, save/restore flags 6.50 - * avoid dead locks reading broken PCI BIOS, werner@suse.de 6.51 - * 6.52 - * Apr 26, 1997 : Fixed case when there is BIOS32, but not PCI BIOS 6.53 - * (mj@atrey.karlin.mff.cuni.cz) 6.54 - * 6.55 - * May 7, 1997 : Added some missing cli()'s. [mj] 6.56 - * 6.57 - * Jun 20, 1997 : Corrected problems in "conf1" type accesses. 6.58 - * (paubert@iram.es) 6.59 - * 6.60 - * Aug 2, 1997 : Split to PCI BIOS handling and direct PCI access parts 6.61 - * and cleaned it up... Martin Mares <mj@atrey.karlin.mff.cuni.cz> 6.62 - * 6.63 - * Feb 6, 1998 : No longer using BIOS to find devices and device classes. [mj] 6.64 - * 6.65 - * May 1, 1998 : Support for peer host bridges. [mj] 6.66 - * 6.67 - * Jun 19, 1998 : Changed to use spinlocks, so that PCI configuration space 6.68 - * can be accessed from interrupts even on SMP systems. [mj] 6.69 - * 6.70 - * August 1998 : Better support for peer host bridges and more paranoid 6.71 - * checks for direct hardware access. Ugh, this file starts to look as 6.72 - * a large gallery of common hardware bug workarounds (watch the comments) 6.73 - * -- the PCI specs themselves are sane, but most implementors should be 6.74 - * hit hard with \hammer scaled \magstep5. [mj] 6.75 - * 6.76 - * Jan 23, 1999 : More improvements to peer host bridge logic. i450NX fixup. [mj] 6.77 - * 6.78 - * Feb 8, 1999 : Added UM8886BF I/O address fixup. [mj] 6.79 - * 6.80 - * August 1999 : New resource management and configuration access stuff. [mj] 6.81 - * 6.82 - * Sep 19, 1999 : Use PCI IRQ routing tables for detection of peer host bridges. 6.83 - * Based on ideas by Chris Frantz and David Hinds. [mj] 6.84 - * 6.85 - * Sep 28, 1999 : Handle unreported/unassigned IRQs. Thanks to Shuu Yamaguchi 6.86 - * for a lot of patience during testing. [mj] 6.87 - * 6.88 - * Oct 8, 1999 : Split to pci-i386.c, pci-pc.c and pci-visws.c. [mj] 6.89 - */ 6.90 - 6.91 -#include <xen/types.h> 6.92 -#include <xen/lib.h> 6.93 -#include <xen/pci.h> 6.94 -#include <xen/init.h> 6.95 -#include <xen/ioport.h> 6.96 -#include <xen/errno.h> 6.97 - 6.98 -#include "pci-x86.h" 6.99 - 6.100 -void 6.101 -pcibios_update_resource(struct pci_dev *dev, struct resource *root, 6.102 - struct resource *res, int resource) 6.103 -{ 6.104 - u32 new, check; 6.105 - int reg; 6.106 - 6.107 - new = res->start | (res->flags & PCI_REGION_FLAG_MASK); 6.108 - if (resource < 6) { 6.109 - reg = PCI_BASE_ADDRESS_0 + 4*resource; 6.110 - } else if (resource == PCI_ROM_RESOURCE) { 6.111 - res->flags |= PCI_ROM_ADDRESS_ENABLE; 6.112 - new |= PCI_ROM_ADDRESS_ENABLE; 6.113 - reg = dev->rom_base_reg; 6.114 - } else { 6.115 - /* Somebody might have asked allocation of a non-standard resource */ 6.116 - return; 6.117 - } 6.118 - 6.119 - pci_write_config_dword(dev, reg, new); 6.120 - pci_read_config_dword(dev, reg, &check); 6.121 - if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) { 6.122 - printk(KERN_ERR "PCI: Error while updating region " 6.123 - "%s/%d (%08x != %08x)\n", dev->slot_name, resource, 6.124 - new, check); 6.125 - } 6.126 -} 6.127 - 6.128 -/* 6.129 - * We need to avoid collisions with `mirrored' VGA ports 6.130 - * and other strange ISA hardware, so we always want the 6.131 - * addresses to be allocated in the 0x000-0x0ff region 6.132 - * modulo 0x400. 6.133 - * 6.134 - * Why? Because some silly external IO cards only decode 6.135 - * the low 10 bits of the IO address. The 0x00-0xff region 6.136 - * is reserved for motherboard devices that decode all 16 6.137 - * bits, so it's ok to allocate at, say, 0x2800-0x28ff, 6.138 - * but we want to try to avoid allocating at 0x2900-0x2bff 6.139 - * which might have be mirrored at 0x0100-0x03ff.. 6.140 - */ 6.141 -void 6.142 -pcibios_align_resource(void *data, struct resource *res, 6.143 - unsigned long size, unsigned long align) 6.144 -{ 6.145 - if (res->flags & IORESOURCE_IO) { 6.146 - unsigned long start = res->start; 6.147 - 6.148 - if (start & 0x300) { 6.149 - start = (start + 0x3ff) & ~0x3ff; 6.150 - res->start = start; 6.151 - } 6.152 - } 6.153 -} 6.154 - 6.155 - 6.156 -/* 6.157 - * Handle resources of PCI devices. If the world were perfect, we could 6.158 - * just allocate all the resource regions and do nothing more. It isn't. 6.159 - * On the other hand, we cannot just re-allocate all devices, as it would 6.160 - * require us to know lots of host bridge internals. So we attempt to 6.161 - * keep as much of the original configuration as possible, but tweak it 6.162 - * when it's found to be wrong. 6.163 - * 6.164 - * Known BIOS problems we have to work around: 6.165 - * - I/O or memory regions not configured 6.166 - * - regions configured, but not enabled in the command register 6.167 - * - bogus I/O addresses above 64K used 6.168 - * - expansion ROMs left enabled (this may sound harmless, but given 6.169 - * the fact the PCI specs explicitly allow address decoders to be 6.170 - * shared between expansion ROMs and other resource regions, it's 6.171 - * at least dangerous) 6.172 - * 6.173 - * Our solution: 6.174 - * (1) Allocate resources for all buses behind PCI-to-PCI bridges. 6.175 - * This gives us fixed barriers on where we can allocate. 6.176 - * (2) Allocate resources for all enabled devices. If there is 6.177 - * a collision, just mark the resource as unallocated. Also 6.178 - * disable expansion ROMs during this step. 6.179 - * (3) Try to allocate resources for disabled devices. If the 6.180 - * resources were assigned correctly, everything goes well, 6.181 - * if they weren't, they won't disturb allocation of other 6.182 - * resources. 6.183 - * (4) Assign new addresses to resources which were either 6.184 - * not configured at all or misconfigured. If explicitly 6.185 - * requested by the user, configure expansion ROM address 6.186 - * as well. 6.187 - */ 6.188 - 6.189 -static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) 6.190 -{ 6.191 - struct list_head *ln; 6.192 - struct pci_bus *bus; 6.193 - struct pci_dev *dev; 6.194 - int idx; 6.195 - struct resource *r, *pr; 6.196 - 6.197 - /* Depth-First Search on bus tree */ 6.198 - for (ln=bus_list->next; ln != bus_list; ln=ln->next) { 6.199 - bus = pci_bus_b(ln); 6.200 - if ((dev = bus->self)) { 6.201 - for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) { 6.202 - r = &dev->resource[idx]; 6.203 - if (!r->start) 6.204 - continue; 6.205 - pr = pci_find_parent_resource(dev, r); 6.206 - if (!pr || request_resource(pr, r) < 0) 6.207 - printk(KERN_ERR "PCI: Cannot allocate resource region %d of bridge %s\n", idx, dev->slot_name); 6.208 - } 6.209 - } 6.210 - pcibios_allocate_bus_resources(&bus->children); 6.211 - } 6.212 -} 6.213 - 6.214 -static void __init pcibios_allocate_resources(int pass) 6.215 -{ 6.216 - struct pci_dev *dev; 6.217 - int idx, disabled; 6.218 - u16 command; 6.219 - struct resource *r, *pr; 6.220 - 6.221 - pci_for_each_dev(dev) { 6.222 - pci_read_config_word(dev, PCI_COMMAND, &command); 6.223 - for(idx = 0; idx < 6; idx++) { 6.224 - r = &dev->resource[idx]; 6.225 - if (r->parent) /* Already allocated */ 6.226 - continue; 6.227 - if (!r->start) /* Address not assigned at all */ 6.228 - continue; 6.229 - if (r->flags & IORESOURCE_IO) 6.230 - disabled = !(command & PCI_COMMAND_IO); 6.231 - else 6.232 - disabled = !(command & PCI_COMMAND_MEMORY); 6.233 - if (pass == disabled) { 6.234 - DBG("PCI: Resource %08lx-%08lx (f=%lx, d=%d, p=%d)\n", 6.235 - r->start, r->end, r->flags, disabled, pass); 6.236 - pr = pci_find_parent_resource(dev, r); 6.237 - if (!pr || request_resource(pr, r) < 0) { 6.238 - printk(KERN_ERR "PCI: Cannot allocate resource region %d of device %s\n", idx, dev->slot_name); 6.239 - /* We'll assign a new address later */ 6.240 - r->end -= r->start; 6.241 - r->start = 0; 6.242 - } 6.243 - } 6.244 - } 6.245 - if (!pass) { 6.246 - r = &dev->resource[PCI_ROM_RESOURCE]; 6.247 - if (r->flags & PCI_ROM_ADDRESS_ENABLE) { 6.248 - /* Turn the ROM off, leave the resource region, but keep it unregistered. */ 6.249 - u32 reg; 6.250 - DBG("PCI: Switching off ROM of %s\n", dev->slot_name); 6.251 - r->flags &= ~PCI_ROM_ADDRESS_ENABLE; 6.252 - pci_read_config_dword(dev, dev->rom_base_reg, ®); 6.253 - pci_write_config_dword(dev, dev->rom_base_reg, reg & ~PCI_ROM_ADDRESS_ENABLE); 6.254 - } 6.255 - } 6.256 - } 6.257 -} 6.258 - 6.259 -static void __init pcibios_assign_resources(void) 6.260 -{ 6.261 - struct pci_dev *dev; 6.262 - int idx; 6.263 - struct resource *r; 6.264 - 6.265 - pci_for_each_dev(dev) { 6.266 - int class = dev->class >> 8; 6.267 - 6.268 - /* Don't touch classless devices and host bridges */ 6.269 - if (!class || class == PCI_CLASS_BRIDGE_HOST) 6.270 - continue; 6.271 - 6.272 - for(idx=0; idx<6; idx++) { 6.273 - r = &dev->resource[idx]; 6.274 - 6.275 - /* 6.276 - * Don't touch IDE controllers and I/O ports of video cards! 6.277 - */ 6.278 - if ((class == PCI_CLASS_STORAGE_IDE && idx < 4) || 6.279 - (class == PCI_CLASS_DISPLAY_VGA && (r->flags & IORESOURCE_IO))) 6.280 - continue; 6.281 - 6.282 - /* 6.283 - * We shall assign a new address to this resource, either because 6.284 - * the BIOS forgot to do so or because we have decided the old 6.285 - * address was unusable for some reason. 6.286 - */ 6.287 - if (!r->start && r->end) 6.288 - pci_assign_resource(dev, idx); 6.289 - } 6.290 - 6.291 - if (pci_probe & PCI_ASSIGN_ROMS) { 6.292 - r = &dev->resource[PCI_ROM_RESOURCE]; 6.293 - r->end -= r->start; 6.294 - r->start = 0; 6.295 - if (r->end) 6.296 - pci_assign_resource(dev, PCI_ROM_RESOURCE); 6.297 - } 6.298 - } 6.299 -} 6.300 - 6.301 -void __init pcibios_set_cacheline_size(void) 6.302 -{ 6.303 - struct cpuinfo_x86 *c = &boot_cpu_data; 6.304 - 6.305 - pci_cache_line_size = 32 >> 2; 6.306 - if (c->x86 >= 6 && c->x86_vendor == X86_VENDOR_AMD) 6.307 - pci_cache_line_size = 64 >> 2; /* K7 & K8 */ 6.308 - else if (c->x86 > 6 && c->x86_vendor == X86_VENDOR_INTEL) 6.309 - pci_cache_line_size = 128 >> 2; /* P4 */ 6.310 -} 6.311 - 6.312 -void __init pcibios_resource_survey(void) 6.313 -{ 6.314 - DBG("PCI: Allocating resources\n"); 6.315 - pcibios_allocate_bus_resources(&pci_root_buses); 6.316 - pcibios_allocate_resources(0); 6.317 - pcibios_allocate_resources(1); 6.318 - pcibios_assign_resources(); 6.319 -} 6.320 - 6.321 -int pcibios_enable_resources(struct pci_dev *dev, int mask) 6.322 -{ 6.323 - u16 cmd, old_cmd; 6.324 - int idx; 6.325 - struct resource *r; 6.326 - 6.327 - pci_read_config_word(dev, PCI_COMMAND, &cmd); 6.328 - old_cmd = cmd; 6.329 - for(idx=0; idx<6; idx++) { 6.330 - /* Only set up the requested stuff */ 6.331 - if (!(mask & (1<<idx))) 6.332 - continue; 6.333 - 6.334 - r = &dev->resource[idx]; 6.335 - if (!r->start && r->end) { 6.336 - printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", dev->slot_name); 6.337 - return -EINVAL; 6.338 - } 6.339 - if (r->flags & IORESOURCE_IO) 6.340 - cmd |= PCI_COMMAND_IO; 6.341 - if (r->flags & IORESOURCE_MEM) 6.342 - cmd |= PCI_COMMAND_MEMORY; 6.343 - } 6.344 - if (dev->resource[PCI_ROM_RESOURCE].start) 6.345 - cmd |= PCI_COMMAND_MEMORY; 6.346 - if (cmd != old_cmd) { 6.347 - printk("PCI: Enabling device %s (%04x -> %04x)\n", dev->slot_name, old_cmd, cmd); 6.348 - pci_write_config_word(dev, PCI_COMMAND, cmd); 6.349 - } 6.350 - return 0; 6.351 -} 6.352 - 6.353 -/* 6.354 - * If we set up a device for bus mastering, we need to check the latency 6.355 - * timer as certain crappy BIOSes forget to set it properly. 6.356 - */ 6.357 -unsigned int pcibios_max_latency = 255; 6.358 - 6.359 -void pcibios_set_master(struct pci_dev *dev) 6.360 -{ 6.361 - u8 lat; 6.362 - pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); 6.363 - if (lat < 16) 6.364 - lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency; 6.365 - else if (lat > pcibios_max_latency) 6.366 - lat = pcibios_max_latency; 6.367 - else 6.368 - return; 6.369 - printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", dev->slot_name, lat); 6.370 - pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); 6.371 -} 6.372 - 6.373 -#if 0 6.374 -int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, 6.375 - enum pci_mmap_state mmap_state, int write_combine) 6.376 -{ 6.377 - unsigned long prot; 6.378 - 6.379 - /* I/O space cannot be accessed via normal processor loads and 6.380 - * stores on this platform. 6.381 - */ 6.382 - if (mmap_state == pci_mmap_io) 6.383 - return -EINVAL; 6.384 - 6.385 - /* Leave vm_pgoff as-is, the PCI space address is the physical 6.386 - * address on this platform. 6.387 - */ 6.388 - vma->vm_flags |= (VM_SHM | VM_LOCKED | VM_IO); 6.389 - 6.390 - prot = pgprot_val(vma->vm_page_prot); 6.391 - if (boot_cpu_data.x86 > 3) 6.392 - prot |= _PAGE_PCD | _PAGE_PWT; 6.393 - vma->vm_page_prot = __pgprot(prot); 6.394 - 6.395 - /* Write-combine setting is ignored, it is changed via the mtrr 6.396 - * interfaces on this platform. 6.397 - */ 6.398 - if (remap_page_range(vma->vm_start, vma->vm_pgoff << PAGE_SHIFT, 6.399 - vma->vm_end - vma->vm_start, 6.400 - vma->vm_page_prot)) 6.401 - return -EAGAIN; 6.402 - 6.403 - return 0; 6.404 -} 6.405 -#endif
7.1 --- a/xen/arch/x86/pci-x86.h Tue May 03 17:44:12 2005 +0000 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,71 +0,0 @@ 7.4 -/* 7.5 - * Low-Level PCI Access for i386 machines. 7.6 - * 7.7 - * (c) 1999 Martin Mares <mj@ucw.cz> 7.8 - */ 7.9 - 7.10 -#undef DEBUG 7.11 - 7.12 -#ifdef DEBUG 7.13 -#define DBG(x...) printk(x) 7.14 -#else 7.15 -#define DBG(x...) 7.16 -#endif 7.17 - 7.18 -#define PCI_PROBE_BIOS 0x0001 7.19 -#define PCI_PROBE_CONF1 0x0002 7.20 -#define PCI_PROBE_CONF2 0x0004 7.21 -#define PCI_NO_SORT 0x0100 7.22 -#define PCI_BIOS_SORT 0x0200 7.23 -#define PCI_NO_CHECKS 0x0400 7.24 -#define PCI_ASSIGN_ROMS 0x1000 7.25 -#define PCI_BIOS_IRQ_SCAN 0x2000 7.26 -#define PCI_ASSIGN_ALL_BUSSES 0x4000 7.27 - 7.28 -extern unsigned int pci_probe; 7.29 - 7.30 -/* pci-i386.c */ 7.31 - 7.32 -extern unsigned int pcibios_max_latency; 7.33 -extern u8 pci_cache_line_size; 7.34 - 7.35 -void pcibios_resource_survey(void); 7.36 -void pcibios_set_cacheline_size(void); 7.37 -int pcibios_enable_resources(struct pci_dev *, int); 7.38 - 7.39 -/* pci-pc.c */ 7.40 - 7.41 -extern int pcibios_last_bus; 7.42 -extern struct pci_bus *pci_root_bus; 7.43 -extern struct pci_ops *pci_root_ops; 7.44 - 7.45 -/* pci-irq.c */ 7.46 - 7.47 -struct irq_info { 7.48 - u8 bus, devfn; /* Bus, device and function */ 7.49 - struct { 7.50 - u8 link; /* IRQ line ID, chipset dependent, 0=not routed */ 7.51 - u16 bitmap; /* Available IRQs */ 7.52 - } __attribute__((packed)) irq[4]; 7.53 - u8 slot; /* Slot number, 0=onboard */ 7.54 - u8 rfu; 7.55 -} __attribute__((packed)); 7.56 - 7.57 -struct irq_routing_table { 7.58 - u32 signature; /* PIRQ_SIGNATURE should be here */ 7.59 - u16 version; /* PIRQ_VERSION */ 7.60 - u16 size; /* Table size in bytes */ 7.61 - u8 rtr_bus, rtr_devfn; /* Where the interrupt router lies */ 7.62 - u16 exclusive_irqs; /* IRQs devoted exclusively to PCI usage */ 7.63 - u16 rtr_vendor, rtr_device; /* Vendor and device ID of interrupt router */ 7.64 - u32 miniport_data; /* Crap */ 7.65 - u8 rfu[11]; 7.66 - u8 checksum; /* Modulo 256 checksum must give zero */ 7.67 - struct irq_info slots[0]; 7.68 -} __attribute__((packed)); 7.69 - 7.70 -extern unsigned int pcibios_irq_mask; 7.71 - 7.72 -void pcibios_irq_init(void); 7.73 -void pcibios_fixup_irqs(void); 7.74 -void pcibios_enable_irq(struct pci_dev *dev);
8.1 --- a/xen/drivers/Makefile Tue May 03 17:44:12 2005 +0000 8.2 +++ b/xen/drivers/Makefile Wed May 04 08:46:22 2005 +0000 8.3 @@ -2,9 +2,7 @@ 8.4 default: 8.5 $(MAKE) -C char 8.6 $(MAKE) -C acpi 8.7 - #$(MAKE) -C pci 8.8 8.9 clean: 8.10 $(MAKE) -C char clean 8.11 $(MAKE) -C acpi clean 8.12 - #$(MAKE) -C pci clean
9.1 --- a/xen/drivers/acpi/Makefile Tue May 03 17:44:12 2005 +0000 9.2 +++ b/xen/drivers/acpi/Makefile Wed May 04 08:46:22 2005 +0000 9.3 @@ -1,10 +1,7 @@ 9.4 -# 9.5 -# Makefile for the Linux ACPI interpreter 9.6 -# 9.7 9.8 include $(BASEDIR)/Rules.mk 9.9 9.10 -OBJS := acpi_ksyms.o tables.o 9.11 +OBJS := tables.o 9.12 9.13 default: driver.o 9.14 driver.o: $(OBJS) 9.15 @@ -12,53 +9,3 @@ driver.o: $(OBJS) 9.16 9.17 clean: 9.18 rm -f *.o *~ core 9.19 - 9.20 -#export ACPI_CFLAGS 9.21 -# 9.22 -#ACPI_CFLAGS := -Os 9.23 -# 9.24 -#ifdef CONFIG_ACPI_DEBUG 9.25 -# ACPI_CFLAGS += -DACPI_DEBUG_OUTPUT 9.26 -#endif 9.27 -# 9.28 -#EXTRA_CFLAGS += $(ACPI_CFLAGS) 9.29 -# 9.30 -#export-objs := acpi_ksyms.o processor.o 9.31 -# 9.32 -#obj-$(CONFIG_ACPI) := acpi_ksyms.o 9.33 -# 9.34 -# 9.35 -# ACPI Boot-Time Table Parsing 9.36 -# 9.37 -#obj-$(CONFIG_ACPI_BOOT) += tables.o 9.38 -#obj-$(CONFIG_ACPI_INTERPRETER) += blacklist.o 9.39 -# 9.40 -# 9.41 -# ACPI Core Subsystem (Interpreter) 9.42 -# 9.43 -#ifeq ($(CONFIG_ACPI_INTERPRETER),y) 9.44 -# obj-y += osl.o utils.o 9.45 -# subdir-y += dispatcher events executer hardware namespace parser \ 9.46 -# resources tables utilities 9.47 -# obj-y += $(foreach dir,$(subdir-y),$(dir)/$(dir).o) 9.48 -#endif 9.49 -# 9.50 -# 9.51 -# ACPI Bus and Device Drivers 9.52 -# 9.53 -#ifeq ($(CONFIG_ACPI_BUS),y) 9.54 -# obj-y += bus.o 9.55 -# obj-$(CONFIG_ACPI_AC) += ac.o 9.56 -# obj-$(CONFIG_ACPI_BATTERY) += battery.o 9.57 -# obj-$(CONFIG_ACPI_BUTTON) += button.o 9.58 -# obj-$(CONFIG_ACPI_EC) += ec.o 9.59 -# obj-$(CONFIG_ACPI_FAN) += fan.o 9.60 -# obj-$(CONFIG_ACPI_PCI) += pci_root.o pci_link.o pci_irq.o pci_bind.o 9.61 -# obj-$(CONFIG_ACPI_POWER) += power.o 9.62 -# obj-$(CONFIG_ACPI_PROCESSOR) += processor.o 9.63 -# obj-$(CONFIG_ACPI_THERMAL) += thermal.o 9.64 -# obj-$(CONFIG_ACPI_SYSTEM) += system.o 9.65 -# obj-$(CONFIG_ACPI_NUMA) += numa.o 9.66 -# obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o 9.67 -# obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o 9.68 -#endif
10.1 --- a/xen/drivers/acpi/acpi_ksyms.c Tue May 03 17:44:12 2005 +0000 10.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 10.3 @@ -1,157 +0,0 @@ 10.4 -/* 10.5 - * acpi_ksyms.c - ACPI Kernel Symbols ($Revision: 15 $) 10.6 - * 10.7 - * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> 10.8 - * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 10.9 - * 10.10 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10.11 - * 10.12 - * This program is free software; you can redistribute it and/or modify 10.13 - * it under the terms of the GNU General Public License as published by 10.14 - * the Free Software Foundation; either version 2 of the License, or (at 10.15 - * your option) any later version. 10.16 - * 10.17 - * This program is distributed in the hope that it will be useful, but 10.18 - * WITHOUT ANY WARRANTY; without even the implied warranty of 10.19 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 10.20 - * General Public License for more details. 10.21 - * 10.22 - * You should have received a copy of the GNU General Public License along 10.23 - * with this program; if not, write to the Free Software Foundation, Inc., 10.24 - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 10.25 - * 10.26 - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10.27 - */ 10.28 - 10.29 -#include <xen/config.h> 10.30 -#include <xen/acpi.h> 10.31 - 10.32 -#ifdef CONFIG_ACPI_INTERPRETER 10.33 - 10.34 -/* ACPI Debugger */ 10.35 - 10.36 -#ifdef ENABLE_DEBUGGER 10.37 - 10.38 -extern int acpi_in_debugger; 10.39 - 10.40 -EXPORT_SYMBOL(acpi_in_debugger); 10.41 -EXPORT_SYMBOL(acpi_db_user_commands); 10.42 - 10.43 -#endif /* ENABLE_DEBUGGER */ 10.44 - 10.45 -/* ACPI Core Subsystem */ 10.46 - 10.47 -#ifdef ACPI_DEBUG_OUTPUT 10.48 -EXPORT_SYMBOL(acpi_dbg_layer); 10.49 -EXPORT_SYMBOL(acpi_dbg_level); 10.50 -EXPORT_SYMBOL(acpi_ut_debug_print_raw); 10.51 -EXPORT_SYMBOL(acpi_ut_debug_print); 10.52 -EXPORT_SYMBOL(acpi_ut_status_exit); 10.53 -EXPORT_SYMBOL(acpi_ut_value_exit); 10.54 -EXPORT_SYMBOL(acpi_ut_exit); 10.55 -EXPORT_SYMBOL(acpi_ut_trace); 10.56 -#endif /*ACPI_DEBUG_OUTPUT*/ 10.57 - 10.58 -EXPORT_SYMBOL(acpi_get_handle); 10.59 -EXPORT_SYMBOL(acpi_get_parent); 10.60 -EXPORT_SYMBOL(acpi_get_type); 10.61 -EXPORT_SYMBOL(acpi_get_name); 10.62 -EXPORT_SYMBOL(acpi_get_object_info); 10.63 -EXPORT_SYMBOL(acpi_get_next_object); 10.64 -EXPORT_SYMBOL(acpi_evaluate_object); 10.65 -EXPORT_SYMBOL(acpi_get_table); 10.66 -EXPORT_SYMBOL(acpi_get_firmware_table); 10.67 -EXPORT_SYMBOL(acpi_install_notify_handler); 10.68 -EXPORT_SYMBOL(acpi_remove_notify_handler); 10.69 -EXPORT_SYMBOL(acpi_install_gpe_handler); 10.70 -EXPORT_SYMBOL(acpi_remove_gpe_handler); 10.71 -EXPORT_SYMBOL(acpi_install_address_space_handler); 10.72 -EXPORT_SYMBOL(acpi_remove_address_space_handler); 10.73 -EXPORT_SYMBOL(acpi_install_fixed_event_handler); 10.74 -EXPORT_SYMBOL(acpi_remove_fixed_event_handler); 10.75 -EXPORT_SYMBOL(acpi_acquire_global_lock); 10.76 -EXPORT_SYMBOL(acpi_release_global_lock); 10.77 -EXPORT_SYMBOL(acpi_install_gpe_block); 10.78 -EXPORT_SYMBOL(acpi_remove_gpe_block); 10.79 -EXPORT_SYMBOL(acpi_get_current_resources); 10.80 -EXPORT_SYMBOL(acpi_get_possible_resources); 10.81 -EXPORT_SYMBOL(acpi_walk_resources); 10.82 -EXPORT_SYMBOL(acpi_set_current_resources); 10.83 -EXPORT_SYMBOL(acpi_enable_event); 10.84 -EXPORT_SYMBOL(acpi_disable_event); 10.85 -EXPORT_SYMBOL(acpi_clear_event); 10.86 -EXPORT_SYMBOL(acpi_get_timer_duration); 10.87 -EXPORT_SYMBOL(acpi_get_timer); 10.88 -EXPORT_SYMBOL(acpi_get_sleep_type_data); 10.89 -EXPORT_SYMBOL(acpi_get_register); 10.90 -EXPORT_SYMBOL(acpi_set_register); 10.91 -EXPORT_SYMBOL(acpi_enter_sleep_state); 10.92 -EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios); 10.93 -EXPORT_SYMBOL(acpi_get_system_info); 10.94 -EXPORT_SYMBOL(acpi_get_devices); 10.95 - 10.96 -/* ACPI OS Services Layer (acpi_osl.c) */ 10.97 - 10.98 -EXPORT_SYMBOL(acpi_os_free); 10.99 -EXPORT_SYMBOL(acpi_os_printf); 10.100 -EXPORT_SYMBOL(acpi_os_sleep); 10.101 -EXPORT_SYMBOL(acpi_os_stall); 10.102 -EXPORT_SYMBOL(acpi_os_signal); 10.103 -EXPORT_SYMBOL(acpi_os_queue_for_execution); 10.104 -EXPORT_SYMBOL(acpi_os_signal_semaphore); 10.105 -EXPORT_SYMBOL(acpi_os_create_semaphore); 10.106 -EXPORT_SYMBOL(acpi_os_delete_semaphore); 10.107 -EXPORT_SYMBOL(acpi_os_wait_semaphore); 10.108 - 10.109 -EXPORT_SYMBOL(acpi_os_read_pci_configuration); 10.110 - 10.111 -/* ACPI Utilities (acpi_utils.c) */ 10.112 - 10.113 -EXPORT_SYMBOL(acpi_extract_package); 10.114 -EXPORT_SYMBOL(acpi_evaluate_integer); 10.115 -EXPORT_SYMBOL(acpi_evaluate_reference); 10.116 - 10.117 -#endif /*CONFIG_ACPI_INTERPRETER*/ 10.118 - 10.119 - 10.120 -/* ACPI Bus Driver (acpi_bus.c) */ 10.121 - 10.122 -#ifdef CONFIG_ACPI_BUS 10.123 - 10.124 -EXPORT_SYMBOL(acpi_fadt); 10.125 -EXPORT_SYMBOL(acpi_walk_namespace); 10.126 -EXPORT_SYMBOL(acpi_root_dir); 10.127 -EXPORT_SYMBOL(acpi_bus_get_device); 10.128 -EXPORT_SYMBOL(acpi_bus_get_status); 10.129 -EXPORT_SYMBOL(acpi_bus_get_power); 10.130 -EXPORT_SYMBOL(acpi_bus_set_power); 10.131 -EXPORT_SYMBOL(acpi_bus_generate_event); 10.132 -EXPORT_SYMBOL(acpi_bus_receive_event); 10.133 -EXPORT_SYMBOL(acpi_bus_register_driver); 10.134 -EXPORT_SYMBOL(acpi_bus_unregister_driver); 10.135 -EXPORT_SYMBOL(acpi_bus_scan); 10.136 -EXPORT_SYMBOL(acpi_init); 10.137 - 10.138 -#endif /*CONFIG_ACPI_BUS*/ 10.139 - 10.140 - 10.141 -/* ACPI PCI Driver (pci_irq.c) */ 10.142 - 10.143 -#ifdef CONFIG_ACPI_PCI 10.144 - 10.145 -#include <xen/pci.h> 10.146 -extern int acpi_pci_irq_enable(struct pci_dev *dev); 10.147 -EXPORT_SYMBOL(acpi_pci_irq_enable); 10.148 -extern int acpi_pci_irq_lookup (int segment, int bus, int device, int pin); 10.149 -EXPORT_SYMBOL(acpi_pci_irq_lookup); 10.150 -EXPORT_SYMBOL(acpi_pci_register_driver); 10.151 -EXPORT_SYMBOL(acpi_pci_unregister_driver); 10.152 -#endif /*CONFIG_ACPI_PCI */ 10.153 - 10.154 -#ifdef CONFIG_ACPI_EC 10.155 -/* ACPI EC driver (ec.c) */ 10.156 - 10.157 -EXPORT_SYMBOL(ec_read); 10.158 -EXPORT_SYMBOL(ec_write); 10.159 -#endif 10.160 -
11.1 --- a/xen/drivers/pci/Makefile Tue May 03 17:44:12 2005 +0000 11.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 11.3 @@ -1,45 +0,0 @@ 11.4 -# 11.5 -# Makefile for the PCI bus specific drivers. 11.6 -# 11.7 - 11.8 -include $(BASEDIR)/Rules.mk 11.9 - 11.10 -OBJS := pci.o quirks.o names.o setup-res.o 11.11 - 11.12 -#obj-$(CONFIG_PCI) += pci.o quirks.o compat.o names.o 11.13 -#obj-$(CONFIG_PROC_FS) += proc.o 11.14 - 11.15 -#ifndef CONFIG_SPARC64 11.16 -#obj-$(CONFIG_PCI) += setup-res.o 11.17 -#endif 11.18 - 11.19 -# 11.20 -# Some architectures use the generic PCI setup functions 11.21 -# 11.22 -#obj-$(CONFIG_ALPHA) += setup-bus.o setup-irq.o 11.23 -#obj-$(CONFIG_ARM) += setup-bus.o setup-irq.o 11.24 -#obj-$(CONFIG_PARISC) += setup-bus.o 11.25 -#obj-$(CONFIG_SUPERH) += setup-bus.o setup-irq.o 11.26 -#obj-$(CONFIG_ALL_PPC) += setup-bus.o 11.27 -#obj-$(CONFIG_DDB5476) += setup-bus.o 11.28 -#obj-$(CONFIG_SGI_IP27) += setup-irq.o 11.29 - 11.30 -#ifndef CONFIG_X86 11.31 -#obj-y += syscall.o 11.32 -#endif 11.33 - 11.34 -default: driver.o 11.35 -driver.o: $(OBJS) 11.36 - $(LD) $(LDFLAGS) -r -o driver.o $(OBJS) 11.37 - 11.38 -clean: 11.39 - rm -f *.o *~ core gen-devlist classlist.h devlist.h 11.40 - 11.41 -names.o: names.c devlist.h classlist.h 11.42 - 11.43 -devlist.h classlist.h: pci.ids gen-devlist 11.44 - ./gen-devlist <pci.ids 11.45 - 11.46 -gen-devlist: gen-devlist.c 11.47 - $(HOSTCC) $(HOSTCFLAGS) -o gen-devlist gen-devlist.c 11.48 -
13.1 --- a/xen/drivers/pci/gen-devlist.c Tue May 03 17:44:12 2005 +0000 13.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 13.3 @@ -1,130 +0,0 @@ 13.4 -/* 13.5 - * Generate devlist.h and classlist.h from the PCI ID file. 13.6 - * 13.7 - * (c) 1999--2002 Martin Mares <mj@ucw.cz> 13.8 - */ 13.9 - 13.10 -#include <stdio.h> 13.11 -#include <string.h> 13.12 - 13.13 -#define MAX_NAME_SIZE 79 13.14 - 13.15 -static void 13.16 -pq(FILE *f, const char *c) 13.17 -{ 13.18 - while (*c) { 13.19 - if (*c == '"') 13.20 - fprintf(f, "\\\""); 13.21 - else { 13.22 - fputc(*c, f); 13.23 - if (*c == '?' && c[1] == '?') { 13.24 - /* Avoid trigraphs */ 13.25 - fprintf(f, "\" \""); 13.26 - } 13.27 - } 13.28 - c++; 13.29 - } 13.30 -} 13.31 - 13.32 -int 13.33 -main(void) 13.34 -{ 13.35 - char line[1024], *c, *bra, vend[8]; 13.36 - int vendors = 0; 13.37 - int mode = 0; 13.38 - int lino = 0; 13.39 - int vendor_len = 0; 13.40 - FILE *devf, *clsf; 13.41 - 13.42 - devf = fopen("devlist.h", "w"); 13.43 - clsf = fopen("classlist.h", "w"); 13.44 - if (!devf || !clsf) { 13.45 - fprintf(stderr, "Cannot create output file!\n"); 13.46 - return 1; 13.47 - } 13.48 - 13.49 - while (fgets(line, sizeof(line)-1, stdin)) { 13.50 - lino++; 13.51 - if ((c = strchr(line, '\n'))) 13.52 - *c = 0; 13.53 - if (!line[0] || line[0] == '#') 13.54 - continue; 13.55 - if (line[1] == ' ') { 13.56 - if (line[0] == 'C' && strlen(line) > 4 && line[4] == ' ') { 13.57 - vend[0] = line[2]; 13.58 - vend[1] = line[3]; 13.59 - vend[2] = 0; 13.60 - mode = 2; 13.61 - } else goto err; 13.62 - } 13.63 - else if (line[0] == '\t') { 13.64 - if (line[1] == '\t') 13.65 - continue; 13.66 - switch (mode) { 13.67 - case 1: 13.68 - if (strlen(line) > 5 && line[5] == ' ') { 13.69 - c = line + 5; 13.70 - while (*c == ' ') 13.71 - *c++ = 0; 13.72 - if (vendor_len + strlen(c) + 1 > MAX_NAME_SIZE) { 13.73 - /* Too long, try cutting off long description */ 13.74 - bra = strchr(c, '['); 13.75 - if (bra && bra > c && bra[-1] == ' ') 13.76 - bra[-1] = 0; 13.77 - if (vendor_len + strlen(c) + 1 > MAX_NAME_SIZE) { 13.78 - fprintf(stderr, "Line %d: Device name too long\n", lino); 13.79 - fprintf(stderr, "%s\n", c); 13.80 - return 1; 13.81 - } 13.82 - } 13.83 - fprintf(devf, "\tDEVICE(%s,%s,\"", vend, line+1); 13.84 - pq(devf, c); 13.85 - fputs("\")\n", devf); 13.86 - } else goto err; 13.87 - break; 13.88 - case 2: 13.89 - if (strlen(line) > 3 && line[3] == ' ') { 13.90 - c = line + 3; 13.91 - while (*c == ' ') 13.92 - *c++ = 0; 13.93 - fprintf(clsf, "CLASS(%s%s, \"%s\")\n", vend, line+1, c); 13.94 - } else goto err; 13.95 - break; 13.96 - default: 13.97 - goto err; 13.98 - } 13.99 - } else if (strlen(line) > 4 && line[4] == ' ') { 13.100 - c = line + 4; 13.101 - while (*c == ' ') 13.102 - *c++ = 0; 13.103 - if (vendors) 13.104 - fputs("ENDVENDOR()\n\n", devf); 13.105 - vendors++; 13.106 - strcpy(vend, line); 13.107 - vendor_len = strlen(c); 13.108 - if (vendor_len + 24 > MAX_NAME_SIZE) { 13.109 - fprintf(stderr, "Line %d: Vendor name too long\n", lino); 13.110 - return 1; 13.111 - } 13.112 - fprintf(devf, "VENDOR(%s,\"", vend); 13.113 - pq(devf, c); 13.114 - fputs("\")\n", devf); 13.115 - mode = 1; 13.116 - } else { 13.117 - err: 13.118 - fprintf(stderr, "Line %d: Syntax error in mode %d: %s\n", lino, mode, line); 13.119 - return 1; 13.120 - } 13.121 - } 13.122 - fputs("ENDVENDOR()\n\ 13.123 -\n\ 13.124 -#undef VENDOR\n\ 13.125 -#undef DEVICE\n\ 13.126 -#undef ENDVENDOR\n", devf); 13.127 - fputs("\n#undef CLASS\n", clsf); 13.128 - 13.129 - fclose(devf); 13.130 - fclose(clsf); 13.131 - 13.132 - return 0; 13.133 -}
14.1 --- a/xen/drivers/pci/names.c Tue May 03 17:44:12 2005 +0000 14.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 14.3 @@ -1,135 +0,0 @@ 14.4 -/* 14.5 - * PCI Class and Device Name Tables 14.6 - * 14.7 - * Copyright 1993--1999 Drew Eckhardt, Frederic Potter, 14.8 - * David Mosberger-Tang, Martin Mares 14.9 - */ 14.10 - 14.11 -#include <xen/config.h> 14.12 -#include <xen/types.h> 14.13 -/*#include <xen/kernel.h>*/ 14.14 -#include <xen/pci.h> 14.15 -#include <xen/init.h> 14.16 - 14.17 -#ifdef CONFIG_PCI_NAMES 14.18 - 14.19 -struct pci_device_info { 14.20 - unsigned short device; 14.21 - unsigned short seen; 14.22 - const char *name; 14.23 -}; 14.24 - 14.25 -struct pci_vendor_info { 14.26 - unsigned short vendor; 14.27 - unsigned short nr; 14.28 - const char *name; 14.29 - struct pci_device_info *devices; 14.30 -}; 14.31 - 14.32 -/* 14.33 - * This is ridiculous, but we want the strings in 14.34 - * the .init section so that they don't take up 14.35 - * real memory.. Parse the same file multiple times 14.36 - * to get all the info. 14.37 - */ 14.38 -#define VENDOR( vendor, name ) static char __vendorstr_##vendor[] __devinitdata = name; 14.39 -#define ENDVENDOR() 14.40 -#define DEVICE( vendor, device, name ) static char __devicestr_##vendor##device[] __devinitdata = name; 14.41 -#include "devlist.h" 14.42 - 14.43 - 14.44 -#define VENDOR( vendor, name ) static struct pci_device_info __devices_##vendor[] __devinitdata = { 14.45 -#define ENDVENDOR() }; 14.46 -#define DEVICE( vendor, device, name ) { 0x##device, 0, __devicestr_##vendor##device }, 14.47 -#include "devlist.h" 14.48 - 14.49 -static struct pci_vendor_info __devinitdata pci_vendor_list[] = { 14.50 -#define VENDOR( vendor, name ) { 0x##vendor, sizeof(__devices_##vendor) / sizeof(struct pci_device_info), __vendorstr_##vendor, __devices_##vendor }, 14.51 -#define ENDVENDOR() 14.52 -#define DEVICE( vendor, device, name ) 14.53 -#include "devlist.h" 14.54 -}; 14.55 - 14.56 -#define VENDORS (sizeof(pci_vendor_list)/sizeof(struct pci_vendor_info)) 14.57 - 14.58 -void __devinit pci_name_device(struct pci_dev *dev) 14.59 -{ 14.60 - const struct pci_vendor_info *vendor_p = pci_vendor_list; 14.61 - int i = VENDORS; 14.62 - char *name = dev->name; 14.63 - 14.64 - do { 14.65 - if (vendor_p->vendor == dev->vendor) 14.66 - goto match_vendor; 14.67 - vendor_p++; 14.68 - } while (--i); 14.69 - 14.70 - /* Couldn't find either the vendor nor the device */ 14.71 - sprintf(name, "PCI device %04x:%04x", dev->vendor, dev->device); 14.72 - return; 14.73 - 14.74 - match_vendor: { 14.75 - struct pci_device_info *device_p = vendor_p->devices; 14.76 - int i = vendor_p->nr; 14.77 - 14.78 - while (i > 0) { 14.79 - if (device_p->device == dev->device) 14.80 - goto match_device; 14.81 - device_p++; 14.82 - i--; 14.83 - } 14.84 - 14.85 - /* Ok, found the vendor, but unknown device */ 14.86 - sprintf(name, "PCI device %04x:%04x (%s)", dev->vendor, dev->device, vendor_p->name); 14.87 - return; 14.88 - 14.89 - /* Full match */ 14.90 - match_device: { 14.91 - char *n = name + sprintf(name, "%s %s", vendor_p->name, device_p->name); 14.92 - int nr = device_p->seen + 1; 14.93 - device_p->seen = nr; 14.94 - if (nr > 1) 14.95 - sprintf(n, " (#%d)", nr); 14.96 - } 14.97 - } 14.98 -} 14.99 - 14.100 -/* 14.101 - * Class names. Not in .init section as they are needed in runtime. 14.102 - */ 14.103 - 14.104 -static u16 pci_class_numbers[] = { 14.105 -#define CLASS(x,y) 0x##x, 14.106 -#include "classlist.h" 14.107 -}; 14.108 - 14.109 -static char *pci_class_names[] = { 14.110 -#define CLASS(x,y) y, 14.111 -#include "classlist.h" 14.112 -}; 14.113 - 14.114 -char * 14.115 -pci_class_name(u32 class) 14.116 -{ 14.117 - int i; 14.118 - 14.119 - for(i=0; i<sizeof(pci_class_numbers)/sizeof(pci_class_numbers[0]); i++) 14.120 - if (pci_class_numbers[i] == class) 14.121 - return pci_class_names[i]; 14.122 - return NULL; 14.123 -} 14.124 - 14.125 -#else 14.126 - 14.127 -void __devinit pci_name_device(struct pci_dev *dev) 14.128 -{ 14.129 -} 14.130 - 14.131 -char * 14.132 -pci_class_name(u32 class) 14.133 -{ 14.134 - return NULL; 14.135 -} 14.136 - 14.137 -#endif /* CONFIG_PCI_NAMES */ 14.138 -
15.1 --- a/xen/drivers/pci/pci.c Tue May 03 17:44:12 2005 +0000 15.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 15.3 @@ -1,1773 +0,0 @@ 15.4 -/* 15.5 - * $Id: pci.c,v 1.91 1999/01/21 13:34:01 davem Exp $ 15.6 - * 15.7 - * PCI Bus Services, see include/linux/pci.h for further explanation. 15.8 - * 15.9 - * Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter, 15.10 - * David Mosberger-Tang 15.11 - * 15.12 - * Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz> 15.13 - */ 15.14 - 15.15 -#include <xen/config.h> 15.16 -#include <xen/sched.h> 15.17 -#include <xen/types.h> 15.18 -#include <xen/pci.h> 15.19 -#include <xen/init.h> 15.20 -#include <xen/slab.h> 15.21 -#include <xen/ioport.h> 15.22 -#include <xen/spinlock.h> 15.23 -#include <xen/delay.h> 15.24 -#include <xen/cache.h> 15.25 -#include <asm/page.h> 15.26 - 15.27 -#undef DEBUG 15.28 - 15.29 -#ifdef DEBUG 15.30 -#define DBG(x...) printk(x) 15.31 -#else 15.32 -#define DBG(x...) 15.33 -#endif 15.34 - 15.35 -LIST_HEAD(pci_root_buses); 15.36 -LIST_HEAD(pci_devices); 15.37 - 15.38 -/** 15.39 - * pci_find_slot - locate PCI device from a given PCI slot 15.40 - * @bus: number of PCI bus on which desired PCI device resides 15.41 - * @devfn: encodes number of PCI slot in which the desired PCI 15.42 - * device resides and the logical device number within that slot 15.43 - * in case of multi-function devices. 15.44 - * 15.45 - * Given a PCI bus and slot/function number, the desired PCI device 15.46 - * is located in system global list of PCI devices. If the device 15.47 - * is found, a pointer to its data structure is returned. If no 15.48 - * device is found, %NULL is returned. 15.49 - */ 15.50 -struct pci_dev * 15.51 -pci_find_slot(unsigned int bus, unsigned int devfn) 15.52 -{ 15.53 - struct pci_dev *dev; 15.54 - 15.55 - pci_for_each_dev(dev) { 15.56 - if (dev->bus->number == bus && dev->devfn == devfn) 15.57 - return dev; 15.58 - } 15.59 - return NULL; 15.60 -} 15.61 - 15.62 -/** 15.63 - * pci_find_subsys - begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id 15.64 - * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids 15.65 - * @device: PCI device id to match, or %PCI_ANY_ID to match all device ids 15.66 - * @ss_vendor: PCI subsystem vendor id to match, or %PCI_ANY_ID to match all vendor ids 15.67 - * @ss_device: PCI subsystem device id to match, or %PCI_ANY_ID to match all device ids 15.68 - * @from: Previous PCI device found in search, or %NULL for new search. 15.69 - * 15.70 - * Iterates through the list of known PCI devices. If a PCI device is 15.71 - * found with a matching @vendor, @device, @ss_vendor and @ss_device, a pointer to its 15.72 - * device structure is returned. Otherwise, %NULL is returned. 15.73 - * A new search is initiated by passing %NULL to the @from argument. 15.74 - * Otherwise if @from is not %NULL, searches continue from next device on the global list. 15.75 - */ 15.76 -struct pci_dev * 15.77 -pci_find_subsys(unsigned int vendor, unsigned int device, 15.78 - unsigned int ss_vendor, unsigned int ss_device, 15.79 - const struct pci_dev *from) 15.80 -{ 15.81 - struct list_head *n = from ? from->global_list.next : pci_devices.next; 15.82 - 15.83 - while (n != &pci_devices) { 15.84 - struct pci_dev *dev = pci_dev_g(n); 15.85 - if ((vendor == PCI_ANY_ID || dev->vendor == vendor) && 15.86 - (device == PCI_ANY_ID || dev->device == device) && 15.87 - (ss_vendor == PCI_ANY_ID || dev->subsystem_vendor == ss_vendor) && 15.88 - (ss_device == PCI_ANY_ID || dev->subsystem_device == ss_device)) 15.89 - return dev; 15.90 - n = n->next; 15.91 - } 15.92 - return NULL; 15.93 -} 15.94 - 15.95 - 15.96 -/** 15.97 - * pci_find_device - begin or continue searching for a PCI device by vendor/device id 15.98 - * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids 15.99 - * @device: PCI device id to match, or %PCI_ANY_ID to match all device ids 15.100 - * @from: Previous PCI device found in search, or %NULL for new search. 15.101 - * 15.102 - * Iterates through the list of known PCI devices. If a PCI device is 15.103 - * found with a matching @vendor and @device, a pointer to its device structure is 15.104 - * returned. Otherwise, %NULL is returned. 15.105 - * A new search is initiated by passing %NULL to the @from argument. 15.106 - * Otherwise if @from is not %NULL, searches continue from next device on the global list. 15.107 - */ 15.108 -struct pci_dev * 15.109 -pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *from) 15.110 -{ 15.111 - return pci_find_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from); 15.112 -} 15.113 - 15.114 - 15.115 -/** 15.116 - * pci_find_class - begin or continue searching for a PCI device by class 15.117 - * @class: search for a PCI device with this class designation 15.118 - * @from: Previous PCI device found in search, or %NULL for new search. 15.119 - * 15.120 - * Iterates through the list of known PCI devices. If a PCI device is 15.121 - * found with a matching @class, a pointer to its device structure is 15.122 - * returned. Otherwise, %NULL is returned. 15.123 - * A new search is initiated by passing %NULL to the @from argument. 15.124 - * Otherwise if @from is not %NULL, searches continue from next device 15.125 - * on the global list. 15.126 - */ 15.127 -struct pci_dev * 15.128 -pci_find_class(unsigned int class, const struct pci_dev *from) 15.129 -{ 15.130 - struct list_head *n = from ? from->global_list.next : pci_devices.next; 15.131 - 15.132 - while (n != &pci_devices) { 15.133 - struct pci_dev *dev = pci_dev_g(n); 15.134 - if (dev->class == class) 15.135 - return dev; 15.136 - n = n->next; 15.137 - } 15.138 - return NULL; 15.139 -} 15.140 - 15.141 -/** 15.142 - * pci_find_capability - query for devices' capabilities 15.143 - * @dev: PCI device to query 15.144 - * @cap: capability code 15.145 - * 15.146 - * Tell if a device supports a given PCI capability. 15.147 - * Returns the address of the requested capability structure within the 15.148 - * device's PCI configuration space or 0 in case the device does not 15.149 - * support it. Possible values for @cap: 15.150 - * 15.151 - * %PCI_CAP_ID_PM Power Management 15.152 - * 15.153 - * %PCI_CAP_ID_AGP Accelerated Graphics Port 15.154 - * 15.155 - * %PCI_CAP_ID_VPD Vital Product Data 15.156 - * 15.157 - * %PCI_CAP_ID_SLOTID Slot Identification 15.158 - * 15.159 - * %PCI_CAP_ID_MSI Message Signalled Interrupts 15.160 - * 15.161 - * %PCI_CAP_ID_CHSWP CompactPCI HotSwap 15.162 - * 15.163 - * %PCI_CAP_ID_PCIX PCI-X 15.164 - */ 15.165 -int 15.166 -pci_find_capability(struct pci_dev *dev, int cap) 15.167 -{ 15.168 - u16 status; 15.169 - u8 pos, id; 15.170 - int ttl = 48; 15.171 - 15.172 - pci_read_config_word(dev, PCI_STATUS, &status); 15.173 - if (!(status & PCI_STATUS_CAP_LIST)) 15.174 - return 0; 15.175 - switch (dev->hdr_type) { 15.176 - case PCI_HEADER_TYPE_NORMAL: 15.177 - case PCI_HEADER_TYPE_BRIDGE: 15.178 - pci_read_config_byte(dev, PCI_CAPABILITY_LIST, &pos); 15.179 - break; 15.180 - case PCI_HEADER_TYPE_CARDBUS: 15.181 - pci_read_config_byte(dev, PCI_CB_CAPABILITY_LIST, &pos); 15.182 - break; 15.183 - default: 15.184 - return 0; 15.185 - } 15.186 - while (ttl-- && pos >= 0x40) { 15.187 - pos &= ~3; 15.188 - pci_read_config_byte(dev, pos + PCI_CAP_LIST_ID, &id); 15.189 - if (id == 0xff) 15.190 - break; 15.191 - if (id == cap) 15.192 - return pos; 15.193 - pci_read_config_byte(dev, pos + PCI_CAP_LIST_NEXT, &pos); 15.194 - } 15.195 - return 0; 15.196 -} 15.197 - 15.198 - 15.199 -/** 15.200 - * pci_find_parent_resource - return resource region of parent bus of given region 15.201 - * @dev: PCI device structure contains resources to be searched 15.202 - * @res: child resource record for which parent is sought 15.203 - * 15.204 - * For given resource region of given device, return the resource 15.205 - * region of parent bus the given region is contained in or where 15.206 - * it should be allocated from. 15.207 - */ 15.208 -struct resource * 15.209 -pci_find_parent_resource(const struct pci_dev *dev, struct resource *res) 15.210 -{ 15.211 - const struct pci_bus *bus = dev->bus; 15.212 - int i; 15.213 - struct resource *best = NULL; 15.214 - 15.215 - for(i=0; i<4; i++) { 15.216 - struct resource *r = bus->resource[i]; 15.217 - if (!r) 15.218 - continue; 15.219 - if (res->start && !(res->start >= r->start && res->end <= r->end)) 15.220 - continue; /* Not contained */ 15.221 - if ((res->flags ^ r->flags) & (IORESOURCE_IO | IORESOURCE_MEM)) 15.222 - continue; /* Wrong type */ 15.223 - if (!((res->flags ^ r->flags) & IORESOURCE_PREFETCH)) 15.224 - return r; /* Exact match */ 15.225 - if ((res->flags & IORESOURCE_PREFETCH) && !(r->flags & IORESOURCE_PREFETCH)) 15.226 - best = r; /* Approximating prefetchable by non-prefetchable */ 15.227 - } 15.228 - return best; 15.229 -} 15.230 - 15.231 -/** 15.232 - * pci_set_power_state - Set the power state of a PCI device 15.233 - * @dev: PCI device to be suspended 15.234 - * @state: Power state we're entering 15.235 - * 15.236 - * Transition a device to a new power state, using the Power Management 15.237 - * Capabilities in the device's config space. 15.238 - * 15.239 - * RETURN VALUE: 15.240 - * -EINVAL if trying to enter a lower state than we're already in. 15.241 - * 0 if we're already in the requested state. 15.242 - * -EIO if device does not support PCI PM. 15.243 - * 0 if we can successfully change the power state. 15.244 - */ 15.245 - 15.246 -int 15.247 -pci_set_power_state(struct pci_dev *dev, int state) 15.248 -{ 15.249 - int pm; 15.250 - u16 pmcsr; 15.251 - 15.252 - /* bound the state we're entering */ 15.253 - if (state > 3) state = 3; 15.254 - 15.255 - /* Validate current state: 15.256 - * Can enter D0 from any state, but if we can only go deeper 15.257 - * to sleep if we're already in a low power state 15.258 - */ 15.259 - if (state > 0 && dev->current_state > state) 15.260 - return -EINVAL; 15.261 - else if (dev->current_state == state) 15.262 - return 0; /* we're already there */ 15.263 - 15.264 - /* find PCI PM capability in list */ 15.265 - pm = pci_find_capability(dev, PCI_CAP_ID_PM); 15.266 - 15.267 - /* abort if the device doesn't support PM capabilities */ 15.268 - if (!pm) return -EIO; 15.269 - 15.270 - /* check if this device supports the desired state */ 15.271 - if (state == 1 || state == 2) { 15.272 - u16 pmc; 15.273 - pci_read_config_word(dev,pm + PCI_PM_PMC,&pmc); 15.274 - if (state == 1 && !(pmc & PCI_PM_CAP_D1)) return -EIO; 15.275 - else if (state == 2 && !(pmc & PCI_PM_CAP_D2)) return -EIO; 15.276 - } 15.277 - 15.278 - /* If we're in D3, force entire word to 0. 15.279 - * This doesn't affect PME_Status, disables PME_En, and 15.280 - * sets PowerState to 0. 15.281 - */ 15.282 - if (dev->current_state >= 3) 15.283 - pmcsr = 0; 15.284 - else { 15.285 - pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr); 15.286 - pmcsr &= ~PCI_PM_CTRL_STATE_MASK; 15.287 - pmcsr |= state; 15.288 - } 15.289 - 15.290 - /* enter specified state */ 15.291 - pci_write_config_word(dev, pm + PCI_PM_CTRL, pmcsr); 15.292 - 15.293 - /* Mandatory power management transition delays */ 15.294 - /* see PCI PM 1.1 5.6.1 table 18 */ 15.295 - if(state == 3 || dev->current_state == 3) 15.296 - mdelay(10); 15.297 - else if(state == 2 || dev->current_state == 2) 15.298 - udelay(200); 15.299 - dev->current_state = state; 15.300 - 15.301 - return 0; 15.302 -} 15.303 - 15.304 -/** 15.305 - * pci_save_state - save the PCI configuration space of a device before suspending 15.306 - * @dev: - PCI device that we're dealing with 15.307 - * @buffer: - buffer to hold config space context 15.308 - * 15.309 - * @buffer must be large enough to hold the entire PCI 2.2 config space 15.310 - * (>= 64 bytes). 15.311 - */ 15.312 -int 15.313 -pci_save_state(struct pci_dev *dev, u32 *buffer) 15.314 -{ 15.315 - int i; 15.316 - if (buffer) { 15.317 - /* XXX: 100% dword access ok here? */ 15.318 - for (i = 0; i < 16; i++) 15.319 - pci_read_config_dword(dev, i * 4,&buffer[i]); 15.320 - } 15.321 - return 0; 15.322 -} 15.323 - 15.324 -/** 15.325 - * pci_restore_state - Restore the saved state of a PCI device 15.326 - * @dev: - PCI device that we're dealing with 15.327 - * @buffer: - saved PCI config space 15.328 - * 15.329 - */ 15.330 -int 15.331 -pci_restore_state(struct pci_dev *dev, u32 *buffer) 15.332 -{ 15.333 - int i; 15.334 - 15.335 - if (buffer) { 15.336 - for (i = 0; i < 16; i++) 15.337 - pci_write_config_dword(dev,i * 4, buffer[i]); 15.338 - } 15.339 - /* 15.340 - * otherwise, write the context information we know from bootup. 15.341 - * This works around a problem where warm-booting from Windows 15.342 - * combined with a D3(hot)->D0 transition causes PCI config 15.343 - * header data to be forgotten. 15.344 - */ 15.345 - else { 15.346 - for (i = 0; i < 6; i ++) 15.347 - pci_write_config_dword(dev, 15.348 - PCI_BASE_ADDRESS_0 + (i * 4), 15.349 - dev->resource[i].start); 15.350 - pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); 15.351 - } 15.352 - return 0; 15.353 -} 15.354 - 15.355 -/** 15.356 - * pci_enable_device_bars - Initialize some of a device for use 15.357 - * @dev: PCI device to be initialized 15.358 - * @bars: bitmask of BAR's that must be configured 15.359 - * 15.360 - * Initialize device before it's used by a driver. Ask low-level code 15.361 - * to enable selected I/O and memory resources. Wake up the device if it 15.362 - * was suspended. Beware, this function can fail. 15.363 - */ 15.364 - 15.365 -int 15.366 -pci_enable_device_bars(struct pci_dev *dev, int bars) 15.367 -{ 15.368 - int err; 15.369 - 15.370 - pci_set_power_state(dev, 0); 15.371 - if ((err = pcibios_enable_device(dev, bars)) < 0) 15.372 - return err; 15.373 - return 0; 15.374 -} 15.375 - 15.376 -/** 15.377 - * pci_enable_device - Initialize device before it's used by a driver. 15.378 - * @dev: PCI device to be initialized 15.379 - * 15.380 - * Initialize device before it's used by a driver. Ask low-level code 15.381 - * to enable I/O and memory. Wake up the device if it was suspended. 15.382 - * Beware, this function can fail. 15.383 - */ 15.384 -int 15.385 -pci_enable_device(struct pci_dev *dev) 15.386 -{ 15.387 - return pci_enable_device_bars(dev, 0x3F); 15.388 -} 15.389 - 15.390 -/** 15.391 - * pci_disable_device - Disable PCI device after use 15.392 - * @dev: PCI device to be disabled 15.393 - * 15.394 - * Signal to the system that the PCI device is not in use by the system 15.395 - * anymore. This only involves disabling PCI bus-mastering, if active. 15.396 - */ 15.397 -void 15.398 -pci_disable_device(struct pci_dev *dev) 15.399 -{ 15.400 - u16 pci_command; 15.401 - 15.402 - pci_read_config_word(dev, PCI_COMMAND, &pci_command); 15.403 - if (pci_command & PCI_COMMAND_MASTER) { 15.404 - pci_command &= ~PCI_COMMAND_MASTER; 15.405 - pci_write_config_word(dev, PCI_COMMAND, pci_command); 15.406 - } 15.407 -} 15.408 - 15.409 -/** 15.410 - * pci_enable_wake - enable device to generate PME# when suspended 15.411 - * @dev: - PCI device to operate on 15.412 - * @state: - Current state of device. 15.413 - * @enable: - Flag to enable or disable generation 15.414 - * 15.415 - * Set the bits in the device's PM Capabilities to generate PME# when 15.416 - * the system is suspended. 15.417 - * 15.418 - * -EIO is returned if device doesn't have PM Capabilities. 15.419 - * -EINVAL is returned if device supports it, but can't generate wake events. 15.420 - * 0 if operation is successful. 15.421 - * 15.422 - */ 15.423 -int pci_enable_wake(struct pci_dev *dev, u32 state, int enable) 15.424 -{ 15.425 - int pm; 15.426 - u16 value; 15.427 - 15.428 - /* find PCI PM capability in list */ 15.429 - pm = pci_find_capability(dev, PCI_CAP_ID_PM); 15.430 - 15.431 - /* If device doesn't support PM Capabilities, but request is to disable 15.432 - * wake events, it's a nop; otherwise fail */ 15.433 - if (!pm) 15.434 - return enable ? -EIO : 0; 15.435 - 15.436 - /* Check device's ability to generate PME# */ 15.437 - pci_read_config_word(dev,pm+PCI_PM_PMC,&value); 15.438 - 15.439 - value &= PCI_PM_CAP_PME_MASK; 15.440 - value >>= ffs(value); /* First bit of mask */ 15.441 - 15.442 - /* Check if it can generate PME# from requested state. */ 15.443 - if (!value || !(value & (1 << state))) 15.444 - return enable ? -EINVAL : 0; 15.445 - 15.446 - pci_read_config_word(dev, pm + PCI_PM_CTRL, &value); 15.447 - 15.448 - /* Clear PME_Status by writing 1 to it and enable PME# */ 15.449 - value |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE; 15.450 - 15.451 - if (!enable) 15.452 - value &= ~PCI_PM_CTRL_PME_ENABLE; 15.453 - 15.454 - pci_write_config_word(dev, pm + PCI_PM_CTRL, value); 15.455 - 15.456 - return 0; 15.457 -} 15.458 - 15.459 -int 15.460 -pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge) 15.461 -{ 15.462 - u8 pin; 15.463 - 15.464 - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); 15.465 - if (!pin) 15.466 - return -1; 15.467 - pin--; 15.468 - while (dev->bus->self) { 15.469 - pin = (pin + PCI_SLOT(dev->devfn)) % 4; 15.470 - dev = dev->bus->self; 15.471 - } 15.472 - *bridge = dev; 15.473 - return pin; 15.474 -} 15.475 - 15.476 -/** 15.477 - * pci_release_region - Release a PCI bar 15.478 - * @pdev: PCI device whose resources were previously reserved by pci_request_region 15.479 - * @bar: BAR to release 15.480 - * 15.481 - * Releases the PCI I/O and memory resources previously reserved by a 15.482 - * successful call to pci_request_region. Call this function only 15.483 - * after all use of the PCI regions has ceased. 15.484 - */ 15.485 -void pci_release_region(struct pci_dev *pdev, int bar) 15.486 -{ 15.487 - if (pci_resource_len(pdev, bar) == 0) 15.488 - return; 15.489 - if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) 15.490 - release_region(pci_resource_start(pdev, bar), 15.491 - pci_resource_len(pdev, bar)); 15.492 - else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) 15.493 - release_mem_region(pci_resource_start(pdev, bar), 15.494 - pci_resource_len(pdev, bar)); 15.495 -} 15.496 - 15.497 -/** 15.498 - * pci_request_region - Reserved PCI I/O and memory resource 15.499 - * @pdev: PCI device whose resources are to be reserved 15.500 - * @bar: BAR to be reserved 15.501 - * @res_name: Name to be associated with resource. 15.502 - * 15.503 - * Mark the PCI region associated with PCI device @pdev BR @bar as 15.504 - * being reserved by owner @res_name. Do not access any 15.505 - * address inside the PCI regions unless this call returns 15.506 - * successfully. 15.507 - * 15.508 - * Returns 0 on success, or %EBUSY on error. A warning 15.509 - * message is also printed on failure. 15.510 - */ 15.511 -int pci_request_region(struct pci_dev *pdev, int bar, char *res_name) 15.512 -{ 15.513 - if (pci_resource_len(pdev, bar) == 0) 15.514 - return 0; 15.515 - 15.516 - if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) { 15.517 - if (!request_region(pci_resource_start(pdev, bar), 15.518 - pci_resource_len(pdev, bar), res_name)) 15.519 - goto err_out; 15.520 - } 15.521 - else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) { 15.522 - if (!request_mem_region(pci_resource_start(pdev, bar), 15.523 - pci_resource_len(pdev, bar), res_name)) 15.524 - goto err_out; 15.525 - } 15.526 - 15.527 - return 0; 15.528 - 15.529 -err_out: 15.530 - printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %s\n", 15.531 - pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem", 15.532 - bar + 1, /* PCI BAR # */ 15.533 - pci_resource_len(pdev, bar), pci_resource_start(pdev, bar), 15.534 - pdev->slot_name); 15.535 - return -EBUSY; 15.536 -} 15.537 - 15.538 - 15.539 -/** 15.540 - * pci_release_regions - Release reserved PCI I/O and memory resources 15.541 - * @pdev: PCI device whose resources were previously reserved by pci_request_regions 15.542 - * 15.543 - * Releases all PCI I/O and memory resources previously reserved by a 15.544 - * successful call to pci_request_regions. Call this function only 15.545 - * after all use of the PCI regions has ceased. 15.546 - */ 15.547 - 15.548 -void pci_release_regions(struct pci_dev *pdev) 15.549 -{ 15.550 - int i; 15.551 - 15.552 - for (i = 0; i < 6; i++) 15.553 - pci_release_region(pdev, i); 15.554 -} 15.555 - 15.556 -/** 15.557 - * pci_request_regions - Reserved PCI I/O and memory resources 15.558 - * @pdev: PCI device whose resources are to be reserved 15.559 - * @res_name: Name to be associated with resource. 15.560 - * 15.561 - * Mark all PCI regions associated with PCI device @pdev as 15.562 - * being reserved by owner @res_name. Do not access any 15.563 - * address inside the PCI regions unless this call returns 15.564 - * successfully. 15.565 - * 15.566 - * Returns 0 on success, or %EBUSY on error. A warning 15.567 - * message is also printed on failure. 15.568 - */ 15.569 -int pci_request_regions(struct pci_dev *pdev, char *res_name) 15.570 -{ 15.571 - int i; 15.572 - 15.573 - for (i = 0; i < 6; i++) 15.574 - if(pci_request_region(pdev, i, res_name)) 15.575 - goto err_out; 15.576 - return 0; 15.577 - 15.578 -err_out: 15.579 - printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %s\n", 15.580 - pci_resource_flags(pdev, i) & IORESOURCE_IO ? "I/O" : "mem", 15.581 - i + 1, /* PCI BAR # */ 15.582 - pci_resource_len(pdev, i), pci_resource_start(pdev, i), 15.583 - pdev->slot_name); 15.584 - while(--i >= 0) 15.585 - pci_release_region(pdev, i); 15.586 - 15.587 - return -EBUSY; 15.588 -} 15.589 - 15.590 - 15.591 -/* 15.592 - * Registration of PCI drivers and handling of hot-pluggable devices. 15.593 - */ 15.594 - 15.595 -static LIST_HEAD(pci_drivers); 15.596 - 15.597 -/** 15.598 - * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure 15.599 - * @ids: array of PCI device id structures to search in 15.600 - * @dev: the PCI device structure to match against 15.601 - * 15.602 - * Used by a driver to check whether a PCI device present in the 15.603 - * system is in its list of supported devices.Returns the matching 15.604 - * pci_device_id structure or %NULL if there is no match. 15.605 - */ 15.606 -const struct pci_device_id * 15.607 -pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) 15.608 -{ 15.609 - while (ids->vendor || ids->subvendor || ids->class_mask) { 15.610 - if ((ids->vendor == PCI_ANY_ID || ids->vendor == dev->vendor) && 15.611 - (ids->device == PCI_ANY_ID || ids->device == dev->device) && 15.612 - (ids->subvendor == PCI_ANY_ID || ids->subvendor == dev->subsystem_vendor) && 15.613 - (ids->subdevice == PCI_ANY_ID || ids->subdevice == dev->subsystem_device) && 15.614 - !((ids->class ^ dev->class) & ids->class_mask)) 15.615 - return ids; 15.616 - ids++; 15.617 - } 15.618 - return NULL; 15.619 -} 15.620 - 15.621 -#if 0 /* NOT IN XEN */ 15.622 -static int pci_announce_device(struct pci_driver *drv, struct pci_dev *dev) 15.623 -int pci_register_driver(struct pci_driver *drv) 15.624 -void pci_unregister_driver(struct pci_driver *drv) 15.625 -#endif 15.626 - 15.627 -#ifdef CONFIG_HOTPLUG 15.628 - 15.629 -#ifndef FALSE 15.630 -#define FALSE (0) 15.631 -#define TRUE (!FALSE) 15.632 -#endif 15.633 - 15.634 -static void 15.635 -run_sbin_hotplug(struct pci_dev *pdev, int insert) 15.636 -{ 15.637 - int i; 15.638 - char *argv[3], *envp[8]; 15.639 - char id[20], sub_id[24], bus_id[24], class_id[20]; 15.640 - 15.641 - if (!hotplug_path[0]) 15.642 - return; 15.643 - 15.644 - sprintf(class_id, "PCI_CLASS=%04X", pdev->class); 15.645 - sprintf(id, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device); 15.646 - sprintf(sub_id, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor, pdev->subsystem_device); 15.647 - sprintf(bus_id, "PCI_SLOT_NAME=%s", pdev->slot_name); 15.648 - 15.649 - i = 0; 15.650 - argv[i++] = hotplug_path; 15.651 - argv[i++] = "pci"; 15.652 - argv[i] = 0; 15.653 - 15.654 - i = 0; 15.655 - /* minimal command environment */ 15.656 - envp[i++] = "HOME=/"; 15.657 - envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; 15.658 - 15.659 - /* other stuff we want to pass to /sbin/hotplug */ 15.660 - envp[i++] = class_id; 15.661 - envp[i++] = id; 15.662 - envp[i++] = sub_id; 15.663 - envp[i++] = bus_id; 15.664 - if (insert) 15.665 - envp[i++] = "ACTION=add"; 15.666 - else 15.667 - envp[i++] = "ACTION=remove"; 15.668 - envp[i] = 0; 15.669 - 15.670 - call_usermodehelper (argv [0], argv, envp); 15.671 -} 15.672 - 15.673 -/** 15.674 - * pci_announce_device_to_drivers - tell the drivers a new device has appeared 15.675 - * @dev: the device that has shown up 15.676 - * 15.677 - * Notifys the drivers that a new device has appeared, and also notifys 15.678 - * userspace through /sbin/hotplug. 15.679 - */ 15.680 -void 15.681 -pci_announce_device_to_drivers(struct pci_dev *dev) 15.682 -{ 15.683 - struct list_head *ln; 15.684 - 15.685 - for(ln=pci_drivers.next; ln != &pci_drivers; ln=ln->next) { 15.686 - struct pci_driver *drv = list_entry(ln, struct pci_driver, node); 15.687 - if (drv->remove && pci_announce_device(drv, dev)) 15.688 - break; 15.689 - } 15.690 - 15.691 - /* notify userspace of new hotplug device */ 15.692 - run_sbin_hotplug(dev, TRUE); 15.693 -} 15.694 - 15.695 -/** 15.696 - * pci_insert_device - insert a hotplug device 15.697 - * @dev: the device to insert 15.698 - * @bus: where to insert it 15.699 - * 15.700 - * Add a new device to the device lists and notify userspace (/sbin/hotplug). 15.701 - */ 15.702 -void 15.703 -pci_insert_device(struct pci_dev *dev, struct pci_bus *bus) 15.704 -{ 15.705 - list_add_tail(&dev->bus_list, &bus->devices); 15.706 - list_add_tail(&dev->global_list, &pci_devices); 15.707 -#ifdef CONFIG_PROC_FS 15.708 - pci_proc_attach_device(dev); 15.709 -#endif 15.710 - pci_announce_device_to_drivers(dev); 15.711 -} 15.712 - 15.713 -static void 15.714 -pci_free_resources(struct pci_dev *dev) 15.715 -{ 15.716 - int i; 15.717 - 15.718 - for (i = 0; i < PCI_NUM_RESOURCES; i++) { 15.719 - struct resource *res = dev->resource + i; 15.720 - if (res->parent) 15.721 - release_resource(res); 15.722 - } 15.723 -} 15.724 - 15.725 -/** 15.726 - * pci_remove_device - remove a hotplug device 15.727 - * @dev: the device to remove 15.728 - * 15.729 - * Delete the device structure from the device lists and 15.730 - * notify userspace (/sbin/hotplug). 15.731 - */ 15.732 -void 15.733 -pci_remove_device(struct pci_dev *dev) 15.734 -{ 15.735 - if (dev->driver) { 15.736 - if (dev->driver->remove) 15.737 - dev->driver->remove(dev); 15.738 - dev->driver = NULL; 15.739 - } 15.740 - list_del(&dev->bus_list); 15.741 - list_del(&dev->global_list); 15.742 - pci_free_resources(dev); 15.743 -#ifdef CONFIG_PROC_FS 15.744 - pci_proc_detach_device(dev); 15.745 -#endif 15.746 - 15.747 - /* notify userspace of hotplug device removal */ 15.748 - run_sbin_hotplug(dev, FALSE); 15.749 -} 15.750 - 15.751 -#endif 15.752 - 15.753 -static struct pci_driver pci_compat_driver = { 15.754 - name: "compat" 15.755 -}; 15.756 - 15.757 -/** 15.758 - * pci_dev_driver - get the pci_driver of a device 15.759 - * @dev: the device to query 15.760 - * 15.761 - * Returns the appropriate pci_driver structure or %NULL if there is no 15.762 - * registered driver for the device. 15.763 - */ 15.764 -struct pci_driver * 15.765 -pci_dev_driver(const struct pci_dev *dev) 15.766 -{ 15.767 - if (dev->driver) 15.768 - return dev->driver; 15.769 - else { 15.770 - int i; 15.771 - for(i=0; i<=PCI_ROM_RESOURCE; i++) 15.772 - if (dev->resource[i].flags & IORESOURCE_BUSY) 15.773 - return &pci_compat_driver; 15.774 - } 15.775 - return NULL; 15.776 -} 15.777 - 15.778 - 15.779 -/* 15.780 - * This interrupt-safe spinlock protects all accesses to PCI 15.781 - * configuration space. 15.782 - */ 15.783 - 15.784 -static spinlock_t pci_lock = SPIN_LOCK_UNLOCKED; 15.785 - 15.786 -/* 15.787 - * Wrappers for all PCI configuration access functions. They just check 15.788 - * alignment, do locking and call the low-level functions pointed to 15.789 - * by pci_dev->ops. 15.790 - */ 15.791 - 15.792 -#define PCI_byte_BAD 0 15.793 -#define PCI_word_BAD (pos & 1) 15.794 -#define PCI_dword_BAD (pos & 3) 15.795 - 15.796 -#define PCI_OP(rw,size,type) \ 15.797 -int pci_##rw##_config_##size (struct pci_dev *dev, int pos, type value) \ 15.798 -{ \ 15.799 - int res; \ 15.800 - unsigned long flags; \ 15.801 - if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER; \ 15.802 - spin_lock_irqsave(&pci_lock, flags); \ 15.803 - res = dev->bus->ops->rw##_##size(dev, pos, value); \ 15.804 - spin_unlock_irqrestore(&pci_lock, flags); \ 15.805 - return res; \ 15.806 -} 15.807 - 15.808 -PCI_OP(read, byte, u8 *) 15.809 -PCI_OP(read, word, u16 *) 15.810 -PCI_OP(read, dword, u32 *) 15.811 -PCI_OP(write, byte, u8) 15.812 -PCI_OP(write, word, u16) 15.813 -PCI_OP(write, dword, u32) 15.814 - 15.815 -/** 15.816 - * pci_set_master - enables bus-mastering for device dev 15.817 - * @dev: the PCI device to enable 15.818 - * 15.819 - * Enables bus-mastering on the device and calls pcibios_set_master() 15.820 - * to do the needed arch specific settings. 15.821 - */ 15.822 -void 15.823 -pci_set_master(struct pci_dev *dev) 15.824 -{ 15.825 - u16 cmd; 15.826 - 15.827 - pci_read_config_word(dev, PCI_COMMAND, &cmd); 15.828 - if (! (cmd & PCI_COMMAND_MASTER)) { 15.829 - DBG("PCI: Enabling bus mastering for device %s\n", dev->slot_name); 15.830 - cmd |= PCI_COMMAND_MASTER; 15.831 - pci_write_config_word(dev, PCI_COMMAND, cmd); 15.832 - } 15.833 - pcibios_set_master(dev); 15.834 -} 15.835 - 15.836 -#ifndef HAVE_ARCH_PCI_MWI 15.837 -/* This can be overridden by arch code. */ 15.838 -u8 pci_cache_line_size = L1_CACHE_BYTES >> 2; 15.839 - 15.840 -/** 15.841 - * pci_generic_prep_mwi - helper function for pci_set_mwi 15.842 - * @dev: the PCI device for which MWI is enabled 15.843 - * 15.844 - * Helper function for implementation the arch-specific pcibios_set_mwi 15.845 - * function. Originally copied from drivers/net/acenic.c. 15.846 - * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>. 15.847 - * 15.848 - * RETURNS: An appriopriate -ERRNO error value on eror, or zero for success. 15.849 - */ 15.850 -static int 15.851 -pci_generic_prep_mwi(struct pci_dev *dev) 15.852 -{ 15.853 - u8 cacheline_size; 15.854 - 15.855 - if (!pci_cache_line_size) 15.856 - return -EINVAL; /* The system doesn't support MWI. */ 15.857 - 15.858 - /* Validate current setting: the PCI_CACHE_LINE_SIZE must be 15.859 - equal to or multiple of the right value. */ 15.860 - pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size); 15.861 - if (cacheline_size >= pci_cache_line_size && 15.862 - (cacheline_size % pci_cache_line_size) == 0) 15.863 - return 0; 15.864 - 15.865 - /* Write the correct value. */ 15.866 - pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size); 15.867 - /* Read it back. */ 15.868 - pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size); 15.869 - if (cacheline_size == pci_cache_line_size) 15.870 - return 0; 15.871 - 15.872 - printk(KERN_WARNING "PCI: cache line size of %d is not supported " 15.873 - "by device %s\n", pci_cache_line_size << 2, dev->slot_name); 15.874 - 15.875 - return -EINVAL; 15.876 -} 15.877 -#endif /* !HAVE_ARCH_PCI_MWI */ 15.878 - 15.879 -/** 15.880 - * pci_set_mwi - enables memory-write-invalidate PCI transaction 15.881 - * @dev: the PCI device for which MWI is enabled 15.882 - * 15.883 - * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND, 15.884 - * and then calls @pcibios_set_mwi to do the needed arch specific 15.885 - * operations or a generic mwi-prep function. 15.886 - * 15.887 - * RETURNS: An appriopriate -ERRNO error value on eror, or zero for success. 15.888 - */ 15.889 -int 15.890 -pci_set_mwi(struct pci_dev *dev) 15.891 -{ 15.892 - int rc; 15.893 - u16 cmd; 15.894 - 15.895 -#ifdef HAVE_ARCH_PCI_MWI 15.896 - rc = pcibios_prep_mwi(dev); 15.897 -#else 15.898 - rc = pci_generic_prep_mwi(dev); 15.899 -#endif 15.900 - 15.901 - if (rc) 15.902 - return rc; 15.903 - 15.904 - pci_read_config_word(dev, PCI_COMMAND, &cmd); 15.905 - if (! (cmd & PCI_COMMAND_INVALIDATE)) { 15.906 - DBG("PCI: Enabling Mem-Wr-Inval for device %s\n", dev->slot_name); 15.907 - cmd |= PCI_COMMAND_INVALIDATE; 15.908 - pci_write_config_word(dev, PCI_COMMAND, cmd); 15.909 - } 15.910 - 15.911 - return 0; 15.912 -} 15.913 - 15.914 -/** 15.915 - * pci_clear_mwi - disables Memory-Write-Invalidate for device dev 15.916 - * @dev: the PCI device to disable 15.917 - * 15.918 - * Disables PCI Memory-Write-Invalidate transaction on the device 15.919 - */ 15.920 -void 15.921 -pci_clear_mwi(struct pci_dev *dev) 15.922 -{ 15.923 - u16 cmd; 15.924 - 15.925 - pci_read_config_word(dev, PCI_COMMAND, &cmd); 15.926 - if (cmd & PCI_COMMAND_INVALIDATE) { 15.927 - cmd &= ~PCI_COMMAND_INVALIDATE; 15.928 - pci_write_config_word(dev, PCI_COMMAND, cmd); 15.929 - } 15.930 -} 15.931 - 15.932 -#if 0 /* NOT IN XEN */ 15.933 -int pci_set_dma_mask(struct pci_dev *dev, u64 mask) 15.934 -int pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask) 15.935 -#endif 15.936 - 15.937 -/* 15.938 - * Translate the low bits of the PCI base 15.939 - * to the resource type 15.940 - */ 15.941 -static inline unsigned int pci_calc_resource_flags(unsigned int flags) 15.942 -{ 15.943 - if (flags & PCI_BASE_ADDRESS_SPACE_IO) 15.944 - return IORESOURCE_IO; 15.945 - 15.946 - if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH) 15.947 - return IORESOURCE_MEM | IORESOURCE_PREFETCH; 15.948 - 15.949 - return IORESOURCE_MEM; 15.950 -} 15.951 - 15.952 -/* 15.953 - * Find the extent of a PCI decode, do sanity checks. 15.954 - */ 15.955 -static u32 pci_size(u32 base, u32 maxbase, unsigned long mask) 15.956 -{ 15.957 - u32 size = mask & maxbase; /* Find the significant bits */ 15.958 - if (!size) 15.959 - return 0; 15.960 - size = size & ~(size-1); /* Get the lowest of them to find the decode size */ 15.961 - size -= 1; /* extent = size - 1 */ 15.962 - if (base == maxbase && ((base | size) & mask) != mask) 15.963 - return 0; /* base == maxbase can be valid only 15.964 - if the BAR has been already 15.965 - programmed with all 1s */ 15.966 - return size; 15.967 -} 15.968 - 15.969 -static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom) 15.970 -{ 15.971 - unsigned int pos, reg, next; 15.972 - u32 l, sz; 15.973 - struct resource *res; 15.974 - 15.975 - for(pos=0; pos<howmany; pos = next) { 15.976 - next = pos+1; 15.977 - res = &dev->resource[pos]; 15.978 - res->name = dev->name; 15.979 - reg = PCI_BASE_ADDRESS_0 + (pos << 2); 15.980 - pci_read_config_dword(dev, reg, &l); 15.981 - pci_write_config_dword(dev, reg, ~0); 15.982 - pci_read_config_dword(dev, reg, &sz); 15.983 - pci_write_config_dword(dev, reg, l); 15.984 - if (!sz || sz == 0xffffffff) 15.985 - continue; 15.986 - if (l == 0xffffffff) 15.987 - l = 0; 15.988 - if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) { 15.989 - sz = pci_size(l, sz, PCI_BASE_ADDRESS_MEM_MASK); 15.990 - if (!sz) 15.991 - continue; 15.992 - res->start = l & PCI_BASE_ADDRESS_MEM_MASK; 15.993 - res->flags |= l & ~PCI_BASE_ADDRESS_MEM_MASK; 15.994 - } else { 15.995 - sz = pci_size(l, sz, PCI_BASE_ADDRESS_IO_MASK & 0xffff); 15.996 - if (!sz) 15.997 - continue; 15.998 - res->start = l & PCI_BASE_ADDRESS_IO_MASK; 15.999 - res->flags |= l & ~PCI_BASE_ADDRESS_IO_MASK; 15.1000 - } 15.1001 - res->end = res->start + (unsigned long) sz; 15.1002 - res->flags |= pci_calc_resource_flags(l); 15.1003 - if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK)) 15.1004 - == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) { 15.1005 - pci_read_config_dword(dev, reg+4, &l); 15.1006 - next++; 15.1007 -#if BITS_PER_LONG == 64 15.1008 - res->start |= ((unsigned long) l) << 32; 15.1009 - res->end = res->start + sz; 15.1010 - pci_write_config_dword(dev, reg+4, ~0); 15.1011 - pci_read_config_dword(dev, reg+4, &sz); 15.1012 - pci_write_config_dword(dev, reg+4, l); 15.1013 - if (~sz) 15.1014 - res->end = res->start + 0xffffffff + 15.1015 - (((unsigned long) ~sz) << 32); 15.1016 -#else 15.1017 - if (l) { 15.1018 - printk(KERN_ERR "PCI: Unable to handle 64-bit address for device %s\n", dev->slot_name); 15.1019 - res->start = 0; 15.1020 - res->flags = 0; 15.1021 - continue; 15.1022 - } 15.1023 -#endif 15.1024 - } 15.1025 - } 15.1026 - if (rom) { 15.1027 - dev->rom_base_reg = rom; 15.1028 - res = &dev->resource[PCI_ROM_RESOURCE]; 15.1029 - res->name = dev->name; 15.1030 - pci_read_config_dword(dev, rom, &l); 15.1031 - pci_write_config_dword(dev, rom, ~PCI_ROM_ADDRESS_ENABLE); 15.1032 - pci_read_config_dword(dev, rom, &sz); 15.1033 - pci_write_config_dword(dev, rom, l); 15.1034 - if (l == 0xffffffff) 15.1035 - l = 0; 15.1036 - if (sz && sz != 0xffffffff) { 15.1037 - sz = pci_size(l, sz, PCI_ROM_ADDRESS_MASK); 15.1038 - if (!sz) 15.1039 - return; 15.1040 - res->flags = (l & PCI_ROM_ADDRESS_ENABLE) | 15.1041 - IORESOURCE_MEM | IORESOURCE_PREFETCH | IORESOURCE_READONLY | IORESOURCE_CACHEABLE; 15.1042 - res->start = l & PCI_ROM_ADDRESS_MASK; 15.1043 - res->end = res->start + (unsigned long) sz; 15.1044 - } 15.1045 - } 15.1046 -} 15.1047 - 15.1048 -void __devinit pci_read_bridge_bases(struct pci_bus *child) 15.1049 -{ 15.1050 - struct pci_dev *dev = child->self; 15.1051 - u8 io_base_lo, io_limit_lo; 15.1052 - u16 mem_base_lo, mem_limit_lo; 15.1053 - unsigned long base, limit; 15.1054 - struct resource *res; 15.1055 - int i; 15.1056 - 15.1057 - if (!dev) /* It's a host bus, nothing to read */ 15.1058 - return; 15.1059 - 15.1060 - if (dev->transparent) { 15.1061 - printk("Transparent bridge - %s\n", dev->name); 15.1062 - for(i = 0; i < 4; i++) 15.1063 - child->resource[i] = child->parent->resource[i]; 15.1064 - return; 15.1065 - } 15.1066 - 15.1067 - for(i=0; i<3; i++) 15.1068 - child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i]; 15.1069 - 15.1070 - res = child->resource[0]; 15.1071 - pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo); 15.1072 - pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo); 15.1073 - base = (io_base_lo & PCI_IO_RANGE_MASK) << 8; 15.1074 - limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8; 15.1075 - 15.1076 - if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) { 15.1077 - u16 io_base_hi, io_limit_hi; 15.1078 - pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi); 15.1079 - pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi); 15.1080 - base |= (io_base_hi << 16); 15.1081 - limit |= (io_limit_hi << 16); 15.1082 - } 15.1083 - 15.1084 - if (base && base <= limit) { 15.1085 - res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO; 15.1086 - res->start = base; 15.1087 - res->end = limit + 0xfff; 15.1088 - } 15.1089 - 15.1090 - res = child->resource[1]; 15.1091 - pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo); 15.1092 - pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo); 15.1093 - base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16; 15.1094 - limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16; 15.1095 - if (base && base <= limit) { 15.1096 - res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM; 15.1097 - res->start = base; 15.1098 - res->end = limit + 0xfffff; 15.1099 - } 15.1100 - 15.1101 - res = child->resource[2]; 15.1102 - pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo); 15.1103 - pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo); 15.1104 - base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16; 15.1105 - limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16; 15.1106 - 15.1107 - if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) { 15.1108 - u32 mem_base_hi, mem_limit_hi; 15.1109 - pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi); 15.1110 - pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi); 15.1111 -#if BITS_PER_LONG == 64 15.1112 - base |= ((long) mem_base_hi) << 32; 15.1113 - limit |= ((long) mem_limit_hi) << 32; 15.1114 -#else 15.1115 - if (mem_base_hi || mem_limit_hi) { 15.1116 - printk(KERN_ERR "PCI: Unable to handle 64-bit address space for %s\n", child->name); 15.1117 - return; 15.1118 - } 15.1119 -#endif 15.1120 - } 15.1121 - if (base && base <= limit) { 15.1122 - res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; 15.1123 - res->start = base; 15.1124 - res->end = limit + 0xfffff; 15.1125 - } 15.1126 -} 15.1127 - 15.1128 -static struct pci_bus * __devinit pci_alloc_bus(void) 15.1129 -{ 15.1130 - struct pci_bus *b; 15.1131 - 15.1132 - b = xmalloc(struct pci_bus); 15.1133 - if (b) { 15.1134 - memset(b, 0, sizeof(*b)); 15.1135 - INIT_LIST_HEAD(&b->children); 15.1136 - INIT_LIST_HEAD(&b->devices); 15.1137 - } 15.1138 - return b; 15.1139 -} 15.1140 - 15.1141 -struct pci_bus * __devinit pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr) 15.1142 -{ 15.1143 - struct pci_bus *child; 15.1144 - int i; 15.1145 - 15.1146 - /* 15.1147 - * Allocate a new bus, and inherit stuff from the parent.. 15.1148 - */ 15.1149 - child = pci_alloc_bus(); 15.1150 - 15.1151 - list_add_tail(&child->node, &parent->children); 15.1152 - child->self = dev; 15.1153 - dev->subordinate = child; 15.1154 - child->parent = parent; 15.1155 - child->ops = parent->ops; 15.1156 - child->sysdata = parent->sysdata; 15.1157 - 15.1158 - /* 15.1159 - * Set up the primary, secondary and subordinate 15.1160 - * bus numbers. 15.1161 - */ 15.1162 - child->number = child->secondary = busnr; 15.1163 - child->primary = parent->secondary; 15.1164 - child->subordinate = 0xff; 15.1165 - 15.1166 - /* Set up default resource pointers and names.. */ 15.1167 - for (i = 0; i < 4; i++) { 15.1168 - child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i]; 15.1169 - child->resource[i]->name = child->name; 15.1170 - } 15.1171 - 15.1172 - return child; 15.1173 -} 15.1174 - 15.1175 -/* 15.1176 - * If it's a bridge, configure it and scan the bus behind it. 15.1177 - * For CardBus bridges, we don't scan behind as the devices will 15.1178 - * be handled by the bridge driver itself. 15.1179 - * 15.1180 - * We need to process bridges in two passes -- first we scan those 15.1181 - * already configured by the BIOS and after we are done with all of 15.1182 - * them, we proceed to assigning numbers to the remaining buses in 15.1183 - * order to avoid overlaps between old and new bus numbers. 15.1184 - */ 15.1185 -static int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass) 15.1186 -{ 15.1187 - unsigned int buses; 15.1188 - unsigned short cr; 15.1189 - struct pci_bus *child; 15.1190 - int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS); 15.1191 - 15.1192 - pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses); 15.1193 - DBG("Scanning behind PCI bridge %s, config %06x, pass %d\n", dev->slot_name, buses & 0xffffff, pass); 15.1194 - if ((buses & 0xffff00) && !pcibios_assign_all_busses()) { 15.1195 - /* 15.1196 - * Bus already configured by firmware, process it in the first 15.1197 - * pass and just note the configuration. 15.1198 - */ 15.1199 - if (pass) 15.1200 - return max; 15.1201 - child = pci_add_new_bus(bus, dev, 0); 15.1202 - child->primary = buses & 0xFF; 15.1203 - child->secondary = (buses >> 8) & 0xFF; 15.1204 - child->subordinate = (buses >> 16) & 0xFF; 15.1205 - child->number = child->secondary; 15.1206 - if (!is_cardbus) { 15.1207 - unsigned int cmax = pci_do_scan_bus(child); 15.1208 - if (cmax > max) max = cmax; 15.1209 - } else { 15.1210 - unsigned int cmax = child->subordinate; 15.1211 - if (cmax > max) max = cmax; 15.1212 - } 15.1213 - } else { 15.1214 - /* 15.1215 - * We need to assign a number to this bus which we always 15.1216 - * do in the second pass. We also keep all address decoders 15.1217 - * on the bridge disabled during scanning. FIXME: Why? 15.1218 - */ 15.1219 - if (!pass) 15.1220 - return max; 15.1221 - pci_read_config_word(dev, PCI_COMMAND, &cr); 15.1222 - pci_write_config_word(dev, PCI_COMMAND, 0x0000); 15.1223 - pci_write_config_word(dev, PCI_STATUS, 0xffff); 15.1224 - 15.1225 - child = pci_add_new_bus(bus, dev, ++max); 15.1226 - buses = (buses & 0xff000000) 15.1227 - | ((unsigned int)(child->primary) << 0) 15.1228 - | ((unsigned int)(child->secondary) << 8) 15.1229 - | ((unsigned int)(child->subordinate) << 16); 15.1230 - /* 15.1231 - * We need to blast all three values with a single write. 15.1232 - */ 15.1233 - pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses); 15.1234 - if (!is_cardbus) { 15.1235 - /* Now we can scan all subordinate buses... */ 15.1236 - max = pci_do_scan_bus(child); 15.1237 - } else { 15.1238 - /* 15.1239 - * For CardBus bridges, we leave 4 bus numbers 15.1240 - * as cards with a PCI-to-PCI bridge can be 15.1241 - * inserted later. 15.1242 - */ 15.1243 - max += 3; 15.1244 - } 15.1245 - /* 15.1246 - * Set the subordinate bus number to its real value. 15.1247 - */ 15.1248 - child->subordinate = max; 15.1249 - pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max); 15.1250 - pci_write_config_word(dev, PCI_COMMAND, cr); 15.1251 - } 15.1252 - sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number); 15.1253 - return max; 15.1254 -} 15.1255 - 15.1256 -/* 15.1257 - * Read interrupt line and base address registers. 15.1258 - * The architecture-dependent code can tweak these, of course. 15.1259 - */ 15.1260 -static void pci_read_irq(struct pci_dev *dev) 15.1261 -{ 15.1262 - unsigned char irq; 15.1263 - 15.1264 - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq); 15.1265 - if (irq) 15.1266 - pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); 15.1267 - dev->irq = irq; 15.1268 -} 15.1269 - 15.1270 -/** 15.1271 - * pci_setup_device - fill in class and map information of a device 15.1272 - * @dev: the device structure to fill 15.1273 - * 15.1274 - * Initialize the device structure with information about the device's 15.1275 - * vendor,class,memory and IO-space addresses,IRQ lines etc. 15.1276 - * Called at initialisation of the PCI subsystem and by CardBus services. 15.1277 - * Returns 0 on success and -1 if unknown type of device (not normal, bridge 15.1278 - * or CardBus). 15.1279 - */ 15.1280 -int pci_setup_device(struct pci_dev * dev) 15.1281 -{ 15.1282 - u32 class; 15.1283 - 15.1284 - sprintf(dev->slot_name, "%02x:%02x.%d", dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); 15.1285 - sprintf(dev->name, "PCI device %04x:%04x", dev->vendor, dev->device); 15.1286 - 15.1287 - pci_read_config_dword(dev, PCI_CLASS_REVISION, &class); 15.1288 - class >>= 8; /* upper 3 bytes */ 15.1289 - dev->class = class; 15.1290 - class >>= 8; 15.1291 - 15.1292 - DBG("Found %02x:%02x [%04x/%04x] %06x %02x\n", dev->bus->number, dev->devfn, dev->vendor, dev->device, class, dev->hdr_type); 15.1293 - 15.1294 - /* "Unknown power state" */ 15.1295 - dev->current_state = 4; 15.1296 - 15.1297 - switch (dev->hdr_type) { /* header type */ 15.1298 - case PCI_HEADER_TYPE_NORMAL: /* standard header */ 15.1299 - if (class == PCI_CLASS_BRIDGE_PCI) 15.1300 - goto bad; 15.1301 - pci_read_irq(dev); 15.1302 - pci_read_bases(dev, 6, PCI_ROM_ADDRESS); 15.1303 - pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor); 15.1304 - pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device); 15.1305 - break; 15.1306 - 15.1307 - case PCI_HEADER_TYPE_BRIDGE: /* bridge header */ 15.1308 - if (class != PCI_CLASS_BRIDGE_PCI) 15.1309 - goto bad; 15.1310 - /* The PCI-to-PCI bridge spec requires that subtractive 15.1311 - decoding (i.e. transparent) bridge must have programming 15.1312 - interface code of 0x01. */ 15.1313 - dev->transparent = ((dev->class & 0xff) == 1); 15.1314 - pci_read_bases(dev, 2, PCI_ROM_ADDRESS1); 15.1315 - break; 15.1316 - 15.1317 - case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */ 15.1318 - if (class != PCI_CLASS_BRIDGE_CARDBUS) 15.1319 - goto bad; 15.1320 - pci_read_irq(dev); 15.1321 - pci_read_bases(dev, 1, 0); 15.1322 - pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor); 15.1323 - pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device); 15.1324 - break; 15.1325 - 15.1326 - default: /* unknown header */ 15.1327 - printk(KERN_ERR "PCI: device %s has unknown header type %02x, ignoring.\n", 15.1328 - dev->slot_name, dev->hdr_type); 15.1329 - return -1; 15.1330 - 15.1331 - bad: 15.1332 - printk(KERN_ERR "PCI: %s: class %x doesn't match header type %02x. Ignoring class.\n", 15.1333 - dev->slot_name, class, dev->hdr_type); 15.1334 - dev->class = PCI_CLASS_NOT_DEFINED; 15.1335 - } 15.1336 - 15.1337 - /* We found a fine healthy device, go go go... */ 15.1338 - return 0; 15.1339 -} 15.1340 - 15.1341 -/* 15.1342 - * Read the config data for a PCI device, sanity-check it 15.1343 - * and fill in the dev structure... 15.1344 - */ 15.1345 -struct pci_dev * __devinit pci_scan_device(struct pci_dev *temp) 15.1346 -{ 15.1347 - struct pci_dev *dev; 15.1348 - u32 l; 15.1349 - 15.1350 - if (pci_read_config_dword(temp, PCI_VENDOR_ID, &l)) 15.1351 - return NULL; 15.1352 - 15.1353 - /* some broken boards return 0 or ~0 if a slot is empty: */ 15.1354 - if (l == 0xffffffff || l == 0x00000000 || l == 0x0000ffff || l == 0xffff0000) 15.1355 - return NULL; 15.1356 - 15.1357 - dev = xmalloc(struct pci_dev); 15.1358 - if (!dev) 15.1359 - return NULL; 15.1360 - 15.1361 - memcpy(dev, temp, sizeof(*dev)); 15.1362 - dev->vendor = l & 0xffff; 15.1363 - dev->device = (l >> 16) & 0xffff; 15.1364 - 15.1365 - /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer) 15.1366 - set this higher, assuming the system even supports it. */ 15.1367 - dev->dma_mask = 0xffffffff; 15.1368 - if (pci_setup_device(dev) < 0) { 15.1369 - xfree(dev); 15.1370 - dev = NULL; 15.1371 - } 15.1372 - return dev; 15.1373 -} 15.1374 - 15.1375 -struct pci_dev * __devinit pci_scan_slot(struct pci_dev *temp) 15.1376 -{ 15.1377 - struct pci_bus *bus = temp->bus; 15.1378 - struct pci_dev *dev; 15.1379 - struct pci_dev *first_dev = NULL; 15.1380 - int func = 0; 15.1381 - int is_multi = 0; 15.1382 - u8 hdr_type; 15.1383 - 15.1384 - for (func = 0; func < 8; func++, temp->devfn++) { 15.1385 - if (pci_read_config_byte(temp, PCI_HEADER_TYPE, &hdr_type)) 15.1386 - continue; 15.1387 - temp->hdr_type = hdr_type & 0x7f; 15.1388 - 15.1389 - dev = pci_scan_device(temp); 15.1390 - if (!pcibios_scan_all_fns(0,0) && func == 0) { 15.1391 - if (!dev) 15.1392 - break; 15.1393 - } else { 15.1394 - if (!dev) 15.1395 - continue; 15.1396 - is_multi = 1; 15.1397 - } 15.1398 - 15.1399 - pci_name_device(dev); 15.1400 - if (!first_dev) { 15.1401 - is_multi = hdr_type & 0x80; 15.1402 - first_dev = dev; 15.1403 - } 15.1404 - 15.1405 - /* 15.1406 - * Link the device to both the global PCI device chain and 15.1407 - * the per-bus list of devices. 15.1408 - */ 15.1409 - list_add_tail(&dev->global_list, &pci_devices); 15.1410 - list_add_tail(&dev->bus_list, &bus->devices); 15.1411 - 15.1412 - /* Fix up broken headers */ 15.1413 - pci_fixup_device(PCI_FIXUP_HEADER, dev); 15.1414 - 15.1415 - /* 15.1416 - * If this is a single function device 15.1417 - * don't scan past the first function. 15.1418 - */ 15.1419 - if (!is_multi) 15.1420 - break; 15.1421 - 15.1422 - } 15.1423 - return first_dev; 15.1424 -} 15.1425 - 15.1426 -unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus) 15.1427 -{ 15.1428 - unsigned int devfn, max, pass; 15.1429 - struct list_head *ln; 15.1430 - /* XEN MODIFICATION: Allocate dev0 on heap to avoid stack overflow. */ 15.1431 - struct pci_dev *dev, *dev0; 15.1432 - 15.1433 - DBG("Scanning bus %02x\n", bus->number); 15.1434 - max = bus->secondary; 15.1435 - 15.1436 - /* Create a device template */ 15.1437 - dev0 = xmalloc(struct pci_dev); 15.1438 - if(!dev0) { 15.1439 - panic("Out of memory scanning PCI bus!\n"); 15.1440 - } 15.1441 - memset(dev0, 0, sizeof(struct pci_dev)); 15.1442 - dev0->bus = bus; 15.1443 - dev0->sysdata = bus->sysdata; 15.1444 - 15.1445 - /* Go find them, Rover! */ 15.1446 - for (devfn = 0; devfn < 0x100; devfn += 8) { 15.1447 - dev0->devfn = devfn; 15.1448 - pci_scan_slot(dev0); 15.1449 - } 15.1450 - xfree(dev0); 15.1451 - 15.1452 - /* 15.1453 - * After performing arch-dependent fixup of the bus, look behind 15.1454 - * all PCI-to-PCI bridges on this bus. 15.1455 - */ 15.1456 - DBG("Fixups for bus %02x\n", bus->number); 15.1457 - pcibios_fixup_bus(bus); 15.1458 - for (pass=0; pass < 2; pass++) 15.1459 - for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) { 15.1460 - dev = pci_dev_b(ln); 15.1461 - if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) 15.1462 - max = pci_scan_bridge(bus, dev, max, pass); 15.1463 - } 15.1464 - 15.1465 - /* 15.1466 - * We've scanned the bus and so we know all about what's on 15.1467 - * the other side of any bridges that may be on this bus plus 15.1468 - * any devices. 15.1469 - * 15.1470 - * Return how far we've got finding sub-buses. 15.1471 - */ 15.1472 - DBG("Bus scan for %02x returning with max=%02x\n", bus->number, max); 15.1473 - return max; 15.1474 -} 15.1475 - 15.1476 -int __devinit pci_bus_exists(const struct list_head *list, int nr) 15.1477 -{ 15.1478 - const struct list_head *l; 15.1479 - 15.1480 - for(l=list->next; l != list; l = l->next) { 15.1481 - const struct pci_bus *b = pci_bus_b(l); 15.1482 - if (b->number == nr || pci_bus_exists(&b->children, nr)) 15.1483 - return 1; 15.1484 - } 15.1485 - return 0; 15.1486 -} 15.1487 - 15.1488 -struct pci_bus * __devinit pci_alloc_primary_bus(int bus) 15.1489 -{ 15.1490 - struct pci_bus *b; 15.1491 - 15.1492 - if (pci_bus_exists(&pci_root_buses, bus)) { 15.1493 - /* If we already got to this bus through a different bridge, ignore it */ 15.1494 - DBG("PCI: Bus %02x already known\n", bus); 15.1495 - return NULL; 15.1496 - } 15.1497 - 15.1498 - b = pci_alloc_bus(); 15.1499 - list_add_tail(&b->node, &pci_root_buses); 15.1500 - 15.1501 - b->number = b->secondary = bus; 15.1502 - b->resource[0] = &ioport_resource; 15.1503 - b->resource[1] = &iomem_resource; 15.1504 - return b; 15.1505 -} 15.1506 - 15.1507 -struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata) 15.1508 -{ 15.1509 - struct pci_bus *b = pci_alloc_primary_bus(bus); 15.1510 - if (b) { 15.1511 - b->sysdata = sysdata; 15.1512 - b->ops = ops; 15.1513 - b->subordinate = pci_do_scan_bus(b); 15.1514 - } 15.1515 - return b; 15.1516 -} 15.1517 - 15.1518 -#ifdef CONFIG_PM 15.1519 - 15.1520 -/* 15.1521 - * PCI Power management.. 15.1522 - * 15.1523 - * This needs to be done centralized, so that we power manage PCI 15.1524 - * devices in the right order: we should not shut down PCI bridges 15.1525 - * before we've shut down the devices behind them, and we should 15.1526 - * not wake up devices before we've woken up the bridge to the 15.1527 - * device.. Eh? 15.1528 - * 15.1529 - * We do not touch devices that don't have a driver that exports 15.1530 - * a suspend/resume function. That is just too dangerous. If the default 15.1531 - * PCI suspend/resume functions work for a device, the driver can 15.1532 - * easily implement them (ie just have a suspend function that calls 15.1533 - * the pci_set_power_state() function). 15.1534 - */ 15.1535 - 15.1536 -static int pci_pm_save_state_device(struct pci_dev *dev, u32 state) 15.1537 -{ 15.1538 - int error = 0; 15.1539 - if (dev) { 15.1540 - struct pci_driver *driver = dev->driver; 15.1541 - if (driver && driver->save_state) 15.1542 - error = driver->save_state(dev,state); 15.1543 - } 15.1544 - return error; 15.1545 -} 15.1546 - 15.1547 -static int pci_pm_suspend_device(struct pci_dev *dev, u32 state) 15.1548 -{ 15.1549 - int error = 0; 15.1550 - if (dev) { 15.1551 - struct pci_driver *driver = dev->driver; 15.1552 - if (driver && driver->suspend) 15.1553 - error = driver->suspend(dev,state); 15.1554 - } 15.1555 - return error; 15.1556 -} 15.1557 - 15.1558 -static int pci_pm_resume_device(struct pci_dev *dev) 15.1559 -{ 15.1560 - int error = 0; 15.1561 - if (dev) { 15.1562 - struct pci_driver *driver = dev->driver; 15.1563 - if (driver && driver->resume) 15.1564 - error = driver->resume(dev); 15.1565 - } 15.1566 - return error; 15.1567 -} 15.1568 - 15.1569 -static int pci_pm_save_state_bus(struct pci_bus *bus, u32 state) 15.1570 -{ 15.1571 - struct pci_bus *i; 15.1572 - int error = 0; 15.1573 - 15.1574 - list_for_each_entry(i, &bus->children, node) { 15.1575 - error = pci_pm_save_state_bus(i, state); 15.1576 - if (error) return error; 15.1577 - } 15.1578 - list_for_each_entry(i, &bus->devices, node) { 15.1579 - error = pci_pm_save_state_device(i, state); 15.1580 - if (error) return error; 15.1581 - } 15.1582 - return 0; 15.1583 -} 15.1584 - 15.1585 -static int pci_pm_suspend_bus(struct pci_bus *bus, u32 state) 15.1586 -{ 15.1587 - struct pci_bus *i; 15.1588 - 15.1589 - /* Walk the bus children list */ 15.1590 - list_for_each_entry(i, &bus->children, node) 15.1591 - pci_pm_suspend_bus(i, state); 15.1592 - 15.1593 - /* Walk the device children list */ 15.1594 - list_for_each_entry(i, &bus->devices, node) 15.1595 - pci_pm_suspend_device(i, state); 15.1596 - return 0; 15.1597 -} 15.1598 - 15.1599 -static int pci_pm_resume_bus(struct pci_bus *bus) 15.1600 -{ 15.1601 - struct pci_bus *i; 15.1602 - 15.1603 - /* Walk the device children list */ 15.1604 - list_for_each_entry(i, &bus->devices, node) 15.1605 - pci_pm_resume_device(i); 15.1606 - 15.1607 - /* And then walk the bus children */ 15.1608 - list_for_each_entry(i, &bus->children, node) 15.1609 - pci_pm_resume_bus(i); 15.1610 - return 0; 15.1611 -} 15.1612 - 15.1613 -static int pci_pm_save_state(u32 state) 15.1614 -{ 15.1615 - struct pci_bus *bus; 15.1616 - int error = 0; 15.1617 - 15.1618 - list_for_each_entry(bus, &pci_root_buses, node) { 15.1619 - error = pci_pm_save_state_bus(bus,state); 15.1620 - if (!error) 15.1621 - error = pci_pm_save_state_device(bus->self,state); 15.1622 - } 15.1623 - return error; 15.1624 -} 15.1625 - 15.1626 -static int pci_pm_suspend(u32 state) 15.1627 -{ 15.1628 - struct pci_bus *bus; 15.1629 - 15.1630 - list_for_each_entry(bus, &pci_root_buses, node) { 15.1631 - pci_pm_suspend_bus(bus,state); 15.1632 - pci_pm_suspend_device(bus->self,state); 15.1633 - } 15.1634 - return 0; 15.1635 -} 15.1636 - 15.1637 -int pci_pm_resume(void) 15.1638 -{ 15.1639 - struct pci_bus *bus; 15.1640 - 15.1641 - list_for_each_entry(bus, &pci_root_buses, node) { 15.1642 - pci_pm_resume_device(bus->self); 15.1643 - pci_pm_resume_bus(bus); 15.1644 - } 15.1645 - return 0; 15.1646 -} 15.1647 - 15.1648 -static int 15.1649 -pci_pm_callback(struct pm_dev *pm_device, pm_request_t rqst, void *data) 15.1650 -{ 15.1651 - int error = 0; 15.1652 - 15.1653 - switch (rqst) { 15.1654 - case PM_SAVE_STATE: 15.1655 - error = pci_pm_save_state((unsigned long)data); 15.1656 - break; 15.1657 - case PM_SUSPEND: 15.1658 - error = pci_pm_suspend((unsigned long)data); 15.1659 - break; 15.1660 - case PM_RESUME: 15.1661 - error = pci_pm_resume(); 15.1662 - break; 15.1663 - default: break; 15.1664 - } 15.1665 - return error; 15.1666 -} 15.1667 - 15.1668 -#endif 15.1669 - 15.1670 -/* NB. Xen doesn't include the pool allocator. */ 15.1671 - 15.1672 -void __devinit pci_init(void) 15.1673 -{ 15.1674 - struct pci_dev *dev; 15.1675 - 15.1676 - pcibios_init(); 15.1677 - 15.1678 - pci_for_each_dev(dev) { 15.1679 - pci_fixup_device(PCI_FIXUP_FINAL, dev); 15.1680 - } 15.1681 - 15.1682 -#ifdef CONFIG_PM 15.1683 - pm_register(PM_PCI_DEV, 0, pci_pm_callback); 15.1684 -#endif 15.1685 -} 15.1686 - 15.1687 -static int __devinit pci_setup(char *str) 15.1688 -{ 15.1689 - while (str) { 15.1690 - char *k = strchr(str, ','); 15.1691 - if (k) 15.1692 - *k++ = 0; 15.1693 - if (*str && (str = pcibios_setup(str)) && *str) { 15.1694 - /* PCI layer options should be handled here */ 15.1695 - printk(KERN_ERR "PCI: Unknown option `%s'\n", str); 15.1696 - } 15.1697 - str = k; 15.1698 - } 15.1699 - return 1; 15.1700 -} 15.1701 - 15.1702 -__setup("pci=", pci_setup); 15.1703 - 15.1704 -EXPORT_SYMBOL(pci_read_config_byte); 15.1705 -EXPORT_SYMBOL(pci_read_config_word); 15.1706 -EXPORT_SYMBOL(pci_read_config_dword); 15.1707 -EXPORT_SYMBOL(pci_write_config_byte); 15.1708 -EXPORT_SYMBOL(pci_write_config_word); 15.1709 -EXPORT_SYMBOL(pci_write_config_dword); 15.1710 -EXPORT_SYMBOL(pci_devices); 15.1711 -EXPORT_SYMBOL(pci_root_buses); 15.1712 -EXPORT_SYMBOL(pci_enable_device_bars); 15.1713 -EXPORT_SYMBOL(pci_enable_device); 15.1714 -EXPORT_SYMBOL(pci_disable_device); 15.1715 -EXPORT_SYMBOL(pci_find_capability); 15.1716 -EXPORT_SYMBOL(pci_release_regions); 15.1717 -EXPORT_SYMBOL(pci_request_regions); 15.1718 -EXPORT_SYMBOL(pci_release_region); 15.1719 -EXPORT_SYMBOL(pci_request_region); 15.1720 -EXPORT_SYMBOL(pci_find_class); 15.1721 -EXPORT_SYMBOL(pci_find_device); 15.1722 -EXPORT_SYMBOL(pci_find_slot); 15.1723 -EXPORT_SYMBOL(pci_find_subsys); 15.1724 -EXPORT_SYMBOL(pci_set_master); 15.1725 -EXPORT_SYMBOL(pci_set_mwi); 15.1726 -EXPORT_SYMBOL(pci_clear_mwi); 15.1727 -EXPORT_SYMBOL(pci_set_dma_mask); 15.1728 -EXPORT_SYMBOL(pci_dac_set_dma_mask); 15.1729 -EXPORT_SYMBOL(pci_assign_resource); 15.1730 -EXPORT_SYMBOL(pci_register_driver); 15.1731 -EXPORT_SYMBOL(pci_unregister_driver); 15.1732 -EXPORT_SYMBOL(pci_dev_driver); 15.1733 -EXPORT_SYMBOL(pci_match_device); 15.1734 -EXPORT_SYMBOL(pci_find_parent_resource); 15.1735 - 15.1736 -#ifdef CONFIG_HOTPLUG 15.1737 -EXPORT_SYMBOL(pci_setup_device); 15.1738 -EXPORT_SYMBOL(pci_insert_device); 15.1739 -EXPORT_SYMBOL(pci_remove_device); 15.1740 -EXPORT_SYMBOL(pci_announce_device_to_drivers); 15.1741 -EXPORT_SYMBOL(pci_add_new_bus); 15.1742 -EXPORT_SYMBOL(pci_do_scan_bus); 15.1743 -EXPORT_SYMBOL(pci_scan_slot); 15.1744 -EXPORT_SYMBOL(pci_scan_bus); 15.1745 -EXPORT_SYMBOL(pci_scan_device); 15.1746 -EXPORT_SYMBOL(pci_read_bridge_bases); 15.1747 -#ifdef CONFIG_PROC_FS 15.1748 -EXPORT_SYMBOL(pci_proc_attach_device); 15.1749 -EXPORT_SYMBOL(pci_proc_detach_device); 15.1750 -EXPORT_SYMBOL(pci_proc_attach_bus); 15.1751 -EXPORT_SYMBOL(pci_proc_detach_bus); 15.1752 -EXPORT_SYMBOL(proc_bus_pci_dir); 15.1753 -#endif 15.1754 -#endif 15.1755 - 15.1756 -EXPORT_SYMBOL(pci_set_power_state); 15.1757 -EXPORT_SYMBOL(pci_save_state); 15.1758 -EXPORT_SYMBOL(pci_restore_state); 15.1759 -EXPORT_SYMBOL(pci_enable_wake); 15.1760 - 15.1761 -/* Obsolete functions */ 15.1762 - 15.1763 -EXPORT_SYMBOL(pcibios_present); 15.1764 -EXPORT_SYMBOL(pcibios_read_config_byte); 15.1765 -EXPORT_SYMBOL(pcibios_read_config_word); 15.1766 -EXPORT_SYMBOL(pcibios_read_config_dword); 15.1767 -EXPORT_SYMBOL(pcibios_write_config_byte); 15.1768 -EXPORT_SYMBOL(pcibios_write_config_word); 15.1769 -EXPORT_SYMBOL(pcibios_write_config_dword); 15.1770 -EXPORT_SYMBOL(pcibios_find_class); 15.1771 -EXPORT_SYMBOL(pcibios_find_device); 15.1772 - 15.1773 -/* Quirk info */ 15.1774 - 15.1775 -EXPORT_SYMBOL(isa_dma_bridge_buggy); 15.1776 -EXPORT_SYMBOL(pci_pci_problems);
16.1 --- a/xen/drivers/pci/pci.ids Tue May 03 17:44:12 2005 +0000 16.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 16.3 @@ -1,7514 +0,0 @@ 16.4 -# 16.5 -# List of PCI ID's 16.6 -# 16.7 -# Maintained by Martin Mares <mj@ucw.cz> and other volunteers from the 16.8 -# Linux PCI ID's Project at http://pciids.sf.net/. New data are always 16.9 -# welcome (if they are accurate), we're eagerly expecting new entries, 16.10 -# so if you have anything to contribute, please visit the home page or 16.11 -# send a diff -u against the most recent pci.ids to pci-ids@ucw.cz. 16.12 -# 16.13 -# Daily snapshot on Thu 2003-05-29 10:00:04 16.14 -# Modded on Fri 2003-05-30 03:13:05 16.15 -# 16.16 - 16.17 -# Vendors, devices and subsystems. Please keep sorted. 16.18 - 16.19 -# Syntax: 16.20 -# vendor vendor_name 16.21 -# device device_name <-- single tab 16.22 -# subvendor subdevice subsystem_name <-- two tabs 16.23 - 16.24 -0000 Gammagraphx, Inc. 16.25 -001a Ascend Communications, Inc. 16.26 -0033 Paradyne corp. 16.27 -003d Lockheed Martin-Marietta Corp 16.28 -# Real TJN ID is e159, but they got it wrong several times --mj 16.29 -0059 Tiger Jet Network Inc. (Wrong ID) 16.30 -0070 Hauppauge computer works Inc. 16.31 -0100 Ncipher Corp Ltd 16.32 -0675 Dynalink 16.33 - 1700 IS64PH ISDN Adapter 16.34 - 1702 IS64PH ISDN Adapter 16.35 -# Wrong ID used in subsystem ID of VIA USB controllers. 16.36 -0925 VIA Technologies, Inc. (Wrong ID) 16.37 -09c1 Arris 16.38 - 0704 CM 200E Cable Modem 16.39 -0a89 BREA Technologies Inc 16.40 -0e11 Compaq Computer Corporation 16.41 - 0001 PCI to EISA Bridge 16.42 - 0002 PCI to ISA Bridge 16.43 - 0049 NC7132 Gigabit Upgrade Module 16.44 - 004a NC6136 Gigabit Server Adapter 16.45 - 0508 Netelligent 4/16 Token Ring 16.46 - 1000 Triflex/Pentium Bridge, Model 1000 16.47 - 2000 Triflex/Pentium Bridge, Model 2000 16.48 - 3032 QVision 1280/p 16.49 - 3033 QVision 1280/p 16.50 - 3034 QVision 1280/p 16.51 - 4000 4000 [Triflex] 16.52 - 6010 HotPlug PCI Bridge 6010 16.53 - 7020 USB Controller 16.54 - a0ec Fibre Channel Host Controller 16.55 - a0f0 Advanced System Management Controller 16.56 - a0f3 Triflex PCI to ISA Bridge 16.57 - a0f7 PCI Hotplug Controller 16.58 - 8086 002a PCI Hotplug Controller A 16.59 - 8086 002b PCI Hotplug Controller B 16.60 - a0f8 ZFMicro Chipset USB 16.61 - a0fc Fibre Channel Host Controller 16.62 - ae10 Smart-2/P RAID Controller 16.63 - 0e11 4030 Smart-2/P Array Controller 16.64 - 0e11 4031 Smart-2SL Array Controller 16.65 - 0e11 4032 Smart Array Controller 16.66 - 0e11 4033 Smart 3100ES Array Controller 16.67 - ae29 MIS-L 16.68 - ae2a MPC 16.69 - ae2b MIS-E 16.70 - ae31 System Management Controller 16.71 - ae32 Netelligent 10/100 16.72 - ae33 Triflex Dual EIDE Controller 16.73 - ae34 Netelligent 10 16.74 - ae35 Integrated NetFlex-3/P 16.75 - ae40 Netelligent 10/100 Dual 16.76 - ae43 ProLiant Integrated Netelligent 10/100 16.77 - ae69 CETUS-L 16.78 - ae6c Northstar 16.79 - ae6d NorthStar CPU to PCI Bridge 16.80 - b011 Integrated Netelligent 10/100 16.81 - b012 Netelligent 10 T/2 16.82 - b01e NC3120 Fast Ethernet NIC 16.83 - b01f NC3122 Fast Ethernet NIC 16.84 - b02f NC1120 Ethernet NIC 16.85 - b030 Netelligent WS 5100 16.86 - b04a 10/100 TX PCI Intel WOL UTP Controller 16.87 - b060 Smart Array 5300 Controller 16.88 - b0c6 NC3161 Fast Ethernet NIC 16.89 - b0c7 NC3160 Fast Ethernet NIC 16.90 - b0d7 NC3121 Fast Ethernet NIC 16.91 - b0dd NC3131 Fast Ethernet NIC 16.92 - b0de NC3132 Fast Ethernet Module 16.93 - b0df NC6132 Gigabit Module 16.94 - b0e0 NC6133 Gigabit Module 16.95 - b0e1 NC3133 Fast Ethernet Module 16.96 - b123 NC6134 Gigabit NIC 16.97 - b134 NC3163 Fast Ethernet NIC 16.98 - b13c NC3162 Fast Ethernet NIC 16.99 - b144 NC3123 Fast Ethernet NIC 16.100 - b163 NC3134 Fast Ethernet NIC 16.101 - b164 NC3165 Fast Ethernet Upgrade Module 16.102 - b178 Smart Array 5i/532 16.103 - b1a4 NC7131 Gigabit Server Adapter 16.104 - f130 NetFlex-3/P ThunderLAN 1.0 16.105 - f150 NetFlex-3/P ThunderLAN 2.3 16.106 -0e55 HaSoTec GmbH 16.107 -# Formerly NCR 16.108 -1000 LSI Logic / Symbios Logic 16.109 - 0001 53c810 16.110 - 1000 1000 8100S 16.111 - 0002 53c820 16.112 - 0003 53c825 16.113 - 0004 53c815 16.114 - 0005 53c810AP 16.115 - 0006 53c860 16.116 - 000a 53c1510 16.117 - 000b 53c896 16.118 - 000c 53c895 16.119 - 1de1 3907 DC-390U2W 16.120 - 000d 53c885 16.121 - 000f 53c875 16.122 - 0e11 7004 Embedded Ultra Wide SCSI Controller 16.123 - 1092 8760 FirePort 40 Dual SCSI Controller 16.124 - 1de1 3904 DC390F Ultra Wide SCSI Controller 16.125 - 0010 53c895 16.126 - 0e11 4040 Integrated Array Controller 16.127 - 0e11 4048 Integrated Array Controller 16.128 - 0012 53c895a 16.129 - 0013 53c875a 16.130 - 0020 53c1010 Ultra3 SCSI Adapter 16.131 - 1de1 1020 DC-390U3W 16.132 - 0021 53c1010 66MHz Ultra3 SCSI Adapter 16.133 - 0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI 16.134 - 1028 1010 LSI U320 SCSI Controller 16.135 - 0040 53c1035 16.136 - 008f 53c875J 16.137 - 1092 8000 FirePort 40 SCSI Controller 16.138 - 1092 8760 FirePort 40 Dual SCSI Host Adapter 16.139 - 0621 FC909 16.140 - 0622 FC929 16.141 - 0623 FC929 LAN 16.142 - 0624 FC919 16.143 - 0625 FC919 LAN 16.144 - 0626 FC929X 16.145 - 0627 FC929X LAN 16.146 - 0628 FC919X 16.147 - 0629 FC919X LAN 16.148 - 0701 83C885 NT50 DigitalScape Fast Ethernet 16.149 - 0702 Yellowfin G-NIC gigabit ethernet 16.150 - 1318 0000 PEI100X 16.151 - 0901 61C102 16.152 - 1000 63C815 16.153 - 1960 PowerEdge Expandable RAID Controller 4 16.154 - 1028 0518 PowerEdge Expandable RAID Controller 4/DC 16.155 - 1028 0520 PowerEdge Expandable RAID Controller 4/SC 16.156 - 1028 0531 PowerEdge Expandable RAID Controller 4/QC 16.157 -1001 Kolter Electronic 16.158 - 0010 PCI 1616 Measurement card with 32 digital I/O lines 16.159 - 0011 OPTO-PCI Opto-Isolated digital I/O board 16.160 - 0012 PCI-AD/DA Analogue I/O board 16.161 - 0013 PCI-OPTO-RELAIS Digital I/O board with relay outputs 16.162 - 0014 PCI-Counter/Timer Counter Timer board 16.163 - 0015 PCI-DAC416 Analogue output board 16.164 - 0016 PCI-MFB Analogue I/O board 16.165 - 0017 PROTO-3 PCI Prototyping board 16.166 - 9100 INI-9100/9100W SCSI Host 16.167 -1002 ATI Technologies Inc 16.168 - 4136 Radeon IGP 320 M 16.169 -# New support forthcoming in XFree86 4.3.0 16.170 - 4144 Radeon R300 AD [Radeon 9500 Pro] 16.171 -# New support forthcoming in XFree86 4.3.0 16.172 - 4145 Radeon R300 AE [Radeon 9500 Pro] 16.173 -# New support forthcoming in XFree86 4.3.0 16.174 - 4146 Radeon R300 AF [Radeon 9500 Pro] 16.175 -# Update: Oops, AF was a typo above for 4147, should be AG 16.176 - 4147 Radeon R300 AG [FireGL Z1/X1] 16.177 - 4158 68800AX [Mach32] 16.178 - 4242 Radeon R200 BB [Radeon All in Wonder 8500DV] 16.179 - 1002 02aa Radeon 8500 AIW DV Edition 16.180 - 4336 Radeon Mobility U1 16.181 - 4337 Radeon IGP 340M 16.182 - 4354 215CT [Mach64 CT] 16.183 - 4358 210888CX [Mach64 CX] 16.184 - 4554 210888ET [Mach64 ET] 16.185 - 4654 Mach64 VT 16.186 - 4742 3D Rage Pro AGP 1X/2X 16.187 - 1002 0040 Rage Pro Turbo AGP 2X 16.188 - 1002 0044 Rage Pro Turbo AGP 2X 16.189 - 1002 0061 Rage Pro AIW AGP 2X 16.190 - 1002 0062 Rage Pro AIW AGP 2X 16.191 - 1002 0063 Rage Pro AIW AGP 2X 16.192 - 1002 0080 Rage Pro Turbo AGP 2X 16.193 - 1002 0084 Rage Pro Turbo AGP 2X 16.194 - 1002 4742 Rage Pro Turbo AGP 2X 16.195 - 1002 8001 Rage Pro Turbo AGP 2X 16.196 - 1028 0082 Rage Pro Turbo AGP 2X 16.197 - 1028 4082 Optiplex GX1 Onboard Display Adapter 16.198 - 1028 8082 Rage Pro Turbo AGP 2X 16.199 - 1028 c082 Rage Pro Turbo AGP 2X 16.200 - 8086 4152 Xpert 98D AGP 2X 16.201 - 8086 464a Rage Pro Turbo AGP 2X 16.202 - 4744 3D Rage Pro AGP 1X 16.203 - 1002 4744 Rage Pro Turbo AGP 16.204 - 4747 3D Rage Pro 16.205 - 4749 3D Rage Pro 16.206 - 1002 0061 Rage Pro AIW 16.207 - 1002 0062 Rage Pro AIW 16.208 - 474c Rage XC 16.209 - 474d Rage XL AGP 2X 16.210 - 1002 0004 Xpert 98 RXL AGP 2X 16.211 - 1002 0008 Xpert 98 RXL AGP 2X 16.212 - 1002 0080 Rage XL AGP 2X 16.213 - 1002 0084 Xpert 98 AGP 2X 16.214 - 1002 474d Rage XL AGP 16.215 - 1033 806a Rage XL AGP 16.216 - 474e Rage XC AGP 16.217 - 1002 474e Rage XC AGP 16.218 - 474f Rage XL 16.219 - 1002 0008 Rage XL 16.220 - 1002 474f Rage XL 16.221 - 4750 3D Rage Pro 215GP 16.222 - 1002 0040 Rage Pro Turbo 16.223 - 1002 0044 Rage Pro Turbo 16.224 - 1002 0080 Rage Pro Turbo 16.225 - 1002 0084 Rage Pro Turbo 16.226 - 1002 4750 Rage Pro Turbo 16.227 - 4751 3D Rage Pro 215GQ 16.228 - 4752 Rage XL 16.229 - 1002 0008 Rage XL 16.230 - 1002 4752 Rage XL 16.231 - 1002 8008 Rage XL 16.232 - 1028 00d1 PowerEdge 2550 16.233 - 4753 Rage XC 16.234 - 1002 4753 Rage XC 16.235 - 4754 3D Rage I/II 215GT [Mach64 GT] 16.236 - 4755 3D Rage II+ 215GTB [Mach64 GTB] 16.237 - 4756 3D Rage IIC 215IIC [Mach64 GT IIC] 16.238 - 1002 4756 Rage IIC 16.239 - 4757 3D Rage IIC AGP 16.240 - 1002 4757 Rage IIC AGP 16.241 - 1028 0089 Rage 3D IIC 16.242 - 1028 4082 Rage 3D IIC 16.243 - 1028 8082 Rage 3D IIC 16.244 - 1028 c082 Rage 3D IIC 16.245 - 4758 210888GX [Mach64 GX] 16.246 - 4759 3D Rage IIC 16.247 - 475a 3D Rage IIC AGP 16.248 - 1002 0087 Rage 3D IIC 16.249 - 1002 475a Rage IIC AGP 16.250 - 4964 Radeon R250 Id [Radeon 9000] 16.251 - 4965 Radeon R250 Ie [Radeon 9000] 16.252 - 4966 Radeon R250 If [Radeon 9000] 16.253 - 10f1 0002 R250 If [Tachyon G9000 PRO] 16.254 - 148c 2039 R250 If [Radeon 9000 Pro "Evil Commando"] 16.255 - 1509 9a00 R250 If [Radeon 9000 "AT009"] 16.256 -# New subdevice - 3D Prophet 9000 PCI by Hercules. AGP version probably would have same ID, so not specified. 16.257 - 1681 0040 R250 If [3D prophet 9000] 16.258 - 174b 7176 R250 If [Sapphire Radeon 9000 Pro] 16.259 - 174b 7192 R250 If [Radeon 9000 "Atlantis"] 16.260 - 17af 2005 R250 If [Excalibur Radeon 9000 Pro] 16.261 - 17af 2006 R250 If [Excalibur Radeon 9000] 16.262 - 4967 Radeon R250 Ig [Radeon 9000] 16.263 - 496e Radeon R250 [Radeon 9000] (Secondary) 16.264 - 4c42 3D Rage LT Pro AGP-133 16.265 - 0e11 b0e8 Rage 3D LT Pro 16.266 - 0e11 b10e 3D Rage LT Pro (Compaq Armada 1750) 16.267 - 1002 0040 Rage LT Pro AGP 2X 16.268 - 1002 0044 Rage LT Pro AGP 2X 16.269 - 1002 4c42 Rage LT Pro AGP 2X 16.270 - 1002 8001 Rage LT Pro AGP 2X 16.271 - 1028 0085 Rage 3D LT Pro 16.272 - 4c44 3D Rage LT Pro AGP-66 16.273 - 4c45 Rage Mobility M3 AGP 16.274 - 4c46 Rage Mobility M3 AGP 2x 16.275 - 4c47 3D Rage LT-G 215LG 16.276 - 4c49 3D Rage LT Pro 16.277 - 1002 0004 Rage LT Pro 16.278 - 1002 0040 Rage LT Pro 16.279 - 1002 0044 Rage LT Pro 16.280 - 1002 4c49 Rage LT Pro 16.281 - 4c4d Rage Mobility P/M AGP 2x 16.282 - 0e11 b111 Armada M700 16.283 - 1002 0084 Xpert 98 AGP 2X (Mobility) 16.284 - 1014 0154 ThinkPad A20m 16.285 - 4c4e Rage Mobility L AGP 2x 16.286 - 4c50 3D Rage LT Pro 16.287 - 1002 4c50 Rage LT Pro 16.288 - 4c51 3D Rage LT Pro 16.289 - 4c52 Rage Mobility P/M 16.290 - 4c53 Rage Mobility L 16.291 - 4c54 264LT [Mach64 LT] 16.292 - 4c57 Radeon Mobility M7 LW [Radeon Mobility 7500] 16.293 - 1014 0517 ThinkPad T30 16.294 - 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) 16.295 - 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 16.296 -# Update: More correct labelling for this FireGL chipset 16.297 - 4c58 Radeon RV200 LX [Mobility FireGL 7800 M7] 16.298 - 4c59 Radeon Mobility M6 LY 16.299 - 1014 0235 ThinkPad A30p (2653-64G) 16.300 - 1014 0239 ThinkPad X22/X23/X24 16.301 - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 16.302 - 4c5a Radeon Mobility M6 LZ 16.303 -# Update: Add M9 to product name 16.304 - 4c64 Radeon R250 Ld [Radeon Mobility 9000 M9] 16.305 -# Update: Add M9 to product name 16.306 - 4c65 Radeon R250 Le [Radeon Mobility 9000 M9] 16.307 -# Update: Add M9 to product name 16.308 - 4c66 Radeon R250 Lf [Radeon Mobility 9000 M9] 16.309 -# Update: Add M9 to product name 16.310 - 4c67 Radeon R250 Lg [Radeon Mobility 9000 M9] 16.311 - 4d46 Rage Mobility M4 AGP 16.312 - 4d4c Rage Mobility M4 AGP 16.313 - 4e44 Radeon R300 ND [Radeon 9700 Pro] 16.314 - 4e45 Radeon R300 NE [Radeon 9500 Pro] 16.315 - 1002 0002 Radeon R300 NE [Radeon 9500 Pro] 16.316 - 4e46 Radeon R300 NF [Radeon 9700] 16.317 -# Update: This is FireGL X1, not Radeon 9700 16.318 - 4e47 Radeon R300 NG [FireGL X1] 16.319 - 4e48 Radeon R350 [Radeon 9800] 16.320 - 4e64 Radeon R300 [Radeon 9700 Pro] (Secondary) 16.321 - 4e65 Radeon R300 [Radeon 9500 Pro] (Secondary) 16.322 - 4e66 Radeon R300 [Radeon 9700] (Secondary) 16.323 - 4e67 Radeon R300 [FireGL X1] (Secondary) 16.324 - 4e68 Radeon R350 [Radeon 9800] (Secondary) 16.325 - 5041 Rage 128 PA/PRO 16.326 - 5042 Rage 128 PB/PRO AGP 2x 16.327 - 5043 Rage 128 PC/PRO AGP 4x 16.328 - 5044 Rage 128 PD/PRO TMDS 16.329 - 1002 0028 Rage 128 AIW 16.330 - 1002 0029 Rage 128 AIW 16.331 - 5045 Rage 128 PE/PRO AGP 2x TMDS 16.332 - 5046 Rage 128 PF/PRO AGP 4x TMDS 16.333 - 1002 0004 Rage Fury Pro 16.334 - 1002 0008 Rage Fury Pro/Xpert 2000 Pro 16.335 - 1002 0014 Rage Fury Pro 16.336 - 1002 0018 Rage Fury Pro/Xpert 2000 Pro 16.337 - 1002 0028 Rage 128 Pro AIW AGP 16.338 - 1002 002a Rage 128 Pro AIW AGP 16.339 - 1002 0048 Rage Fury Pro 16.340 - 1002 2000 Rage Fury MAXX AGP 4x (TMDS) (VGA device) 16.341 - 1002 2001 Rage Fury MAXX AGP 4x (TMDS) (Extra device?!) 16.342 - 5047 Rage 128 PG/PRO 16.343 - 5048 Rage 128 PH/PRO AGP 2x 16.344 - 5049 Rage 128 PI/PRO AGP 4x 16.345 - 504a Rage 128 PJ/PRO TMDS 16.346 - 504b Rage 128 PK/PRO AGP 2x TMDS 16.347 - 504c Rage 128 PL/PRO AGP 4x TMDS 16.348 - 504d Rage 128 PM/PRO 16.349 - 504e Rage 128 PN/PRO AGP 2x 16.350 - 504f Rage 128 PO/PRO AGP 4x 16.351 - 5050 Rage 128 PP/PRO TMDS [Xpert 128] 16.352 - 1002 0008 Xpert 128 16.353 - 5051 Rage 128 PQ/PRO AGP 2x TMDS 16.354 - 5052 Rage 128 PR/PRO AGP 4x TMDS 16.355 - 5053 Rage 128 PS/PRO 16.356 - 5054 Rage 128 PT/PRO AGP 2x 16.357 - 5055 Rage 128 PU/PRO AGP 4x 16.358 - 5056 Rage 128 PV/PRO TMDS 16.359 - 5057 Rage 128 PW/PRO AGP 2x TMDS 16.360 - 5058 Rage 128 PX/PRO AGP 4x TMDS 16.361 -# Update: This same chip is used in all 32Mb and 64Mb SDR/DDR orig Radeons, and is now known as 7200 16.362 - 5144 Radeon R100 QD [Radeon 7200] 16.363 - 1002 0008 Radeon 7000/Radeon VE 16.364 - 1002 0009 Radeon 7000/Radeon 16.365 - 1002 000a Radeon 7000/Radeon 16.366 - 1002 001a Radeon 7000/Radeon 16.367 - 1002 0029 Radeon AIW 16.368 - 1002 0038 Radeon 7000/Radeon 16.369 - 1002 0039 Radeon 7000/Radeon 16.370 - 1002 008a Radeon 7000/Radeon 16.371 - 1002 00ba Radeon 7000/Radeon 16.372 - 1002 0139 Radeon 7000/Radeon 16.373 - 1002 028a Radeon 7000/Radeon 16.374 - 1002 02aa Radeon AIW 16.375 - 1002 053a Radeon 7000/Radeon 16.376 - 5145 Radeon R100 QE 16.377 - 5146 Radeon R100 QF 16.378 - 5147 Radeon R100 QG 16.379 - 5148 Radeon R200 QH [Radeon 8500] 16.380 - 1002 010a FireGL 8800 64Mb 16.381 - 1002 0152 FireGL 8800 128Mb 16.382 - 1002 0162 FireGL 8700 32Mb 16.383 - 1002 0172 FireGL 8700 64Mb 16.384 - 5149 Radeon R200 QI 16.385 - 514a Radeon R200 QJ 16.386 - 514b Radeon R200 QK 16.387 - 514c Radeon R200 QL [Radeon 8500 LE] 16.388 - 1002 003a Radeon R200 QL [Radeon 8500 LE] 16.389 - 1002 013a Radeon 8500 16.390 - 148c 2026 R200 QL [Radeon 8500 Evil Master II Multi Display Edition] 16.391 - 174b 7149 Radeon R200 QL [Sapphire Radeon 8500 LE] 16.392 -# New: Radeon 9100 is basically a Radeon 8500LE branded as 9100 by Sapphire 16.393 - 514d Radeon R200 QM [Radeon 9100] 16.394 -# New: Radeon 8500LE chip 16.395 - 514e Radeon R200 QN [Radeon 8500LE] 16.396 -# New: Radeon 8500LE chip 16.397 - 514f Radeon R200 QO [Radeon 8500LE] 16.398 - 5157 Radeon RV200 QW [Radeon 7500] 16.399 - 1002 013a Radeon 7500 16.400 - 1458 4000 RV200 QW [RADEON 7500 PRO MAYA AR] 16.401 - 148c 2024 RV200 QW [Radeon 7500LE Dual Display] 16.402 - 148c 2025 RV200 QW [Radeon 7500 Evil Master Multi Display Edition] 16.403 - 148c 2036 RV200 QW [Radeon 7500 PCI Dual Display] 16.404 - 174b 7147 RV200 QW [Sapphire Radeon 7500LE] 16.405 - 174b 7161 Radeon RV200 QW [Radeon 7500 LE] 16.406 - 17af 0202 RV200 QW [Excalibur Radeon 7500LE] 16.407 - 5158 Radeon RV200 QX [Radeon 7500] 16.408 -# Update: More correct name 16.409 - 5159 Radeon RV100 QY [Radeon 7000/VE] 16.410 - 1002 000a Radeon 7000/Radeon VE 16.411 - 1002 000b Radeon 7000 16.412 - 1002 0038 Radeon 7000/Radeon VE 16.413 - 1002 003a Radeon 7000/Radeon VE 16.414 - 1002 00ba Radeon 7000/Radeon VE 16.415 - 1002 013a Radeon 7000/Radeon VE 16.416 - 1458 4002 RV100 QY [RADEON 7000 PRO MAYA AV Series] 16.417 - 148c 2003 RV100 QY [Radeon 7000 Multi-Display Edition] 16.418 - 148c 2023 RV100 QY [Radeon 7000 Evil Master Multi-Display] 16.419 - 174b 7112 RV100 QY [Sapphire Radeon VE 7000] 16.420 - 1787 0202 RV100 QY [Excalibur Radeon 7000] 16.421 -# Update: More correct name 16.422 - 515a Radeon RV100 QZ [Radeon 7000/VE] 16.423 - 5168 Radeon R200 Qh 16.424 - 5169 Radeon R200 Qi 16.425 - 516a Radeon R200 Qj 16.426 - 516b Radeon R200 Qk 16.427 -# new: This one is not in ATI documentation, but is in XFree86 source code 16.428 - 516c Radeon R200 Ql 16.429 - 5245 Rage 128 RE/SG 16.430 - 1002 0008 Xpert 128 16.431 - 1002 0028 Rage 128 AIW 16.432 - 1002 0029 Rage 128 AIW 16.433 - 1002 0068 Rage 128 AIW 16.434 - 5246 Rage 128 RF/SG AGP 16.435 - 1002 0004 Magnum/Xpert 128/Xpert 99 16.436 - 1002 0008 Magnum/Xpert128/X99/Xpert2000 16.437 - 1002 0028 Rage 128 AIW AGP 16.438 - 1002 0044 Rage Fury/Xpert 128/Xpert 2000 16.439 - 1002 0068 Rage 128 AIW AGP 16.440 - 1002 0448 Rage Fury 16.441 - 5247 Rage 128 RG 16.442 - 524b Rage 128 RK/VR 16.443 - 524c Rage 128 RL/VR AGP 16.444 - 1002 0008 Xpert 99/Xpert 2000 16.445 - 1002 0088 Xpert 99 16.446 - 5345 Rage 128 SE/4x 16.447 - 5346 Rage 128 SF/4x AGP 2x 16.448 - 1002 0048 RAGE 128 16MB VGA TVOUT AMC PAL 16.449 - 5347 Rage 128 SG/4x AGP 4x 16.450 - 5348 Rage 128 SH 16.451 - 534b Rage 128 SK/4x 16.452 - 534c Rage 128 SL/4x AGP 2x 16.453 - 534d Rage 128 SM/4x AGP 4x 16.454 - 1002 0008 Xpert 99/Xpert 2000 16.455 - 1002 0018 Xpert 2000 16.456 - 534e Rage 128 4x 16.457 - 5354 Mach 64 VT 16.458 - 1002 5654 Mach 64 reference 16.459 - 5446 Rage 128 Pro Ultra TF 16.460 - 1002 0004 Rage Fury Pro 16.461 - 1002 0008 Rage Fury Pro/Xpert 2000 Pro 16.462 - 1002 0018 Rage Fury Pro/Xpert 2000 Pro 16.463 - 1002 0028 Rage 128 AIW Pro AGP 16.464 - 1002 0029 Rage 128 AIW 16.465 - 1002 002a Rage 128 AIW Pro AGP 16.466 - 1002 002b Rage 128 AIW 16.467 - 1002 0048 Xpert 2000 Pro 16.468 - 544c Rage 128 Pro Ultra TL 16.469 - 5452 Rage 128 Pro Ultra TR 16.470 - 1002 001c Rage 128 Pro 4XL 16.471 - 103c 1279 Rage 128 Pro 4XL 16.472 - 5453 Rage 128 Pro Ultra TS 16.473 - 5454 Rage 128 Pro Ultra TT 16.474 - 5455 Rage 128 Pro Ultra TU 16.475 - 5654 264VT [Mach64 VT] 16.476 - 1002 5654 Mach64VT Reference 16.477 - 5655 264VT3 [Mach64 VT3] 16.478 - 5656 264VT4 [Mach64 VT4] 16.479 - 700f PCI Bridge [IGP 320M] 16.480 - 7010 PCI Bridge [IGP 340M] 16.481 - cab2 RS200/RS200M AGP Bridge [IGP 340M] 16.482 -1003 ULSI Systems 16.483 - 0201 US201 16.484 -1004 VLSI Technology Inc 16.485 - 0005 82C592-FC1 16.486 - 0006 82C593-FC1 16.487 - 0007 82C594-AFC2 16.488 - 0008 82C596/7 [Wildcat] 16.489 - 0009 82C597-AFC2 16.490 - 000c 82C541 [Lynx] 16.491 - 000d 82C543 [Lynx] 16.492 - 0101 82C532 16.493 - 0102 82C534 [Eagle] 16.494 - 0103 82C538 16.495 - 0104 82C535 16.496 - 0105 82C147 16.497 - 0200 82C975 16.498 - 0280 82C925 16.499 - 0304 QSound ThunderBird PCI Audio 16.500 - 1004 0304 QSound ThunderBird PCI Audio 16.501 - 122d 1206 DSP368 Audio 16.502 - 1483 5020 XWave Thunder 3D Audio 16.503 - 0305 QSound ThunderBird PCI Audio Gameport 16.504 - 1004 0305 QSound ThunderBird PCI Audio Gameport 16.505 - 122d 1207 DSP368 Audio Gameport 16.506 - 1483 5021 XWave Thunder 3D Audio Gameport 16.507 - 0306 QSound ThunderBird PCI Audio Support Registers 16.508 - 1004 0306 QSound ThunderBird PCI Audio Support Registers 16.509 - 122d 1208 DSP368 Audio Support Registers 16.510 - 1483 5022 XWave Thunder 3D Audio Support Registers 16.511 - 0307 Thunderbird 16.512 - 0308 Thunderbird 16.513 - 0702 VAS96011 [Golden Gate II] 16.514 - 0703 Tollgate 16.515 -1005 Avance Logic Inc. [ALI] 16.516 - 2064 ALG2032/2064 16.517 - 2128 ALG2364A 16.518 - 2301 ALG2301 16.519 - 2302 ALG2302 16.520 - 2364 ALG2364 16.521 - 2464 ALG2364A 16.522 - 2501 ALG2564A/25128A 16.523 -1006 Reply Group 16.524 -1007 NetFrame Systems Inc 16.525 -1008 Epson 16.526 -100a Phoenix Technologies 16.527 -100b National Semiconductor Corporation 16.528 - 0001 DP83810 16.529 - 0002 87415/87560 IDE 16.530 - 000e 87560 Legacy I/O 16.531 - 000f FireWire Controller 16.532 - 0011 NS87560 National PCI System I/O 16.533 - 0012 USB Controller 16.534 - 0020 DP83815 (MacPhyter) Ethernet Controller 16.535 - 0022 DP83820 10/100/1000 Ethernet Controller 16.536 - 0500 SCx200 Bridge 16.537 - 0501 SCx200 SMI 16.538 - 0502 SCx200 IDE 16.539 - 0503 SCx200 Audio 16.540 - 0504 SCx200 Video 16.541 - 0505 SCx200 XBus 16.542 - d001 87410 IDE 16.543 -100c Tseng Labs Inc 16.544 - 3202 ET4000/W32p rev A 16.545 - 3205 ET4000/W32p rev B 16.546 - 3206 ET4000/W32p rev C 16.547 - 3207 ET4000/W32p rev D 16.548 - 3208 ET6000 16.549 - 4702 ET6300 16.550 -100d AST Research Inc 16.551 -100e Weitek 16.552 - 9000 P9000 Viper 16.553 - 9001 P9000 Viper 16.554 - 9002 P9000 Viper 16.555 - 9100 P9100 Viper Pro/SE 16.556 -1010 Video Logic, Ltd. 16.557 -1011 Digital Equipment Corporation 16.558 - 0001 DECchip 21050 16.559 - 0002 DECchip 21040 [Tulip] 16.560 - 0004 DECchip 21030 [TGA] 16.561 - 0007 NVRAM [Zephyr NVRAM] 16.562 - 0008 KZPSA [KZPSA] 16.563 - 0009 DECchip 21140 [FasterNet] 16.564 - 1025 0310 21140 Fast Ethernet 16.565 - 10b8 2001 SMC9332BDT EtherPower 10/100 16.566 - 10b8 2002 SMC9332BVT EtherPower T4 10/100 16.567 - 10b8 2003 SMC9334BDT EtherPower 10/100 (1-port) 16.568 - 1109 2400 ANA-6944A/TX Fast Ethernet 16.569 - 1112 2300 RNS2300 Fast Ethernet 16.570 - 1112 2320 RNS2320 Fast Ethernet 16.571 - 1112 2340 RNS2340 Fast Ethernet 16.572 - 1113 1207 EN-1207-TX Fast Ethernet 16.573 - 1186 1100 DFE-500TX Fast Ethernet 16.574 - 1186 1112 DFE-570TX Fast Ethernet 16.575 - 1186 1140 DFE-660 Cardbus Ethernet 10/100 16.576 - 1186 1142 DFE-660 Cardbus Ethernet 10/100 16.577 - 11f6 0503 Freedomline Fast Ethernet 16.578 - 1282 9100 AEF-380TXD Fast Ethernet 16.579 - 1385 1100 FA310TX Fast Ethernet 16.580 - 2646 0001 KNE100TX Fast Ethernet 16.581 - 000a 21230 Video Codec 16.582 - 000d PBXGB [TGA2] 16.583 - 000f DEFPA 16.584 - 0014 DECchip 21041 [Tulip Pass 3] 16.585 - 1186 0100 DE-530+ 16.586 - 0016 DGLPB [OPPO] 16.587 - 0017 PV-PCI Graphics Controller (ZLXp-L) 16.588 - 0019 DECchip 21142/43 16.589 - 1011 500a DE500A Fast Ethernet 16.590 - 1011 500b DE500B Fast Ethernet 16.591 - 1014 0001 10/100 EtherJet Cardbus 16.592 - 1025 0315 ALN315 Fast Ethernet 16.593 - 1033 800c PC-9821-CS01 100BASE-TX Interface Card 16.594 - 1033 800d PC-9821NR-B06 100BASE-TX Interface Card 16.595 - 108d 0016 Rapidfire 2327 10/100 Ethernet 16.596 - 108d 0017 GoCard 2250 Ethernet 10/100 Cardbus 16.597 - 10b8 2005 SMC8032DT Extreme Ethernet 10/100 16.598 - 10b8 8034 SMC8034 Extreme Ethernet 10/100 16.599 - 10ef 8169 Cardbus Fast Ethernet 16.600 - 1109 2a00 ANA-6911A/TX Fast Ethernet 16.601 - 1109 2b00 ANA-6911A/TXC Fast Ethernet 16.602 - 1109 3000 ANA-6922/TX Fast Ethernet 16.603 - 1113 1207 Cheetah Fast Ethernet 16.604 - 1113 2220 Cardbus Fast Ethernet 16.605 - 115d 0002 Cardbus Ethernet 10/100 16.606 - 1179 0203 Fast Ethernet 16.607 - 1179 0204 Cardbus Fast Ethernet 16.608 - 1186 1100 DFE-500TX Fast Ethernet 16.609 - 1186 1101 DFE-500TX Fast Ethernet 16.610 - 1186 1102 DFE-500TX Fast Ethernet 16.611 - 1259 2800 AT-2800Tx Fast Ethernet 16.612 - 1266 0004 Eagle Fast EtherMAX 16.613 - 12af 0019 NetFlyer Cardbus Fast Ethernet 16.614 - 1374 0001 Cardbus Ethernet Card 10/100 16.615 - 1374 0002 Cardbus Ethernet Card 10/100 16.616 - 1374 0007 Cardbus Ethernet Card 10/100 16.617 - 1374 0008 Cardbus Ethernet Card 10/100 16.618 - 1385 2100 FA510 16.619 - 1395 0001 10/100 Ethernet CardBus PC Card 16.620 - 13d1 ab01 EtherFast 10/100 Cardbus (PCMPC200) 16.621 - 8086 0001 EtherExpress PRO/100 Mobile CardBus 32 16.622 - 001a Farallon PN9000SX 16.623 - 0021 DECchip 21052 16.624 - 0022 DECchip 21150 16.625 - 0023 DECchip 21150 16.626 - 0024 DECchip 21152 16.627 - 0025 DECchip 21153 16.628 - 0026 DECchip 21154 16.629 - 0034 56k Modem Cardbus 16.630 - 1374 0003 56k Modem Cardbus 16.631 - 0045 DECchip 21553 16.632 - 0046 DECchip 21554 16.633 - 0e11 4050 Integrated Smart Array 16.634 - 0e11 4051 Integrated Smart Array 16.635 - 0e11 4058 Integrated Smart Array 16.636 - 103c 10c2 Hewlett-Packard NetRAID-4M 16.637 - 12d9 000a VoIP PCI Gateway 16.638 - 9005 0365 Adaptec 5400S 16.639 - 9005 1364 Dell PowerEdge RAID Controller 2 16.640 - 9005 1365 Dell PowerEdge RAID Controller 2 16.641 - e4bf 1000 CC8-1-BLUES 16.642 - 1065 StrongARM DC21285 16.643 - 1069 0020 DAC960P / DAC1164P 16.644 -1012 Micronics Computers Inc 16.645 -1013 Cirrus Logic 16.646 - 0038 GD 7548 16.647 - 0040 GD 7555 Flat Panel GUI Accelerator 16.648 - 004c GD 7556 Video/Graphics LCD/CRT Ctrlr 16.649 - 00a0 GD 5430/40 [Alpine] 16.650 - 00a2 GD 5432 [Alpine] 16.651 - 00a4 GD 5434-4 [Alpine] 16.652 - 00a8 GD 5434-8 [Alpine] 16.653 - 00ac GD 5436 [Alpine] 16.654 - 00b0 GD 5440 16.655 - 00b8 GD 5446 16.656 - 00bc GD 5480 16.657 - 1013 00bc CL-GD5480 16.658 - 00d0 GD 5462 16.659 - 00d2 GD 5462 [Laguna I] 16.660 - 00d4 GD 5464 [Laguna] 16.661 - 00d5 GD 5464 BD [Laguna] 16.662 - 00d6 GD 5465 [Laguna] 16.663 - 13ce 8031 Barco Metheus 2 Megapixel, Dual Head 16.664 - 13cf 8031 Barco Metheus 2 Megapixel, Dual Head 16.665 - 00e8 GD 5436U 16.666 - 1100 CL 6729 16.667 - 1110 PD 6832 PCMCIA/CardBus Ctrlr 16.668 - 1112 PD 6834 PCMCIA/CardBus Ctrlr 16.669 - 1113 PD 6833 PCMCIA/CardBus Ctrlr 16.670 - 1200 GD 7542 [Nordic] 16.671 - 1202 GD 7543 [Viking] 16.672 - 1204 GD 7541 [Nordic Light] 16.673 - 4400 CD 4400 16.674 - 6001 CS 4610/11 [CrystalClear SoundFusion Audio Accelerator] 16.675 - 1014 1010 CS4610 SoundFusion Audio Accelerator 16.676 - 6003 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator] 16.677 - 1013 4280 Crystal SoundFusion PCI Audio Accelerator 16.678 - 1681 0050 Game Theater XP 16.679 - 1681 a011 Fortissimo III 7.1 16.680 - 6004 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator] 16.681 - 6005 Crystal CS4281 PCI Audio 16.682 - 1013 4281 Crystal CS4281 PCI Audio 16.683 - 10cf 10a8 Crystal CS4281 PCI Audio 16.684 - 10cf 10a9 Crystal CS4281 PCI Audio 16.685 - 10cf 10aa Crystal CS4281 PCI Audio 16.686 - 10cf 10ab Crystal CS4281 PCI Audio 16.687 - 10cf 10ac Crystal CS4281 PCI Audio 16.688 - 10cf 10ad Crystal CS4281 PCI Audio 16.689 - 10cf 10b4 Crystal CS4281 PCI Audio 16.690 - 1179 0001 Crystal CS4281 PCI Audio 16.691 - 14c0 000c Crystal CS4281 PCI Audio 16.692 -1014 IBM 16.693 - 0002 PCI to MCA Bridge 16.694 - 0005 Alta Lite 16.695 - 0007 Alta MP 16.696 - 000a Fire Coral 16.697 - 0017 CPU to PCI Bridge 16.698 - 0018 TR Auto LANstreamer 16.699 - 001b GXT-150P 16.700 - 001c Carrera 16.701 - 001d 82G2675 16.702 - 0020 MCA 16.703 - 0022 IBM27-82351 16.704 - 002d Python 16.705 - 002e ServeRAID Controller 16.706 - 1014 002e ServeRAID-3x 16.707 - 1014 022e ServeRAID-4H 16.708 - 0036 Miami 16.709 - 003a CPU to PCI Bridge 16.710 - 003e 16/4 Token ring UTP/STP controller 16.711 - 1014 003e Token-Ring Adapter 16.712 - 1014 00cd Token-Ring Adapter + Wake-On-LAN 16.713 - 1014 00ce 16/4 Token-Ring Adapter 2 16.714 - 1014 00cf 16/4 Token-Ring Adapter Special 16.715 - 1014 00e4 High-Speed 100/16/4 Token-Ring Adapter 16.716 - 1014 00e5 16/4 Token-Ring Adapter 2 + Wake-On-LAN 16.717 - 1014 016d iSeries 2744 Card 16.718 - 0045 SSA Adapter 16.719 - 0046 MPIC interrupt controller 16.720 - 0047 PCI to PCI Bridge 16.721 - 0048 PCI to PCI Bridge 16.722 - 0049 Warhead SCSI Controller 16.723 - 004e ATM Controller (14104e00) 16.724 - 004f ATM Controller (14104f00) 16.725 - 0050 ATM Controller (14105000) 16.726 - 0053 25 MBit ATM Controller 16.727 - 0057 MPEG PCI Bridge 16.728 - 005c i82557B 10/100 16.729 - 007c ATM Controller (14107c00) 16.730 - 007d 3780IDSP [MWave] 16.731 - 0090 GXT 3000P 16.732 - 1014 008e GXT-3000P 16.733 - 0095 20H2999 PCI Docking Bridge 16.734 - 0096 Chukar chipset SCSI controller 16.735 - 1014 0097 iSeries 2778 DASD IOA 16.736 - 1014 0098 iSeries 2763 DASD IOA 16.737 - 1014 0099 iSeries 2748 DASD IOA 16.738 - 00a5 ATM Controller (1410a500) 16.739 - 00a6 ATM 155MBPS MM Controller (1410a600) 16.740 - 00b7 256-bit Graphics Rasterizer [Fire GL1] 16.741 - 1902 00b8 Fire GL1 16.742 - 00be ATM 622MBPS Controller (1410be00) 16.743 - 00dc Advanced Systems Management Adapter (ASMA) 16.744 - 00fc CPC710 Dual Bridge and Memory Controller (PCI-64) 16.745 - 0105 CPC710 Dual Bridge and Memory Controller (PCI-32) 16.746 - 010f Remote Supervisor Adapter (RSA) 16.747 - 0142 Yotta Video Compositor Input 16.748 - 1014 0143 Yotta Input Controller (ytin) 16.749 - 0144 Yotta Video Compositor Output 16.750 - 1014 0145 Yotta Output Controller (ytout) 16.751 - 0156 405GP PLB to PCI Bridge 16.752 - 01a7 PCI-X to PCI-X Bridge 16.753 - 01bd ServeRAID Controller 16.754 - 1014 01be ServeRAID-4M 16.755 - 1014 01bf ServeRAID-4L 16.756 - 1014 0208 ServeRAID-4Mx 16.757 - 1014 020e ServeRAID-4Lx 16.758 - 1014 022e ServeRAID-4H 16.759 - 1014 0258 ServeRAID-5i 16.760 - 1014 0259 ServeRAID-5i 16.761 - 0302 XA-32 chipset [Summit] 16.762 - ffff MPIC-2 interrupt controller 16.763 -1015 LSI Logic Corp of Canada 16.764 -1016 ICL Personal Systems 16.765 -1017 SPEA Software AG 16.766 - 5343 SPEA 3D Accelerator 16.767 -1018 Unisys Systems 16.768 -1019 Elitegroup Computer Systems 16.769 -101a AT&T GIS (NCR) 16.770 - 0005 100VG ethernet 16.771 -101b Vitesse Semiconductor 16.772 -101c Western Digital 16.773 - 0193 33C193A 16.774 - 0196 33C196A 16.775 - 0197 33C197A 16.776 - 0296 33C296A 16.777 - 3193 7193 16.778 - 3197 7197 16.779 - 3296 33C296A 16.780 - 4296 34C296 16.781 - 9710 Pipeline 9710 16.782 - 9712 Pipeline 9712 16.783 - c24a 90C 16.784 -101e American Megatrends Inc. 16.785 - 1960 MegaRAID 16.786 - 101e 0471 MegaRAID 471 Enterprise 1600 RAID Controller 16.787 - 101e 0475 MegaRAID 475 Express 500 RAID Controller 16.788 - 101e 0493 MegaRAID 493 Elite 1600 RAID Controller 16.789 - 1028 0471 PowerEdge RAID Controller 3/QC 16.790 - 1028 0475 PowerEdge RAID Controller 3/SC 16.791 - 1028 0493 PowerEdge RAID Controller 3/DC 16.792 - 1028 0511 PowerEdge Cost Effective RAID Controller ATA100/4Ch 16.793 - 9010 MegaRAID 428 Ultra RAID Controller 16.794 - 9030 EIDE Controller 16.795 - 9031 EIDE Controller 16.796 - 9032 EIDE & SCSI Controller 16.797 - 9033 SCSI Controller 16.798 - 9040 Multimedia card 16.799 - 9060 MegaRAID 434 Ultra GT RAID Controller 16.800 - 9063 MegaRAC 16.801 - 101e 0767 Dell Remote Assistant Card 2 16.802 -101f PictureTel 16.803 -1020 Hitachi Computer Products 16.804 -1021 OKI Electric Industry Co. Ltd. 16.805 -1022 Advanced Micro Devices [AMD] 16.806 - 1100 K8 NorthBridge 16.807 - 1101 K8 NorthBridge 16.808 - 1102 K8 NorthBridge 16.809 - 1103 K8 NorthBridge 16.810 - 2000 79c970 [PCnet32 LANCE] 16.811 - 1014 2000 NetFinity 10/100 Fast Ethernet 16.812 - 103c 104c Ethernet with LAN remote power Adapter 16.813 - 103c 1064 Ethernet with LAN remote power Adapter 16.814 - 103c 1065 Ethernet with LAN remote power Adapter 16.815 - 103c 106c Ethernet with LAN remote power Adapter 16.816 - 103c 106e Ethernet with LAN remote power Adapter 16.817 - 103c 10ea Ethernet with LAN remote power Adapter 16.818 - 1113 1220 EN1220 10/100 Fast Ethernet 16.819 - 1259 2450 AT-2450 10/100 Fast Ethernet 16.820 - 1259 2454 AT-2450v4 10Mb Ethernet Adapter 16.821 - 1259 2700 AT-2700TX 10/100 Fast Ethernet 16.822 - 1259 2701 AT-2700FX 100Mb Ethernet 16.823 - 2001 79c978 [HomePNA] 16.824 - 1092 0a78 Multimedia Home Network Adapter 16.825 - 1668 0299 ActionLink Home Network Adapter 16.826 - 2020 53c974 [PCscsi] 16.827 - 2040 79c974 16.828 - 3000 ELanSC520 Microcontroller 16.829 - 7006 AMD-751 [Irongate] System Controller 16.830 - 7007 AMD-751 [Irongate] AGP Bridge 16.831 - 700c AMD-760 MP [IGD4-2P] System Controller 16.832 - 700d AMD-760 MP [IGD4-2P] AGP Bridge 16.833 - 700e AMD-760 [IGD4-1P] System Controller 16.834 - 700f AMD-760 [IGD4-1P] AGP Bridge 16.835 - 7400 AMD-755 [Cobra] ISA 16.836 - 7401 AMD-755 [Cobra] IDE 16.837 - 7403 AMD-755 [Cobra] ACPI 16.838 - 7404 AMD-755 [Cobra] USB 16.839 - 7408 AMD-756 [Viper] ISA 16.840 - 7409 AMD-756 [Viper] IDE 16.841 - 740b AMD-756 [Viper] ACPI 16.842 - 740c AMD-756 [Viper] USB 16.843 - 7410 AMD-766 [ViperPlus] ISA 16.844 - 7411 AMD-766 [ViperPlus] IDE 16.845 - 7413 AMD-766 [ViperPlus] ACPI 16.846 - 7414 AMD-766 [ViperPlus] USB 16.847 - 7440 AMD-768 [Opus] ISA 16.848 - 1043 8044 A7M-D Mainboard 16.849 - 7441 AMD-768 [Opus] IDE 16.850 - 7443 AMD-768 [Opus] ACPI 16.851 - 1043 8044 A7M-D Mainboard 16.852 - 7445 AMD-768 [Opus] Audio 16.853 - 7446 AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible) 16.854 - 7448 AMD-768 [Opus] PCI 16.855 - 7449 AMD-768 [Opus] USB 16.856 - 7450 AMD-8131 PCI-X Bridge 16.857 - 7451 AMD-8131 PCI-X APIC 16.858 - 7454 AMD-8151 System Controller 16.859 - 7455 AMD-8151 AGP Bridge 16.860 - 7460 AMD-8111 PCI 16.861 - 7461 AMD-8111 USB 16.862 - 7462 AMD-8111 Ethernet 16.863 - 7464 AMD-8111 USB 16.864 - 7468 AMD-8111 LPC 16.865 - 7469 AMD-8111 IDE 16.866 - 746a AMD-8111 SMBus 2.0 16.867 - 746b AMD-8111 ACPI 16.868 - 746d AMD-8111 AC97 Audio 16.869 - 746e AMD-8111 MC97 Modem 16.870 -1023 Trident Microsystems 16.871 - 0194 82C194 16.872 - 2000 4DWave DX 16.873 - 2001 4DWave NX 16.874 - 8400 CyberBlade/i7 16.875 - 1023 8400 CyberBlade i7 AGP 16.876 - 8420 CyberBlade/i7d 16.877 - 0e11 b15a CyberBlade i7 AGP 16.878 - 8500 CyberBlade/i1 16.879 - 8520 CyberBlade i1 16.880 - 0e11 b16e CyberBlade i1 AGP 16.881 - 1023 8520 CyberBlade i1 AGP 16.882 - 8620 CyberBlade/i1 16.883 - 1014 0502 ThinkPad T30 16.884 - 8820 CyberBlade XPAi1 16.885 - 9320 TGUI 9320 16.886 - 9350 GUI Accelerator 16.887 - 9360 Flat panel GUI Accelerator 16.888 - 9382 Cyber 9382 [Reference design] 16.889 - 9383 Cyber 9383 [Reference design] 16.890 - 9385 Cyber 9385 [Reference design] 16.891 - 9386 Cyber 9386 16.892 - 9388 Cyber 9388 16.893 - 9397 Cyber 9397 16.894 - 939a Cyber 9397DVD 16.895 - 9420 TGUI 9420 16.896 - 9430 TGUI 9430 16.897 - 9440 TGUI 9440 16.898 - 9460 TGUI 9460 16.899 - 9470 TGUI 9470 16.900 - 9520 Cyber 9520 16.901 - 9525 Cyber 9525 16.902 - 10cf 1094 Lifebook C6155 16.903 - 9540 Cyber 9540 16.904 - 9660 TGUI 9660/938x/968x 16.905 - 9680 TGUI 9680 16.906 - 9682 TGUI 9682 16.907 - 9683 TGUI 9683 16.908 - 9685 ProVIDIA 9685 16.909 - 9750 3DImage 9750 16.910 - 1014 9750 3DImage 9750 16.911 - 1023 9750 3DImage 9750 16.912 - 9753 TGUI 9753 16.913 - 9754 TGUI 9754 16.914 - 9759 TGUI 975 16.915 - 9783 TGUI 9783 16.916 - 9785 TGUI 9785 16.917 - 9850 3DImage 9850 16.918 - 9880 Blade 3D PCI/AGP 16.919 - 1023 9880 Blade 3D 16.920 - 9910 CyberBlade/XP 16.921 - 9930 CyberBlade/XPm 16.922 -1024 Zenith Data Systems 16.923 -1025 Acer Incorporated [ALI] 16.924 - 1435 M1435 16.925 - 1445 M1445 16.926 - 1449 M1449 16.927 - 1451 M1451 16.928 - 1461 M1461 16.929 - 1489 M1489 16.930 - 1511 M1511 16.931 - 1512 ALI M1512 Aladdin 16.932 - 1513 M1513 16.933 - 1521 ALI M1521 Aladdin III CPU Bridge 16.934 - 10b9 1521 ALI M1521 Aladdin III CPU Bridge 16.935 - 1523 ALI M1523 ISA Bridge 16.936 - 10b9 1523 ALI M1523 ISA Bridge 16.937 - 1531 M1531 Northbridge [Aladdin IV/IV+] 16.938 - 1533 M1533 PCI-to-ISA Bridge 16.939 - 10b9 1533 ALI M1533 Aladdin IV/V ISA South Bridge 16.940 - 1535 M1535 PCI Bridge + Super I/O + FIR 16.941 - 1541 M1541 Northbridge [Aladdin V] 16.942 - 10b9 1541 ALI M1541 Aladdin V/V+ AGP+PCI North Bridge 16.943 - 1542 M1542 Northbridge [Aladdin V] 16.944 - 1543 M1543 PCI-to-ISA Bridge + Super I/O + FIR 16.945 - 1561 M1561 Northbridge [Aladdin 7] 16.946 - 1621 M1621 Northbridge [Aladdin-Pro II] 16.947 - 1631 M1631 Northbridge+3D Graphics [Aladdin TNT2] 16.948 - 1641 M1641 Northbridge [Aladdin-Pro IV] 16.949 - 1647 M1647 [MaGiK1] PCI North Bridge 16.950 - 3141 M3141 16.951 - 3143 M3143 16.952 - 3145 M3145 16.953 - 3147 M3147 16.954 - 3149 M3149 16.955 - 3151 M3151 16.956 - 3307 M3307 MPEG-I Video Controller 16.957 - 3309 M3309 MPEG-II Video w/ Software Audio Decoder 16.958 - 3321 M3321 MPEG-II Audio/Video Decoder 16.959 - 5212 M4803 16.960 - 5215 ALI PCI EIDE Controller 16.961 - 5217 M5217H 16.962 - 5219 M5219 16.963 - 5225 M5225 16.964 - 5229 M5229 16.965 - 5235 M5235 16.966 - 5237 M5237 PCI USB Host Controller 16.967 - 5240 EIDE Controller 16.968 - 5241 PCMCIA Bridge 16.969 - 5242 General Purpose Controller 16.970 - 5243 PCI to PCI Bridge Controller 16.971 - 5244 Floppy Disk Controller 16.972 - 5247 M1541 PCI to PCI Bridge 16.973 - 5251 M5251 P1394 Controller 16.974 - 5427 PCI to AGP Bridge 16.975 - 5451 M5451 PCI AC-Link Controller Audio Device 16.976 - 5453 M5453 PCI AC-Link Controller Modem Device 16.977 - 7101 M7101 PCI PMU Power Management Controller 16.978 - 10b9 7101 M7101 PCI PMU Power Management Controller 16.979 -1028 Dell Computer Corporation 16.980 - 0001 PowerEdge Expandable RAID Controller 2/Si 16.981 - 1028 0001 PowerEdge Expandable RAID Controller 2/Si 16.982 - 0002 PowerEdge Expandable RAID Controller 3 16.983 - 1028 0002 PowerEdge Expandable RAID Controller 3/Di 16.984 - 1028 00d1 PowerEdge Expandable RAID Controller 3/Di 16.985 - 1028 00d9 PowerEdge Expandable RAID Controller 3/Di 16.986 - 0003 PowerEdge Expandable RAID Controller 3/Si 16.987 - 1028 0003 PowerEdge Expandable RAID Controller 3/Si 16.988 - 0004 PowerEdge Expandable RAID Controller 3/Si 16.989 - 1028 00d0 PowerEdge Expandable RAID Controller 3/Si 16.990 - 0005 PowerEdge Expandable RAID Controller 3/Di 16.991 - 0006 PowerEdge Expandable RAID Controller 3/Di 16.992 - 0007 Remote Access Controller:DRAC III 16.993 - 0008 Remote Access Controller 16.994 - 0009 BMC/SMIC device not present 16.995 - 000a PowerEdge Expandable RAID Controller 3 16.996 - 1028 0106 PowerEdge Expandable RAID Controller 3/Di 16.997 - 1028 011b PowerEdge Expandable RAID Controller 3/Di 16.998 - 1028 0121 PowerEdge Expandable RAID Controller 3/Di 16.999 - 000c Remote Access Controller:ERA or ERA/O 16.1000 - 000d BMC/SMIC device 16.1001 - 000e PowerEdge Expandable RAID Controller 16.1002 - 000f PowerEdge Expandable RAID Controller 4/Di 16.1003 -1029 Siemens Nixdorf IS 16.1004 -102a LSI Logic 16.1005 - 0000 HYDRA 16.1006 - 0010 ASPEN 16.1007 -102b Matrox Graphics, Inc. 16.1008 -# DJ: I've a suspicion that 0010 is a duplicate of 0d10. 16.1009 - 0010 MGA-I [Impression?] 16.1010 - 0100 MGA 1064SG [Mystique] 16.1011 - 0518 MGA-II [Athena] 16.1012 - 0519 MGA 2064W [Millennium] 16.1013 - 051a MGA 1064SG [Mystique] 16.1014 - 102b 0100 MGA-1064SG Mystique 16.1015 - 102b 1100 MGA-1084SG Mystique 16.1016 - 102b 1200 MGA-1084SG Mystique 16.1017 - 1100 102b MGA-1084SG Mystique 16.1018 - 110a 0018 Scenic Pro C5 (D1025) 16.1019 - 051b MGA 2164W [Millennium II] 16.1020 - 102b 051b MGA-2164W Millennium II 16.1021 - 102b 1100 MGA-2164W Millennium II 16.1022 - 102b 1200 MGA-2164W Millennium II 16.1023 - 051e MGA 1064SG [Mystique] AGP 16.1024 - 051f MGA 2164W [Millennium II] AGP 16.1025 - 0520 MGA G200 16.1026 - 102b dbc2 G200 Multi-Monitor 16.1027 - 102b dbc8 G200 Multi-Monitor 16.1028 - 102b dbe2 G200 Multi-Monitor 16.1029 - 102b dbe8 G200 Multi-Monitor 16.1030 - 102b ff03 Millennium G200 SD 16.1031 - 102b ff04 Marvel G200 16.1032 - 0521 MGA G200 AGP 16.1033 - 1014 ff03 Millennium G200 AGP 16.1034 - 102b 48e9 Mystique G200 AGP 16.1035 - 102b 48f8 Millennium G200 SD AGP 16.1036 - 102b 4a60 Millennium G200 LE AGP 16.1037 - 102b 4a64 Millennium G200 AGP 16.1038 - 102b c93c Millennium G200 AGP 16.1039 - 102b c9b0 Millennium G200 AGP 16.1040 - 102b c9bc Millennium G200 AGP 16.1041 - 102b ca60 Millennium G250 LE AGP 16.1042 - 102b ca6c Millennium G250 AGP 16.1043 - 102b dbbc Millennium G200 AGP 16.1044 - 102b dbc2 Millennium G200 MMS (Dual G200) 16.1045 - 102b dbc3 G200 Multi-Monitor 16.1046 - 102b dbc8 Millennium G200 MMS (Dual G200) 16.1047 - 102b dbd2 G200 Multi-Monitor 16.1048 - 102b dbd3 G200 Multi-Monitor 16.1049 - 102b dbd4 G200 Multi-Monitor 16.1050 - 102b dbd5 G200 Multi-Monitor 16.1051 - 102b dbd8 G200 Multi-Monitor 16.1052 - 102b dbd9 G200 Multi-Monitor 16.1053 - 102b dbe2 Millennium G200 MMS (Quad G200) 16.1054 - 102b dbe3 G200 Multi-Monitor 16.1055 - 102b dbe8 Millennium G200 MMS (Quad G200) 16.1056 - 102b dbf2 G200 Multi-Monitor 16.1057 - 102b dbf3 G200 Multi-Monitor 16.1058 - 102b dbf4 G200 Multi-Monitor 16.1059 - 102b dbf5 G200 Multi-Monitor 16.1060 - 102b dbf8 G200 Multi-Monitor 16.1061 - 102b dbf9 G200 Multi-Monitor 16.1062 - 102b f806 Mystique G200 Video AGP 16.1063 - 102b ff00 MGA-G200 AGP 16.1064 - 102b ff02 Mystique G200 AGP 16.1065 - 102b ff03 Millennium G200 AGP 16.1066 - 102b ff04 Marvel G200 AGP 16.1067 - 110a 0032 MGA-G200 AGP 16.1068 - 0525 MGA G400 AGP 16.1069 - 0e11 b16f MGA-G400 AGP 16.1070 - 102b 0328 Millennium G400 16Mb SDRAM 16.1071 - 102b 0338 Millennium G400 16Mb SDRAM 16.1072 - 102b 0378 Millennium G400 32Mb SDRAM 16.1073 - 102b 0541 Millennium G450 Dual Head 16.1074 - 102b 0542 Millennium G450 Dual Head LX 16.1075 - 102b 0543 Millennium G450 Single Head LX 16.1076 - 102b 0641 Millennium G450 32Mb SDRAM Dual Head 16.1077 - 102b 0642 Millennium G450 32Mb SDRAM Dual Head LX 16.1078 - 102b 0643 Millennium G450 32Mb SDRAM Single Head LX 16.1079 - 102b 07c0 Millennium G450 Dual Head LE 16.1080 - 102b 07c1 Millennium G450 SDR Dual Head LE 16.1081 - 102b 0d41 Millennium G450 Dual Head PCI 16.1082 - 102b 0d42 Millennium G450 Dual Head LX PCI 16.1083 - 102b 0e00 Marvel G450 eTV 16.1084 - 102b 0e01 Marvel G450 eTV 16.1085 - 102b 0e02 Marvel G450 eTV 16.1086 - 102b 0e03 Marvel G450 eTV 16.1087 - 102b 0f80 Millennium G450 Low Profile 16.1088 - 102b 0f81 Millennium G450 Low Profile 16.1089 - 102b 0f82 Millennium G450 Low Profile DVI 16.1090 - 102b 0f83 Millennium G450 Low Profile DVI 16.1091 - 102b 19d8 Millennium G400 16Mb SGRAM 16.1092 - 102b 19f8 Millennium G400 32Mb SGRAM 16.1093 - 102b 2159 Millennium G400 Dual Head 16Mb 16.1094 - 102b 2179 Millennium G400 MAX/Dual Head 32Mb 16.1095 - 102b 217d Millennium G400 Dual Head Max 16.1096 - 102b 23c0 Millennium G450 16.1097 - 102b 23c1 Millennium G450 16.1098 - 102b 23c2 Millennium G450 DVI 16.1099 - 102b 23c3 Millennium G450 DVI 16.1100 - 102b 2f58 Millennium G400 16.1101 - 102b 2f78 Millennium G400 16.1102 - 102b 3693 Marvel G400 AGP 16.1103 - 102b 5dd0 4Sight II 16.1104 - 102b 5f50 4Sight II 16.1105 - 102b 5f51 4Sight II 16.1106 - 102b 5f52 4Sight II 16.1107 - 102b 9010 Millennium G400 Dual Head 16.1108 - 1458 0400 GA-G400 16.1109 - 1705 0001 Millennium G450 32MB SGRAM 16.1110 - 1705 0002 Millennium G450 16MB SGRAM 16.1111 - 1705 0003 Millennium G450 32MB 16.1112 - 1705 0004 Millennium G450 16MB 16.1113 - b16f 0e11 MGA-G400 AGP 16.1114 - 0527 MGA Parhelia AGP 16.1115 - 102b 0840 Parhelia 128Mb 16.1116 - 0d10 MGA Ultima/Impression 16.1117 - 1000 MGA G100 [Productiva] 16.1118 - 102b ff01 Productiva G100 16.1119 - 102b ff05 Productiva G100 Multi-Monitor 16.1120 - 1001 MGA G100 [Productiva] AGP 16.1121 - 102b 1001 MGA-G100 AGP 16.1122 - 102b ff00 MGA-G100 AGP 16.1123 - 102b ff01 MGA-G100 Productiva AGP 16.1124 - 102b ff03 Millennium G100 AGP 16.1125 - 102b ff04 MGA-G100 AGP 16.1126 - 102b ff05 MGA-G100 Productiva AGP Multi-Monitor 16.1127 - 110a 001e MGA-G100 AGP 16.1128 - 2007 MGA Mistral 16.1129 - 2527 MGA G550 AGP 16.1130 - 102b 0f83 Millennium G550 16.1131 - 102b 0f84 Millennium G550 Dual Head DDR 32Mb 16.1132 - 102b 1e41 Millennium G550 16.1133 - 4536 VIA Framegrabber 16.1134 - 6573 Shark 10/100 Multiport SwitchNIC 16.1135 -102c Chips and Technologies 16.1136 - 00b8 F64310 16.1137 - 00c0 F69000 HiQVideo 16.1138 - 102c 00c0 F69000 HiQVideo 16.1139 - 00d0 F65545 16.1140 - 00d8 F65545 16.1141 - 00dc F65548 16.1142 - 00e0 F65550 16.1143 - 00e4 F65554 16.1144 - 00e5 F65555 HiQVPro 16.1145 - 0e11 b049 Armada 1700 Laptop Display Controller 16.1146 - 00f0 F68554 16.1147 - 00f4 F68554 HiQVision 16.1148 - 00f5 F68555 16.1149 - 0c30 F69030 16.1150 -102d Wyse Technology Inc. 16.1151 - 50dc 3328 Audio 16.1152 -102e Olivetti Advanced Technology 16.1153 -102f Toshiba America 16.1154 - 0009 r4x00 16.1155 - 0020 ATM Meteor 155 16.1156 - 102f 00f8 ATM Meteor 155 16.1157 - 0180 TX4927 16.1158 -1030 TMC Research 16.1159 -1031 Miro Computer Products AG 16.1160 - 5601 DC20 ASIC 16.1161 - 5607 Video I/O & motion JPEG compressor 16.1162 - 5631 Media 3D 16.1163 - 6057 MiroVideo DC10/DC30+ 16.1164 -1032 Compaq 16.1165 -1033 NEC Corporation 16.1166 - 0001 PCI to 486-like bus Bridge 16.1167 - 0002 PCI to VL98 Bridge 16.1168 - 0003 ATM Controller 16.1169 - 0004 R4000 PCI Bridge 16.1170 - 0005 PCI to 486-like bus Bridge 16.1171 - 0006 PC-9800 Graphic Accelerator 16.1172 - 0007 PCI to UX-Bus Bridge 16.1173 - 0008 PC-9800 Graphic Accelerator 16.1174 - 0009 PCI to PC9800 Core-Graph Bridge 16.1175 - 0016 PCI to VL Bridge 16.1176 - 001a [Nile II] 16.1177 - 0021 Vrc4373 [Nile I] 16.1178 - 0029 PowerVR PCX1 16.1179 - 002a PowerVR 3D 16.1180 - 002c Star Alpha 2 16.1181 - 002d PCI to C-bus Bridge 16.1182 - 0035 USB 16.1183 - 1179 0001 USB 16.1184 - 12ee 7000 Root Hub 16.1185 - 1799 0001 Root Hub 16.1186 - 003b PCI to C-bus Bridge 16.1187 - 003e NAPCCARD Cardbus Controller 16.1188 - 0046 PowerVR PCX2 [midas] 16.1189 - 005a Vrc5074 [Nile 4] 16.1190 - 0063 Firewarden 16.1191 - 0067 PowerVR Neon 250 Chipset 16.1192 - 1010 0020 PowerVR Neon 250 AGP 32Mb 16.1193 - 1010 0080 PowerVR Neon 250 AGP 16Mb 16.1194 - 1010 0088 PowerVR Neon 250 16Mb 16.1195 - 1010 0090 PowerVR Neon 250 AGP 16Mb 16.1196 - 1010 0098 PowerVR Neon 250 16Mb 16.1197 - 1010 00a0 PowerVR Neon 250 AGP 32Mb 16.1198 - 1010 00a8 PowerVR Neon 250 32Mb 16.1199 - 1010 0120 PowerVR Neon 250 AGP 32Mb 16.1200 - 0074 56k Voice Modem 16.1201 - 1033 8014 RCV56ACF 56k Voice Modem 16.1202 - 009b Vrc5476 16.1203 - 00a5 VRC4173 16.1204 - 00a6 VRC5477 AC97 16.1205 - 00cd IEEE 1394 [OrangeLink] Host Controller 16.1206 - 12ee 8011 Root hub 16.1207 - 00e0 USB 2.0 16.1208 - 12ee 7001 Root hub 16.1209 - 1799 0002 Root Hub 16.1210 -1034 Framatome Connectors USA Inc. 16.1211 -1035 Comp. & Comm. Research Lab 16.1212 -1036 Future Domain Corp. 16.1213 - 0000 TMC-18C30 [36C70] 16.1214 -1037 Hitachi Micro Systems 16.1215 -1038 AMP, Inc 16.1216 -1039 Silicon Integrated Systems [SiS] 16.1217 -# This is what all my tests report. I don't know if this is equivalent to "5591/5592 AGP". 16.1218 - 0001 SiS 530 Virtual PCI-to-PCI bridge (AGP) 16.1219 - 0002 SG86C202 16.1220 - 0006 85C501/2/3 16.1221 - 0008 85C503/5513 16.1222 - 0009 ACPI 16.1223 - 0018 SiS85C503/5513 (LPC Bridge) 16.1224 - 0200 5597/5598/6326 VGA 16.1225 - 1039 0000 SiS5597 SVGA (Shared RAM) 16.1226 - 0204 82C204 16.1227 - 0205 SG86C205 16.1228 - 0300 SiS300/305 PCI/AGP VGA Display Adapter 16.1229 - 107d 2720 Leadtek WinFast VR300 16.1230 - 0310 SiS315H PCI/AGP VGA Display Adapter 16.1231 - 0315 SiS315 PCI/AGP VGA Display Adapter 16.1232 - 0325 SiS315PRO PCI/AGP VGA Display Adapter 16.1233 - 0330 SiS330 [Xabre] PCI/AGP VGA Display Adapter 16.1234 - 0406 85C501/2 16.1235 - 0496 85C496 16.1236 - 0530 530 Host 16.1237 - 0540 540 Host 16.1238 - 0597 5513C 16.1239 - 0601 85C601 16.1240 - 0620 620 Host 16.1241 - 0630 630 Host 16.1242 - 0633 633 Host 16.1243 - 0635 635 Host 16.1244 - 0645 SiS645 Host & Memory & AGP Controller 16.1245 - 0646 SiS645DX Host & Memory & AGP Controller 16.1246 - 0648 SiS 645xx 16.1247 - 0650 650 Host 16.1248 - 0651 SiS651 Host 16.1249 - 0730 730 Host 16.1250 - 0733 733 Host 16.1251 - 0735 735 Host 16.1252 - 0740 740 Host 16.1253 - 0745 745 Host 16.1254 - 0746 746 Host 16.1255 - 0755 SiS 755 Host Bridge 16.1256 - 0900 SiS900 10/100 Ethernet 16.1257 - 1039 0900 SiS900 10/100 Ethernet Adapter 16.1258 - 0961 SiS961 [MuTIOL Media IO] 16.1259 - 0962 SiS962 [MuTIOL Media IO] 16.1260 - 3602 83C602 16.1261 - 5107 5107 16.1262 - 5300 SiS540 PCI Display Adapter 16.1263 - 5315 SiS550 AGP/VGA VGA Display Adapter 16.1264 - 5401 486 PCI Chipset 16.1265 - 5511 5511/5512 16.1266 - 5513 5513 [IDE] 16.1267 - 1019 0970 P6STP-FL motherboard 16.1268 - 1039 5513 SiS5513 EIDE Controller (A,B step) 16.1269 - 5517 5517 16.1270 - 5571 5571 16.1271 - 5581 5581 Pentium Chipset 16.1272 - 5582 5582 16.1273 - 5591 5591/5592 Host 16.1274 - 5596 5596 Pentium Chipset 16.1275 - 5597 5597 [SiS5582] 16.1276 - 5600 5600 Host 16.1277 - 6204 Video decoder & MPEG interface 16.1278 - 6205 VGA Controller 16.1279 - 6236 6236 3D-AGP 16.1280 - 6300 SiS630 GUI Accelerator+3D 16.1281 - 1019 0970 P6STP-FL motherboard 16.1282 - 6306 SiS530 3D PCI/AGP 16.1283 - 1039 6306 SiS530,620 GUI Accelerator+3D 16.1284 - 6325 SiS65x/M650/740 PCI/AGP VGA Display Adapter 16.1285 - 6326 86C326 5598/6326 16.1286 - 1039 6326 SiS6326 GUI Accelerator 16.1287 - 1092 0a50 SpeedStar A50 16.1288 - 1092 0a70 SpeedStar A70 16.1289 - 1092 4910 SpeedStar A70 16.1290 - 1092 4920 SpeedStar A70 16.1291 - 1569 6326 SiS6326 GUI Accelerator 16.1292 - 7001 USB 1.0 Controller 16.1293 - 1039 7000 Onboard USB Controller 16.1294 - 7002 USB 2.0 Controller 16.1295 - 1509 7002 Onboard USB Controller 16.1296 - 7007 FireWire Controller 16.1297 - 7012 Sound Controller 16.1298 - 7013 Intel 537 [56k Winmodem] 16.1299 - 7016 10/100 Ethernet Adapter 16.1300 - 1039 7016 SiS7016 10/100 Ethernet Adapter 16.1301 - 7018 SiS PCI Audio Accelerator 16.1302 - 1014 01b6 SiS PCI Audio Accelerator 16.1303 - 1014 01b7 SiS PCI Audio Accelerator 16.1304 - 1019 7018 SiS PCI Audio Accelerator 16.1305 - 1025 000e SiS PCI Audio Accelerator 16.1306 - 1025 0018 SiS PCI Audio Accelerator 16.1307 - 1039 7018 SiS PCI Audio Accelerator 16.1308 - 1043 800b SiS PCI Audio Accelerator 16.1309 - 1054 7018 SiS PCI Audio Accelerator 16.1310 - 107d 5330 SiS PCI Audio Accelerator 16.1311 - 107d 5350 SiS PCI Audio Accelerator 16.1312 - 1170 3209 SiS PCI Audio Accelerator 16.1313 - 1462 400a SiS PCI Audio Accelerator 16.1314 - 14a4 2089 SiS PCI Audio Accelerator 16.1315 - 14cd 2194 SiS PCI Audio Accelerator 16.1316 - 14ff 1100 SiS PCI Audio Accelerator 16.1317 - 152d 8808 SiS PCI Audio Accelerator 16.1318 - 1558 1103 SiS PCI Audio Accelerator 16.1319 - 1558 2200 SiS PCI Audio Accelerator 16.1320 - 1563 7018 SiS PCI Audio Accelerator 16.1321 - 15c5 0111 SiS PCI Audio Accelerator 16.1322 - 270f a171 SiS PCI Audio Accelerator 16.1323 - a0a0 0022 SiS PCI Audio Accelerator 16.1324 -103a Seiko Epson Corporation 16.1325 -103b Tatung Co. of America 16.1326 -103c Hewlett-Packard Company 16.1327 - 1005 A4977A Visualize EG 16.1328 - 1006 Visualize FX6 16.1329 - 1008 Visualize FX4 16.1330 - 100a Visualize FX2 16.1331 - 1028 Tach TL Fibre Channel Host Adapter 16.1332 - 1029 Tach XL2 Fibre Channel Host Adapter 16.1333 - 107e 000f Interphase 5560 Fibre Channel Adapter 16.1334 - 9004 9210 1Gb/2Gb Family Fibre Channel Controller 16.1335 - 9004 9211 1Gb/2Gb Family Fibre Channel Controller 16.1336 - 102a Tach TS Fibre Channel Host Adapter 16.1337 - 107e 000e Interphase 5540/5541 Fibre Channel Adapter 16.1338 - 9004 9110 1Gb/2Gb Family Fibre Channel Controller 16.1339 - 9004 9111 1Gb/2Gb Family Fibre Channel Controller 16.1340 - 1030 J2585A DeskDirect 10/100VG NIC 16.1341 - 1031 J2585B HP 10/100VG PCI LAN Adapter 16.1342 - 103c 1040 J2973A DeskDirect 10BaseT NIC 16.1343 - 103c 1041 J2585B DeskDirect 10/100VG NIC 16.1344 - 103c 1042 J2970A DeskDirect 10BaseT/2 NIC 16.1345 - 1040 J2973A DeskDirect 10BaseT NIC 16.1346 - 1041 J2585B DeskDirect 10/100 NIC 16.1347 - 1042 J2970A DeskDirect 10BaseT/2 NIC 16.1348 - 1048 Diva Serial [GSP] Multiport UART 16.1349 - 103c 1049 Tosca Console 16.1350 - 103c 104a Tosca Secondary 16.1351 - 103c 104b Maestro SP2 16.1352 - 103c 1223 Halfdome Console 16.1353 - 103c 1226 Keystone SP2 16.1354 - 103c 1227 Powerbar SP2 16.1355 - 103c 1282 Everest SP2 16.1356 - 1054 PCI Local Bus Adapter 16.1357 - 1064 79C970 PCnet Ethernet Controller 16.1358 - 108b Visualize FXe 16.1359 - 10c1 NetServer Smart IRQ Router 16.1360 - 10ed TopTools Remote Control 16.1361 - 1200 82557B 10/100 NIC 16.1362 - 1219 NetServer PCI Hot-Plug Controller 16.1363 - 121a NetServer SMIC Controller 16.1364 - 121b NetServer Legacy COM Port Decoder 16.1365 - 121c NetServer PCI COM Port Decoder 16.1366 - 1229 zx1 System Bus Adapter 16.1367 - 122a zx1 I/O Controller 16.1368 - 122e PCI-X/AGP Local Bus Adapter 16.1369 - 127c sx1000 I/O Controller 16.1370 - 1290 Auxiliary Diva Serial Port 16.1371 - 2910 E2910A PCIBus Exerciser 16.1372 - 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer 16.1373 -103e Solliday Engineering 16.1374 -103f Synopsys/Logic Modeling Group 16.1375 -1040 Accelgraphics Inc. 16.1376 -1041 Computrend 16.1377 -1042 Micron 16.1378 - 1000 PC Tech RZ1000 16.1379 - 1001 PC Tech RZ1001 16.1380 - 3000 Samurai_0 16.1381 - 3010 Samurai_1 16.1382 - 3020 Samurai_IDE 16.1383 -1043 Asustek Computer, Inc. 16.1384 - 0675 ISDNLink P-IN100-ST-D 16.1385 - 4021 v7100 Combo Deluxe [GeForce2 MX + TV tuner] 16.1386 - 4057 V8200 GeForce 3 16.1387 -1044 Distributed Processing Technology 16.1388 - 1012 Domino RAID Engine 16.1389 - a400 SmartCache/Raid I-IV Controller 16.1390 - a500 PCI Bridge 16.1391 - a501 SmartRAID V Controller 16.1392 - 1044 c001 PM1554U2 Ultra2 Single Channel 16.1393 - 1044 c002 PM1654U2 Ultra2 Single Channel 16.1394 - 1044 c003 PM1564U3 Ultra3 Single Channel 16.1395 - 1044 c004 PM1564U3 Ultra3 Dual Channel 16.1396 - 1044 c005 PM1554U2 Ultra2 Single Channel (NON ACPI) 16.1397 - 1044 c00a PM2554U2 Ultra2 Single Channel 16.1398 - 1044 c00b PM2654U2 Ultra2 Single Channel 16.1399 - 1044 c00c PM2664U3 Ultra3 Single Channel 16.1400 - 1044 c00d PM2664U3 Ultra3 Dual Channel 16.1401 - 1044 c00e PM2554U2 Ultra2 Single Channel (NON ACPI) 16.1402 - 1044 c00f PM2654U2 Ultra2 Single Channel (NON ACPI) 16.1403 - 1044 c014 PM3754U2 Ultra2 Single Channel (NON ACPI) 16.1404 - 1044 c015 PM3755U2B Ultra2 Single Channel (NON ACPI) 16.1405 - 1044 c016 PM3755F Fibre Channel (NON ACPI) 16.1406 - 1044 c01e PM3757U2 Ultra2 Single Channel 16.1407 - 1044 c01f PM3757U2 Ultra2 Dual Channel 16.1408 - 1044 c020 PM3767U3 Ultra3 Dual Channel 16.1409 - 1044 c021 PM3767U3 Ultra3 Quad Channel 16.1410 - 1044 c028 PM2865U3 Ultra3 Single Channel 16.1411 - 1044 c029 PM2865U3 Ultra3 Dual Channel 16.1412 - 1044 c02a PM2865F Fibre Channel 16.1413 - 1044 c03c 2000S Ultra3 Single Channel 16.1414 - 1044 c03d 2000S Ultra3 Dual Channel 16.1415 - 1044 c03e 2000F Fibre Channel 16.1416 - 1044 c046 3000S Ultra3 Single Channel 16.1417 - 1044 c047 3000S Ultra3 Dual Channel 16.1418 - 1044 c048 3000F Fibre Channel 16.1419 - 1044 c050 5000S Ultra3 Single Channel 16.1420 - 1044 c051 5000S Ultra3 Dual Channel 16.1421 - 1044 c052 5000F Fibre Channel 16.1422 - 1044 c05a 2400A UDMA Four Channel 16.1423 - 1044 c05b 2400A UDMA Four Channel DAC 16.1424 - 1044 c064 3010S Ultra3 Dual Channel 16.1425 - 1044 c065 3010S Ultra3 Four Channel 16.1426 - 1044 c066 3010S Fibre Channel 16.1427 - a511 SmartRAID V Controller 16.1428 -1045 OPTi Inc. 16.1429 - a0f8 82C750 [Vendetta] USB Controller 16.1430 - c101 92C264 16.1431 - c178 92C178 16.1432 - c556 82X556 [Viper] 16.1433 - c557 82C557 [Viper-M] 16.1434 - c558 82C558 [Viper-M ISA+IDE] 16.1435 - c567 82C750 [Vendetta], device 0 16.1436 - c568 82C750 [Vendetta], device 1 16.1437 - c569 82C579 [Viper XPress+ Chipset] 16.1438 - c621 82C621 [Viper-M/N+] 16.1439 - c700 82C700 [FireStar] 16.1440 - c701 82C701 [FireStar Plus] 16.1441 - c814 82C814 [Firebridge 1] 16.1442 - c822 82C822 16.1443 - c824 82C824 16.1444 - c825 82C825 [Firebridge 2] 16.1445 - c832 82C832 16.1446 - c861 82C861 16.1447 - c895 82C895 16.1448 - c935 EV1935 ECTIVA MachOne PCI Audio 16.1449 - d568 82C825 [Firebridge 2] 16.1450 - d721 IDE [FireStar] 16.1451 -1046 IPC Corporation, Ltd. 16.1452 -1047 Genoa Systems Corp 16.1453 -1048 Elsa AG 16.1454 - 0d22 Quadro4 900XGL [ELSA GLoria4 900XGL] 16.1455 - 1000 QuickStep 1000 16.1456 - 3000 QuickStep 3000 16.1457 -1049 Fountain Technologies, Inc. 16.1458 -104a SGS Thomson Microelectronics 16.1459 - 0008 STG 2000X 16.1460 - 0009 STG 1764X 16.1461 - 0010 STG4000 [3D Prophet Kyro Series] 16.1462 -# From <http://gatekeeper.dec.com/pub/BSD/FreeBSD/FreeBSD-stable/src/share/misc/pci_vendors> 16.1463 - 0210 STPC Atlas ISA Bridge 16.1464 - 0981 DEC-Tulip compatible 10/100 Ethernet 16.1465 - 1746 STG 1764X 16.1466 - 2774 DEC-Tulip compatible 10/100 Ethernet 16.1467 - 3520 MPEG-II decoder card 16.1468 -104b BusLogic 16.1469 - 0140 BT-946C (old) [multimaster 01] 16.1470 - 1040 BT-946C (BA80C30) [MultiMaster 10] 16.1471 - 8130 Flashpoint LT 16.1472 -104c Texas Instruments 16.1473 - 0500 100 MBit LAN Controller 16.1474 - 0508 TMS380C2X Compressor Interface 16.1475 - 1000 Eagle i/f AS 16.1476 - 104c PCI1510 PC card Cardbus Controller 16.1477 - 3d04 TVP4010 [Permedia] 16.1478 - 3d07 TVP4020 [Permedia 2] 16.1479 - 1011 4d10 Comet 16.1480 - 1040 000f AccelStar II 16.1481 - 1040 0011 AccelStar II 16.1482 - 1048 0a31 WINNER 2000 16.1483 - 1048 0a32 GLoria Synergy 16.1484 - 1048 0a35 GLoria Synergy 16.1485 - 107d 2633 WinFast 3D L2300 16.1486 - 1092 0127 FIRE GL 1000 PRO 16.1487 - 1092 0136 FIRE GL 1000 PRO 16.1488 - 1092 0141 FIRE GL 1000 PRO 16.1489 - 1092 0146 FIRE GL 1000 PRO 16.1490 - 1092 0148 FIRE GL 1000 PRO 16.1491 - 1092 0149 FIRE GL 1000 PRO 16.1492 - 1092 0152 FIRE GL 1000 PRO 16.1493 - 1092 0154 FIRE GL 1000 PRO 16.1494 - 1092 0155 FIRE GL 1000 PRO 16.1495 - 1092 0156 FIRE GL 1000 PRO 16.1496 - 1092 0157 FIRE GL 1000 PRO 16.1497 - 1097 3d01 Jeronimo Pro 16.1498 - 1102 100f Graphics Blaster Extreme 16.1499 - 3d3d 0100 Reference Permedia 2 3D 16.1500 - 8000 PCILynx/PCILynx2 IEEE 1394 Link Layer Controller 16.1501 - e4bf 1010 CF1-1-SNARE 16.1502 - e4bf 1020 CF1-2-SNARE 16.1503 - 8009 FireWire Controller 16.1504 - 104d 8032 8032 OHCI i.LINK (IEEE 1394) Controller 16.1505 - 8017 PCI4410 FireWire Controller 16.1506 - 8019 TSB12LV23 IEEE-1394 Controller 16.1507 - 11bd 000a Studio DV500-1394 16.1508 - 11bd 000e Studio DV 16.1509 - e4bf 1010 CF2-1-CYMBAL 16.1510 - 8020 TSB12LV26 IEEE-1394 Controller (Link) 16.1511 - 8021 TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated) 16.1512 - 104d 80df Vaio PCG-FX403 16.1513 - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 16.1514 - 8022 TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link) 16.1515 - 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) 16.1516 - 8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link) 16.1517 - 8026 TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) 16.1518 - 8027 PCI4451 IEEE-1394 Controller 16.1519 - 1028 00e6 PCI4451 IEEE-1394 Controller (Dell Inspiron 8100) 16.1520 - 8029 PCI4510 IEEE-1394 Controller 16.1521 - 8400 ACX 100 22Mbps Wireless Interface 16.1522 - a001 TDC1570 16.1523 - a100 TDC1561 16.1524 - a102 TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f 16.1525 - a106 TMS320C6205 16.1526 - ac10 PCI1050 16.1527 - ac11 PCI1053 16.1528 - ac12 PCI1130 16.1529 - ac13 PCI1031 16.1530 - ac15 PCI1131 16.1531 - ac16 PCI1250 16.1532 - ac17 PCI1220 16.1533 - ac18 PCI1260 16.1534 - ac19 PCI1221 16.1535 - ac1a PCI1210 16.1536 - ac1b PCI1450 16.1537 - 0e11 b113 Armada M700 16.1538 - ac1c PCI1225 16.1539 - ac1d PCI1251A 16.1540 - ac1e PCI1211 16.1541 - ac1f PCI1251B 16.1542 - ac20 TI 2030 16.1543 - ac21 PCI2031 16.1544 - ac22 PCI2032 PCI Docking Bridge 16.1545 - ac23 PCI2250 PCI-to-PCI Bridge 16.1546 - ac28 PCI2050 PCI-to-PCI Bridge 16.1547 - ac30 PCI1260 PC card Cardbus Controller 16.1548 - ac40 PCI4450 PC card Cardbus Controller 16.1549 - ac41 PCI4410 PC card Cardbus Controller 16.1550 - ac42 PCI4451 PC card Cardbus Controller 16.1551 - 1028 00e6 PCI4451 PC card CardBus Controller (Dell Inspiron 8100) 16.1552 - ac44 PCI4510 PC card Cardbus Controller 16.1553 - ac50 PCI1410 PC card Cardbus Controller 16.1554 - ac51 PCI1420 16.1555 - 1014 023b ThinkPad T23 (2647-4MG) 16.1556 - 10cf 1095 Lifebook C6155 16.1557 - e4bf 1000 CP2-2-HIPHOP 16.1558 - ac52 PCI1451 PC card Cardbus Controller 16.1559 - ac53 PCI1421 PC card Cardbus Controller 16.1560 - ac55 PCI1250 PC card Cardbus Controller 16.1561 - 1014 0512 ThinkPad T30 16.1562 - ac56 PCI1510 PC card Cardbus Controller 16.1563 - ac60 PCI2040 PCI to DSP Bridge Controller 16.1564 - fe00 FireWire Host Controller 16.1565 - fe03 12C01A FireWire Host Controller 16.1566 -104d Sony Corporation 16.1567 - 8009 CXD1947Q i.LINK Controller 16.1568 - 8039 CXD3222 i.LINK Controller 16.1569 - 8056 Rockwell HCF 56K modem 16.1570 - 808a Memory Stick Controller 16.1571 -104e Oak Technology, Inc 16.1572 - 0017 OTI-64017 16.1573 - 0107 OTI-107 [Spitfire] 16.1574 - 0109 Video Adapter 16.1575 - 0111 OTI-64111 [Spitfire] 16.1576 - 0217 OTI-64217 16.1577 - 0317 OTI-64317 16.1578 -104f Co-time Computer Ltd 16.1579 -1050 Winbond Electronics Corp 16.1580 - 0000 NE2000 16.1581 - 0001 W83769F 16.1582 - 0105 W82C105 16.1583 - 0840 W89C840 16.1584 - 1050 0001 W89C840 Ethernet Adapter 16.1585 - 1050 0840 W89C840 Ethernet Adapter 16.1586 - 0940 W89C940 16.1587 - 5a5a W89C940F 16.1588 - 6692 W6692 16.1589 - 9970 W9970CF 16.1590 -1051 Anigma, Inc. 16.1591 -1052 ?Young Micro Systems 16.1592 -1053 Young Micro Systems 16.1593 -1054 Hitachi, Ltd 16.1594 -1055 Efar Microsystems 16.1595 - 9130 SLC90E66 [Victory66] IDE 16.1596 - 9460 SLC90E66 [Victory66] ISA 16.1597 - 9462 SLC90E66 [Victory66] USB 16.1598 - 9463 SLC90E66 [Victory66] ACPI 16.1599 -1056 ICL 16.1600 -# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this. 16.1601 -1057 Motorola 16.1602 - 0001 MPC105 [Eagle] 16.1603 - 0002 MPC106 [Grackle] 16.1604 - 0003 MPC8240 [Kahlua] 16.1605 - 0004 MPC107 16.1606 - 0006 MPC8245 [Unity] 16.1607 - 0100 MC145575 [HFC-PCI] 16.1608 - 0431 KTI829c 100VG 16.1609 - 1801 Audio I/O Controller (MIDI) 16.1610 - ecc0 0030 Layla 16.1611 - 18c0 MPC8265A/MPC8266 16.1612 - 4801 Raven 16.1613 - 4802 Falcon 16.1614 - 4803 Hawk 16.1615 - 4806 CPX8216 16.1616 - 4d68 20268 16.1617 - 5600 SM56 PCI Modem 16.1618 - 1057 0300 SM56 PCI Speakerphone Modem 16.1619 - 1057 0301 SM56 PCI Voice Modem 16.1620 - 1057 0302 SM56 PCI Fax Modem 16.1621 - 1057 5600 SM56 PCI Voice modem 16.1622 - 13d2 0300 SM56 PCI Speakerphone Modem 16.1623 - 13d2 0301 SM56 PCI Voice modem 16.1624 - 13d2 0302 SM56 PCI Fax Modem 16.1625 - 1436 0300 SM56 PCI Speakerphone Modem 16.1626 - 1436 0301 SM56 PCI Voice modem 16.1627 - 1436 0302 SM56 PCI Fax Modem 16.1628 - 144f 100c SM56 PCI Fax Modem 16.1629 - 1494 0300 SM56 PCI Speakerphone Modem 16.1630 - 1494 0301 SM56 PCI Voice modem 16.1631 - 14c8 0300 SM56 PCI Speakerphone Modem 16.1632 - 14c8 0302 SM56 PCI Fax Modem 16.1633 - 1668 0300 SM56 PCI Speakerphone Modem 16.1634 - 1668 0302 SM56 PCI Fax Modem 16.1635 - 6400 MPC190 Security Processor (S1 family, encryption) 16.1636 -1058 Electronics & Telecommunications RSH 16.1637 -1059 Teknor Industrial Computers Inc 16.1638 -105a Promise Technology, Inc. 16.1639 - 0d30 20265 16.1640 - 105a 4d33 Ultra100 16.1641 - 0d38 20263 16.1642 - 105a 4d39 Fasttrak66 16.1643 - 1275 20275 16.1644 - 3376 PDC20376 16.1645 - 1043 809e A7V8X motherboard 16.1646 - 4d30 20267 16.1647 - 105a 4d33 Ultra100 16.1648 - 105a 4d39 Fasttrak100 16.1649 - 4d33 20246 16.1650 - 105a 4d33 20246 IDE Controller 16.1651 - 4d38 20262 16.1652 - 105a 4d30 Ultra Device on SuperTrak 16.1653 - 105a 4d33 Ultra66 16.1654 - 105a 4d39 Fasttrak66 16.1655 - 4d68 20268 16.1656 - 105a 4d68 Ultra100TX2 16.1657 - 4d69 20269 16.1658 - 105a 4d68 Ultra133TX2 16.1659 - 5275 PDC20276 IDE 16.1660 - 105a 0275 SuperTrak SX6000 IDE 16.1661 - 5300 DC5300 16.1662 - 6268 20268R 16.1663 - 6269 PDC20271 16.1664 - 105a 6269 FastTrak TX2/TX2000 16.1665 - 6621 PDC20621 [SX4000] 4 Channel IDE RAID Controller 16.1666 - 7275 PDC20277 16.1667 -105b Foxconn International, Inc. 16.1668 -105c Wipro Infotech Limited 16.1669 -105d Number 9 Computer Company 16.1670 - 2309 Imagine 128 16.1671 - 2339 Imagine 128-II 16.1672 - 105d 0000 Imagine 128 series 2 4Mb VRAM 16.1673 - 105d 0001 Imagine 128 series 2 4Mb VRAM 16.1674 - 105d 0002 Imagine 128 series 2 4Mb VRAM 16.1675 - 105d 0003 Imagine 128 series 2 4Mb VRAM 16.1676 - 105d 0004 Imagine 128 series 2 4Mb VRAM 16.1677 - 105d 0005 Imagine 128 series 2 4Mb VRAM 16.1678 - 105d 0006 Imagine 128 series 2 4Mb VRAM 16.1679 - 105d 0007 Imagine 128 series 2 4Mb VRAM 16.1680 - 105d 0008 Imagine 128 series 2e 4Mb DRAM 16.1681 - 105d 0009 Imagine 128 series 2e 4Mb DRAM 16.1682 - 105d 000a Imagine 128 series 2 8Mb VRAM 16.1683 - 105d 000b Imagine 128 series 2 8Mb H-VRAM 16.1684 - 11a4 000a Barco Metheus 5 Megapixel 16.1685 - 13cc 0000 Barco Metheus 5 Megapixel 16.1686 - 13cc 0004 Barco Metheus 5 Megapixel 16.1687 - 13cc 0005 Barco Metheus 5 Megapixel 16.1688 - 13cc 0006 Barco Metheus 5 Megapixel 16.1689 - 13cc 0008 Barco Metheus 5 Megapixel 16.1690 - 13cc 0009 Barco Metheus 5 Megapixel 16.1691 - 13cc 000a Barco Metheus 5 Megapixel 16.1692 - 13cc 000c Barco Metheus 5 Megapixel 16.1693 - 493d Imagine 128 T2R [Ticket to Ride] 16.1694 - 11a4 000a Barco Metheus 5 Megapixel, Dual Head 16.1695 - 11a4 000b Barco Metheus 5 Megapixel, Dual Head 16.1696 - 13cc 0002 Barco Metheus 4 Megapixel, Dual Head 16.1697 - 13cc 0003 Barco Metheus 5 Megapixel, Dual Head 16.1698 - 13cc 0007 Barco Metheus 5 Megapixel, Dual Head 16.1699 - 13cc 0008 Barco Metheus 5 Megapixel, Dual Head 16.1700 - 13cc 0009 Barco Metheus 5 Megapixel, Dual Head 16.1701 - 13cc 000a Barco Metheus 5 Megapixel, Dual Head 16.1702 - 5348 Revolution 4 16.1703 - 105d 0037 Revolution IV-FP AGP (For SGI 1600SW) 16.1704 -105e Vtech Computers Ltd 16.1705 -105f Infotronic America Inc 16.1706 -1060 United Microelectronics [UMC] 16.1707 - 0001 UM82C881 16.1708 - 0002 UM82C886 16.1709 - 0101 UM8673F 16.1710 - 0881 UM8881 16.1711 - 0886 UM8886F 16.1712 - 0891 UM8891A 16.1713 - 1001 UM886A 16.1714 - 673a UM8886BF 16.1715 - 673b EIDE Master/DMA 16.1716 - 8710 UM8710 16.1717 - 886a UM8886A 16.1718 - 8881 UM8881F 16.1719 - 8886 UM8886F 16.1720 - 888a UM8886A 16.1721 - 8891 UM8891A 16.1722 - 9017 UM9017F 16.1723 - 9018 UM9018 16.1724 - 9026 UM9026 16.1725 - e881 UM8881N 16.1726 - e886 UM8886N 16.1727 - e88a UM8886N 16.1728 - e891 UM8891N 16.1729 -1061 I.I.T. 16.1730 - 0001 AGX016 16.1731 - 0002 IIT3204/3501 16.1732 -1062 Maspar Computer Corp 16.1733 -1063 Ocean Office Automation 16.1734 -1064 Alcatel 16.1735 -1065 Texas Microsystems 16.1736 -1066 PicoPower Technology 16.1737 - 0000 PT80C826 16.1738 - 0001 PT86C521 [Vesuvius v1] Host Bridge 16.1739 - 0002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Master 16.1740 - 0003 PT86C524 [Nile] PCI-to-PCI Bridge 16.1741 - 0004 PT86C525 [Nile-II] PCI-to-PCI Bridge 16.1742 - 0005 National PC87550 System Controller 16.1743 - 8002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave 16.1744 -1067 Mitsubishi Electric 16.1745 - 1002 VG500 [VolumePro Volume Rendering Accelerator] 16.1746 -1068 Diversified Technology 16.1747 -1069 Mylex Corporation 16.1748 - 0001 DAC960P 16.1749 - 0002 DAC960PD 16.1750 - 0010 DAC960PX 16.1751 - 0050 AcceleRAID 352/170/160 support Device 16.1752 - ba55 eXtremeRAID 1100 support Device 16.1753 - ba56 eXtremeRAID 2000/3000 support Device 16.1754 -106a Aten Research Inc 16.1755 -106b Apple Computer Inc. 16.1756 - 0001 Bandit PowerPC host bridge 16.1757 - 0002 Grand Central I/O 16.1758 - 0003 Control Video 16.1759 - 0004 PlanB Video-In 16.1760 - 0007 O'Hare I/O 16.1761 - 000e Hydra Mac I/O 16.1762 - 0010 Heathrow Mac I/O 16.1763 - 0017 Paddington Mac I/O 16.1764 - 0018 UniNorth FireWire 16.1765 - 0019 KeyLargo USB 16.1766 - 001e UniNorth Internal PCI 16.1767 - 001f UniNorth PCI 16.1768 - 0020 UniNorth AGP 16.1769 - 0021 UniNorth GMAC (Sun GEM) 16.1770 - 0022 KeyLargo Mac I/O 16.1771 - 0024 UniNorth/Pangea GMAC (Sun GEM) 16.1772 - 0025 KeyLargo/Pangea Mac I/O 16.1773 - 0026 KeyLargo/Pangea USB 16.1774 - 0027 UniNorth/Pangea AGP 16.1775 - 0028 UniNorth/Pangea PCI 16.1776 - 0029 UniNorth/Pangea Internal PCI 16.1777 - 002d UniNorth 1.5 AGP 16.1778 - 002e UniNorth 1.5 PCI 16.1779 - 002f UniNorth 1.5 Internal PCI 16.1780 - 0030 UniNorth/Pangea FireWire 16.1781 - 0031 UniNorth 2 FireWire 16.1782 - 0032 UniNorth 2 GMAC (Sun GEM) 16.1783 - 0033 UniNorth 2 ATA/100 16.1784 - 0034 UniNorth 2 AGP 16.1785 - 1645 Tigon3 Gigabit Ethernet NIC (BCM5701) 16.1786 -106c Hyundai Electronics America 16.1787 - 8801 Dual Pentium ISA/PCI Motherboard 16.1788 - 8802 PowerPC ISA/PCI Motherboard 16.1789 - 8803 Dual Window Graphics Accelerator 16.1790 - 8804 LAN Controller 16.1791 - 8805 100-BaseT LAN 16.1792 -106d Sequent Computer Systems 16.1793 -106e DFI, Inc 16.1794 -106f City Gate Development Ltd 16.1795 -1070 Daewoo Telecom Ltd 16.1796 -1071 Mitac 16.1797 -1072 GIT Co Ltd 16.1798 -1073 Yamaha Corporation 16.1799 - 0001 3D GUI Accelerator 16.1800 - 0002 YGV615 [RPA3 3D-Graphics Controller] 16.1801 - 0003 YMF-740 16.1802 - 0004 YMF-724 16.1803 - 1073 0004 YMF724-Based PCI Audio Adapter 16.1804 - 0005 DS1 Audio 16.1805 - 1073 0005 DS-XG PCI Audio CODEC 16.1806 - 0006 DS1 Audio 16.1807 - 0008 DS1 Audio 16.1808 - 1073 0008 DS-XG PCI Audio CODEC 16.1809 - 000a DS1L Audio 16.1810 - 1073 0004 DS-XG PCI Audio CODEC 16.1811 - 1073 000a DS-XG PCI Audio CODEC 16.1812 - 000c YMF-740C [DS-1L Audio Controller] 16.1813 - 107a 000c DS-XG PCI Audio CODEC 16.1814 - 000d YMF-724F [DS-1 Audio Controller] 16.1815 - 1073 000d DS-XG PCI Audio CODEC 16.1816 - 0010 YMF-744B [DS-1S Audio Controller] 16.1817 - 1073 0006 DS-XG PCI Audio CODEC 16.1818 - 1073 0010 DS-XG PCI Audio CODEC 16.1819 - 0012 YMF-754 [DS-1E Audio Controller] 16.1820 - 1073 0012 DS-XG PCI Audio Codec 16.1821 - 0020 DS-1 Audio 16.1822 - 2000 DS2416 Digital Mixing Card 16.1823 - 1073 2000 DS2416 Digital Mixing Card 16.1824 -1074 NexGen Microsystems 16.1825 - 4e78 82c500/1 16.1826 -1075 Advanced Integrations Research 16.1827 -1076 Chaintech Computer Co. Ltd 16.1828 -1077 QLogic Corp. 16.1829 - 1016 ISP10160 Single Channel Ultra3 SCSI Processor 16.1830 - 1020 ISP1020 Fast-wide SCSI 16.1831 - 1022 ISP1022 Fast-wide SCSI 16.1832 - 1080 ISP1080 SCSI Host Adapter 16.1833 - 1216 ISP12160 Dual Channel Ultra3 SCSI Processor 16.1834 - 101e 8471 QLA12160 on AMI MegaRAID 16.1835 - 101e 8493 QLA12160 on AMI MegaRAID 16.1836 - 1240 ISP1240 SCSI Host Adapter 16.1837 - 1280 ISP1280 16.1838 - 2020 ISP2020A Fast!SCSI Basic Adapter 16.1839 - 2100 QLA2100 64-bit Fibre Channel Adapter 16.1840 - 1077 0001 QLA2100 64-bit Fibre Channel Adapter 16.1841 - 2200 QLA2200 16.1842 - 1077 0002 QLA2200 16.1843 - 2300 QLA2300 64-bit FC-AL Adapter 16.1844 - 2312 QLA2312 Fibre Channel Adapter 16.1845 -1078 Cyrix Corporation 16.1846 - 0000 5510 [Grappa] 16.1847 - 0001 PCI Master 16.1848 - 0002 5520 [Cognac] 16.1849 - 0100 5530 Legacy [Kahlua] 16.1850 - 0101 5530 SMI [Kahlua] 16.1851 - 0102 5530 IDE [Kahlua] 16.1852 - 0103 5530 Audio [Kahlua] 16.1853 - 0104 5530 Video [Kahlua] 16.1854 - 0400 ZFMicro PCI Bridge 16.1855 - 0401 ZFMicro Chipset SMI 16.1856 - 0402 ZFMicro Chipset IDE 16.1857 - 0403 ZFMicro Expansion Bus 16.1858 -1079 I-Bus 16.1859 -107a NetWorth 16.1860 -107b Gateway 2000 16.1861 -107c LG Electronics [Lucky Goldstar Co. Ltd] 16.1862 -107d LeadTek Research Inc. 16.1863 - 0000 P86C850 16.1864 -107e Interphase Corporation 16.1865 - 0001 5515 ATM Adapter [Flipper] 16.1866 - 0002 100 VG AnyLan Controller 16.1867 - 0004 5526 Fibre Channel Host Adapter 16.1868 - 0005 x526 Fibre Channel Host Adapter 16.1869 - 0008 5525/5575 ATM Adapter (155 Mbit) [Atlantic] 16.1870 - 9003 5535-4P-BRI-ST 16.1871 - 9007 5535-4P-BRI-U 16.1872 - 9008 5535-1P-SR 16.1873 - 900c 5535-1P-SR-ST 16.1874 - 900e 5535-1P-SR-U 16.1875 - 9011 5535-1P-PRI 16.1876 - 9013 5535-2P-PRI 16.1877 - 9023 5536-4P-BRI-ST 16.1878 - 9027 5536-4P-BRI-U 16.1879 - 9031 5536-1P-PRI 16.1880 - 9033 5536-2P-PRI 16.1881 -107f Data Technology Corporation 16.1882 - 0802 SL82C105 16.1883 -1080 Contaq Microsystems 16.1884 - 0600 82C599 16.1885 - c691 Cypress CY82C691 16.1886 - c693 82c693 16.1887 -1081 Supermac Technology 16.1888 - 0d47 Radius PCI to NuBUS Bridge 16.1889 -1082 EFA Corporation of America 16.1890 -1083 Forex Computer Corporation 16.1891 - 0001 FR710 16.1892 -1084 Parador 16.1893 -1085 Tulip Computers Int.B.V. 16.1894 -1086 J. Bond Computer Systems 16.1895 -1087 Cache Computer 16.1896 -1088 Microcomputer Systems (M) Son 16.1897 -1089 Data General Corporation 16.1898 -# Formerly Bit3 Computer Corp. 16.1899 -108a SBS Technologies 16.1900 - 0001 VME Bridge Model 617 16.1901 - 0010 VME Bridge Model 618 16.1902 - 0040 dataBLIZZARD 16.1903 - 3000 VME Bridge Model 2706 16.1904 -108c Oakleigh Systems Inc. 16.1905 -108d Olicom 16.1906 - 0001 Token-Ring 16/4 PCI Adapter (3136/3137) 16.1907 - 0002 16/4 Token Ring 16.1908 - 0004 RapidFire 3139 Token-Ring 16/4 PCI Adapter 16.1909 - 108d 0004 OC-3139/3140 RapidFire Token-Ring 16/4 Adapter 16.1910 - 0005 GoCard 3250 Token-Ring 16/4 CardBus PC Card 16.1911 - 0006 OC-3530 RapidFire Token-Ring 100 16.1912 - 0007 RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter 16.1913 - 108d 0007 OC-3141 RapidFire Token-Ring 16/4 Adapter 16.1914 - 0008 RapidFire 3540 HSTR 100/16/4 PCI Adapter 16.1915 - 108d 0008 OC-3540 RapidFire HSTR 100/16/4 Adapter 16.1916 - 0011 OC-2315 16.1917 - 0012 OC-2325 16.1918 - 0013 OC-2183/2185 16.1919 - 0014 OC-2326 16.1920 - 0019 OC-2327/2250 10/100 Ethernet Adapter 16.1921 - 108d 0016 OC-2327 Rapidfire 10/100 Ethernet Adapter 16.1922 - 108d 0017 OC-2250 GoCard 10/100 Ethernet Adapter 16.1923 - 0021 OC-6151/6152 [RapidFire ATM 155] 16.1924 - 0022 ATM Adapter 16.1925 -108e Sun Microsystems Computer Corp. 16.1926 - 0001 EBUS 16.1927 - 1000 EBUS 16.1928 - 1001 Happy Meal 16.1929 - 1100 RIO EBUS 16.1930 - 1101 RIO GEM 16.1931 - 1102 RIO 1394 16.1932 - 1103 RIO USB 16.1933 - 2bad GEM 16.1934 - 5000 Simba Advanced PCI Bridge 16.1935 - 5043 SunPCI Co-processor 16.1936 - 8000 Psycho PCI Bus Module 16.1937 - 8001 Schizo PCI Bus Module 16.1938 - a000 Ultra IIi 16.1939 - a001 Ultra IIe 16.1940 - a801 Tomatillo PCI Bus Module 16.1941 -108f Systemsoft 16.1942 -1090 Encore Computer Corporation 16.1943 -1091 Intergraph Corporation 16.1944 - 0020 3D graphics processor 16.1945 - 0021 3D graphics processor w/Texturing 16.1946 - 0040 3D graphics frame buffer 16.1947 - 0041 3D graphics frame buffer 16.1948 - 0060 Proprietary bus bridge 16.1949 - 00e4 Powerstorm 4D50T 16.1950 - 0720 Motion JPEG codec 16.1951 -1092 Diamond Multimedia Systems 16.1952 - 00a0 Speedstar Pro SE 16.1953 - 00a8 Speedstar 64 16.1954 - 0550 Viper V550 16.1955 - 08d4 Supra 2260 Modem 16.1956 - 094c SupraExpress 56i Pro 16.1957 - 1092 Viper V330 16.1958 - 6120 Maximum DVD 16.1959 - 8810 Stealth SE 16.1960 - 8811 Stealth 64/SE 16.1961 - 8880 Stealth 16.1962 - 8881 Stealth 16.1963 - 88b0 Stealth 64 16.1964 - 88b1 Stealth 64 16.1965 - 88c0 Stealth 64 16.1966 - 88c1 Stealth 64 16.1967 - 88d0 Stealth 64 16.1968 - 88d1 Stealth 64 16.1969 - 88f0 Stealth 64 16.1970 - 88f1 Stealth 64 16.1971 - 9999 DMD-I0928-1 "Monster sound" sound chip 16.1972 -1093 National Instruments 16.1973 - 0160 PCI-DIO-96 16.1974 - 0162 PCI-MIO-16XE-50 16.1975 - 1170 PCI-MIO-16XE-10 16.1976 - 1180 PCI-MIO-16E-1 16.1977 - 1190 PCI-MIO-16E-4 16.1978 - 1330 PCI-6031E 16.1979 - 1350 PCI-6071E 16.1980 - 2a60 PCI-6023E 16.1981 - b001 IMAQ-PCI-1408 16.1982 - b011 IMAQ-PXI-1408 16.1983 - b021 IMAQ-PCI-1424 16.1984 - b031 IMAQ-PCI-1413 16.1985 - b041 IMAQ-PCI-1407 16.1986 - b051 IMAQ-PXI-1407 16.1987 - b061 IMAQ-PCI-1411 16.1988 - b071 IMAQ-PCI-1422 16.1989 - b081 IMAQ-PXI-1422 16.1990 - b091 IMAQ-PXI-1411 16.1991 - c801 PCI-GPIB 16.1992 - c831 PCI-GPIB bridge 16.1993 -1094 First International Computers [FIC] 16.1994 -1095 CMD Technology Inc 16.1995 - 0240 Adaptec AAR-1210SA SATA HostRAID Controller 16.1996 - 0640 PCI0640 16.1997 - 0643 PCI0643 16.1998 - 0646 PCI0646 16.1999 - 0647 PCI0647 16.2000 - 0648 PCI0648 16.2001 - 0649 PCI0649 16.2002 - 0e11 005d Integrated Ultra ATA-100 Dual Channel Controller 16.2003 - 0e11 007e Integrated Ultra ATA-100 IDE RAID Controller 16.2004 - 101e 0649 AMI MegaRAID IDE 100 Controller 16.2005 - 0650 PBC0650A 16.2006 - 0670 USB0670 16.2007 - 1095 0670 USB0670 16.2008 - 0673 USB0673 16.2009 - 0680 PCI0680 16.2010 - 3112 Silicon Image SiI 3112 SATARaid Controller 16.2011 -1096 Alacron 16.2012 -1097 Appian Technology 16.2013 -1098 Quantum Designs (H.K.) Ltd 16.2014 - 0001 QD-8500 16.2015 - 0002 QD-8580 16.2016 -1099 Samsung Electronics Co., Ltd 16.2017 -109a Packard Bell 16.2018 -109b Gemlight Computer Ltd. 16.2019 -109c Megachips Corporation 16.2020 -109d Zida Technologies Ltd. 16.2021 -109e Brooktree Corporation 16.2022 - 0350 Bt848 Video Capture 16.2023 - 0351 Bt849A Video capture 16.2024 - 0369 Bt878 Video Capture 16.2025 - 1002 0001 TV-Wonder 16.2026 - 1002 0003 TV-Wonder/VE 16.2027 - 036c Bt879(??) Video Capture 16.2028 - 13e9 0070 Win/TV (Video Section) 16.2029 - 036e Bt878 Video Capture 16.2030 - 0070 13eb WinTV Series 16.2031 - 0070 ff01 Viewcast Osprey 200 16.2032 - 107d 6606 WinFast TV 2000 16.2033 - 11bd 0012 PCTV pro (TV + FM stereo receiver) 16.2034 - 11bd 001c PCTV Sat (DBC receiver) 16.2035 - 127a 0001 Bt878 Mediastream Controller NTSC 16.2036 - 127a 0002 Bt878 Mediastream Controller PAL BG 16.2037 - 127a 0003 Bt878a Mediastream Controller PAL BG 16.2038 - 127a 0048 Bt878/832 Mediastream Controller 16.2039 - 144f 3000 MagicTView CPH060 - Video 16.2040 - 1461 0004 AVerTV WDM Video Capture 16.2041 - 14f1 0001 Bt878 Mediastream Controller NTSC 16.2042 - 14f1 0002 Bt878 Mediastream Controller PAL BG 16.2043 - 14f1 0003 Bt878a Mediastream Controller PAL BG 16.2044 - 14f1 0048 Bt878/832 Mediastream Controller 16.2045 - 1851 1850 FlyVideo'98 - Video 16.2046 - 1851 1851 FlyVideo II 16.2047 - 1852 1852 FlyVideo'98 - Video (with FM Tuner) 16.2048 - bd11 1200 PCTV pro (TV + FM stereo receiver) 16.2049 - 036f Bt879 Video Capture 16.2050 - 127a 0044 Bt879 Video Capture NTSC 16.2051 - 127a 0122 Bt879 Video Capture PAL I 16.2052 - 127a 0144 Bt879 Video Capture NTSC 16.2053 - 127a 0222 Bt879 Video Capture PAL BG 16.2054 - 127a 0244 Bt879a Video Capture NTSC 16.2055 - 127a 0322 Bt879 Video Capture NTSC 16.2056 - 127a 0422 Bt879 Video Capture NTSC 16.2057 - 127a 1122 Bt879 Video Capture PAL I 16.2058 - 127a 1222 Bt879 Video Capture PAL BG 16.2059 - 127a 1322 Bt879 Video Capture NTSC 16.2060 - 127a 1522 Bt879a Video Capture PAL I 16.2061 - 127a 1622 Bt879a Video Capture PAL BG 16.2062 - 127a 1722 Bt879a Video Capture NTSC 16.2063 - 14f1 0044 Bt879 Video Capture NTSC 16.2064 - 14f1 0122 Bt879 Video Capture PAL I 16.2065 - 14f1 0144 Bt879 Video Capture NTSC 16.2066 - 14f1 0222 Bt879 Video Capture PAL BG 16.2067 - 14f1 0244 Bt879a Video Capture NTSC 16.2068 - 14f1 0322 Bt879 Video Capture NTSC 16.2069 - 14f1 0422 Bt879 Video Capture NTSC 16.2070 - 14f1 1122 Bt879 Video Capture PAL I 16.2071 - 14f1 1222 Bt879 Video Capture PAL BG 16.2072 - 14f1 1322 Bt879 Video Capture NTSC 16.2073 - 14f1 1522 Bt879a Video Capture PAL I 16.2074 - 14f1 1622 Bt879a Video Capture PAL BG 16.2075 - 14f1 1722 Bt879a Video Capture NTSC 16.2076 - 1851 1850 FlyVideo'98 - Video 16.2077 - 1851 1851 FlyVideo II 16.2078 - 1852 1852 FlyVideo'98 - Video (with FM Tuner) 16.2079 - 0370 Bt880 Video Capture 16.2080 - 1851 1850 FlyVideo'98 16.2081 - 1851 1851 FlyVideo'98 EZ - video 16.2082 - 1852 1852 FlyVideo'98 (with FM Tuner) 16.2083 - 0878 Bt878 Audio Capture 16.2084 - 0070 13eb WinTV Series 16.2085 - 0070 ff01 Viewcast Osprey 200 16.2086 - 1002 0001 TV-Wonder 16.2087 - 1002 0003 TV-Wonder/VE 16.2088 - 11bd 0012 PCTV pro (TV + FM stereo receiver, audio section) 16.2089 - 11bd 001c PCTV Sat (DBC receiver) 16.2090 - 127a 0001 Bt878 Video Capture (Audio Section) 16.2091 - 127a 0002 Bt878 Video Capture (Audio Section) 16.2092 - 127a 0003 Bt878 Video Capture (Audio Section) 16.2093 - 127a 0048 Bt878 Video Capture (Audio Section) 16.2094 - 13e9 0070 Win/TV (Audio Section) 16.2095 - 144f 3000 MagicTView CPH060 - Audio 16.2096 - 1461 0004 AVerTV WDM Audio Capture 16.2097 - 14f1 0001 Bt878 Video Capture (Audio Section) 16.2098 - 14f1 0002 Bt878 Video Capture (Audio Section) 16.2099 - 14f1 0003 Bt878 Video Capture (Audio Section) 16.2100 - 14f1 0048 Bt878 Video Capture (Audio Section) 16.2101 - bd11 1200 PCTV pro (TV + FM stereo receiver, audio section) 16.2102 - 0879 Bt879 Audio Capture 16.2103 - 127a 0044 Bt879 Video Capture (Audio Section) 16.2104 - 127a 0122 Bt879 Video Capture (Audio Section) 16.2105 - 127a 0144 Bt879 Video Capture (Audio Section) 16.2106 - 127a 0222 Bt879 Video Capture (Audio Section) 16.2107 - 127a 0244 Bt879 Video Capture (Audio Section) 16.2108 - 127a 0322 Bt879 Video Capture (Audio Section) 16.2109 - 127a 0422 Bt879 Video Capture (Audio Section) 16.2110 - 127a 1122 Bt879 Video Capture (Audio Section) 16.2111 - 127a 1222 Bt879 Video Capture (Audio Section) 16.2112 - 127a 1322 Bt879 Video Capture (Audio Section) 16.2113 - 127a 1522 Bt879 Video Capture (Audio Section) 16.2114 - 127a 1622 Bt879 Video Capture (Audio Section) 16.2115 - 127a 1722 Bt879 Video Capture (Audio Section) 16.2116 - 14f1 0044 Bt879 Video Capture (Audio Section) 16.2117 - 14f1 0122 Bt879 Video Capture (Audio Section) 16.2118 - 14f1 0144 Bt879 Video Capture (Audio Section) 16.2119 - 14f1 0222 Bt879 Video Capture (Audio Section) 16.2120 - 14f1 0244 Bt879 Video Capture (Audio Section) 16.2121 - 14f1 0322 Bt879 Video Capture (Audio Section) 16.2122 - 14f1 0422 Bt879 Video Capture (Audio Section) 16.2123 - 14f1 1122 Bt879 Video Capture (Audio Section) 16.2124 - 14f1 1222 Bt879 Video Capture (Audio Section) 16.2125 - 14f1 1322 Bt879 Video Capture (Audio Section) 16.2126 - 14f1 1522 Bt879 Video Capture (Audio Section) 16.2127 - 14f1 1622 Bt879 Video Capture (Audio Section) 16.2128 - 14f1 1722 Bt879 Video Capture (Audio Section) 16.2129 - 0880 Bt880 Audio Capture 16.2130 - 2115 BtV 2115 Mediastream controller 16.2131 - 2125 BtV 2125 Mediastream controller 16.2132 - 2164 BtV 2164 16.2133 - 2165 BtV 2165 16.2134 - 8230 Bt8230 ATM Segment/Reassembly Ctrlr (SRC) 16.2135 - 8472 Bt8472 16.2136 - 8474 Bt8474 16.2137 -109f Trigem Computer Inc. 16.2138 -10a0 Meidensha Corporation 16.2139 -10a1 Juko Electronics Ind. Co. Ltd 16.2140 -10a2 Quantum Corporation 16.2141 -10a3 Everex Systems Inc 16.2142 -10a4 Globe Manufacturing Sales 16.2143 -10a5 Smart Link Ltd. 16.2144 - 3052 SmartPCI562 56K Modem 16.2145 - 5449 SmartPCI561 modem 16.2146 -10a6 Informtech Industrial Ltd. 16.2147 -10a7 Benchmarq Microelectronics 16.2148 -10a8 Sierra Semiconductor 16.2149 - 0000 STB Horizon 64 16.2150 -10a9 Silicon Graphics, Inc. 16.2151 - 0001 Crosstalk to PCI Bridge 16.2152 - 0002 Linc I/O controller 16.2153 - 0003 IOC3 I/O controller 16.2154 - 0004 O2 MACE 16.2155 - 0005 RAD Audio 16.2156 - 0006 HPCEX 16.2157 - 0007 RPCEX 16.2158 - 0008 DiVO VIP 16.2159 - 0009 Alteon Gigabit Ethernet 16.2160 - 10a9 8002 Acenic Gigabit Ethernet 16.2161 - 0010 AMP Video I/O 16.2162 - 0011 GRIP 16.2163 - 0012 SGH PSHAC GSN 16.2164 - 1001 Magic Carpet 16.2165 - 1002 Lithium 16.2166 - 1003 Dual JPEG 1 16.2167 - 1004 Dual JPEG 2 16.2168 - 1005 Dual JPEG 3 16.2169 - 1006 Dual JPEG 4 16.2170 - 1007 Dual JPEG 5 16.2171 - 1008 Cesium 16.2172 - 100a IOC4 I/O controller 16.2173 - 2001 Fibre Channel 16.2174 - 2002 ASDE 16.2175 - 8001 O2 1394 16.2176 - 8002 G-net NT 16.2177 -10aa ACC Microelectronics 16.2178 - 0000 ACCM 2188 16.2179 -10ab Digicom 16.2180 -10ac Honeywell IAC 16.2181 -10ad Symphony Labs 16.2182 - 0001 W83769F 16.2183 - 0003 SL82C103 16.2184 - 0005 SL82C105 16.2185 - 0103 SL82c103 16.2186 - 0105 SL82c105 16.2187 - 0565 W83C553 16.2188 -10ae Cornerstone Technology 16.2189 -10af Micro Computer Systems Inc 16.2190 -10b0 CardExpert Technology 16.2191 -10b1 Cabletron Systems Inc 16.2192 -10b2 Raytheon Company 16.2193 -10b3 Databook Inc 16.2194 - 3106 DB87144 16.2195 - b106 DB87144 16.2196 -10b4 STB Systems Inc 16.2197 - 1b1d Velocity 128 3D 16.2198 - 10b4 237e Velocity 4400 16.2199 -10b5 PLX Technology, Inc. 16.2200 - 0001 i960 PCI bus interface 16.2201 - 1076 VScom 800 8 port serial adaptor 16.2202 - 1077 VScom 400 4 port serial adaptor 16.2203 - 1078 VScom 210 2 port serial and 1 port parallel adaptor 16.2204 - 1103 VScom 200 2 port serial adaptor 16.2205 - 1146 VScom 010 1 port parallel adaptor 16.2206 - 1147 VScom 020 2 port parallel adaptor 16.2207 - 2724 Thales PCSM Security Card 16.2208 - 9030 PCI <-> IOBus Bridge Hot Swap 16.2209 - 15ed 1002 MCCS 8-port Serial Hot Swap 16.2210 - 15ed 1003 MCCS 16-port Serial Hot Swap 16.2211 - 9036 9036 16.2212 - 9050 PCI <-> IOBus Bridge 16.2213 - 10b5 2036 SatPak GPS 16.2214 - 10b5 2273 SH-ARC SoHard ARCnet card 16.2215 - 10b5 9050 MP9050 16.2216 - 1522 0001 RockForce 4 Port V.90 Data/Fax/Voice Modem 16.2217 - 1522 0002 RockForce 2 Port V.90 Data/Fax/Voice Modem 16.2218 - 1522 0003 RockForce 6 Port V.90 Data/Fax/Voice Modem 16.2219 - 1522 0004 RockForce 8 Port V.90 Data/Fax/Voice Modem 16.2220 - 1522 0010 RockForce2000 4 Port V.90 Data/Fax/Voice Modem 16.2221 - 1522 0020 RockForce2000 2 Port V.90 Data/Fax/Voice Modem 16.2222 - 15ed 1000 Macrolink MCCS 8-port Serial 16.2223 - 15ed 1001 Macrolink MCCS 16-port Serial 16.2224 - 15ed 1002 Macrolink MCCS 8-port Serial Hot Swap 16.2225 - 15ed 1003 Macrolink MCCS 16-port Serial Hot Swap 16.2226 - 5654 5634 OpenLine4 Telephony Card 16.2227 - d531 c002 PCIntelliCAN 2xSJA1000 CAN bus 16.2228 - d84d 4006 EX-4006 1P 16.2229 - d84d 4008 EX-4008 1P EPP/ECP 16.2230 - d84d 4014 EX-4014 2P 16.2231 - d84d 4018 EX-4018 3P EPP/ECP 16.2232 - d84d 4025 EX-4025 1S(16C550) RS-232 16.2233 - d84d 4027 EX-4027 1S(16C650) RS-232 16.2234 - d84d 4028 EX-4028 1S(16C850) RS-232 16.2235 - d84d 4036 EX-4036 2S(16C650) RS-232 16.2236 - d84d 4037 EX-4037 2S(16C650) RS-232 16.2237 - d84d 4038 EX-4038 2S(16C850) RS-232 16.2238 - d84d 4052 EX-4052 1S(16C550) RS-422/485 16.2239 - d84d 4053 EX-4053 2S(16C550) RS-422/485 16.2240 - d84d 4055 EX-4055 4S(16C550) RS-232 16.2241 - d84d 4058 EX-4055 4S(16C650) RS-232 16.2242 - d84d 4065 EX-4065 8S(16C550) RS-232 16.2243 - d84d 4068 EX-4068 8S(16C650) RS-232 16.2244 - d84d 4078 EX-4078 2S(16C552) RS-232+1P 16.2245 - 9054 PCI <-> IOBus Bridge 16.2246 - 10b5 2455 Wessex Techology PHIL-PCI 16.2247 - 12d9 0002 PCI Prosody Card rev 1.5 16.2248 - 9060 9060 16.2249 - 906d 9060SD 16.2250 - 125c 0640 Aries 16000P 16.2251 - 906e 9060ES 16.2252 - 9080 9080 16.2253 - 10b5 9080 9080 [real subsystem ID not set] 16.2254 - 129d 0002 Aculab PCI Prosidy card 16.2255 - 12d9 0002 PCI Prosody Card 16.2256 -10b6 Madge Networks 16.2257 - 0001 Smart 16/4 PCI Ringnode 16.2258 - 0002 Smart 16/4 PCI Ringnode Mk2 16.2259 - 10b6 0002 Smart 16/4 PCI Ringnode Mk2 16.2260 - 10b6 0006 16/4 CardBus Adapter 16.2261 - 0003 Smart 16/4 PCI Ringnode Mk3 16.2262 - 0e11 b0fd Compaq NC4621 PCI, 4/16, WOL 16.2263 - 10b6 0003 Smart 16/4 PCI Ringnode Mk3 16.2264 - 10b6 0007 Presto PCI Plus Adapter 16.2265 - 0004 Smart 16/4 PCI Ringnode Mk1 16.2266 - 0006 16/4 Cardbus Adapter 16.2267 - 10b6 0006 16/4 CardBus Adapter 16.2268 - 0007 Presto PCI Adapter 16.2269 - 10b6 0007 Presto PCI 16.2270 - 0009 Smart 100/16/4 PCI-HS Ringnode 16.2271 - 10b6 0009 Smart 100/16/4 PCI-HS Ringnode 16.2272 - 000a Smart 100/16/4 PCI Ringnode 16.2273 - 10b6 000a Smart 100/16/4 PCI Ringnode 16.2274 - 000b 16/4 CardBus Adapter Mk2 16.2275 - 10b6 0008 16/4 CardBus Adapter Mk2 16.2276 - 10b6 000b 16/4 Cardbus Adapter Mk2 16.2277 - 000c RapidFire 3140V2 16/4 TR Adapter 16.2278 - 10b6 000c RapidFire 3140V2 16/4 TR Adapter 16.2279 - 1000 Collage 25/155 ATM Client Adapter 16.2280 - 1001 Collage 155 ATM Server Adapter 16.2281 -10b7 3Com Corporation 16.2282 - 0001 3c985 1000BaseSX (SX/TX) 16.2283 - 0910 3C910-A01 16.2284 - 1006 MINI PCI type 3B Data Fax Modem 16.2285 - 1007 Mini PCI 56k Winmodem 16.2286 - 10b7 615c Mini PCI 56K Modem 16.2287 - 1700 Gigabit Ethernet Adapter 16.2288 - 10b7 0010 3Com 3C940 Gigabit LOM Ethernet Adapter 16.2289 - 10b7 0020 3Com 3C941 Gigabit LOM Ethernet Adapter 16.2290 - 3390 3c339 TokenLink Velocity 16.2291 - 3590 3c359 TokenLink Velocity XL 16.2292 - 10b7 3590 TokenLink Velocity XL Adapter (3C359/359B) 16.2293 - 4500 3c450 Cyclone/unknown 16.2294 - 5055 3c555 Laptop Hurricane 16.2295 - 5057 3c575 [Megahertz] 10/100 LAN CardBus 16.2296 - 10b7 5a57 3C575 Megahertz 10/100 LAN Cardbus PC Card 16.2297 - 5157 3c575 [Megahertz] 10/100 LAN CardBus 16.2298 - 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card 16.2299 - 5257 3CCFE575CT Cyclone CardBus 16.2300 - 10b7 5c57 FE575C-3Com 10/100 LAN CardBus-Fast Ethernet 16.2301 - 5900 3c590 10BaseT [Vortex] 16.2302 - 5920 3c592 EISA 10mbps Demon/Vortex 16.2303 - 5950 3c595 100BaseTX [Vortex] 16.2304 - 5951 3c595 100BaseT4 [Vortex] 16.2305 - 5952 3c595 100Base-MII [Vortex] 16.2306 - 5970 3c597 EISA Fast Demon/Vortex 16.2307 - 5b57 3c595 [Megahertz] 10/100 LAN CardBus 16.2308 - 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card 16.2309 - 6055 3c556 Hurricane CardBus 16.2310 - 6056 3c556B Hurricane CardBus 16.2311 - 10b7 6556 10/100 Mini PCI Ethernet Adapter 16.2312 - 6560 3CCFE656 Cyclone CardBus 16.2313 - 10b7 656a 3CCFEM656 10/100 LAN+56K Modem CardBus 16.2314 - 6561 3CCFEM656 10/100 LAN+56K Modem CardBus 16.2315 - 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus 16.2316 - 6562 3CCFEM656 [id 6562] Cyclone CardBus 16.2317 - 10b7 656b 3CCFEM656B 10/100 LAN+56K Modem CardBus 16.2318 - 6563 3CCFEM656B 10/100 LAN+56K Modem CardBus 16.2319 - 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus 16.2320 - 6564 3CCFEM656 [id 6564] Cyclone CardBus 16.2321 - 7646 3cSOHO100-TX Hurricane 16.2322 - 7940 3c803 FDDILink UTP Controller 16.2323 - 7980 3c804 FDDILink SAS Controller 16.2324 - 7990 3c805 FDDILink DAS Controller 16.2325 - 8811 Token ring 16.2326 - 9000 3c900 10BaseT [Boomerang] 16.2327 - 9001 3c900 Combo [Boomerang] 16.2328 - 9004 3c900B-TPO [Etherlink XL TPO] 16.2329 - 10b7 9004 3C900B-TPO Etherlink XL TPO 10Mb 16.2330 - 9005 3c900B-Combo [Etherlink XL Combo] 16.2331 - 10b7 9005 3C900B-Combo Etherlink XL Combo 16.2332 - 9006 3c900B-TPC [Etherlink XL TPC] 16.2333 - 900a 3c900B-FL [Etherlink XL FL] 16.2334 - 9050 3c905 100BaseTX [Boomerang] 16.2335 - 9051 3c905 100BaseT4 [Boomerang] 16.2336 - 9055 3c905B 100BaseTX [Cyclone] 16.2337 - 1028 0080 3C905B Fast Etherlink XL 10/100 16.2338 - 1028 0081 3C905B Fast Etherlink XL 10/100 16.2339 - 1028 0082 3C905B Fast Etherlink XL 10/100 16.2340 - 1028 0083 3C905B Fast Etherlink XL 10/100 16.2341 - 1028 0084 3C905B Fast Etherlink XL 10/100 16.2342 - 1028 0085 3C905B Fast Etherlink XL 10/100 16.2343 - 1028 0086 3C905B Fast Etherlink XL 10/100 16.2344 - 1028 0087 3C905B Fast Etherlink XL 10/100 16.2345 - 1028 0088 3C905B Fast Etherlink XL 10/100 16.2346 - 1028 0089 3C905B Fast Etherlink XL 10/100 16.2347 - 1028 0090 3C905B Fast Etherlink XL 10/100 16.2348 - 1028 0091 3C905B Fast Etherlink XL 10/100 16.2349 - 1028 0092 3C905B Fast Etherlink XL 10/100 16.2350 - 1028 0093 3C905B Fast Etherlink XL 10/100 16.2351 - 1028 0094 3C905B Fast Etherlink XL 10/100 16.2352 - 1028 0095 3C905B Fast Etherlink XL 10/100 16.2353 - 1028 0096 3C905B Fast Etherlink XL 10/100 16.2354 - 1028 0097 3C905B Fast Etherlink XL 10/100 16.2355 - 1028 0098 3C905B Fast Etherlink XL 10/100 16.2356 - 1028 0099 3C905B Fast Etherlink XL 10/100 16.2357 - 10b7 9055 3C905B Fast Etherlink XL 10/100 16.2358 - 9056 3c905B-T4 [Fast EtherLink XL 10/100] 16.2359 - 9058 3c905B-Combo [Deluxe Etherlink XL 10/100] 16.2360 - 905a 3c905B-FX [Fast Etherlink XL FX 10/100] 16.2361 - 9200 3c905C-TX/TX-M [Tornado] 16.2362 - 1028 0095 Integrated 3C905C-TX Fast Etherlink for PC Management NIC 16.2363 - 10b7 1000 3C905C-TX Fast Etherlink for PC Management NIC 16.2364 - 10b7 7000 10/100 Mini PCI Ethernet Adapter 16.2365 - 9201 3C920B-EMB Integrated Fast Ethernet Controller 16.2366 - 9300 3CSOHO100B-TX [910-A01] 16.2367 - 9800 3c980-TX [Fast Etherlink XL Server Adapter] 16.2368 - 10b7 9800 3c980-TX Fast Etherlink XL Server Adapter 16.2369 - 9805 3c980-TX 10/100baseTX NIC [Python-T] 16.2370 - 10b7 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] 16.2371 - 10b7 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] 16.2372 - 10b7 9805 3c980 10/100baseTX NIC [Python-T] 16.2373 - 10f1 2462 Thunder K7 S2462 16.2374 - 9900 3C990-TX [Typhoon] 16.2375 - 9902 3CR990-TX-95 [Typhoon 56-bit] 16.2376 - 9903 3CR990-TX-97 [Typhoon 168-bit] 16.2377 - 9904 3C990B-TX-M/3C990BSVR [Typhoon2] 16.2378 - 10b7 1000 3CR990B-TX-M [Typhoon2] 16.2379 - 10b7 2000 3CR990BSVR [Typhoon2 Server] 16.2380 - 9905 3CR990-FX-95/97/95 [Typhon Fiber] 16.2381 - 10b7 1101 3CR990-FX-95 [Typhoon Fiber 56-bit] 16.2382 - 10b7 1102 3CR990-FX-97 [Typhoon Fiber 168-bit] 16.2383 - 10b7 2101 3CR990-FX-95 Server [Typhoon Fiber 56-bit] 16.2384 - 10b7 2102 3CR990-FX-97 Server [Typhoon Fiber 168-bit] 16.2385 - 9908 3CR990SVR95 [Typhoon Server 56-bit] 16.2386 - 9909 3CR990SVR97 [Typhoon Server 168-bit] 16.2387 - 990b 3C990SVR [Typhoon Server] 16.2388 -10b8 Standard Microsystems Corp [SMC] 16.2389 - 0005 83C170QF 16.2390 - 1055 e000 LANEPIC 10/100 [EVB171Q-PCI] 16.2391 - 1055 e002 LANEPIC 10/100 [EVB171G-PCI] 16.2392 - 10b8 a011 EtherPower II 10/100 16.2393 - 10b8 a014 EtherPower II 10/100 16.2394 - 10b8 a015 EtherPower II 10/100 16.2395 - 10b8 a016 EtherPower II 10/100 16.2396 - 10b8 a017 EtherPower II 10/100 16.2397 - 0006 LANEPIC 16.2398 - 1055 e100 LANEPIC Cardbus Fast Ethernet Adapter 16.2399 - 1055 e102 LANEPIC Cardbus Fast Ethernet Adapter 16.2400 - 1055 e300 LANEPIC Cardbus Fast Ethernet Adapter 16.2401 - 1055 e302 LANEPIC Cardbus Fast Ethernet Adapter 16.2402 - 10b8 a012 LANEPIC Cardbus Fast Ethernet Adapter 16.2403 - 13a2 8002 LANEPIC Cardbus Fast Ethernet Adapter 16.2404 - 13a2 8006 LANEPIC Cardbus Fast Ethernet Adapter 16.2405 - 1000 FDC 37c665 16.2406 - 1001 FDC 37C922 16.2407 - a011 83C170QF 16.2408 - b106 SMC34C90 16.2409 -10b9 ALi Corporation 16.2410 - 0111 C-Media CMI8738/C3DX Audio Device (OEM) 16.2411 - 10b9 0111 C-Media CMI8738/C3DX Audio Device (OEM) 16.2412 - 1435 M1435 16.2413 - 1445 M1445 16.2414 - 1449 M1449 16.2415 - 1451 M1451 16.2416 - 1461 M1461 16.2417 - 1489 M1489 16.2418 - 1511 M1511 [Aladdin] 16.2419 - 1512 M1512 [Aladdin] 16.2420 - 1513 M1513 [Aladdin] 16.2421 - 1521 M1521 [Aladdin III] 16.2422 - 10b9 1521 ALI M1521 Aladdin III CPU Bridge 16.2423 - 1523 M1523 16.2424 - 10b9 1523 ALI M1523 ISA Bridge 16.2425 - 1531 M1531 [Aladdin IV] 16.2426 - 1533 M1533 PCI to ISA Bridge [Aladdin IV] 16.2427 - 10b9 1533 ALI M1533 Aladdin IV ISA Bridge 16.2428 - 1541 M1541 16.2429 - 10b9 1541 ALI M1541 Aladdin V/V+ AGP System Controller 16.2430 - 1543 M1543 16.2431 - 1563 M1563 HyperTransport South Bridge 16.2432 - 1621 M1621 16.2433 - 1631 ALI M1631 PCI North Bridge Aladdin Pro III 16.2434 - 1632 M1632M Northbridge+Trident 16.2435 - 1641 ALI M1641 PCI North Bridge Aladdin Pro IV 16.2436 - 1644 M1644/M1644T Northbridge+Trident 16.2437 - 1646 M1646 Northbridge+Trident 16.2438 - 1647 M1647 Northbridge [MAGiK 1 / MobileMAGiK 1] 16.2439 - 1651 M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM] 16.2440 - 1671 M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR] 16.2441 - 1681 M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR] 16.2442 - 1687 M1687 K8 Northbridge [AGP8X and HyperTransport] 16.2443 - 3141 M3141 16.2444 - 3143 M3143 16.2445 - 3145 M3145 16.2446 - 3147 M3147 16.2447 - 3149 M3149 16.2448 - 3151 M3151 16.2449 - 3307 M3307 16.2450 - 3309 M3309 16.2451 - 5212 M4803 16.2452 - 5215 MS4803 16.2453 - 5217 M5217H 16.2454 - 5219 M5219 16.2455 - 5225 M5225 16.2456 - 5229 M5229 IDE 16.2457 - 1043 8053 A7A266 Motherboard IDE 16.2458 - 5235 M5225 16.2459 - 5237 USB 1.1 Controller 16.2460 - 5239 USB 2.0 Controller 16.2461 - 5243 M1541 PCI to AGP Controller 16.2462 - 5247 PCI to AGP Controller 16.2463 - 5249 M5249 HTT to PCI Bridge 16.2464 - 5251 M5251 P1394 OHCI 1.0 Controller 16.2465 - 5253 M5253 P1394 OHCI 1.1 Controller 16.2466 - 5261 M5261 Ethernet Controller 16.2467 - 5450 Lucent Technologies Soft Modem AMR 16.2468 - 5451 M5451 PCI AC-Link Controller Audio Device 16.2469 - 1014 0506 ThinkPad R30 16.2470 - 5453 M5453 PCI AC-Link Controller Modem Device 16.2471 - 5455 M5455 PCI AC-Link Controller Audio Device 16.2472 - 5457 Intel 537 [M5457 AC-Link Modem] 16.2473 -# Same but more usefull for driver's lookup 16.2474 - 5459 SmartLink SmartPCI561 56K Modem 16.2475 -# SmartLink PCI SoftModem 16.2476 - 545a SmartLink SmartPCI563 56K Modem 16.2477 - 5471 M5471 Memory Stick Controller 16.2478 - 5473 M5473 SD-MMC Controller 16.2479 - 7101 M7101 PMU 16.2480 - 10b9 7101 ALI M7101 Power Management Controller 16.2481 -10ba Mitsubishi Electric Corp. 16.2482 - 0301 AccelGraphics AccelECLIPSE 16.2483 -10bb Dapha Electronics Corporation 16.2484 -10bc Advanced Logic Research 16.2485 -10bd Surecom Technology 16.2486 - 0e34 NE-34 16.2487 -10be Tseng Labs International Co. 16.2488 -10bf Most Inc 16.2489 -10c0 Boca Research Inc. 16.2490 -10c1 ICM Co., Ltd. 16.2491 -10c2 Auspex Systems Inc. 16.2492 -10c3 Samsung Semiconductors, Inc. 16.2493 - 1100 Smartether100 SC1100 LAN Adapter (i82557B) 16.2494 -10c4 Award Software International Inc. 16.2495 -10c5 Xerox Corporation 16.2496 -10c6 Rambus Inc. 16.2497 -10c7 Media Vision 16.2498 -10c8 Neomagic Corporation 16.2499 - 0001 NM2070 [MagicGraph 128] 16.2500 - 0002 NM2090 [MagicGraph 128V] 16.2501 - 0003 NM2093 [MagicGraph 128ZV] 16.2502 - 0004 NM2160 [MagicGraph 128XD] 16.2503 - 1014 00ba MagicGraph 128XD 16.2504 - 1025 1007 MagicGraph 128XD 16.2505 - 1028 0074 MagicGraph 128XD 16.2506 - 1028 0075 MagicGraph 128XD 16.2507 - 1028 007d MagicGraph 128XD 16.2508 - 1028 007e MagicGraph 128XD 16.2509 - 1033 802f MagicGraph 128XD 16.2510 - 104d 801b MagicGraph 128XD 16.2511 - 104d 802f MagicGraph 128XD 16.2512 - 104d 830b MagicGraph 128XD 16.2513 - 10ba 0e00 MagicGraph 128XD 16.2514 - 10c8 0004 MagicGraph 128XD 16.2515 - 10cf 1029 MagicGraph 128XD 16.2516 - 10f7 8308 MagicGraph 128XD 16.2517 - 10f7 8309 MagicGraph 128XD 16.2518 - 10f7 830b MagicGraph 128XD 16.2519 - 10f7 830d MagicGraph 128XD 16.2520 - 10f7 8312 MagicGraph 128XD 16.2521 - 0005 NM2200 [MagicGraph 256AV] 16.2522 - 1014 00dd ThinkPad 570 16.2523 - 0006 NM2360 [MagicMedia 256ZX] 16.2524 - 0016 NM2380 [MagicMedia 256XL+] 16.2525 - 10c8 0016 MagicMedia 256XL+ 16.2526 - 0025 NM2230 [MagicGraph 256AV+] 16.2527 - 0083 NM2093 [MagicGraph 128ZV+] 16.2528 - 8005 NM2200 [MagicMedia 256AV Audio] 16.2529 - 0e11 b0d1 MagicMedia 256AV Audio Device on Discovery 16.2530 - 0e11 b126 MagicMedia 256AV Audio Device on Durango 16.2531 - 1014 00dd MagicMedia 256AV Audio Device on BlackTip Thinkpad 16.2532 - 1025 1003 MagicMedia 256AV Audio Device on TravelMate 720 16.2533 - 1028 008f MagicMedia 256AV Audio Device on Colorado Inspiron 16.2534 - 103c 0007 MagicMedia 256AV Audio Device on Voyager II 16.2535 - 103c 0008 MagicMedia 256AV Audio Device on Voyager III 16.2536 - 103c 000d MagicMedia 256AV Audio Device on Omnibook 900 16.2537 - 10c8 8005 MagicMedia 256AV Audio Device on FireAnt 16.2538 - 110a 8005 MagicMedia 256AV Audio Device 16.2539 - 14c0 0004 MagicMedia 256AV Audio Device 16.2540 - 8006 NM2360 [MagicMedia 256ZX Audio] 16.2541 - 8016 NM2380 [MagicMedia 256XL+ Audio] 16.2542 -10c9 Dataexpert Corporation 16.2543 -10ca Fujitsu Microelectr., Inc. 16.2544 -10cb Omron Corporation 16.2545 -10cc Mentor ARC Inc 16.2546 -10cd Advanced System Products, Inc 16.2547 - 1100 ASC1100 16.2548 - 1200 ASC1200 [(abp940) Fast SCSI-II] 16.2549 - 1300 ABP940-U / ABP960-U 16.2550 - 10cd 1310 ASC1300 SCSI Adapter 16.2551 - 2300 ABP940-UW 16.2552 - 2500 ABP940-U2W 16.2553 -10ce Radius 16.2554 -10cf Citicorp TTI 16.2555 - 2001 mb86605 16.2556 -10d0 Fujitsu Limited 16.2557 -10d1 FuturePlus Systems Corp. 16.2558 -10d2 Molex Incorporated 16.2559 -10d3 Jabil Circuit Inc 16.2560 -10d4 Hualon Microelectronics 16.2561 -10d5 Autologic Inc. 16.2562 -10d6 Cetia 16.2563 -10d7 BCM Advanced Research 16.2564 -10d8 Advanced Peripherals Labs 16.2565 -10d9 Macronix, Inc. [MXIC] 16.2566 - 0512 MX98713 16.2567 - 0531 MX987x5 16.2568 - 1186 1200 DFE-540TX ProFAST 10/100 Adapter 16.2569 - 8625 MX86250 16.2570 - 8888 MX86200 16.2571 -10da Compaq IPG-Austin 16.2572 - 0508 TC4048 Token Ring 4/16 16.2573 - 3390 Tl3c3x9 16.2574 -10db Rohm LSI Systems, Inc. 16.2575 -10dc CERN/ECP/EDU 16.2576 - 0001 STAR/RD24 SCI-PCI (PMC) 16.2577 - 0002 TAR/RD24 SCI-PCI (PMC) 16.2578 - 0021 HIPPI destination 16.2579 - 0022 HIPPI source 16.2580 - 10dc ATT2C15-3 FPGA 16.2581 -10dd Evans & Sutherland 16.2582 -10de nVidia Corporation 16.2583 - 0008 NV1 [EDGE 3D] 16.2584 - 0009 NV1 [EDGE 3D] 16.2585 - 0010 NV2 [Mutara V08] 16.2586 - 0020 NV4 [RIVA TNT] 16.2587 - 1043 0200 V3400 TNT 16.2588 - 1048 0c18 Erazor II SGRAM 16.2589 - 1048 0c1b Erazor II 16.2590 - 1092 0550 Viper V550 16.2591 - 1092 0552 Viper V550 16.2592 - 1092 4804 Viper V550 16.2593 - 1092 4808 Viper V550 16.2594 - 1092 4810 Viper V550 16.2595 - 1092 4812 Viper V550 16.2596 - 1092 4815 Viper V550 16.2597 - 1092 4820 Viper V550 with TV out 16.2598 - 1092 4822 Viper V550 16.2599 - 1092 4904 Viper V550 16.2600 - 1092 4914 Viper V550 16.2601 - 1092 8225 Viper V550 16.2602 - 10b4 273d Velocity 4400 16.2603 - 10b4 273e Velocity 4400 16.2604 - 10b4 2740 Velocity 4400 16.2605 - 10de 0020 Riva TNT 16.2606 - 1102 1015 Graphics Blaster CT6710 16.2607 - 1102 1016 Graphics Blaster RIVA TNT 16.2608 - 0028 NV5 [RIVA TNT2/TNT2 Pro] 16.2609 - 1043 0200 AGP-V3800 SGRAM 16.2610 - 1043 0201 AGP-V3800 SDRAM 16.2611 - 1043 0205 PCI-V3800 16.2612 - 1043 4000 AGP-V3800PRO 16.2613 - 1048 0c21 Synergy II 16.2614 - 1092 4804 Viper V770 16.2615 - 1092 4a00 Viper V770 16.2616 - 1092 4a02 Viper V770 Ultra 16.2617 - 1092 5a00 RIVA TNT2/TNT2 Pro 16.2618 - 1092 6a02 Viper V770 Ultra 16.2619 - 1092 7a02 Viper V770 Ultra 16.2620 - 10de 0005 RIVA TNT2 Pro 16.2621 - 10de 000f Compaq NVIDIA TNT2 Pro 16.2622 - 1102 1020 3D Blaster RIVA TNT2 16.2623 - 1102 1026 3D Blaster RIVA TNT2 Digital 16.2624 - 14af 5810 Maxi Gamer Xentor 16.2625 - 0029 NV5 [RIVA TNT2 Ultra] 16.2626 - 1043 0200 AGP-V3800 Deluxe 16.2627 - 1043 0201 AGP-V3800 Ultra SDRAM 16.2628 - 1043 0205 PCI-V3800 Ultra 16.2629 - 1102 1021 3D Blaster RIVA TNT2 Ultra 16.2630 - 1102 1029 3D Blaster RIVA TNT2 Ultra 16.2631 - 1102 102f 3D Blaster RIVA TNT2 Ultra 16.2632 - 14af 5820 Maxi Gamer Xentor 32 16.2633 - 002a NV5 [Riva TnT2] 16.2634 - 002b NV5 [Riva TnT2] 16.2635 - 002c NV6 [Vanta/Vanta LT] 16.2636 - 1043 0200 AGP-V3800 Combat SDRAM 16.2637 - 1043 0201 AGP-V3800 Combat 16.2638 - 1092 6820 Viper V730 16.2639 - 1102 1031 CT6938 VANTA 8MB 16.2640 - 1102 1034 CT6894 VANTA 16MB 16.2641 - 14af 5008 Maxi Gamer Phoenix 2 16.2642 - 002d NV5M64 [RIVA TNT2 Model 64/Model 64 Pro] 16.2643 - 1043 0200 AGP-V3800M 16.2644 - 1043 0201 AGP-V3800M 16.2645 - 1048 0c3a Erazor III LT 16.2646 - 10de 001e M64 AGP4x 16.2647 - 1102 1023 CT6892 RIVA TNT2 Value 16.2648 - 1102 1024 CT6932 RIVA TNT2 Value 32Mb 16.2649 - 1102 102c CT6931 RIVA TNT2 Value [Jumper] 16.2650 - 1462 8808 MSI-8808 16.2651 - 1554 1041 PixelView RIVA TNT2 M64 32MB 16.2652 - 002e NV6 [Vanta] 16.2653 - 002f NV6 [Vanta] 16.2654 - 0060 nForce2 ISA Bridge 16.2655 - 1043 80ad A7N8X Mainboard 16.2656 - 0064 nForce2 SMBus (MCP) 16.2657 - 0065 nForce2 IDE 16.2658 - 0066 nForce2 Ethernet Controller 16.2659 - 0067 nForce2 USB Controller 16.2660 - 1043 0c11 A7N8X Mainboard 16.2661 - 0068 nForce2 USB Controller 16.2662 - 1043 0c11 A7N8X Mainboard 16.2663 - 006a nForce2 AC97 Audio Controler (MCP) 16.2664 - 006b nForce MultiMedia audio [Via VT82C686B] 16.2665 - 006e nForce2 FireWire (IEEE 1394) Controller 16.2666 - 00a0 NV5 [Aladdin TNT2] 16.2667 - 14af 5810 Maxi Gamer Xentor 16.2668 - 0100 NV10 [GeForce 256 SDR] 16.2669 - 1043 0200 AGP-V6600 SGRAM 16.2670 - 1043 0201 AGP-V6600 SDRAM 16.2671 - 1043 4008 AGP-V6600 SGRAM 16.2672 - 1043 4009 AGP-V6600 SDRAM 16.2673 - 1102 102d CT6941 GeForce 256 16.2674 - 14af 5022 3D Prophet SE 16.2675 - 0101 NV10DDR [GeForce 256 DDR] 16.2676 - 1043 0202 AGP-V6800 DDR 16.2677 - 1043 400a AGP-V6800 DDR SGRAM 16.2678 - 1043 400b AGP-V6800 DDR SDRAM 16.2679 - 1102 102e CT6971 GeForce 256 DDR 16.2680 - 14af 5021 3D Prophet DDR-DVI 16.2681 - 0103 NV10GL [Quadro] 16.2682 - 0110 NV11 [GeForce2 MX/MX 400] 16.2683 - 1043 4015 AGP-V7100 Pro 16.2684 - 1043 4031 V7100 Pro with TV output 16.2685 - 1462 8817 MSI GeForce2 MX400 Pro32S [MS-8817] 16.2686 - 14af 7102 3D Prophet II MX 16.2687 - 14af 7103 3D Prophet II MX Dual-Display 16.2688 - 0111 NV11DDR [GeForce2 MX 100 DDR/200 DDR] 16.2689 - 0112 NV11 [GeForce2 Go] 16.2690 - 0113 NV11GL [Quadro2 MXR/EX] 16.2691 - 0150 NV15 [GeForce2 GTS/Pro] 16.2692 - 1043 4016 V7700 AGP Video Card 16.2693 - 107d 2840 WinFast GeForce2 GTS with TV output 16.2694 - 1462 8831 Creative GeForce2 Pro 16.2695 - 0151 NV15DDR [GeForce2 Ti] 16.2696 - 1043 405f V7700Ti 16.2697 - 0152 NV15BR [GeForce2 Ultra, Bladerunner] 16.2698 - 1048 0c56 GLADIAC Ultra 16.2699 - 0153 NV15GL [Quadro2 Pro] 16.2700 - 0170 NV17 [GeForce4 MX 460] 16.2701 - 0171 NV17 [GeForce4 MX 440] 16.2702 - 10b0 0002 Gainward Pro/600 TV 16.2703 - 1462 8661 G4MX440-VTP 16.2704 - 1462 8730 MX440SES-T (MS-8873) 16.2705 - 147b 8f00 Abit Siluro GeForce4MX440 16.2706 - 0172 NV17 [GeForce4 MX 420] 16.2707 - 0173 NV17 [GeForce4 MX 440-SE] 16.2708 - 0174 NV17 [GeForce4 440 Go] 16.2709 - 0175 NV17 [GeForce4 420 Go] 16.2710 - 0176 NV17 [GeForce4 420 Go 32M] 16.2711 - 0178 NV17GL [Quadro4 550 XGL] 16.2712 - 0179 NV17 [GeForce4 440 Go 64M] 16.2713 - 017a NV17GL [Quadro4 200/400 NVS] 16.2714 - 017b NV17GL [Quadro4 550 XGL] 16.2715 - 017c NV17GL [Quadro4 550 GoGL] 16.2716 - 0181 NV18 [GeForce4 MX 440 AGP 8x] 16.2717 - 0182 NV18 [GeForce4 MX 440SE AGP 8x] 16.2718 - 0183 NV18 [GeForce4 MX 420 AGP 8x] 16.2719 - 0188 NV18GL [Quadro4 580 XGL] 16.2720 - 018a NV18GL [Quadro4 NVS] 16.2721 - 018b NV18GL [Quadro4 380 XGL] 16.2722 - 01a0 NV15 [GeForce2 - nForce GPU] 16.2723 - 01a4 nForce CPU bridge 16.2724 - 01ab nForce 420 Memory Controller (DDR) 16.2725 - 01ac nForce 220/420 Memory Controller 16.2726 - 01ad nForce 220/420 Memory Controller 16.2727 - 01b1 nForce Audio 16.2728 - 01b2 nForce ISA Bridge 16.2729 - 01b4 nForce PCI System Management 16.2730 - 01b7 nForce AGP to PCI Bridge 16.2731 - 01b8 nForce PCI-to-PCI bridge 16.2732 - 01bc nForce IDE 16.2733 - 01c1 Intel 537 [nForce MC97 Modem] 16.2734 - 01c2 nForce USB Controller 16.2735 - 01c3 nForce Ethernet Controller 16.2736 - 01e8 nForce2 AGP 16.2737 - 01f0 NV18 [GeForce4 MX - nForce GPU] 16.2738 - 0200 NV20 [GeForce3] 16.2739 - 1043 402f AGP-V8200 DDR 16.2740 - 0201 NV20 [GeForce3 Ti 200] 16.2741 - 0202 NV20 [GeForce3 Ti 500] 16.2742 - 1043 405b V8200 T5 16.2743 - 1545 002f Xtasy 6964 16.2744 - 0203 NV20DCC [Quadro DCC] 16.2745 - 0250 NV25 [GeForce4 Ti 4600] 16.2746 - 0251 NV25 [GeForce4 Ti 4400] 16.2747 - 0252 NV25 [GeForce4 Ti] 16.2748 - 0253 NV25 [GeForce4 Ti 4200] 16.2749 - 107d 2896 WinFast A250 LE TD (Dual VGA/TV-out/DVI) 16.2750 - 147b 8f09 Siluro (Dual VGA/TV-out/DVI) 16.2751 - 0258 NV25GL [Quadro4 900 XGL] 16.2752 - 0259 NV25GL [Quadro4 750 XGL] 16.2753 - 025b NV25GL [Quadro4 700 XGL] 16.2754 - 0280 NV28 [GeForce4 Ti 4800] 16.2755 - 0281 NV28 [GeForce4 Ti 4200 AGP 8x] 16.2756 - 0282 NV28 [GeForce4 Ti 4800 SE] 16.2757 - 0286 NV28 [GeForce4 Ti 4200 Go AGP 8x] 16.2758 - 0288 NV28GL [Quadro4 980 XGL] 16.2759 - 0289 NV28GL [Quadro4 780 XGL] 16.2760 - 0300 NV30 [GeForce FX] 16.2761 - 0301 NV30 [GeForce FX 5800 Ultra] 16.2762 - 0302 NV30 [GeForce FX 5800] 16.2763 - 0308 NV30GL [Quadro FX 2000] 16.2764 - 0309 NV30GL [Quadro FX 1000] 16.2765 -10df Emulex Corporation 16.2766 - 1ae5 LP6000 Fibre Channel Host Adapter 16.2767 - f085 LP850 Fibre Channel Adapter 16.2768 - f095 LP952 Fibre Channel Adapter 16.2769 - f098 LP982 Fibre Channel Adapter 16.2770 - f700 LP7000 Fibre Channel Host Adapter 16.2771 - f800 LP8000 Fibre Channel Host Adapter 16.2772 - f900 LP9000 Fibre Channel Host Adapter 16.2773 - f980 LP9802 Fibre Channel Adapter 16.2774 -10e0 Integrated Micro Solutions Inc. 16.2775 - 5026 IMS5026/27/28 16.2776 - 5027 IMS5027 16.2777 - 5028 IMS5028 16.2778 - 8849 IMS8849 16.2779 - 8853 IMS8853 16.2780 - 9128 IMS9128 [Twin turbo 128] 16.2781 -10e1 Tekram Technology Co.,Ltd. 16.2782 - 0391 TRM-S1040 16.2783 - 10e1 0391 DC-315U SCSI-3 Host Adapter 16.2784 - 690c DC-690c 16.2785 - dc29 DC-290 16.2786 -10e2 Aptix Corporation 16.2787 -10e3 Tundra Semiconductor Corp. 16.2788 - 0000 CA91C042 [Universe] 16.2789 - 0860 CA91C860 [QSpan] 16.2790 - 0862 CA91C862A [QSpan-II] 16.2791 -10e4 Tandem Computers 16.2792 -10e5 Micro Industries Corporation 16.2793 -10e6 Gainbery Computer Products Inc. 16.2794 -10e7 Vadem 16.2795 -10e8 Applied Micro Circuits Corp. 16.2796 - 2011 Q-Motion Video Capture/Edit board 16.2797 - 4750 S5930 [Matchmaker] 16.2798 - 5920 S5920 16.2799 - 8043 LANai4.x [Myrinet LANai interface chip] 16.2800 - 8062 S5933_PARASTATION 16.2801 - 807d S5933 [Matchmaker] 16.2802 - 8088 Kongsberg Spacetec Format Synchronizer 16.2803 - 8089 Kongsberg Spacetec Serial Output Board 16.2804 - 809c S5933_HEPC3 16.2805 - 80d7 PCI-9112 16.2806 - 80d9 PCI-9118 16.2807 - 80da PCI-9812 16.2808 - 811a PCI-IEEE1355-DS-DE Interface 16.2809 - 8170 S5933 [Matchmaker] (Chipset Development Tool) 16.2810 - 82db AJA HDNTV HD SDI Framestore 16.2811 -10e9 Alps Electric Co., Ltd. 16.2812 -10ea Intergraphics Systems 16.2813 - 1680 IGA-1680 16.2814 - 1682 IGA-1682 16.2815 - 1683 IGA-1683 16.2816 - 2000 CyberPro 2000 16.2817 - 2010 CyberPro 2000A 16.2818 - 5000 CyberPro 5000 16.2819 - 5050 CyberPro 5050 16.2820 - 5202 CyberPro 5202 16.2821 -10eb Artists Graphics 16.2822 - 0101 3GA 16.2823 - 8111 Twist3 Frame Grabber 16.2824 -10ec Realtek Semiconductor Co., Ltd. 16.2825 - 8029 RTL-8029(AS) 16.2826 - 10b8 2011 EZ-Card (SMC1208) 16.2827 - 10ec 8029 RTL-8029(AS) 16.2828 - 1113 1208 EN1208 16.2829 - 1186 0300 DE-528 16.2830 - 1259 2400 AT-2400 16.2831 - 8129 RTL-8129 16.2832 - 10ec 8129 RT8129 Fast Ethernet Adapter 16.2833 - 8138 RT8139 (B/C) Cardbus Fast Ethernet Adapter 16.2834 - 10ec 8138 RT8139 (B/C) Fast Ethernet Adapter 16.2835 - 8139 RTL-8139/8139C/8139C+ 16.2836 - 1025 8920 ALN-325 16.2837 - 1025 8921 ALN-325 16.2838 - 10bd 0320 EP-320X-R 16.2839 - 10ec 8139 RT8139 16.2840 - 1186 1300 DFE-538TX 16.2841 - 1186 1320 SN5200 16.2842 - 1186 8139 DRN-32TX 16.2843 - 11f6 8139 FN22-3(A) LinxPRO Ethernet Adapter 16.2844 - 1259 2500 AT-2500TX 16.2845 - 1259 2503 AT-2500TX/ACPI 16.2846 - 1429 d010 ND010 16.2847 - 1432 9130 EN-9130TX 16.2848 - 1436 8139 RT8139 16.2849 - 146c 1439 FE-1439TX 16.2850 - 1489 6001 GF100TXRII 16.2851 - 1489 6002 GF100TXRA 16.2852 - 149c 139a LFE-8139ATX 16.2853 - 149c 8139 LFE-8139TX 16.2854 - 2646 0001 EtheRx 16.2855 - 8e2e 7000 KF-230TX 16.2856 - 8e2e 7100 KF-230TX/2 16.2857 - a0a0 0007 ALN-325C 16.2858 - 8169 RTL-8169 16.2859 - 1371 434e ProG-2000L 16.2860 - 8197 SmartLAN56 56K Modem 16.2861 -10ed Ascii Corporation 16.2862 - 7310 V7310 16.2863 -10ee Xilinx Corporation 16.2864 - 3fc0 RME Digi96 16.2865 - 3fc1 RME Digi96/8 16.2866 - 3fc2 RME Digi96/8 Pro 16.2867 - 3fc3 RME Digi96/8 Pad 16.2868 - 3fc4 RME Digi9652 (Hammerfall) 16.2869 - 3fc5 RME Hammerfall DSP 16.2870 -10ef Racore Computer Products, Inc. 16.2871 - 8154 M815x Token Ring Adapter 16.2872 -10f0 Peritek Corporation 16.2873 -10f1 Tyan Computer 16.2874 -10f2 Achme Computer, Inc. 16.2875 -10f3 Alaris, Inc. 16.2876 -10f4 S-MOS Systems, Inc. 16.2877 -10f5 NKK Corporation 16.2878 - a001 NDR4000 [NR4600 Bridge] 16.2879 -10f6 Creative Electronic Systems SA 16.2880 -10f7 Matsushita Electric Industrial Co., Ltd. 16.2881 -10f8 Altos India Ltd 16.2882 -10f9 PC Direct 16.2883 -10fa Truevision 16.2884 - 000c TARGA 1000 16.2885 -10fb Thesys Gesellschaft für Mikroelektronik mbH 16.2886 - 186f TH 6255 16.2887 -10fc I-O Data Device, Inc. 16.2888 -# What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives 16.2889 - 0003 Cardbus IDE Controller 16.2890 - 0005 Cardbus SCSI CBSC II 16.2891 -10fd Soyo Computer, Inc 16.2892 -10fe Fast Multimedia AG 16.2893 -10ff NCube 16.2894 -1100 Jazz Multimedia 16.2895 -1101 Initio Corporation 16.2896 - 1060 INI-A100U2W 16.2897 - 9100 INI-9100/9100W 16.2898 - 9400 INI-940 16.2899 - 9401 INI-950 16.2900 - 9500 360P 16.2901 -1102 Creative Labs 16.2902 - 0002 SB Live! EMU10k1 16.2903 - 1102 0020 CT4850 SBLive! Value 16.2904 - 1102 0021 CT4620 SBLive! 16.2905 - 1102 002f SBLive! mainboard implementation 16.2906 - 1102 4001 E-mu APS 16.2907 - 1102 8022 CT4780 SBLive! Value 16.2908 - 1102 8023 CT4790 SoundBlaster PCI512 16.2909 - 1102 8024 CT4760 SBLive! 16.2910 - 1102 8025 SBLive! Mainboard Implementation 16.2911 - 1102 8026 CT4830 SBLive! Value 16.2912 - 1102 8027 CT4832 SBLive! Value 16.2913 - 1102 8028 CT4760 SBLive! OEM version 16.2914 - 1102 8031 CT4831 SBLive! Value 16.2915 - 1102 8040 CT4760 SBLive! 16.2916 - 1102 8051 CT4850 SBLive! Value 16.2917 - 1102 8061 SBLive! Player 5.1 16.2918 - 1102 8064 SB Live! 5.1 Model SB0100 16.2919 - 1102 8065 SBLive! 5.1 Digital Model SB0220 16.2920 - 0004 SB Audigy 16.2921 - 1102 0051 SB0090 Audigy Player 16.2922 - 1102 0053 SB0090 Audigy Player/OEM 16.2923 - 0006 [SB Live! Value] EMU10k1X 16.2924 - 4001 SB Audigy FireWire Port 16.2925 - 1102 0010 SB Audigy FireWire Port 16.2926 - 7002 SB Live! MIDI/Game Port 16.2927 - 1102 0020 Gameport Joystick 16.2928 - 7003 SB Audigy MIDI/Game port 16.2929 - 1102 0040 SB Audigy MIDI/Game Port 16.2930 - 7004 [SB Live! Value] Input device controller 16.2931 - 8064 SB0100 [SBLive! 5.1 OEM] 16.2932 - 8938 Ectiva EV1938 16.2933 -1103 Triones Technologies, Inc. 16.2934 - 0003 HPT343 16.2935 -# Revisions: 01=HPT366, 03=HPT370, 04=HPT370A, 05=HPT372 16.2936 - 0004 HPT366/368/370/370A/372 16.2937 - 1103 0001 HPT370A 16.2938 - 1103 0005 HPT370 UDMA100 16.2939 - 0005 HPT372A 16.2940 - 0006 HPT302 16.2941 - 0007 HPT371 16.2942 - 0008 HPT374 16.2943 - 0009 HPT372N 16.2944 -1104 RasterOps Corp. 16.2945 -1105 Sigma Designs, Inc. 16.2946 - 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder 16.2947 - 8300 REALmagic Hollywood Plus DVD Decoder 16.2948 - 8400 EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder 16.2949 -1106 VIA Technologies, Inc. 16.2950 - 0102 Embedded VIA Ethernet Controller 16.2951 - 0130 VT6305 1394.A Controller 16.2952 - 0305 VT8363/8365 [KT133/KM133] 16.2953 - 1043 8033 A7V Mainboard 16.2954 - 1043 803e A7V-E Mainboard 16.2955 - 1043 8042 A7V133/A7V133-C Mainboard 16.2956 - 147b a401 KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard 16.2957 - 0391 VT8371 [KX133] 16.2958 - 0501 VT8501 [Apollo MVP4] 16.2959 - 0505 VT82C505 16.2960 -# Shares chip with :0576. The VT82C576M has :1571 instead of :0561. 16.2961 - 0561 VT82C576MV 16.2962 - 0571 VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE 16.2963 - 1019 0985 P6VXA Motherboard 16.2964 - 1043 8052 VT8233A Bus Master ATA100/66/33 IDE 16.2965 - 1043 808c A7V8X motherboard 16.2966 - 1106 0571 VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE 16.2967 - 1179 0001 Magnia Z310 16.2968 - 1458 5002 GA-7VAX Mainboard 16.2969 - 0576 VT82C576 3V [Apollo Master] 16.2970 - 0585 VT82C585VP [Apollo VP1/VPX] 16.2971 - 0586 VT82C586/A/B PCI-to-ISA [Apollo VP] 16.2972 - 1106 0000 MVP3 ISA Bridge 16.2973 - 0595 VT82C595 [Apollo VP2] 16.2974 - 0596 VT82C596 ISA [Mobile South] 16.2975 - 1106 0000 VT82C596/A/B PCI to ISA Bridge 16.2976 - 1458 0596 VT82C596/A/B PCI to ISA Bridge 16.2977 - 0597 VT82C597 [Apollo VP3] 16.2978 - 0598 VT82C598 [Apollo MVP3] 16.2979 - 0601 VT8601 [Apollo ProMedia] 16.2980 - 0605 VT8605 [ProSavage PM133] 16.2981 - 1043 802c CUV4X mainboard 16.2982 - 0680 VT82C680 [Apollo P6] 16.2983 - 0686 VT82C686 [Apollo Super South] 16.2984 - 1019 0985 P6VXA Motherboard 16.2985 - 1043 802c CUV4X mainboard 16.2986 - 1043 8033 A7V Mainboard 16.2987 - 1043 803e A7V-E Mainboard 16.2988 - 1043 8040 A7M266 Mainboard 16.2989 - 1043 8042 A7V133/A7V133-C Mainboard 16.2990 - 1106 0000 VT82C686/A PCI to ISA Bridge 16.2991 - 1106 0686 VT82C686/A PCI to ISA Bridge 16.2992 - 1179 0001 Magnia Z310 16.2993 - 147b a702 KG7-Lite Mainboard 16.2994 - 0691 VT82C693A/694x [Apollo PRO133x] 16.2995 - 1019 0985 P6VXA Motherboard 16.2996 - 1179 0001 Magnia Z310 16.2997 - 1458 0691 VT82C691 Apollo Pro System Controller 16.2998 - 0693 VT82C693 [Apollo Pro Plus] 16.2999 - 0698 VT82C693A [Apollo Pro133 AGP] 16.3000 - 0926 VT82C926 [Amazon] 16.3001 - 1000 VT82C570MV 16.3002 - 1106 VT82C570MV 16.3003 - 1571 VT82C576M/VT82C586 16.3004 - 1595 VT82C595/97 [Apollo VP2/97] 16.3005 - 3038 USB 16.3006 - 0925 1234 USB Controller 16.3007 - 1019 0985 P6VXA Motherboard 16.3008 - 1043 808c A7V8X motherboard 16.3009 - 1179 0001 Magnia Z310 16.3010 - 3040 VT82C586B ACPI 16.3011 - 3043 VT86C100A [Rhine] 16.3012 - 10bd 0000 VT86C100A Fast Ethernet Adapter 16.3013 - 1106 0100 VT86C100A Fast Ethernet Adapter 16.3014 - 1186 1400 DFE-530TX rev A 16.3015 - 3044 IEEE 1394 Host Controller 16.3016 - 3050 VT82C596 Power Management 16.3017 - 3051 VT82C596 Power Management 16.3018 - 3057 VT82C686 [Apollo Super ACPI] 16.3019 - 1019 0985 P6VXA Motherboard 16.3020 - 1043 8033 A7V Mainboard 16.3021 - 1043 803e A7V-E Mainboard 16.3022 - 1043 8040 A7M266 Mainboard 16.3023 - 1043 8042 A7V133/A7V133-C Mainboard 16.3024 - 1179 0001 Magnia Z310 16.3025 - 3058 VT82C686 AC97 Audio Controller 16.3026 - 0e11 b194 Soundmax integrated digital audio 16.3027 - 1019 0985 P6VXA Motherboard 16.3028 - 1106 4511 Onboard Audio on EP7KXA 16.3029 - 1458 7600 Onboard Audio 16.3030 - 1462 3091 MS-6309 Onboard Audio 16.3031 - 15dd 7609 Onboard Audio 16.3032 - 3059 VT8233/A/8235 AC97 Audio Controller 16.3033 - 1043 8095 A7V8X Motherboard (Realtek ALC650 codec) 16.3034 - 1458 a002 GA-7VAX Onboard Audio (Realtek ALC650) 16.3035 - 3065 VT6102 [Rhine-II] 16.3036 - 1106 0102 VT6102 [Rhine II] Embeded Ethernet Controller on VT8235 16.3037 - 1186 1400 DFE-530TX rev A 16.3038 - 1186 1401 DFE-530TX rev B 16.3039 - 13b9 1421 LD-10/100AL PCI Fast Ethernet Adapter (rev.B) 16.3040 - 3068 Intel 537 [AC97 Modem] 16.3041 - 3074 VT8233 PCI to ISA Bridge 16.3042 - 1043 8052 VT8233A 16.3043 - 3091 VT8633 [Apollo Pro266] 16.3044 - 3099 VT8366/A/7 [Apollo KT266/A/333] 16.3045 - 1043 8064 A7V266-E Mainboard 16.3046 - 1043 807f A7V333 Mainboard 16.3047 - 3101 VT8653 Host Bridge 16.3048 - 3102 VT8662 Host Bridge 16.3049 - 3103 VT8615 Host Bridge 16.3050 - 3104 USB 2.0 16.3051 - 1043 808c A7V8X motherboard 16.3052 - 1458 5004 GA-7VAX Mainboard 16.3053 - 3106 VT6105 [Rhine-III] 16.3054 - 3109 VT8233C PCI to ISA Bridge 16.3055 - 3112 VT8361 [KLE133] Host Bridge 16.3056 - 3116 VT8375 [KM266/KL266] Host Bridge 16.3057 -# found on EPIA M6000/9000 mainboard 16.3058 - 3122 VT8623 [Apollo CLE266] integrated CastleRock graphics 16.3059 -# found on EPIA M6000/9000 mainboard 16.3060 - 3123 VT8623 [Apollo CLE266] 16.3061 - 3128 VT8753 [P4X266 AGP] 16.3062 - 3133 VT3133 Host Bridge 16.3063 - 3147 VT8233A ISA Bridge 16.3064 - 3148 P4M266 Host Bridge 16.3065 - 3156 P/KN266 Host Bridge 16.3066 - 3168 VT8374 P4X400 Host Controller/AGP Bridge 16.3067 - 3177 VT8235 ISA Bridge 16.3068 - 1043 808c A7V8X motherboard 16.3069 - 1458 5001 GA-7VAX Mainboard 16.3070 - 3189 VT8377 [KT400 AGP] Host Bridge 16.3071 - 1043 807f A7V8X motherboard 16.3072 - 1458 5000 GA-7VAX Mainboard 16.3073 - 5030 VT82C596 ACPI [Apollo PRO] 16.3074 - 6100 VT85C100A [Rhine II] 16.3075 - 8231 VT8231 [PCI-to-ISA Bridge] 16.3076 - 8235 VT8235 ACPI 16.3077 - 8305 VT8363/8365 [KT133/KM133 AGP] 16.3078 - 8391 VT8371 [KX133 AGP] 16.3079 - 8501 VT8501 [Apollo MVP4 AGP] 16.3080 - 8596 VT82C596 [Apollo PRO AGP] 16.3081 - 8597 VT82C597 [Apollo VP3 AGP] 16.3082 - 8598 VT82C598/694x [Apollo MVP3/Pro133x AGP] 16.3083 - 1019 0985 P6VXA Motherboard 16.3084 - 8601 VT8601 [Apollo ProMedia AGP] 16.3085 - 8605 VT8605 [PM133 AGP] 16.3086 - 8691 VT82C691 [Apollo Pro] 16.3087 - 8693 VT82C693 [Apollo Pro Plus] PCI Bridge 16.3088 - b091 VT8633 [Apollo Pro266 AGP] 16.3089 - b099 VT8366/A/7 [Apollo KT266/A/333 AGP] 16.3090 - b101 VT8653 AGP Bridge 16.3091 - b102 VT8362 AGP Bridge 16.3092 - b103 VT8615 AGP Bridge 16.3093 - b112 VT8361 [KLE133] AGP Bridge 16.3094 - b168 VT8235 PCI Bridge 16.3095 -1107 Stratus Computers 16.3096 - 0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!) 16.3097 -1108 Proteon, Inc. 16.3098 - 0100 p1690plus_AA 16.3099 - 0101 p1690plus_AB 16.3100 - 0105 P1690Plus 16.3101 - 0108 P1690Plus 16.3102 - 0138 P1690Plus 16.3103 - 0139 P1690Plus 16.3104 - 013c P1690Plus 16.3105 - 013d P1690Plus 16.3106 -1109 Cogent Data Technologies, Inc. 16.3107 - 1400 EM110TX [EX110TX] 16.3108 -110a Siemens Nixdorf AG 16.3109 - 0002 Pirahna 2-port 16.3110 - 0005 Tulip controller, power management, switch extender 16.3111 - 0006 FSC PINC (I/O-APIC) 16.3112 - 0015 FSC Multiprocessor Interrupt Controller 16.3113 - 001d FSC Copernicus Management Controller 16.3114 - 007b FSC Remote Service Controller, mailbox device 16.3115 - 007c FSC Remote Service Controller, shared memory device 16.3116 - 007d FSC Remote Service Controller, SMIC device 16.3117 - 2102 DSCC4 WAN adapter 16.3118 - 4942 FPGA I-Bus Tracer for MBD 16.3119 - 6120 SZB6120 16.3120 -110b Chromatic Research Inc. 16.3121 - 0001 Mpact Media Processor 16.3122 - 0004 Mpact 2 16.3123 -110c Mini-Max Technology, Inc. 16.3124 -110d Znyx Advanced Systems 16.3125 -110e CPU Technology 16.3126 -110f Ross Technology 16.3127 -1110 Powerhouse Systems 16.3128 - 6037 Firepower Powerized SMP I/O ASIC 16.3129 - 6073 Firepower Powerized SMP I/O ASIC 16.3130 -1111 Santa Cruz Operation 16.3131 -# Also claimed to be RNS or Rockwell International, current PCISIG records list Osicom 16.3132 -1112 Osicom Technologies Inc 16.3133 - 2200 FDDI Adapter 16.3134 - 2300 Fast Ethernet Adapter 16.3135 - 2340 4 Port Fast Ethernet Adapter 16.3136 - 2400 ATM Adapter 16.3137 -1113 Accton Technology Corporation 16.3138 - 1211 SMC2-1211TX 16.3139 - 103c 1207 EN-1207D Fast Ethernet Adapter 16.3140 - 1113 1211 EN-1207D Fast Ethernet Adapter 16.3141 - 1216 EN-1216 Ethernet Adapter 16.3142 - 111a 1020 SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?] 16.3143 - 1217 EN-1217 Ethernet Adapter 16.3144 - 5105 10Mbps Network card 16.3145 - 9211 EN-1207D Fast Ethernet Adapter 16.3146 - 1113 9211 EN-1207D Fast Ethernet Adapter 16.3147 - 9511 Fast Ethernet Adapter 16.3148 -1114 Atmel Corporation 16.3149 -1115 3D Labs 16.3150 -1116 Data Translation 16.3151 - 0022 DT3001 16.3152 - 0023 DT3002 16.3153 - 0024 DT3003 16.3154 - 0025 DT3004 16.3155 - 0026 DT3005 16.3156 - 0027 DT3001-PGL 16.3157 - 0028 DT3003-PGL 16.3158 -1117 Datacube, Inc 16.3159 - 9500 Max-1C SVGA card 16.3160 - 9501 Max-1C image processing 16.3161 -1118 Berg Electronics 16.3162 -1119 ICP Vortex Computersysteme GmbH 16.3163 - 0000 GDT 6000/6020/6050 16.3164 - 0001 GDT 6000B/6010 16.3165 - 0002 GDT 6110/6510 16.3166 - 0003 GDT 6120/6520 16.3167 - 0004 GDT 6530 16.3168 - 0005 GDT 6550 16.3169 - 0006 GDT 6x17 16.3170 - 0007 GDT 6x27 16.3171 - 0008 GDT 6537 16.3172 - 0009 GDT 6557 16.3173 - 000a GDT 6115/6515 16.3174 - 000b GDT 6125/6525 16.3175 - 000c GDT 6535 16.3176 - 000d GDT 6555 16.3177 - 0100 GDT 6117RP/6517RP 16.3178 - 0101 GDT 6127RP/6527RP 16.3179 - 0102 GDT 6537RP 16.3180 - 0103 GDT 6557RP 16.3181 - 0104 GDT 6111RP/6511RP 16.3182 - 0105 GDT 6121RP/6521RP 16.3183 - 0110 GDT 6117RD/6517RD 16.3184 - 0111 GDT 6127RD/6527RD 16.3185 - 0112 GDT 6537RD 16.3186 - 0113 GDT 6557RD 16.3187 - 0114 GDT 6111RD/6511RD 16.3188 - 0115 GDT 6121RD/6521RD 16.3189 - 0118 GDT 6118RD/6518RD/6618RD 16.3190 - 0119 GDT 6128RD/6528RD/6628RD 16.3191 - 011a GDT 6538RD/6638RD 16.3192 - 011b GDT 6558RD/6658RD 16.3193 - 0120 GDT 6117RP2/6517RP2 16.3194 - 0121 GDT 6127RP2/6527RP2 16.3195 - 0122 GDT 6537RP2 16.3196 - 0123 GDT 6557RP2 16.3197 - 0124 GDT 6111RP2/6511RP2 16.3198 - 0125 GDT 6121RP2/6521RP2 16.3199 - 0136 GDT 6113RS/6513RS 16.3200 - 0137 GDT 6123RS/6523RS 16.3201 - 0138 GDT 6118RS/6518RS/6618RS 16.3202 - 0139 GDT 6128RS/6528RS/6628RS 16.3203 - 013a GDT 6538RS/6638RS 16.3204 - 013b GDT 6558RS/6658RS 16.3205 - 013c GDT 6533RS/6633RS 16.3206 - 013d GDT 6543RS/6643RS 16.3207 - 013e GDT 6553RS/6653RS 16.3208 - 013f GDT 6563RS/6663RS 16.3209 - 0166 GDT 7113RN/7513RN/7613RN 16.3210 - 0167 GDT 7123RN/7523RN/7623RN 16.3211 - 0168 GDT 7118RN/7518RN/7518RN 16.3212 - 0169 GDT 7128RN/7528RN/7628RN 16.3213 - 016a GDT 7538RN/7638RN 16.3214 - 016b GDT 7558RN/7658RN 16.3215 - 016c GDT 7533RN/7633RN 16.3216 - 016d GDT 7543RN/7643RN 16.3217 - 016e GDT 7553RN/7653RN 16.3218 - 016f GDT 7563RN/7663RN 16.3219 - 01d6 GDT 4x13RZ 16.3220 - 01d7 GDT 4x23RZ 16.3221 - 01f6 GDT 8x13RZ 16.3222 - 01f7 GDT 8x23RZ 16.3223 - 01fc GDT 8x33RZ 16.3224 - 01fd GDT 8x43RZ 16.3225 - 01fe GDT 8x53RZ 16.3226 - 01ff GDT 8x63RZ 16.3227 - 0210 GDT 6519RD/6619RD 16.3228 - 0211 GDT 6529RD/6629RD 16.3229 - 0260 GDT 7519RN/7619RN 16.3230 - 0261 GDT 7529RN/7629RN 16.3231 - 0300 GDT Raid Controller 16.3232 -111a Efficient Networks, Inc 16.3233 - 0000 155P-MF1 (FPGA) 16.3234 - 0002 155P-MF1 (ASIC) 16.3235 - 0003 ENI-25P ATM 16.3236 - 111a 0000 ENI-25p Miniport ATM Adapter 16.3237 - 0005 SpeedStream (LANAI) 16.3238 - 111a 0001 ENI-3010 ATM 16.3239 - 111a 0009 ENI-3060 ADSL (VPI=0) 16.3240 - 111a 0101 ENI-3010 ATM 16.3241 - 111a 0109 ENI-3060CO ADSL (VPI=0) 16.3242 - 111a 0809 ENI-3060 ADSL (VPI=0 or 8) 16.3243 - 111a 0909 ENI-3060CO ADSL (VPI=0 or 8) 16.3244 - 111a 0a09 ENI-3060 ADSL (VPI=<0..15>) 16.3245 - 0007 SpeedStream ADSL 16.3246 - 111a 1001 ENI-3061 ADSL [ASIC] 16.3247 -111b Teledyne Electronic Systems 16.3248 -111c Tricord Systems Inc. 16.3249 - 0001 Powerbis Bridge 16.3250 -111d Integrated Device Tech 16.3251 - 0001 IDT77211 ATM Adapter 16.3252 - 0003 IDT77252 ATM network controller 16.3253 -111e Eldec 16.3254 -111f Precision Digital Images 16.3255 - 4a47 Precision MX Video engine interface 16.3256 - 5243 Frame capture bus interface 16.3257 -1120 EMC Corporation 16.3258 -1121 Zilog 16.3259 -1122 Multi-tech Systems, Inc. 16.3260 -1123 Excellent Design, Inc. 16.3261 -1124 Leutron Vision AG 16.3262 -1125 Eurocore 16.3263 -1126 Vigra 16.3264 -1127 FORE Systems Inc 16.3265 - 0200 ForeRunner PCA-200 ATM 16.3266 - 0210 PCA-200PC 16.3267 - 0250 ATM 16.3268 - 0300 ForeRunner PCA-200EPC ATM 16.3269 - 0310 ATM 16.3270 - 0400 ForeRunnerHE ATM Adapter 16.3271 - 1127 0400 ForeRunnerHE ATM 16.3272 -1129 Firmworks 16.3273 -112a Hermes Electronics Company, Ltd. 16.3274 -112b Linotype - Hell AG 16.3275 -112c Zenith Data Systems 16.3276 -112d Ravicad 16.3277 -112e Infomedia Microelectronics Inc. 16.3278 -112f Imaging Technology Inc 16.3279 - 0000 MVC IC-PCI 16.3280 - 0001 MVC IM-PCI Video frame grabber/processor 16.3281 -1130 Computervision 16.3282 -1131 Philips Semiconductors 16.3283 - 1561 USB 1.1 Host Controller 16.3284 - 1562 USB 2.0 Host Controller 16.3285 - 3400 SmartPCI56(UCB1500) 56K Modem 16.3286 - 7130 SAA7130 Video Broadcast Decoder 16.3287 - 7133 SAA7133 Audio+video broadcast decoder 16.3288 -# PCI audio and video broadcast decoder (http://www.semiconductors.philips.com/pip/saa7134hl) 16.3289 - 7134 SAA7134 16.3290 - 7135 SAA7135 Audio+video broadcast decoder 16.3291 - 7145 SAA7145 16.3292 - 7146 SAA7146 16.3293 - 114b 2003 DVRaptor Video Edit/Capture Card 16.3294 - 11bd 0006 DV500 Overlay 16.3295 - 11bd 000a DV500 Overlay 16.3296 -1132 Mitel Corp. 16.3297 -1133 Eicon Technology Corporation 16.3298 - 7901 EiconCard S90 16.3299 - 7902 EiconCard S90 16.3300 - 7911 EiconCard S91 16.3301 - 7912 EiconCard S91 16.3302 - 7941 EiconCard S94 16.3303 - 7942 EiconCard S94 16.3304 - 7943 EiconCard S94 16.3305 - 7944 EiconCard S94 16.3306 - b921 EiconCard P92 16.3307 - b922 EiconCard P92 16.3308 - b923 EiconCard P92 16.3309 - e001 DIVA 20PRO 16.3310 - 1133 e001 DIVA Pro 2.0 S/T 16.3311 - e002 DIVA 20 16.3312 - 1133 e002 DIVA 2.0 S/T 16.3313 - e003 DIVA 20PRO_U 16.3314 - 1133 e003 DIVA Pro 2.0 U 16.3315 - e004 DIVA 20_U 16.3316 - 1133 e004 DIVA 2.0 U 16.3317 - e005 DIVA LOW 16.3318 - 1133 e005 DIVA 2.01 S/T 16.3319 - e00b DIVA 2.02 16.3320 - e010 DIVA Server BRI-2M 16.3321 - 1133 e010 DIVA Server BRI-2M 16.3322 - e012 DIVA Server BRI-8M 16.3323 - 1133 e012 DIVA Server BRI-8M 16.3324 - e014 DIVA Server PRI-30M 16.3325 - 1133 e014 DIVA Server PRI-30M 16.3326 - e018 DIVA Server BRI-2M/-2F 16.3327 -1134 Mercury Computer Systems 16.3328 - 0001 Raceway Bridge 16.3329 -1135 Fuji Xerox Co Ltd 16.3330 - 0001 Printer controller 16.3331 -1136 Momentum Data Systems 16.3332 -1137 Cisco Systems Inc 16.3333 -1138 Ziatech Corporation 16.3334 - 8905 8905 [STD 32 Bridge] 16.3335 -1139 Dynamic Pictures, Inc 16.3336 - 0001 VGA Compatable 3D Graphics 16.3337 -113a FWB Inc 16.3338 -113b Network Computing Devices 16.3339 -113c Cyclone Microsystems, Inc. 16.3340 - 0000 PCI-9060 i960 Bridge 16.3341 - 0001 PCI-SDK [PCI i960 Evaluation Platform] 16.3342 - 0911 PCI-911 [i960Jx-based Intelligent I/O Controller] 16.3343 - 0912 PCI-912 [i960CF-based Intelligent I/O Controller] 16.3344 - 0913 PCI-913 16.3345 - 0914 PCI-914 [I/O Controller w/ secondary PCI bus] 16.3346 -113d Leading Edge Products Inc 16.3347 -113e Sanyo Electric Co - Computer Engineering Dept 16.3348 -113f Equinox Systems, Inc. 16.3349 - 0808 SST-64P Adapter 16.3350 - 1010 SST-128P Adapter 16.3351 - 80c0 SST-16P DB Adapter 16.3352 - 80c4 SST-16P RJ Adapter 16.3353 - 80c8 SST-16P Adapter 16.3354 - 8888 SST-4P Adapter 16.3355 - 9090 SST-8P Adapter 16.3356 -1140 Intervoice Inc 16.3357 -1141 Crest Microsystem Inc 16.3358 -1142 Alliance Semiconductor Corporation 16.3359 - 3210 AP6410 16.3360 - 6422 ProVideo 6422 16.3361 - 6424 ProVideo 6424 16.3362 - 6425 ProMotion AT25 16.3363 - 643d ProMotion AT3D 16.3364 -1143 NetPower, Inc 16.3365 -1144 Cincinnati Milacron 16.3366 - 0001 Noservo controller 16.3367 -1145 Workbit Corporation 16.3368 - 8007 NinjaSCSI-32 Workbit 16.3369 - f007 NinjaSCSI-32 KME 16.3370 - f010 NinjaSCSI-32 Workbit 16.3371 - f012 NinjaSCSI-32 Logitec 16.3372 - f013 NinjaSCSI-32 Logitec 16.3373 - f015 NinjaSCSI-32 Melco 16.3374 -1146 Force Computers 16.3375 -1147 Interface Corp 16.3376 -1148 Syskonnect (Schneider & Koch) 16.3377 - 4000 FDDI Adapter 16.3378 - 0e11 b03b Netelligent 100 FDDI DAS Fibre SC 16.3379 - 0e11 b03c Netelligent 100 FDDI SAS Fibre SC 16.3380 - 0e11 b03d Netelligent 100 FDDI DAS UTP 16.3381 - 0e11 b03e Netelligent 100 FDDI SAS UTP 16.3382 - 0e11 b03f Netelligent 100 FDDI SAS Fibre MIC 16.3383 - 1148 5521 FDDI SK-5521 (SK-NET FDDI-UP) 16.3384 - 1148 5522 FDDI SK-5522 (SK-NET FDDI-UP DAS) 16.3385 - 1148 5541 FDDI SK-5541 (SK-NET FDDI-FP) 16.3386 - 1148 5543 FDDI SK-5543 (SK-NET FDDI-LP) 16.3387 - 1148 5544 FDDI SK-5544 (SK-NET FDDI-LP DAS) 16.3388 - 1148 5821 FDDI SK-5821 (SK-NET FDDI-UP64) 16.3389 - 1148 5822 FDDI SK-5822 (SK-NET FDDI-UP64 DAS) 16.3390 - 1148 5841 FDDI SK-5841 (SK-NET FDDI-FP64) 16.3391 - 1148 5843 FDDI SK-5843 (SK-NET FDDI-LP64) 16.3392 - 1148 5844 FDDI SK-5844 (SK-NET FDDI-LP64 DAS) 16.3393 - 4200 Token Ring adapter 16.3394 - 4300 SK-98xx Gigabit Ethernet Server Adapter 16.3395 - 1148 9821 SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T) 16.3396 - 1148 9822 SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link) 16.3397 - 1148 9841 SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX) 16.3398 - 1148 9842 SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link) 16.3399 - 1148 9843 SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX) 16.3400 - 1148 9844 SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link) 16.3401 - 1148 9861 SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition) 16.3402 - 1148 9862 SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link) 16.3403 -# Information got from SysKonnekt 16.3404 - 1148 9871 SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX) 16.3405 -# Information got from SysKonnekt 16.3406 - 1148 9872 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) 16.3407 - 1259 2970 Allied Telesyn AT-2970SX Gigabit Ethernet Adapter 16.3408 - 1259 2971 Allied Telesyn AT-2970LX Gigabit Ethernet Adapter 16.3409 - 1259 2972 Allied Telesyn AT-2970TX Gigabit Ethernet Adapter 16.3410 - 1259 2973 Allied Telesyn AT-2971SX Gigabit Ethernet Adapter 16.3411 - 1259 2974 Allied Telesyn AT-2971T Gigabit Ethernet Adapter 16.3412 - 1259 2975 Allied Telesyn AT-2970SX/2SC Gigabit Ethernet Adapter 16.3413 - 1259 2976 Allied Telesyn AT-2970LX/2SC Gigabit Ethernet Adapter 16.3414 - 1259 2977 Allied Telesyn AT-2970TX/2TX Gigabit Ethernet Adapter 16.3415 - 4320 SK-98xx V2.0 Gigabit Ethernet Adapter 16.3416 - 1148 0121 Marvell RDK-8001 Adapter 16.3417 - 1148 0221 Marvell RDK-8002 Adapter 16.3418 - 1148 0321 Marvell RDK-8003 Adapter 16.3419 - 1148 0421 Marvell RDK-8004 Adapter 16.3420 - 1148 0621 Marvell RDK-8006 Adapter 16.3421 - 1148 0721 Marvell RDK-8007 Adapter 16.3422 - 1148 0821 Marvell RDK-8008 Adapter 16.3423 - 1148 0921 Marvell RDK-8009 Adapter 16.3424 - 1148 1121 Marvell RDK-8011 Adapter 16.3425 - 1148 1221 Marvell RDK-8012 Adapter 16.3426 - 1148 3221 SK-9521 V2.0 10/100/1000Base-T Adapter 16.3427 - 1148 5021 SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter 16.3428 - 1148 5041 SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter 16.3429 - 1148 5043 SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter 16.3430 - 1148 5051 SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter 16.3431 - 1148 5061 SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter 16.3432 - 1148 5071 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter 16.3433 - 1148 9521 SK-9521 10/100/1000Base-T Adapter 16.3434 -1149 Win System Corporation 16.3435 -114a VMIC 16.3436 - 5579 VMIPCI-5579 (Reflective Memory Card) 16.3437 - 5587 VMIPCI-5587 (Reflective Memory Card) 16.3438 - 6504 VMIC PCI 7755 FPGA 16.3439 - 7587 VMIVME-7587 16.3440 -114b Canopus Co., Ltd 16.3441 -114c Annabooks 16.3442 -114d IC Corporation 16.3443 -114e Nikon Systems Inc 16.3444 -114f Digi International 16.3445 - 0002 AccelePort EPC 16.3446 - 0003 RightSwitch SE-6 16.3447 - 0004 AccelePort Xem 16.3448 - 0005 AccelePort Xr 16.3449 - 0006 AccelePort Xr,C/X 16.3450 - 0009 AccelePort Xr/J 16.3451 - 000a AccelePort EPC/J 16.3452 - 000c DataFirePRIme T1 (1-port) 16.3453 - 000d SyncPort 2-Port (x.25/FR) 16.3454 - 0011 AccelePort 8r EIA-232 (IBM) 16.3455 - 0012 AccelePort 8r EIA-422 16.3456 - 0013 AccelePort Xr 16.3457 - 0014 AccelePort 8r EIA-422 16.3458 - 0015 AccelePort Xem 16.3459 - 0016 AccelePort EPC/X 16.3460 - 0017 AccelePort C/X 16.3461 - 001a DataFirePRIme E1 (1-port) 16.3462 - 001b AccelePort C/X (IBM) 16.3463 - 001d DataFire RAS T1/E1/PRI 16.3464 - 114f 0050 DataFire RAS E1 Adapter 16.3465 - 114f 0051 DataFire RAS Dual E1 Adapter 16.3466 - 114f 0052 DataFire RAS T1 Adapter 16.3467 - 114f 0053 DataFire RAS Dual T1 Adapter 16.3468 - 0023 AccelePort RAS 16.3469 - 0024 DataFire RAS B4 ST/U 16.3470 - 114f 0030 DataFire RAS BRI U Adapter 16.3471 - 114f 0031 DataFire RAS BRI S/T Adapter 16.3472 - 0026 AccelePort 4r 920 16.3473 - 0027 AccelePort Xr 920 16.3474 - 0034 AccelePort 2r 920 16.3475 - 0035 DataFire DSP T1/E1/PRI cPCI 16.3476 - 0040 AccelePort Xp 16.3477 - 0042 AccelePort 2p PCI 16.3478 - 0070 Datafire Micro V IOM2 (Europe) 16.3479 - 0071 Datafire Micro V (Europe) 16.3480 - 0072 Datafire Micro V IOM2 (North America) 16.3481 - 0073 Datafire Micro V (North America) 16.3482 - 6001 Avanstar 16.3483 -1150 Thinking Machines Corp 16.3484 -1151 JAE Electronics Inc. 16.3485 -1152 Megatek 16.3486 -1153 Land Win Electronic Corp 16.3487 -1154 Melco Inc 16.3488 -1155 Pine Technology Ltd 16.3489 -1156 Periscope Engineering 16.3490 -1157 Avsys Corporation 16.3491 -1158 Voarx R & D Inc 16.3492 - 3011 Tokenet/vg 1001/10m anylan 16.3493 - 9050 Lanfleet/Truevalue 16.3494 - 9051 Lanfleet/Truevalue 16.3495 -1159 Mutech Corp 16.3496 - 0001 MV-1000 16.3497 -115a Harlequin Ltd 16.3498 -115b Parallax Graphics 16.3499 -115c Photron Ltd. 16.3500 -115d Xircom 16.3501 - 0003 Cardbus Ethernet 10/100 16.3502 - 1014 0181 10/100 EtherJet Cardbus Adapter 16.3503 - 1014 1181 10/100 EtherJet Cardbus Adapter 16.3504 - 1014 8181 10/100 EtherJet Cardbus Adapter 16.3505 - 1014 9181 10/100 EtherJet Cardbus Adapter 16.3506 - 115d 0181 Cardbus Ethernet 10/100 16.3507 - 115d 1181 Cardbus Ethernet 10/100 16.3508 - 1179 0181 Cardbus Ethernet 10/100 16.3509 - 8086 8181 EtherExpress PRO/100 Mobile CardBus 32 Adapter 16.3510 - 8086 9181 EtherExpress PRO/100 Mobile CardBus 32 Adapter 16.3511 - 0005 Cardbus Ethernet 10/100 16.3512 - 1014 0182 10/100 EtherJet Cardbus Adapter 16.3513 - 1014 1182 10/100 EtherJet Cardbus Adapter 16.3514 - 115d 0182 Cardbus Ethernet 10/100 16.3515 - 115d 1182 Cardbus Ethernet 10/100 16.3516 - 0007 Cardbus Ethernet 10/100 16.3517 - 1014 0182 10/100 EtherJet Cardbus Adapter 16.3518 - 1014 1182 10/100 EtherJet Cardbus Adapter 16.3519 - 115d 0182 Cardbus Ethernet 10/100 16.3520 - 115d 1182 Cardbus Ethernet 10/100 16.3521 - 000b Cardbus Ethernet 10/100 16.3522 - 1014 0183 10/100 EtherJet Cardbus Adapter 16.3523 - 115d 0183 Cardbus Ethernet 10/100 16.3524 - 000c Mini-PCI V.90 56k Modem 16.3525 - 000f Cardbus Ethernet 10/100 16.3526 - 1014 0183 10/100 EtherJet Cardbus Adapter 16.3527 - 115d 0183 Cardbus Ethernet 10/100 16.3528 - 0101 Cardbus 56k modem 16.3529 - 115d 1081 Cardbus 56k Modem 16.3530 - 0103 Cardbus Ethernet + 56k Modem 16.3531 - 1014 9181 Cardbus 56k Modem 16.3532 - 1115 1181 Cardbus Ethernet 100 + 56k Modem 16.3533 - 115d 1181 CBEM56G-100 Ethernet + 56k Modem 16.3534 - 8086 9181 PRO/100 LAN + Modem56 CardBus 16.3535 -115e Peer Protocols Inc 16.3536 -115f Maxtor Corporation 16.3537 -1160 Megasoft Inc 16.3538 -1161 PFU Limited 16.3539 -1162 OA Laboratory Co Ltd 16.3540 -1163 Rendition 16.3541 - 0001 Verite 1000 16.3542 - 2000 Verite V2000/V2100/V2200 16.3543 - 1092 2000 Stealth II S220 16.3544 -1164 Advanced Peripherals Technologies 16.3545 -1165 Imagraph Corporation 16.3546 - 0001 Motion TPEG Recorder/Player with audio 16.3547 -1166 ServerWorks 16.3548 - 0005 CNB20-LE Host Bridge 16.3549 - 0006 CNB20HE Host Bridge 16.3550 - 0007 CNB20-LE Host Bridge 16.3551 - 0008 CNB20HE Host Bridge 16.3552 - 0009 CNB20LE Host Bridge 16.3553 - 0010 CIOB30 16.3554 - 0011 CMIC-HE 16.3555 - 0012 CMIC-LE 16.3556 - 0013 CNB20-HE Host Bridge 16.3557 - 0014 CNB20-HE Host Bridge 16.3558 - 0015 CMIC-GC Host Bridge 16.3559 - 0016 CMIC-GC Host Bridge 16.3560 - 0017 GCNB-LE Host Bridge 16.3561 - 0200 OSB4 South Bridge 16.3562 - 0201 CSB5 South Bridge 16.3563 - 0203 CSB6 South Bridge 16.3564 - 0211 OSB4 IDE Controller 16.3565 - 0212 CSB5 IDE Controller 16.3566 - 0213 CSB6 RAID/IDE Controller 16.3567 - 0220 OSB4/CSB5 OHCI USB Controller 16.3568 - 0221 CSB6 OHCI USB Controller 16.3569 - 0225 GCLE Host Bridge 16.3570 - 0227 GCLE-2 Host Bridge 16.3571 -1167 Mutoh Industries Inc 16.3572 -1168 Thine Electronics Inc 16.3573 -1169 Centre for Development of Advanced Computing 16.3574 -116a Polaris Communications 16.3575 - 6100 Bus/Tag Channel 16.3576 - 6800 Escon Channel 16.3577 - 7100 Bus/Tag Channel 16.3578 - 7800 Escon Channel 16.3579 -116b Connectware Inc 16.3580 -116c Intelligent Resources Integrated Systems 16.3581 -116d Martin-Marietta 16.3582 -116e Electronics for Imaging 16.3583 -116f Workstation Technology 16.3584 -1170 Inventec Corporation 16.3585 -1171 Loughborough Sound Images Plc 16.3586 -1172 Altera Corporation 16.3587 -1173 Adobe Systems, Inc 16.3588 -1174 Bridgeport Machines 16.3589 -1175 Mitron Computer Inc. 16.3590 -1176 SBE Incorporated 16.3591 -1177 Silicon Engineering 16.3592 -1178 Alfa, Inc. 16.3593 - afa1 Fast Ethernet Adapter 16.3594 -1179 Toshiba America Info Systems 16.3595 - 0103 EX-IDE Type-B 16.3596 - 0404 DVD Decoder card 16.3597 - 0406 Tecra Video Capture device 16.3598 - 0407 DVD Decoder card (Version 2) 16.3599 - 0601 601 16.3600 - 0603 ToPIC95 PCI to CardBus Bridge for Notebooks 16.3601 - 060a ToPIC95 16.3602 - 060f ToPIC97 16.3603 - 0617 ToPIC95 PCI to Cardbus Bridge with ZV Support 16.3604 - 0618 CPU to PCI and PCI to ISA bridge 16.3605 -# Claimed to be Lucent DSP1645 [Mars], but that's apparently incorrect. Does anyone know the correct ID? 16.3606 - 0701 FIR Port 16.3607 - 0804 TC6371AF SmartMedia Controller 16.3608 - 0805 SD TypA Controller 16.3609 - 0d01 FIR Port Type-DO 16.3610 - 1179 0001 FIR Port Type-DO 16.3611 -117a A-Trend Technology 16.3612 -117b L G Electronics, Inc. 16.3613 -117c Atto Technology 16.3614 -117d Becton & Dickinson 16.3615 -117e T/R Systems 16.3616 -117f Integrated Circuit Systems 16.3617 -1180 Ricoh Co Ltd 16.3618 - 0465 RL5c465 16.3619 - 0466 RL5c466 16.3620 - 0475 RL5c475 16.3621 - 144d c006 vpr Matrix 170B4 CardBus bridge 16.3622 - 0476 RL5c476 II 16.3623 - 1014 0185 ThinkPad A/T/X Series 16.3624 - 104d 80df Vaio PCG-FX403 16.3625 - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 16.3626 - 0477 RL5c477 16.3627 - 0478 RL5c478 16.3628 - 1014 0184 ThinkPad A30p (2653-64G) 16.3629 - 0522 R5C522 IEEE 1394 Controller 16.3630 - 1014 01cf ThinkPad A30p (2653-64G) 16.3631 - 0551 R5C551 IEEE 1394 Controller 16.3632 - 144d c006 vpr Matrix 170B4 16.3633 - 0552 R5C552 IEEE 1394 Controller 16.3634 - 1014 0511 ThinkPad A/T/X Series 16.3635 -1181 Telmatics International 16.3636 -1183 Fujikura Ltd 16.3637 -1184 Forks Inc 16.3638 -1185 Dataworld International Ltd 16.3639 -1186 D-Link System Inc 16.3640 - 0100 DC21041 16.3641 - 1002 DL10050 Sundance Ethernet 16.3642 - 1186 1002 DFE-550TX 16.3643 - 1186 1012 DFE-580TX 16.3644 - 1300 RTL8139 Ethernet 16.3645 - 1186 1300 DFE-538TX 10/100 Ethernet Adapter 16.3646 - 1186 1301 DFE-530TX+ 10/100 Ethernet Adapter 16.3647 - 1340 DFE-690TXD CardBus PC Card 16.3648 - 1561 DRP-32TXD Cardbus PC Card 16.3649 - 4000 DL2K Ethernet 16.3650 - 4c00 Gigabit Ethernet Adapter 16.3651 - 1186 4c00 DGE-530T Gigabit Ethernet Adapter 16.3652 -1187 Advanced Technology Laboratories, Inc. 16.3653 -1188 Shima Seiki Manufacturing Ltd. 16.3654 -1189 Matsushita Electronics Co Ltd 16.3655 -118a Hilevel Technology 16.3656 -118b Hypertec Pty Limited 16.3657 -118c Corollary, Inc 16.3658 - 0014 PCIB [C-bus II to PCI bus host bridge chip] 16.3659 - 1117 Intel 8-way XEON Profusion Chipset [Cache Coherency Filter] 16.3660 -118d BitFlow Inc 16.3661 - 0001 Raptor-PCI framegrabber 16.3662 - 0012 Model 12 Road Runner Frame Grabber 16.3663 - 0014 Model 14 Road Runner Frame Grabber 16.3664 - 0024 Model 24 Road Runner Frame Grabber 16.3665 - 0044 Model 44 Road Runner Frame Grabber 16.3666 - 0112 Model 12 Road Runner Frame Grabber 16.3667 - 0114 Model 14 Road Runner Frame Grabber 16.3668 - 0124 Model 24 Road Runner Frame Grabber 16.3669 - 0144 Model 44 Road Runner Frame Grabber 16.3670 - 0212 Model 12 Road Runner Frame Grabber 16.3671 - 0214 Model 14 Road Runner Frame Grabber 16.3672 - 0224 Model 24 Road Runner Frame Grabber 16.3673 - 0244 Model 44 Road Runner Frame Grabber 16.3674 - 0312 Model 12 Road Runner Frame Grabber 16.3675 - 0314 Model 14 Road Runner Frame Grabber 16.3676 - 0324 Model 24 Road Runner Frame Grabber 16.3677 - 0344 Model 44 Road Runner Frame Grabber 16.3678 -118e Hermstedt GmbH 16.3679 -118f Green Logic 16.3680 -1190 Tripace 16.3681 - c731 TP-910/920/940 PCI Ultra(Wide) SCSI Adapter 16.3682 -1191 Artop Electronic Corp 16.3683 - 0003 SCSI Cache Host Adapter 16.3684 - 0004 ATP8400 16.3685 - 0005 ATP850UF 16.3686 - 0006 ATP860 NO-BIOS 16.3687 - 0007 ATP860 16.3688 - 0008 ATP865 NO-ROM 16.3689 - 0009 ATP865 16.3690 - 8002 AEC6710 SCSI-2 Host Adapter 16.3691 - 8010 AEC6712UW SCSI 16.3692 - 8020 AEC6712U SCSI 16.3693 - 8030 AEC6712S SCSI 16.3694 - 8040 AEC6712D SCSI 16.3695 - 8050 AEC6712SUW SCSI 16.3696 -1192 Densan Company Ltd 16.3697 -1193 Zeitnet Inc. 16.3698 - 0001 1221 16.3699 - 0002 1225 16.3700 -1194 Toucan Technology 16.3701 -1195 Ratoc System Inc 16.3702 -1196 Hytec Electronics Ltd 16.3703 -1197 Gage Applied Sciences, Inc. 16.3704 -1198 Lambda Systems Inc 16.3705 -1199 Attachmate Corporation 16.3706 -119a Mind Share, Inc. 16.3707 -119b Omega Micro Inc. 16.3708 - 1221 82C092G 16.3709 -119c Information Technology Inst. 16.3710 -119d Bug, Inc. Sapporo Japan 16.3711 -119e Fujitsu Microelectronics Ltd. 16.3712 - 0001 FireStream 155 16.3713 - 0003 FireStream 50 16.3714 -119f Bull HN Information Systems 16.3715 -11a0 Convex Computer Corporation 16.3716 -11a1 Hamamatsu Photonics K.K. 16.3717 -11a2 Sierra Research and Technology 16.3718 -11a3 Deuretzbacher GmbH & Co. Eng. KG 16.3719 -11a4 Barco Graphics NV 16.3720 -11a5 Microunity Systems Eng. Inc 16.3721 -11a6 Pure Data Ltd. 16.3722 -11a7 Power Computing Corp. 16.3723 -11a8 Systech Corp. 16.3724 -11a9 InnoSys Inc. 16.3725 - 4240 AMCC S933Q Intelligent Serial Card 16.3726 -11aa Actel 16.3727 -11ab Galileo Technology Ltd. 16.3728 - 0146 GT-64010/64010A System Controller 16.3729 - 4146 GT-64011/GT-64111 System Controller 16.3730 - 4320 Gigabit Ethernet Adapter 16.3731 - 1019 0f38 Marvell 88E8001 Gigabit LOM Ethernet Adapter (ECS) 16.3732 - 1019 8001 Marvell 88E8001 Gigabit LOM Ethernet Adapter (ECS) 16.3733 - 1043 173c Marvell 88E8001 Gigabit LOM Ethernet Adapter (Asus) 16.3734 - 1043 811a Marvell 88E8001 Gigabit LOM Ethernet Adapter (Asus) 16.3735 - 105b 0c19 Marvell 88E8001 Gigabit LOM Ethernet Adapter (Foxconn) 16.3736 - 10b8 b452 SMC EZ Card 1000 (SMC9452TXV.2) 16.3737 - 11ab 0121 Marvell RDK-8001 Adapter 16.3738 - 11ab 0321 Marvell RDK-8003 Adapter 16.3739 - 11ab 1021 Marvell RDK-8010 Adapter 16.3740 - 11ab 5021 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (64 bit) 16.3741 - 11ab 9521 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (32 bit) 16.3742 - 1458 e000 Marvell 88E8001 Gigabit LOM Ethernet Adapter (Gigabyte) 16.3743 - 147b 1406 Marvell 88E8001 Gigabit LOM Ethernet Adapter (Abit) 16.3744 - 15d4 0047 Marvell 88E8001 Gigabit LOM Ethernet Adapter (Iwill) 16.3745 - 1695 9025 Marvell 88E8001 Gigabit LOM Ethernet Adapter (Epox) 16.3746 - 17f2 1c03 Marvell 88E8001 Gigabit LOM Ethernet Adapter (Albatron) 16.3747 - 4611 GT-64115 System Controller 16.3748 - 4620 GT-64120/64120A/64121A System Controller 16.3749 - 4801 GT-48001 16.3750 - f003 GT-64010 Primary Image Piranha Image Generator 16.3751 -11ac Canon Information Systems Research Aust. 16.3752 -11ad Lite-On Communications Inc 16.3753 - 0002 LNE100TX 16.3754 - 11ad 0002 LNE100TX 16.3755 - 11ad 0003 LNE100TX 16.3756 - 11ad f003 LNE100TX 16.3757 - 11ad ffff LNE100TX 16.3758 - 1385 f004 FA310TX 16.3759 - c115 LNE100TX [Linksys EtherFast 10/100] 16.3760 - 11ad c001 LNE100TX [ver 2.0] 16.3761 -11ae Aztech System Ltd 16.3762 -11af Avid Technology Inc. 16.3763 -11b0 V3 Semiconductor Inc. 16.3764 - 0002 V300PSC 16.3765 - 0292 V292PBC [Am29030/40 Bridge] 16.3766 - 0960 V96xPBC 16.3767 - c960 V96DPC 16.3768 -11b1 Apricot Computers 16.3769 -11b2 Eastman Kodak 16.3770 -11b3 Barr Systems Inc. 16.3771 -11b4 Leitch Technology International 16.3772 -11b5 Radstone Technology Plc 16.3773 -11b6 United Video Corp 16.3774 -11b7 Motorola 16.3775 -11b8 XPoint Technologies, Inc 16.3776 - 0001 Quad PeerMaster 16.3777 -11b9 Pathlight Technology Inc. 16.3778 - c0ed SSA Controller 16.3779 -11ba Videotron Corp 16.3780 -11bb Pyramid Technology 16.3781 -11bc Network Peripherals Inc 16.3782 - 0001 NP-PCI 16.3783 -11bd Pinnacle Systems Inc. 16.3784 -11be International Microcircuits Inc 16.3785 -11bf Astrodesign, Inc. 16.3786 -11c0 Hewlett Packard 16.3787 -11c1 Lucent Microelectronics 16.3788 - 0440 56k WinModem 16.3789 - 0001 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3790 - 1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3791 - 1033 8047 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3792 - 1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd 16.3793 - 10cf 102c LB LT Modem V.90 56k 16.3794 - 10cf 104a BIBLO LT Modem 56k 16.3795 - 10cf 105f LB2 LT Modem V.90 56k 16.3796 - 1179 0001 Internal V.90 Modem 16.3797 - 11c1 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3798 - 122d 4101 MDP7800-U Modem 16.3799 - 122d 4102 MDP7800SP-U Modem 16.3800 - 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3801 - 13e0 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3802 - 13e0 0441 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3803 - 13e0 0450 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3804 - 13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3805 - 13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3806 - 144d 2101 LT56PV Modem 16.3807 - 149f 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3808 - 0441 56k WinModem 16.3809 - 1033 804d LT WinModem 56k Data+Fax 16.3810 - 1033 8065 LT WinModem 56k Data+Fax 16.3811 - 1092 0440 Supra 56i 16.3812 - 1179 0001 Internal V.90 Modem 16.3813 - 11c1 0440 LT WinModem 56k Data+Fax 16.3814 - 11c1 0441 LT WinModem 56k Data+Fax 16.3815 - 122d 4100 MDP7800-U Modem 16.3816 - 13e0 0040 LT WinModem 56k Data+Fax 16.3817 - 13e0 0100 LT WinModem 56k Data+Fax 16.3818 - 13e0 0410 LT WinModem 56k Data+Fax 16.3819 - 13e0 0420 TelePath Internet 56k WinModem 16.3820 - 13e0 0440 LT WinModem 56k Data+Fax 16.3821 - 13e0 0443 LT WinModem 56k Data+Fax 16.3822 - 13e0 f102 LT WinModem 56k Data+Fax 16.3823 - 1416 9804 CommWave 56k Modem 16.3824 - 141d 0440 LT WinModem 56k Data+Fax 16.3825 - 144f 0441 Lucent 56k V.90 DF Modem 16.3826 - 144f 0449 Lucent 56k V.90 DF Modem 16.3827 - 144f 110d Lucent Win Modem 16.3828 - 1468 0441 Presario 56k V.90 DF Modem 16.3829 - 1668 0440 Lucent Win Modem 16.3830 - 0442 56k WinModem 16.3831 - 0001 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3832 - 11c1 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3833 - 11c1 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3834 - 13e0 0412 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3835 - 13e0 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3836 - 13fc 2471 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3837 - 144d 2104 LT56PT Modem 16.3838 - 144f 1104 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3839 - 149f 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3840 - 1668 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3841 - 0443 LT WinModem 16.3842 - 0444 LT WinModem 16.3843 - 0445 LT WinModem 16.3844 - 8086 2203 PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card) 16.3845 - 0446 LT WinModem 16.3846 - 0447 LT WinModem 16.3847 - 0448 WinModem 56k 16.3848 - 1014 0131 Lucent Win Modem 16.3849 - 1033 8066 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3850 - 13e0 0030 56k Voice Modem 16.3851 - 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd 16.3852 -# Actiontech eth+modem card as used by Dell &c. 16.3853 - 1668 2400 LT WinModem 56k (MiniPCI Ethernet+Modem) 16.3854 - 0449 WinModem 56k 16.3855 - 0e11 b14d 56k V.90 Modem 16.3856 - 13e0 0020 LT WinModem 56k Data+Fax 16.3857 - 13e0 0041 TelePath Internet 56k WinModem 16.3858 - 1436 0440 Lucent Win Modem 16.3859 - 144f 0449 Lucent 56k V.90 DFi Modem 16.3860 - 1468 0410 IBM ThinkPad T23 (2647-4MG) 16.3861 - 1468 0440 Lucent Win Modem 16.3862 - 1468 0449 Presario 56k V.90 DFi Modem 16.3863 - 044a F-1156IV WinModem (V90, 56KFlex) 16.3864 - 10cf 1072 LB Global LT Modem 16.3865 - 13e0 0012 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3866 - 13e0 0042 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3867 - 144f 1005 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 16.3868 - 044b LT WinModem 16.3869 - 044c LT WinModem 16.3870 - 044d LT WinModem 16.3871 - 044e LT WinModem 16.3872 - 044f V90 WildWire Modem 16.3873 - 0450 LT WinModem 16.3874 - 144f 4005 Magnia SG20 16.3875 - 0451 LT WinModem 16.3876 - 0452 LT WinModem 16.3877 - 0453 LT WinModem 16.3878 - 0454 LT WinModem 16.3879 - 0455 LT WinModem 16.3880 - 0456 LT WinModem 16.3881 - 0457 LT WinModem 16.3882 - 0458 LT WinModem 16.3883 - 0459 LT WinModem 16.3884 - 045a LT WinModem 16.3885 - 045c LT WinModem 16.3886 - 0461 V90 WildWire Modem 16.3887 - 0462 V90 WildWire Modem 16.3888 - 0480 Venus Modem (V90, 56KFlex) 16.3889 - 5801 USB 16.3890 - 5802 USS-312 USB Controller 16.3891 -# 4 port PCI USB Controller made by Agere (formely Lucent) 16.3892 - 5803 USS-344S USB Controller 16.3893 - 5811 FW323 16.3894 - dead 0800 FireWire Host Bus Adapter 16.3895 -11c2 Sand Microelectronics 16.3896 -11c3 NEC Corporation 16.3897 -11c4 Document Technologies, Inc 16.3898 -11c5 Shiva Corporation 16.3899 -11c6 Dainippon Screen Mfg. Co. Ltd 16.3900 -11c7 D.C.M. Data Systems 16.3901 -11c8 Dolphin Interconnect Solutions AS 16.3902 - 0658 PSB32 SCI-Adapter D31x 16.3903 - d665 PSB64 SCI-Adapter D32x 16.3904 - d667 PSB66 SCI-Adapter D33x 16.3905 -11c9 Magma 16.3906 - 0010 16-line serial port w/- DMA 16.3907 - 0011 4-line serial port w/- DMA 16.3908 -11ca LSI Systems, Inc 16.3909 -11cb Specialix Research Ltd. 16.3910 - 2000 PCI_9050 16.3911 - 11cb 0200 SX 16.3912 - 11cb b008 I/O8+ 16.3913 - 4000 SUPI_1 16.3914 - 8000 T225 16.3915 -11cc Michels & Kleberhoff Computer GmbH 16.3916 -11cd HAL Computer Systems, Inc. 16.3917 -11ce Netaccess 16.3918 -11cf Pioneer Electronic Corporation 16.3919 -11d0 Lockheed Martin Federal Systems-Manassas 16.3920 -11d1 Auravision 16.3921 - 01f7 VxP524 16.3922 -11d2 Intercom Inc. 16.3923 -11d3 Trancell Systems Inc 16.3924 -11d4 Analog Devices 16.3925 - 1805 SM56 PCI modem 16.3926 - 1889 AD1889 sound chip 16.3927 -11d5 Ikon Corporation 16.3928 - 0115 10115 16.3929 - 0117 10117 16.3930 -11d6 Tekelec Telecom 16.3931 -11d7 Trenton Technology, Inc. 16.3932 -11d8 Image Technologies Development 16.3933 -11d9 TEC Corporation 16.3934 -11da Novell 16.3935 -11db Sega Enterprises Ltd 16.3936 -11dc Questra Corporation 16.3937 -11dd Crosfield Electronics Limited 16.3938 -11de Zoran Corporation 16.3939 - 6057 ZR36057PQC Video cutting chipset 16.3940 - 1031 7efe DC10 Plus 16.3941 - 1031 fc00 MiroVIDEO DC50, Motion JPEG Capture/CODEC Board 16.3942 - 13ca 4231 JPEG/TV Card 16.3943 - 6120 ZR36120 16.3944 - 1328 f001 Cinemaster C DVD Decoder 16.3945 -11df New Wave PDG 16.3946 -11e0 Cray Communications A/S 16.3947 -11e1 GEC Plessey Semi Inc. 16.3948 -11e2 Samsung Information Systems America 16.3949 -11e3 Quicklogic Corporation 16.3950 - 5030 PC Watchdog 16.3951 -11e4 Second Wave Inc 16.3952 -11e5 IIX Consulting 16.3953 -11e6 Mitsui-Zosen System Research 16.3954 -11e7 Toshiba America, Elec. Company 16.3955 -11e8 Digital Processing Systems Inc. 16.3956 -11e9 Highwater Designs Ltd. 16.3957 -11ea Elsag Bailey 16.3958 -11eb Formation Inc. 16.3959 -11ec Coreco Inc 16.3960 -11ed Mediamatics 16.3961 -11ee Dome Imaging Systems Inc 16.3962 -11ef Nicolet Technologies B.V. 16.3963 -11f0 Compu-Shack 16.3964 - 4231 FDDI 16.3965 - 4232 FASTline UTP Quattro 16.3966 - 4233 FASTline FO 16.3967 - 4234 FASTline UTP 16.3968 - 4235 FASTline-II UTP 16.3969 - 4236 FASTline-II FO 16.3970 - 4731 GIGAline 16.3971 -11f1 Symbios Logic Inc 16.3972 -11f2 Picture Tel Japan K.K. 16.3973 -11f3 Keithley Metrabyte 16.3974 -11f4 Kinetic Systems Corporation 16.3975 - 2915 CAMAC controller 16.3976 -11f5 Computing Devices International 16.3977 -11f6 Compex 16.3978 - 0112 ENet100VG4 16.3979 - 0113 FreedomLine 100 16.3980 - 1401 ReadyLink 2000 16.3981 - 2011 RL100-ATX 10/100 16.3982 - 11f6 2011 RL100-ATX 16.3983 - 2201 ReadyLink 100TX (Winbond W89C840) 16.3984 - 11f6 2011 ReadyLink 100TX 16.3985 - 9881 RL100TX 16.3986 -11f7 Scientific Atlanta 16.3987 -11f8 PMC-Sierra Inc. 16.3988 - 7375 PM7375 [LASAR-155 ATM SAR] 16.3989 -11f9 I-Cube Inc 16.3990 -11fa Kasan Electronics Company, Ltd. 16.3991 -11fb Datel Inc 16.3992 -11fc Silicon Magic 16.3993 -11fd High Street Consultants 16.3994 -11fe Comtrol Corporation 16.3995 - 0001 RocketPort 8 Oct 16.3996 - 0002 RocketPort 8 Intf 16.3997 - 0003 RocketPort 16 Intf 16.3998 - 0004 RocketPort 32 Intf 16.3999 - 0005 RocketPort Octacable 16.4000 - 0006 RocketPort 8J 16.4001 - 0007 RocketPort 4-port 16.4002 - 0008 RocketPort 8-port 16.4003 - 0009 RocketPort 16-port 16.4004 - 000a RocketPort Plus Quadcable 16.4005 - 000b RocketPort Plus Octacable 16.4006 - 000c RocketPort 8-port Modem 16.4007 - 8015 RocketPort 4-port UART 16954 16.4008 -11ff Scion Corporation 16.4009 -1200 CSS Corporation 16.4010 -1201 Vista Controls Corp 16.4011 -1202 Network General Corp. 16.4012 - 4300 Gigabit Ethernet Adapter 16.4013 - 1202 9841 SK-9841 LX 16.4014 - 1202 9842 SK-9841 LX dual link 16.4015 - 1202 9843 SK-9843 SX 16.4016 - 1202 9844 SK-9843 SX dual link 16.4017 -1203 Bayer Corporation, Agfa Division 16.4018 -1204 Lattice Semiconductor Corporation 16.4019 -1205 Array Corporation 16.4020 -1206 Amdahl Corporation 16.4021 -1208 Parsytec GmbH 16.4022 - 4853 HS-Link Device 16.4023 -1209 SCI Systems Inc 16.4024 -120a Synaptel 16.4025 -120b Adaptive Solutions 16.4026 -120c Technical Corp. 16.4027 -120d Compression Labs, Inc. 16.4028 -120e Cyclades Corporation 16.4029 - 0100 Cyclom-Y below first megabyte 16.4030 - 0101 Cyclom-Y above first megabyte 16.4031 - 0102 Cyclom-4Y below first megabyte 16.4032 - 0103 Cyclom-4Y above first megabyte 16.4033 - 0104 Cyclom-8Y below first megabyte 16.4034 - 0105 Cyclom-8Y above first megabyte 16.4035 - 0200 Cyclades-Z below first megabyte 16.4036 - 0201 Cyclades-Z above first megabyte 16.4037 - 0300 PC300/RSV or /X21 (2 ports) 16.4038 - 0301 PC300/RSV or /X21 (1 port) 16.4039 - 0310 PC300/TE (2 ports) 16.4040 - 0311 PC300/TE (1 port) 16.4041 - 0320 PC300/TE-M (2 ports) 16.4042 - 0321 PC300/TE-M (1 port) 16.4043 - 0400 PC400 16.4044 -120f Essential Communications 16.4045 - 0001 Roadrunner serial HIPPI 16.4046 -1210 Hyperparallel Technologies 16.4047 -1211 Braintech Inc 16.4048 -1212 Kingston Technology Corp. 16.4049 -1213 Applied Intelligent Systems, Inc. 16.4050 -1214 Performance Technologies, Inc. 16.4051 -1215 Interware Co., Ltd 16.4052 -1216 Purup Prepress A/S 16.4053 -1217 O2 Micro, Inc. 16.4054 - 6729 OZ6729 16.4055 - 673a OZ6730 16.4056 - 6832 OZ6832/6833 Cardbus Controller 16.4057 - 6836 OZ6836/6860 Cardbus Controller 16.4058 - 6872 OZ6812 Cardbus Controller 16.4059 - 6925 OZ6922 Cardbus Controller 16.4060 - 6933 OZ6933 Cardbus Controller 16.4061 - 1025 1016 Travelmate 612 TX 16.4062 - 6972 OZ6912 Cardbus Controller 16.4063 - 1179 0001 Magnia Z310 16.4064 -1218 Hybricon Corp. 16.4065 -1219 First Virtual Corporation 16.4066 -121a 3Dfx Interactive, Inc. 16.4067 - 0001 Voodoo 16.4068 - 0002 Voodoo 2 16.4069 - 0003 Voodoo Banshee 16.4070 - 1092 0003 Monster Fusion 16.4071 - 1092 4000 Monster Fusion 16.4072 - 1092 4002 Monster Fusion 16.4073 - 1092 4801 Monster Fusion AGP 16.4074 - 1092 4803 Monster Fusion AGP 16.4075 - 1092 8030 Monster Fusion 16.4076 - 1092 8035 Monster Fusion AGP 16.4077 - 10b0 0001 Dragon 4000 16.4078 - 1102 1018 3D Blaster Banshee VE 16.4079 - 121a 0001 Voodoo Banshee AGP 16.4080 - 121a 0003 Voodoo Banshee AGP SGRAM 16.4081 - 121a 0004 Voodoo Banshee 16.4082 - 139c 0016 Raven 16.4083 - 139c 0017 Raven 16.4084 - 14af 0002 Maxi Gamer Phoenix 16.4085 - 0004 Voodoo Banshee [Velocity 100] 16.4086 - 0005 Voodoo 3 16.4087 - 121a 0004 Voodoo3 AGP 16.4088 - 121a 0030 Voodoo3 AGP 16.4089 - 121a 0031 Voodoo3 AGP 16.4090 - 121a 0034 Voodoo3 AGP 16.4091 - 121a 0036 Voodoo3 16.4092 - 121a 0037 Voodoo3 AGP 16.4093 - 121a 0038 Voodoo3 AGP 16.4094 - 121a 003a Voodoo3 AGP 16.4095 - 121a 0044 Voodoo3 16.4096 - 121a 004b Velocity 100 16.4097 - 121a 004c Velocity 200 16.4098 - 121a 004d Voodoo3 AGP 16.4099 - 121a 004e Voodoo3 AGP 16.4100 - 121a 0051 Voodoo3 AGP 16.4101 - 121a 0052 Voodoo3 AGP 16.4102 - 121a 0060 Voodoo3 3500 TV (NTSC) 16.4103 - 121a 0061 Voodoo3 3500 TV (PAL) 16.4104 - 121a 0062 Voodoo3 3500 TV (SECAM) 16.4105 - 0009 Voodoo 4 / Voodoo 5 16.4106 - 121a 0009 Voodoo5 AGP 5500/6000 16.4107 - 0057 Voodoo 3/3000 [Avenger] 16.4108 -121b Advanced Telecommunications Modules 16.4109 -121c Nippon Texaco., Ltd 16.4110 -121d Lippert Automationstechnik GmbH 16.4111 -121e CSPI 16.4112 -121f Arcus Technology, Inc. 16.4113 -1220 Ariel Corporation 16.4114 - 1220 AMCC 5933 TMS320C80 DSP/Imaging board 16.4115 -1221 Contec Co., Ltd 16.4116 -1222 Ancor Communications, Inc. 16.4117 -1223 Artesyn Communication Products 16.4118 - 0003 PM/Link 16.4119 - 0004 PM/T1 16.4120 - 0005 PM/E1 16.4121 - 0008 PM/SLS 16.4122 - 0009 BajaSpan Resource Target 16.4123 - 000a BajaSpan Section 0 16.4124 - 000b BajaSpan Section 1 16.4125 - 000c BajaSpan Section 2 16.4126 - 000d BajaSpan Section 3 16.4127 - 000e PM/PPC 16.4128 -1224 Interactive Images 16.4129 -1225 Power I/O, Inc. 16.4130 -1227 Tech-Source 16.4131 -1228 Norsk Elektro Optikk A/S 16.4132 -1229 Data Kinesis Inc. 16.4133 -122a Integrated Telecom 16.4134 -122b LG Industrial Systems Co., Ltd 16.4135 -122c Sican GmbH 16.4136 -122d Aztech System Ltd 16.4137 - 1206 368DSP 16.4138 - 50dc 3328 Audio 16.4139 - 122d 0001 3328 Audio 16.4140 - 80da 3328 Audio 16.4141 - 122d 0001 3328 Audio 16.4142 -122e Xyratex 16.4143 -122f Andrew Corporation 16.4144 -1230 Fishcamp Engineering 16.4145 -1231 Woodward McCoach, Inc. 16.4146 -1232 GPT Limited 16.4147 -1233 Bus-Tech, Inc. 16.4148 -1234 Technical Corp. 16.4149 -1235 Risq Modular Systems, Inc. 16.4150 -1236 Sigma Designs Corporation 16.4151 - 0000 RealMagic64/GX 16.4152 - 6401 REALmagic 64/GX (SD 6425) 16.4153 -1237 Alta Technology Corporation 16.4154 -1238 Adtran 16.4155 -1239 3DO Company 16.4156 -123a Visicom Laboratories, Inc. 16.4157 -123b Seeq Technology, Inc. 16.4158 -123c Century Systems, Inc. 16.4159 -123d Engineering Design Team, Inc. 16.4160 - 0000 EasyConnect 8/32 16.4161 - 0002 EasyConnect 8/64 16.4162 - 0003 EasyIO 16.4163 -123e Simutech, Inc. 16.4164 -123f C-Cube Microsystems 16.4165 - 00e4 MPEG 16.4166 - 8120 E4? 16.4167 - 11bd 0006 DV500 E4 16.4168 - 11bd 000a DV500 E4 16.4169 - 8888 Cinemaster C 3.0 DVD Decoder 16.4170 - 1002 0001 Cinemaster C 3.0 DVD Decoder 16.4171 - 1002 0002 Cinemaster C 3.0 DVD Decoder 16.4172 - 1328 0001 Cinemaster C 3.0 DVD Decoder 16.4173 -1240 Marathon Technologies Corp. 16.4174 -1241 DSC Communications 16.4175 -1242 Jaycor Networks, Inc. 16.4176 - 1242 JNI Corporation (former Jaycor Networks, Inc.) 16.4177 - 4643 FCI-1063 Fibre Channel Adapter 16.4178 - 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter 16.4179 - 656a FCX-6562 PCI-X Fibre Channel Adapter 16.4180 -1243 Delphax 16.4181 -1244 AVM Audiovisuelles MKTG & Computer System GmbH 16.4182 - 0700 B1 ISDN 16.4183 - 0800 C4 ISDN 16.4184 - 0a00 A1 ISDN [Fritz] 16.4185 - 1244 0a00 FRITZ!Card ISDN Controller 16.4186 - 0e00 Fritz!PCI v2.0 ISDN 16.4187 - 1100 C2 ISDN 16.4188 - 1200 T1 ISDN 16.4189 -1245 A.P.D., S.A. 16.4190 -1246 Dipix Technologies, Inc. 16.4191 -1247 Xylon Research, Inc. 16.4192 -1248 Central Data Corporation 16.4193 -1249 Samsung Electronics Co., Ltd. 16.4194 -124a AEG Electrocom GmbH 16.4195 -124b SBS/Greenspring Modular I/O 16.4196