ia64/xen-unstable

changeset 4755:6521227a93d4

bitkeeper revision 1.1389.5.5 (42788bdeo6dq0hEkwcye0RH_ljmY1Q)

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, &reg);
   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, &reg);
   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, &reg);
   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, &reg);
   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, &reg);
   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, &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/Greenspr