ia64/xen-unstable

changeset 197:d35939d8ec52

bitkeeper revision 1.58 (3e4fd397g-bGBxJD9wOhLIsOYU_Amg)

Many files:
Upgraded PCI support to Linux 2.4.20 level.
.del-ide-disk.c.orig~c03665a55006b149:
Delete: xen-2.4.16/drivers/ide/ide-disk.c.orig
author kaf24@labyrinth.cl.cam.ac.uk
date Sun Feb 16 18:08:23 2003 +0000 (2003-02-16)
parents a7df51f8cb0a
children db73fd255933
files .rootkeys xen-2.4.16/arch/i386/pci-dma.c xen-2.4.16/arch/i386/pci-i386.c xen-2.4.16/arch/i386/pci-i386.h xen-2.4.16/arch/i386/pci-irq.c xen-2.4.16/arch/i386/pci-pc.c xen-2.4.16/common/kernel.c xen-2.4.16/common/resource.c xen-2.4.16/drivers/ide/ide-disk.c.orig xen-2.4.16/drivers/ide/ide-pci.c xen-2.4.16/drivers/ide/piix.c xen-2.4.16/drivers/pci/gen-devlist.c xen-2.4.16/drivers/pci/names.c xen-2.4.16/drivers/pci/pci.c xen-2.4.16/drivers/pci/pci.ids xen-2.4.16/drivers/pci/proc.c xen-2.4.16/drivers/pci/quirks.c xen-2.4.16/drivers/pci/setup-bus.c xen-2.4.16/drivers/pci/setup-res.c xen-2.4.16/include/asm-i386/pci.h xen-2.4.16/include/xeno/config.h xen-2.4.16/include/xeno/ioport.h xen-2.4.16/include/xeno/pci.h
line diff
     1.1 --- a/.rootkeys	Sun Feb 16 15:16:35 2003 +0000
     1.2 +++ b/.rootkeys	Sun Feb 16 18:08:23 2003 +0000
     1.3 @@ -76,7 +76,6 @@ 3e4a8cb7WmiYdC-ASGiCSG_CL8vsqg xen-2.4.1
     1.4  3e4a8cb7nMChlro4wvOBo76n__iCFA xen-2.4.16/drivers/char/xen_serial.c
     1.5  3ddb79bdhcqD9ebrslr0O0oHqTiiXg xen-2.4.16/drivers/ide/Makefile
     1.6  3ddb79bdErDn_WC3G-fWxKNR3viLnA xen-2.4.16/drivers/ide/ide-disk.c
     1.7 -3e4a8cb7DcFFHW_fG_OHbY_6f3lPWw xen-2.4.16/drivers/ide/ide-disk.c.orig
     1.8  3ddb79bdIPNW36FrlId94jTXaW8HoA xen-2.4.16/drivers/ide/ide-dma.c
     1.9  3ddb79be5Ysvhn4se_Z-LQY_hI6UPw xen-2.4.16/drivers/ide/ide-features.c
    1.10  3ddb79bdh1ohsWYRH_KdaXr7cqs12w xen-2.4.16/drivers/ide/ide-geometry.c
     2.1 --- a/xen-2.4.16/arch/i386/pci-dma.c	Sun Feb 16 15:16:35 2003 +0000
     2.2 +++ b/xen-2.4.16/arch/i386/pci-dma.c	Sun Feb 16 18:08:23 2003 +0000
     2.3 @@ -19,7 +19,7 @@ void *pci_alloc_consistent(struct pci_de
     2.4  	void *ret;
     2.5  	int gfp = GFP_ATOMIC;
     2.6  
     2.7 -	if (hwdev == NULL || hwdev->dma_mask != 0xffffffff)
     2.8 +	if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
     2.9  		gfp |= GFP_DMA;
    2.10  	ret = (void *)__get_free_pages(gfp, get_order(size));
    2.11  
     3.1 --- a/xen-2.4.16/arch/i386/pci-i386.c	Sun Feb 16 15:16:35 2003 +0000
     3.2 +++ b/xen-2.4.16/arch/i386/pci-i386.c	Sun Feb 16 18:08:23 2003 +0000
     3.3 @@ -86,7 +86,7 @@
     3.4   */
     3.5  
     3.6  #include <linux/types.h>
     3.7 -//#include <linux/kernel.h>
     3.8 +/*#include <linux/kernel.h>*/
     3.9  #include <linux/pci.h>
    3.10  #include <linux/init.h>
    3.11  #include <linux/ioport.h>
    3.12 @@ -136,7 +136,8 @@ pcibios_update_resource(struct pci_dev *
    3.13   * which might have be mirrored at 0x0100-0x03ff..
    3.14   */
    3.15  void
    3.16 -pcibios_align_resource(void *data, struct resource *res, unsigned long size)
    3.17 +pcibios_align_resource(void *data, struct resource *res,
    3.18 +		       unsigned long size, unsigned long align)
    3.19  {
    3.20  	if (res->flags & IORESOURCE_IO) {
    3.21  		unsigned long start = res->start;
    3.22 @@ -303,7 +304,7 @@ void __init pcibios_resource_survey(void
    3.23  	pcibios_assign_resources();
    3.24  }
    3.25  
    3.26 -int pcibios_enable_resources(struct pci_dev *dev)
    3.27 +int pcibios_enable_resources(struct pci_dev *dev, int mask)
    3.28  {
    3.29  	u16 cmd, old_cmd;
    3.30  	int idx;
    3.31 @@ -312,6 +313,10 @@ int pcibios_enable_resources(struct pci_
    3.32  	pci_read_config_word(dev, PCI_COMMAND, &cmd);
    3.33  	old_cmd = cmd;
    3.34  	for(idx=0; idx<6; idx++) {
    3.35 +		/* Only set up the requested stuff */
    3.36 +		if (!(mask & (1<<idx)))
    3.37 +			continue;
    3.38 +			
    3.39  		r = &dev->resource[idx];
    3.40  		if (!r->start && r->end) {
    3.41  			printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", dev->slot_name);
    3.42 @@ -328,7 +333,6 @@ int pcibios_enable_resources(struct pci_
    3.43  		printk("PCI: Enabling device %s (%04x -> %04x)\n", dev->slot_name, old_cmd, cmd);
    3.44  		pci_write_config_word(dev, PCI_COMMAND, cmd);
    3.45  	}
    3.46 -
    3.47  	return 0;
    3.48  }
    3.49  
    3.50 @@ -348,7 +352,40 @@ void pcibios_set_master(struct pci_dev *
    3.51  		lat = pcibios_max_latency;
    3.52  	else
    3.53  		return;
    3.54 -	printk("PCI: Setting latency timer of device %s to %d\n", dev->slot_name, lat);
    3.55 +	printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", dev->slot_name, lat);
    3.56  	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
    3.57  }
    3.58  
    3.59 +#if 0
    3.60 +int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
    3.61 +			enum pci_mmap_state mmap_state, int write_combine)
    3.62 +{
    3.63 +	unsigned long prot;
    3.64 +
    3.65 +	/* I/O space cannot be accessed via normal processor loads and
    3.66 +	 * stores on this platform.
    3.67 +	 */
    3.68 +	if (mmap_state == pci_mmap_io)
    3.69 +		return -EINVAL;
    3.70 +
    3.71 +	/* Leave vm_pgoff as-is, the PCI space address is the physical
    3.72 +	 * address on this platform.
    3.73 +	 */
    3.74 +	vma->vm_flags |= (VM_SHM | VM_LOCKED | VM_IO);
    3.75 +
    3.76 +	prot = pgprot_val(vma->vm_page_prot);
    3.77 +	if (boot_cpu_data.x86 > 3)
    3.78 +		prot |= _PAGE_PCD | _PAGE_PWT;
    3.79 +	vma->vm_page_prot = __pgprot(prot);
    3.80 +
    3.81 +	/* Write-combine setting is ignored, it is changed via the mtrr
    3.82 +	 * interfaces on this platform.
    3.83 +	 */
    3.84 +	if (remap_page_range(vma->vm_start, vma->vm_pgoff << PAGE_SHIFT,
    3.85 +			     vma->vm_end - vma->vm_start,
    3.86 +			     vma->vm_page_prot))
    3.87 +		return -EAGAIN;
    3.88 +
    3.89 +	return 0;
    3.90 +}
    3.91 +#endif
     4.1 --- a/xen-2.4.16/arch/i386/pci-i386.h	Sun Feb 16 15:16:35 2003 +0000
     4.2 +++ b/xen-2.4.16/arch/i386/pci-i386.h	Sun Feb 16 18:08:23 2003 +0000
     4.3 @@ -29,7 +29,7 @@ extern unsigned int pci_probe;
     4.4  extern unsigned int pcibios_max_latency;
     4.5  
     4.6  void pcibios_resource_survey(void);
     4.7 -int pcibios_enable_resources(struct pci_dev *);
     4.8 +int pcibios_enable_resources(struct pci_dev *, int);
     4.9  
    4.10  /* pci-pc.c */
    4.11  
     5.1 --- a/xen-2.4.16/arch/i386/pci-irq.c	Sun Feb 16 15:16:35 2003 +0000
     5.2 +++ b/xen-2.4.16/arch/i386/pci-irq.c	Sun Feb 16 18:08:23 2003 +0000
     5.3 @@ -6,7 +6,7 @@
     5.4  
     5.5  #include <linux/config.h>
     5.6  #include <linux/types.h>
     5.7 -//#include <linux/kernel.h>
     5.8 +/*#include <linux/kernel.h>*/
     5.9  #include <linux/pci.h>
    5.10  #include <linux/init.h>
    5.11  #include <linux/slab.h>
    5.12 @@ -23,6 +23,8 @@
    5.13  #define PIRQ_SIGNATURE	(('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
    5.14  #define PIRQ_VERSION 0x0100
    5.15  
    5.16 +int broken_hp_bios_irq9;
    5.17 +
    5.18  static struct irq_routing_table *pirq_table;
    5.19  
    5.20  /*
    5.21 @@ -207,6 +209,24 @@ static int pirq_via_set(struct pci_dev *
    5.22  }
    5.23  
    5.24  /*
    5.25 + * ITE 8330G pirq rules are nibble-based
    5.26 + * FIXME: pirqmap may be { 1, 0, 3, 2 },
    5.27 + * 	  2+3 are both mapped to irq 9 on my system
    5.28 + */
    5.29 +static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
    5.30 +{
    5.31 +	static unsigned char pirqmap[4] = { 1, 0, 2, 3 };
    5.32 +	return read_config_nybble(router,0x43, pirqmap[pirq-1]);
    5.33 +}
    5.34 +
    5.35 +static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
    5.36 +{
    5.37 +	static unsigned char pirqmap[4] = { 1, 0, 2, 3 };
    5.38 +	write_config_nybble(router, 0x43, pirqmap[pirq-1], irq);
    5.39 +	return 1;
    5.40 +}
    5.41 +
    5.42 +/*
    5.43   * OPTI: high four bits are nibble pointer..
    5.44   * I wonder what the low bits do?
    5.45   */
    5.46 @@ -226,12 +246,12 @@ static int pirq_opti_set(struct pci_dev 
    5.47   */
    5.48  static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
    5.49  {
    5.50 -	return read_config_nybble(router, 0x5C, pirq-1);
    5.51 +	return read_config_nybble(router, 0x5C, (pirq-1)^1);
    5.52  }
    5.53  
    5.54  static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
    5.55  {
    5.56 -	write_config_nybble(router, 0x5C, pirq-1, irq);
    5.57 +	write_config_nybble(router, 0x5C, (pirq-1)^1, irq);
    5.58  	return 1;
    5.59  }
    5.60  
    5.61 @@ -444,10 +464,19 @@ static struct irq_router pirq_routers[] 
    5.62  	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, pirq_piix_get, pirq_piix_set },
    5.63  	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX,   pirq_piix_get, pirq_piix_set },
    5.64  	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_0, pirq_piix_get, pirq_piix_set },
    5.65 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, pirq_piix_get, pirq_piix_set },
    5.66 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, pirq_piix_get, pirq_piix_set },
    5.67  	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, pirq_piix_get, pirq_piix_set },
    5.68 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_10, pirq_piix_get, pirq_piix_set },
    5.69 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, pirq_piix_get, pirq_piix_set },
    5.70 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, pirq_piix_get, pirq_piix_set },
    5.71 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, pirq_piix_get, pirq_piix_set },
    5.72 +	{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801E_0, pirq_piix_get, pirq_piix_set },
    5.73  
    5.74  	{ "ALI", PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, pirq_ali_get, pirq_ali_set },
    5.75  
    5.76 +	{ "ITE", PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8330G_0, pirq_ite_get, pirq_ite_set },
    5.77 +
    5.78  	{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, pirq_via_get, pirq_via_set },
    5.79  	{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, pirq_via_get, pirq_via_set },
    5.80  	{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, pirq_via_get, pirq_via_set },
    5.81 @@ -463,6 +492,10 @@ static struct irq_router pirq_routers[] 
    5.82  	  pirq_serverworks_get, pirq_serverworks_set },
    5.83  	{ "AMD756 VIPER", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_740B,
    5.84  		pirq_amd756_get, pirq_amd756_set },
    5.85 +	{ "AMD766", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7413,
    5.86 +		pirq_amd756_get, pirq_amd756_set },
    5.87 +	{ "AMD768", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7443,
    5.88 +		pirq_amd756_get, pirq_amd756_set },
    5.89  
    5.90  	{ "default", 0, 0, NULL, NULL }
    5.91  };
    5.92 @@ -566,6 +599,15 @@ static int pcibios_lookup_irq(struct pci
    5.93  	DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs);
    5.94  	mask &= pcibios_irq_mask;
    5.95  
    5.96 +	/* Work around broken HP Pavilion Notebooks which assign USB to
    5.97 +	   IRQ 9 even though it is actually wired to IRQ 11 */
    5.98 +
    5.99 +	if (broken_hp_bios_irq9 && pirq == 0x59 && dev->irq == 9) {
   5.100 +		dev->irq = 11;
   5.101 +		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 11);
   5.102 +		r->set(pirq_router_dev, dev, pirq, 11);
   5.103 +	}
   5.104 +
   5.105  	/*
   5.106  	 * Find the best IRQ to assign: use the one
   5.107  	 * reported by the device if possible.
     6.1 --- a/xen-2.4.16/arch/i386/pci-pc.c	Sun Feb 16 15:16:35 2003 +0000
     6.2 +++ b/xen-2.4.16/arch/i386/pci-pc.c	Sun Feb 16 18:08:23 2003 +0000
     6.3 @@ -6,17 +6,20 @@
     6.4  
     6.5  #include <linux/config.h>
     6.6  #include <linux/types.h>
     6.7 -//#include <linux/kernel.h>
     6.8 +/*#include <linux/kernel.h>*/
     6.9  #include <linux/sched.h>
    6.10  #include <linux/pci.h>
    6.11  #include <linux/init.h>
    6.12  #include <linux/ioport.h>
    6.13  
    6.14 -//#include <asm/segment.h>
    6.15 +/*#include <asm/segment.h>*/
    6.16  #include <asm/io.h>
    6.17 +#include <asm/smp.h>
    6.18 +#include <asm/smpboot.h>
    6.19  
    6.20  #include "pci-i386.h"
    6.21  
    6.22 +extern int numnodes;
    6.23  #define __KERNEL_CS __HYPERVISOR_CS
    6.24  #define __KERNEL_DS __HYPERVISOR_DS
    6.25  
    6.26 @@ -29,11 +32,21 @@ struct pci_ops *pci_root_ops = NULL;
    6.27  int (*pci_config_read)(int seg, int bus, int dev, int fn, int reg, int len, u32 *value) = NULL;
    6.28  int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value) = NULL;
    6.29  
    6.30 +#ifdef CONFIG_MULTIQUAD
    6.31 +#define BUS2QUAD(global) (mp_bus_id_to_node[global])
    6.32 +#define BUS2LOCAL(global) (mp_bus_id_to_local[global])
    6.33 +#define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
    6.34 +#else
    6.35 +#define BUS2QUAD(global) (0)
    6.36 +#define BUS2LOCAL(global) (global)
    6.37 +#define QUADLOCAL2BUS(quad,local) (local)
    6.38 +#endif
    6.39 +
    6.40  /*
    6.41   * This interrupt-safe spinlock protects all accesses to PCI
    6.42   * configuration space.
    6.43   */
    6.44 -spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED;
    6.45 +static spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED;
    6.46  
    6.47  
    6.48  /*
    6.49 @@ -42,14 +55,137 @@ spinlock_t pci_config_lock = SPIN_LOCK_U
    6.50  
    6.51  #ifdef CONFIG_PCI_DIRECT
    6.52  
    6.53 +#ifdef CONFIG_MULTIQUAD
    6.54 +#define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \
    6.55 +	(0x80000000 | (BUS2LOCAL(bus) << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
    6.56 +
    6.57 +static int pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* CONFIG_MULTIQUAD */
    6.58 +{
    6.59 +	unsigned long flags;
    6.60 +
    6.61 +	if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
    6.62 +		return -EINVAL;
    6.63 +
    6.64 +	spin_lock_irqsave(&pci_config_lock, flags);
    6.65 +
    6.66 +	outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
    6.67 +
    6.68 +	switch (len) {
    6.69 +	case 1:
    6.70 +		*value = inb_quad(0xCFC + (reg & 3), BUS2QUAD(bus));
    6.71 +		break;
    6.72 +	case 2:
    6.73 +		*value = inw_quad(0xCFC + (reg & 2), BUS2QUAD(bus));
    6.74 +		break;
    6.75 +	case 4:
    6.76 +		*value = inl_quad(0xCFC, BUS2QUAD(bus));
    6.77 +		break;
    6.78 +	}
    6.79 +
    6.80 +	spin_unlock_irqrestore(&pci_config_lock, flags);
    6.81 +
    6.82 +	return 0;
    6.83 +}
    6.84 +
    6.85 +static int pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* CONFIG_MULTIQUAD */
    6.86 +{
    6.87 +	unsigned long flags;
    6.88 +
    6.89 +	if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 
    6.90 +		return -EINVAL;
    6.91 +
    6.92 +	spin_lock_irqsave(&pci_config_lock, flags);
    6.93 +
    6.94 +	outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
    6.95 +
    6.96 +	switch (len) {
    6.97 +	case 1:
    6.98 +		outb_quad((u8)value, 0xCFC + (reg & 3), BUS2QUAD(bus));
    6.99 +		break;
   6.100 +	case 2:
   6.101 +		outw_quad((u16)value, 0xCFC + (reg & 2), BUS2QUAD(bus));
   6.102 +		break;
   6.103 +	case 4:
   6.104 +		outl_quad((u32)value, 0xCFC, BUS2QUAD(bus));
   6.105 +		break;
   6.106 +	}
   6.107 +
   6.108 +	spin_unlock_irqrestore(&pci_config_lock, flags);
   6.109 +
   6.110 +	return 0;
   6.111 +}
   6.112 +
   6.113 +static int pci_conf1_read_mq_config_byte(struct pci_dev *dev, int where, u8 *value)
   6.114 +{
   6.115 +	int result; 
   6.116 +	u32 data;
   6.117 +
   6.118 +	result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.119 +		PCI_FUNC(dev->devfn), where, 1, &data);
   6.120 +
   6.121 +	*value = (u8)data;
   6.122 +
   6.123 +	return result;
   6.124 +}
   6.125 +
   6.126 +static int pci_conf1_read_mq_config_word(struct pci_dev *dev, int where, u16 *value)
   6.127 +{
   6.128 +	int result; 
   6.129 +	u32 data;
   6.130 +
   6.131 +	result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.132 +		PCI_FUNC(dev->devfn), where, 2, &data);
   6.133 +
   6.134 +	*value = (u16)data;
   6.135 +
   6.136 +	return result;
   6.137 +}
   6.138 +
   6.139 +static int pci_conf1_read_mq_config_dword(struct pci_dev *dev, int where, u32 *value)
   6.140 +{
   6.141 +	if (!value) 
   6.142 +		return -EINVAL;
   6.143 +
   6.144 +	return pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.145 +		PCI_FUNC(dev->devfn), where, 4, value);
   6.146 +}
   6.147 +
   6.148 +static int pci_conf1_write_mq_config_byte(struct pci_dev *dev, int where, u8 value)
   6.149 +{
   6.150 +	return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.151 +		PCI_FUNC(dev->devfn), where, 1, value);
   6.152 +}
   6.153 +
   6.154 +static int pci_conf1_write_mq_config_word(struct pci_dev *dev, int where, u16 value)
   6.155 +{
   6.156 +	return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.157 +		PCI_FUNC(dev->devfn), where, 2, value);
   6.158 +}
   6.159 +
   6.160 +static int pci_conf1_write_mq_config_dword(struct pci_dev *dev, int where, u32 value)
   6.161 +{
   6.162 +	return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.163 +		PCI_FUNC(dev->devfn), where, 4, value);
   6.164 +}
   6.165 +
   6.166 +static struct pci_ops pci_direct_mq_conf1 = {
   6.167 +	pci_conf1_read_mq_config_byte,
   6.168 +	pci_conf1_read_mq_config_word,
   6.169 +	pci_conf1_read_mq_config_dword,
   6.170 +	pci_conf1_write_mq_config_byte,
   6.171 +	pci_conf1_write_mq_config_word,
   6.172 +	pci_conf1_write_mq_config_dword
   6.173 +};
   6.174 +
   6.175 +#endif /* !CONFIG_MULTIQUAD */
   6.176  #define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \
   6.177  	(0x80000000 | (bus << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
   6.178  
   6.179 -static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value)
   6.180 +static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* !CONFIG_MULTIQUAD */
   6.181  {
   6.182  	unsigned long flags;
   6.183  
   6.184 -	if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
   6.185 +	if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
   6.186  		return -EINVAL;
   6.187  
   6.188  	spin_lock_irqsave(&pci_config_lock, flags);
   6.189 @@ -73,11 +209,11 @@ static int pci_conf1_read (int seg, int 
   6.190  	return 0;
   6.191  }
   6.192  
   6.193 -static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value)
   6.194 +static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* !CONFIG_MULTIQUAD */
   6.195  {
   6.196  	unsigned long flags;
   6.197  
   6.198 -	if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) 
   6.199 +	if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
   6.200  		return -EINVAL;
   6.201  
   6.202  	spin_lock_irqsave(&pci_config_lock, flags);
   6.203 @@ -108,9 +244,6 @@ static int pci_conf1_read_config_byte(st
   6.204  	int result; 
   6.205  	u32 data;
   6.206  
   6.207 -	if (!value) 
   6.208 -		return -EINVAL;
   6.209 -
   6.210  	result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.211  		PCI_FUNC(dev->devfn), where, 1, &data);
   6.212  
   6.213 @@ -124,9 +257,6 @@ static int pci_conf1_read_config_word(st
   6.214  	int result; 
   6.215  	u32 data;
   6.216  
   6.217 -	if (!value) 
   6.218 -		return -EINVAL;
   6.219 -
   6.220  	result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.221  		PCI_FUNC(dev->devfn), where, 2, &data);
   6.222  
   6.223 @@ -137,9 +267,6 @@ static int pci_conf1_read_config_word(st
   6.224  
   6.225  static int pci_conf1_read_config_dword(struct pci_dev *dev, int where, u32 *value)
   6.226  {
   6.227 -	if (!value) 
   6.228 -		return -EINVAL;
   6.229 -
   6.230  	return pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.231  		PCI_FUNC(dev->devfn), where, 4, value);
   6.232  }
   6.233 @@ -182,7 +309,7 @@ static int pci_conf2_read (int seg, int 
   6.234  {
   6.235  	unsigned long flags;
   6.236  
   6.237 -	if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
   6.238 +	if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
   6.239  		return -EINVAL;
   6.240  
   6.241  	if (dev & 0x10) 
   6.242 @@ -216,7 +343,7 @@ static int pci_conf2_write (int seg, int
   6.243  {
   6.244  	unsigned long flags;
   6.245  
   6.246 -	if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) 
   6.247 +	if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
   6.248  		return -EINVAL;
   6.249  
   6.250  	if (dev & 0x10) 
   6.251 @@ -350,8 +477,14 @@ static struct pci_ops * __devinit pci_ch
   6.252  		    pci_sanity_check(&pci_direct_conf1)) {
   6.253  			outl (tmp, 0xCF8);
   6.254  			__restore_flags(flags);
   6.255 -			printk("PCI: Using configuration type 1\n");
   6.256 +			printk(KERN_INFO "PCI: Using configuration type 1\n");
   6.257  			request_region(0xCF8, 8, "PCI conf1");
   6.258 +
   6.259 +#ifdef CONFIG_MULTIQUAD			
   6.260 +			/* Multi-Quad has an extended PCI Conf1 */
   6.261 +			if(clustered_apic_mode == CLUSTERED_APIC_NUMAQ)
   6.262 +				return &pci_direct_mq_conf1;
   6.263 +#endif				
   6.264  			return &pci_direct_conf1;
   6.265  		}
   6.266  		outl (tmp, 0xCF8);
   6.267 @@ -367,7 +500,7 @@ static struct pci_ops * __devinit pci_ch
   6.268  		if (inb (0xCF8) == 0x00 && inb (0xCFA) == 0x00 &&
   6.269  		    pci_sanity_check(&pci_direct_conf2)) {
   6.270  			__restore_flags(flags);
   6.271 -			printk("PCI: Using configuration type 2\n");
   6.272 +			printk(KERN_INFO "PCI: Using configuration type 2\n");
   6.273  			request_region(0xCF8, 4, "PCI conf2");
   6.274  			return &pci_direct_conf2;
   6.275  		}
   6.276 @@ -475,10 +608,10 @@ static unsigned long bios32_service(unsi
   6.277  		case 0:
   6.278  			return address + entry;
   6.279  		case 0x80:	/* Not present */
   6.280 -			printk("bios32_service(0x%lx): not present\n", service);
   6.281 +			printk(KERN_WARNING "bios32_service(0x%lx): not present\n", service);
   6.282  			return 0;
   6.283  		default: /* Shouldn't happen */
   6.284 -			printk("bios32_service(0x%lx): returned 0x%x -- BIOS bug!\n",
   6.285 +			printk(KERN_WARNING "bios32_service(0x%lx): returned 0x%x -- BIOS bug!\n",
   6.286  				service, return_code);
   6.287  			return 0;
   6.288  	}
   6.289 @@ -528,7 +661,7 @@ static int __devinit check_pcibios(void)
   6.290  				status, signature);
   6.291  			return 0;
   6.292  		}
   6.293 -		printk("PCI: PCI BIOS revision %x.%02x entry at 0x%lx, last bus=%d\n",
   6.294 +		printk(KERN_INFO "PCI: PCI BIOS revision %x.%02x entry at 0x%lx, last bus=%d\n",
   6.295  			major_ver, minor_ver, pcibios_entry, pcibios_last_bus);
   6.296  #ifdef CONFIG_PCI_DIRECT
   6.297  		if (!(hw_mech & PCIBIOS_HW_TYPE1))
   6.298 @@ -569,7 +702,7 @@ static int pci_bios_read (int seg, int b
   6.299  	unsigned long flags;
   6.300  	unsigned long bx = ((bus << 8) | (dev << 3) | fn);
   6.301  
   6.302 -	if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
   6.303 +	if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
   6.304  		return -EINVAL;
   6.305  
   6.306  	spin_lock_irqsave(&pci_config_lock, flags);
   6.307 @@ -624,7 +757,7 @@ static int pci_bios_write (int seg, int 
   6.308  	unsigned long flags;
   6.309  	unsigned long bx = ((bus << 8) | (dev << 3) | fn);
   6.310  
   6.311 -	if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) 
   6.312 +	if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
   6.313  		return -EINVAL;
   6.314  
   6.315  	spin_lock_irqsave(&pci_config_lock, flags);
   6.316 @@ -679,7 +812,7 @@ static int pci_bios_read_config_byte(str
   6.317  	u32 data;
   6.318  
   6.319  	if (!value) 
   6.320 -		return -EINVAL;
   6.321 +		BUG();
   6.322  
   6.323  	result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.324  		PCI_FUNC(dev->devfn), where, 1, &data);
   6.325 @@ -695,7 +828,7 @@ static int pci_bios_read_config_word(str
   6.326  	u32 data;
   6.327  
   6.328  	if (!value) 
   6.329 -		return -EINVAL;
   6.330 +		BUG();
   6.331  
   6.332  	result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.333  		PCI_FUNC(dev->devfn), where, 2, &data);
   6.334 @@ -708,7 +841,7 @@ static int pci_bios_read_config_word(str
   6.335  static int pci_bios_read_config_dword(struct pci_dev *dev, int where, u32 *value)
   6.336  {
   6.337  	if (!value) 
   6.338 -		return -EINVAL;
   6.339 +		BUG();
   6.340  	
   6.341  	return pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
   6.342  		PCI_FUNC(dev->devfn), where, 4, value);
   6.343 @@ -830,7 +963,7 @@ static void __devinit pcibios_sort(void)
   6.344  				}
   6.345  			}
   6.346  			if (ln == &pci_devices) {
   6.347 -				printk("PCI: BIOS reporting unknown device %02x:%02x\n", bus, devfn);
   6.348 +				printk(KERN_WARNING "PCI: BIOS reporting unknown device %02x:%02x\n", bus, devfn);
   6.349  				/*
   6.350  				 * We must not continue scanning as several buggy BIOSes
   6.351  				 * return garbage after the last device. Grr.
   6.352 @@ -839,7 +972,7 @@ static void __devinit pcibios_sort(void)
   6.353  			}
   6.354  		}
   6.355  		if (!found) {
   6.356 -			printk("PCI: Device %02x:%02x not found by BIOS\n",
   6.357 +			printk(KERN_WARNING "PCI: Device %02x:%02x not found by BIOS\n",
   6.358  				dev->bus->number, dev->devfn);
   6.359  			list_del(&dev->global_list);
   6.360  			list_add_tail(&dev->global_list, &sorted_devices);
   6.361 @@ -899,7 +1032,7 @@ struct irq_routing_table * __devinit pci
   6.362  			rt->size = opt.size + sizeof(struct irq_routing_table);
   6.363  			rt->exclusive_irqs = map;
   6.364  			memcpy(rt->slots, (void *) page, opt.size);
   6.365 -			printk("PCI: Using BIOS Interrupt Routing Table\n");
   6.366 +			printk(KERN_INFO "PCI: Using BIOS Interrupt Routing Table\n");
   6.367  		}
   6.368  	}
   6.369  	free_page(page);
   6.370 @@ -964,7 +1097,7 @@ static void __devinit pcibios_fixup_ghos
   6.371  	}
   6.372  	if (!seen_host_bridge)
   6.373  		return;
   6.374 -	printk("PCI: Ignoring ghost devices on bus %02x\n", b->number);
   6.375 +	printk(KERN_WARNING "PCI: Ignoring ghost devices on bus %02x\n", b->number);
   6.376  
   6.377  	ln = &b->devices;
   6.378  	while (ln->next != &b->devices) {
   6.379 @@ -1002,7 +1135,7 @@ static void __devinit pcibios_fixup_peer
   6.380  			if (!pci_read_config_word(&dev, PCI_VENDOR_ID, &l) &&
   6.381  			    l != 0x0000 && l != 0xffff) {
   6.382  				DBG("Found device at %02x:%02x [%04x]\n", n, dev.devfn, l);
   6.383 -				printk("PCI: Discovered peer bus %02x\n", n);
   6.384 +				printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
   6.385  				pci_scan_bus(n, pci_root_ops, NULL);
   6.386  				break;
   6.387  			}
   6.388 @@ -1020,6 +1153,9 @@ static void __devinit pci_fixup_i450nx(s
   6.389  	 */
   6.390  	int pxb, reg;
   6.391  	u8 busno, suba, subb;
   6.392 +#ifdef CONFIG_MULTIQUAD
   6.393 +	int quad = BUS2QUAD(d->bus->number);
   6.394 +#endif
   6.395  	printk("PCI: Searching for i450NX host bridges on %s\n", d->slot_name);
   6.396  	reg = 0xd0;
   6.397  	for(pxb=0; pxb<2; pxb++) {
   6.398 @@ -1028,9 +1164,9 @@ static void __devinit pci_fixup_i450nx(s
   6.399  		pci_read_config_byte(d, reg++, &subb);
   6.400  		DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb);
   6.401  		if (busno)
   6.402 -			pci_scan_bus(busno, pci_root_ops, NULL);	/* Bus A */
   6.403 +			pci_scan_bus(QUADLOCAL2BUS(quad,busno), pci_root_ops, NULL);	/* Bus A */
   6.404  		if (suba < subb)
   6.405 -			pci_scan_bus(suba+1, pci_root_ops, NULL);	/* Bus B */
   6.406 +			pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), pci_root_ops, NULL);	/* Bus B */
   6.407  	}
   6.408  	pcibios_last_bus = -1;
   6.409  }
   6.410 @@ -1043,7 +1179,7 @@ static void __devinit pci_fixup_i450gx(s
   6.411  	 */
   6.412  	u8 busno;
   6.413  	pci_read_config_byte(d, 0x4a, &busno);
   6.414 -	printk("PCI: i440KX/GX host bridge %s: secondary bus %02x\n", d->slot_name, busno);
   6.415 +	printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02x\n", d->slot_name, busno);
   6.416  	pci_scan_bus(busno, pci_root_ops, NULL);
   6.417  	pcibios_last_bus = -1;
   6.418  }
   6.419 @@ -1056,11 +1192,23 @@ static void __devinit  pci_fixup_umc_ide
   6.420  	 */
   6.421  	int i;
   6.422  
   6.423 -	printk("PCI: Fixing base address flags for device %s\n", d->slot_name);
   6.424 +	printk(KERN_WARNING "PCI: Fixing base address flags for device %s\n", d->slot_name);
   6.425  	for(i=0; i<4; i++)
   6.426  		d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO;
   6.427  }
   6.428  
   6.429 +static void __devinit  pci_fixup_ncr53c810(struct pci_dev *d)
   6.430 +{
   6.431 +	/*
   6.432 +	 * NCR 53C810 returns class code 0 (at least on some systems).
   6.433 +	 * Fix class to be PCI_CLASS_STORAGE_SCSI
   6.434 +	 */
   6.435 +	if (!d->class) {
   6.436 +		printk("PCI: fixing NCR 53C810 class code for %s\n", d->slot_name);
   6.437 +		d->class = PCI_CLASS_STORAGE_SCSI << 8;
   6.438 +	}
   6.439 +}
   6.440 +
   6.441  static void __devinit pci_fixup_ide_bases(struct pci_dev *d)
   6.442  {
   6.443  	int i;
   6.444 @@ -1112,23 +1260,72 @@ static void __devinit pci_fixup_piix4_ac
   6.445  }
   6.446  
   6.447  /*
   6.448 - * Nobody seems to know what this does. Damn.
   6.449 - *
   6.450 - * But it does seem to fix some unspecified problem
   6.451 - * with 'movntq' copies on Athlons.
   6.452 - *
   6.453 - * VIA 8363 chipset:
   6.454 - *  - bit 7 at offset 0x55: Debug (RW)
   6.455 + * Addresses issues with problems in the memory write queue timer in
   6.456 + * certain VIA Northbridges.  This bugfix is per VIA's specifications,
   6.457 + * except for the KL133/KM133: clearing bit 5 on those Northbridges seems
   6.458 + * to trigger a bug in its integrated ProSavage video card, which
   6.459 + * causes screen corruption.  We only clear bits 6 and 7 for that chipset,
   6.460 + * until VIA can provide us with definitive information on why screen
   6.461 + * corruption occurs, and what exactly those bits do.
   6.462 + * 
   6.463 + * VIA 8363,8622,8361 Northbridges:
   6.464 + *  - bits  5, 6, 7 at offset 0x55 need to be turned off
   6.465 + * VIA 8367 (KT266x) Northbridges:
   6.466 + *  - bits  5, 6, 7 at offset 0x95 need to be turned off
   6.467 + * VIA 8363 rev 0x81/0x84 (KL133/KM133) Northbridges:
   6.468 + *  - bits     6, 7 at offset 0x55 need to be turned off
   6.469   */
   6.470 -static void __init pci_fixup_via_athlon_bug(struct pci_dev *d)
   6.471 +
   6.472 +#define VIA_8363_KL133_REVISION_ID 0x81
   6.473 +#define VIA_8363_KM133_REVISION_ID 0x84
   6.474 +
   6.475 +static void __init pci_fixup_via_northbridge_bug(struct pci_dev *d)
   6.476  {
   6.477  	u8 v;
   6.478 -	pci_read_config_byte(d, 0x55, &v);
   6.479 -	if (v & 0x80) {
   6.480 -		printk("Trying to stomp on Athlon bug...\n");
   6.481 -		v &= 0x7f; /* clear bit 55.7 */
   6.482 -		pci_write_config_byte(d, 0x55, v);
   6.483 +	u8 revision;
   6.484 +	int where = 0x55;
   6.485 +	int mask = 0x1f; /* clear bits 5, 6, 7 by default */
   6.486 +
   6.487 +	pci_read_config_byte(d, PCI_REVISION_ID, &revision);
   6.488 +	
   6.489 +	if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
   6.490 +		/* fix pci bus latency issues resulted by NB bios error
   6.491 +		   it appears on bug free^Wreduced kt266x's bios forces
   6.492 +		   NB latency to zero */
   6.493 +		pci_write_config_byte(d, PCI_LATENCY_TIMER, 0);
   6.494 +
   6.495 +		where = 0x95; /* the memory write queue timer register is 
   6.496 +				 different for the KT266x's: 0x95 not 0x55 */
   6.497 +	} else if (d->device == PCI_DEVICE_ID_VIA_8363_0 &&
   6.498 +	           (revision == VIA_8363_KL133_REVISION_ID || 
   6.499 +		    revision == VIA_8363_KM133_REVISION_ID)) {
   6.500 +		mask = 0x3f; /* clear only bits 6 and 7; clearing bit 5
   6.501 +				causes screen corruption on the KL133/KM133 */
   6.502  	}
   6.503 +
   6.504 +	pci_read_config_byte(d, where, &v);
   6.505 +	if (v & ~mask) {
   6.506 +		printk("Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02x\n", \
   6.507 +			d->device, revision, where, v, mask, v & mask);
   6.508 +		v &= mask;
   6.509 +		pci_write_config_byte(d, where, v);
   6.510 +	}
   6.511 +}
   6.512 +
   6.513 +/*
   6.514 + * For some reasons Intel decided that certain parts of their
   6.515 + * 815, 845 and some other chipsets must look like PCI-to-PCI bridges
   6.516 + * while they are obviously not. The 82801 family (AA, AB, BAM/CAM,
   6.517 + * BA/CA/DB and E) PCI bridges are actually HUB-to-PCI ones, according
   6.518 + * to Intel terminology. These devices do forward all addresses from
   6.519 + * system to PCI bus no matter what are their window settings, so they are
   6.520 + * "transparent" (or subtractive decoding) from programmers point of view.
   6.521 + */
   6.522 +static void __init pci_fixup_transparent_bridge(struct pci_dev *dev)
   6.523 +{
   6.524 +	if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI &&
   6.525 +	    (dev->device & 0xff00) == 0x2400)
   6.526 +		dev->transparent = 1;
   6.527  }
   6.528  
   6.529  struct pci_fixup pcibios_fixups[] = {
   6.530 @@ -1140,7 +1337,12 @@ struct pci_fixup pcibios_fixups[] = {
   6.531  	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_5597,		pci_fixup_latency },
   6.532  	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_5598,		pci_fixup_latency },
   6.533   	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82371AB_3,	pci_fixup_piix4_acpi },
   6.534 -	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8363_0,	pci_fixup_via_athlon_bug },
   6.535 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8363_0,	pci_fixup_via_northbridge_bug },
   6.536 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8622,	        pci_fixup_via_northbridge_bug },
   6.537 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8361,	        pci_fixup_via_northbridge_bug },
   6.538 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8367_0,	pci_fixup_via_northbridge_bug },
   6.539 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_NCR,	PCI_DEVICE_ID_NCR_53C810,	pci_fixup_ncr53c810 },
   6.540 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_ANY_ID,			pci_fixup_transparent_bridge },
   6.541  	{ 0 }
   6.542  };
   6.543  
   6.544 @@ -1163,6 +1365,11 @@ void __devinit pcibios_config_init(void)
   6.545  	 * both PCI BIOS and direct access, with a preference for direct.
   6.546  	 */
   6.547  
   6.548 +#ifdef CONFIG_PCI_DIRECT
   6.549 +	struct pci_ops *tmp = NULL;
   6.550 +#endif
   6.551 +
   6.552 +
   6.553  #ifdef CONFIG_PCI_BIOS
   6.554  	if ((pci_probe & PCI_PROBE_BIOS) 
   6.555  		&& ((pci_root_ops = pci_find_bios()))) {
   6.556 @@ -1175,7 +1382,8 @@ void __devinit pcibios_config_init(void)
   6.557  
   6.558  #ifdef CONFIG_PCI_DIRECT
   6.559  	if ((pci_probe & (PCI_PROBE_CONF1 | PCI_PROBE_CONF2)) 
   6.560 -		&& (pci_root_ops = pci_check_direct())) {
   6.561 +		&& (tmp = pci_check_direct())) {
   6.562 +		pci_root_ops = tmp;
   6.563  		if (pci_root_ops == &pci_direct_conf1) {
   6.564  			pci_config_read = pci_conf1_read;
   6.565  			pci_config_write = pci_conf1_write;
   6.566 @@ -1192,15 +1400,25 @@ void __devinit pcibios_config_init(void)
   6.567  
   6.568  void __init pcibios_init(void)
   6.569  {
   6.570 +	int quad;
   6.571 +
   6.572  	if (!pci_root_ops)
   6.573  		pcibios_config_init();
   6.574  	if (!pci_root_ops) {
   6.575 -		printk("PCI: System does not support PCI\n");
   6.576 +		printk(KERN_WARNING "PCI: System does not support PCI\n");
   6.577  		return;
   6.578  	}
   6.579  
   6.580 -	printk("PCI: Probing PCI hardware\n");
   6.581 +	printk(KERN_INFO "PCI: Probing PCI hardware\n");
   6.582  	pci_root_bus = pci_scan_bus(0, pci_root_ops, NULL);
   6.583 +	if (clustered_apic_mode && (numnodes > 1)) {
   6.584 +		for (quad = 1; quad < numnodes; ++quad) {
   6.585 +			printk("Scanning PCI bus %d for quad %d\n", 
   6.586 +				QUADLOCAL2BUS(quad,0), quad);
   6.587 +			pci_scan_bus(QUADLOCAL2BUS(quad,0), 
   6.588 +				pci_root_ops, NULL);
   6.589 +		}
   6.590 +	}
   6.591  
   6.592  	pcibios_irq_init();
   6.593  	pcibios_fixup_peer_bridges();
   6.594 @@ -1265,11 +1483,11 @@ unsigned int pcibios_assign_all_busses(v
   6.595  	return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
   6.596  }
   6.597  
   6.598 -int pcibios_enable_device(struct pci_dev *dev)
   6.599 +int pcibios_enable_device(struct pci_dev *dev, int mask)
   6.600  {
   6.601  	int err;
   6.602  
   6.603 -	if ((err = pcibios_enable_resources(dev)) < 0)
   6.604 +	if ((err = pcibios_enable_resources(dev, mask)) < 0)
   6.605  		return err;
   6.606  	pcibios_enable_irq(dev);
   6.607  	return 0;
     7.1 --- a/xen-2.4.16/common/kernel.c	Sun Feb 16 15:16:35 2003 +0000
     7.2 +++ b/xen-2.4.16/common/kernel.c	Sun Feb 16 18:08:23 2003 +0000
     7.3 @@ -506,3 +506,10 @@ long do_console_write(char *str, int cou
     7.4      
     7.5      return(0);
     7.6  }
     7.7 +
     7.8 +void __out_of_line_bug(int line)
     7.9 +{
    7.10 +    printk("kernel BUG in header file at line %d\n", line);
    7.11 +    BUG();
    7.12 +    for ( ; ; ) continue;
    7.13 +}
     8.1 --- a/xen-2.4.16/common/resource.c	Sun Feb 16 15:16:35 2003 +0000
     8.2 +++ b/xen-2.4.16/common/resource.c	Sun Feb 16 18:08:23 2003 +0000
     8.3 @@ -154,7 +154,8 @@ static int find_resource(struct resource
     8.4  			 unsigned long size,
     8.5  			 unsigned long min, unsigned long max,
     8.6  			 unsigned long align,
     8.7 -			 void (*alignf)(void *, struct resource *, unsigned long),
     8.8 +			 void (*alignf)(void *, struct resource *,
     8.9 +					unsigned long, unsigned long),
    8.10  			 void *alignf_data)
    8.11  {
    8.12  	struct resource *this = root->child;
    8.13 @@ -171,7 +172,7 @@ static int find_resource(struct resource
    8.14  			new->end = max;
    8.15  		new->start = (new->start + align - 1) & ~(align - 1);
    8.16  		if (alignf)
    8.17 -			alignf(alignf_data, new, size);
    8.18 +			alignf(alignf_data, new, size, align);
    8.19  		if (new->start < new->end && new->end - new->start + 1 >= size) {
    8.20  			new->end = new->start + size - 1;
    8.21  			return 0;
    8.22 @@ -191,7 +192,8 @@ int allocate_resource(struct resource *r
    8.23  		      unsigned long size,
    8.24  		      unsigned long min, unsigned long max,
    8.25  		      unsigned long align,
    8.26 -		      void (*alignf)(void *, struct resource *, unsigned long),
    8.27 +		      void (*alignf)(void *, struct resource *,
    8.28 +				     unsigned long, unsigned long),
    8.29  		      void *alignf_data)
    8.30  {
    8.31  	int err;
    8.32 @@ -293,6 +295,7 @@ void __release_region(struct resource *p
    8.33  	printk("Trying to free nonexistent resource <%08lx-%08lx>\n", start, end);
    8.34  }
    8.35  
    8.36 +
    8.37  #if 0
    8.38  /*
    8.39   * Called from init/main.c to reserve IO ports.
     9.1 --- a/xen-2.4.16/drivers/ide/ide-disk.c.orig	Sun Feb 16 15:16:35 2003 +0000
     9.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.3 @@ -1,1550 +0,0 @@
     9.4 -/*
     9.5 - *  linux/drivers/ide/ide-disk.c	Version 1.10	June 9, 2000
     9.6 - *
     9.7 - *  Copyright (C) 1994-1998  Linus Torvalds & authors (see below)
     9.8 - */
     9.9 -
    9.10 -/*
    9.11 - *  Mostly written by Mark Lord <mlord@pobox.com>
    9.12 - *                and Gadi Oxman <gadio@netvision.net.il>
    9.13 - *                and Andre Hedrick <andre@linux-ide.org>
    9.14 - *
    9.15 - * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c.
    9.16 - *
    9.17 - * Version 1.00		move disk only code from ide.c to ide-disk.c
    9.18 - *			support optional byte-swapping of all data
    9.19 - * Version 1.01		fix previous byte-swapping code
    9.20 - * Version 1.02		remove ", LBA" from drive identification msgs
    9.21 - * Version 1.03		fix display of id->buf_size for big-endian
    9.22 - * Version 1.04		add /proc configurable settings and S.M.A.R.T support
    9.23 - * Version 1.05		add capacity support for ATA3 >= 8GB
    9.24 - * Version 1.06		get boot-up messages to show full cyl count
    9.25 - * Version 1.07		disable door-locking if it fails
    9.26 - * Version 1.08		fixed CHS/LBA translations for ATA4 > 8GB,
    9.27 - *			process of adding new ATA4 compliance.
    9.28 - *			fixed problems in allowing fdisk to see
    9.29 - *			the entire disk.
    9.30 - * Version 1.09		added increment of rq->sector in ide_multwrite
    9.31 - *			added UDMA 3/4 reporting
    9.32 - * Version 1.10		request queue changes, Ultra DMA 100
    9.33 - * Version 1.11		added 48-bit lba
    9.34 - * Version 1.12		adding taskfile io access method
    9.35 - */
    9.36 -
    9.37 -#define IDEDISK_VERSION	"1.12"
    9.38 -
    9.39 -#undef REALLY_SLOW_IO		/* most systems can safely undef this */
    9.40 -
    9.41 -#include <xeno/config.h>
    9.42 -#include <xeno/module.h>
    9.43 -#include <xeno/types.h>
    9.44 -#include <xeno/lib.h>
    9.45 -#include <xeno/timer.h>
    9.46 -#include <xeno/mm.h>
    9.47 -#include <xeno/interrupt.h>
    9.48 -#include <xeno/major.h>
    9.49 -#include <xeno/errno.h>
    9.50 -#include <xeno/genhd.h>
    9.51 -#include <xeno/slab.h>
    9.52 -#include <xeno/delay.h>
    9.53 -#include <xeno/ide.h>
    9.54 -
    9.55 -#include <asm/byteorder.h>
    9.56 -#include <asm/irq.h>
    9.57 -#include <asm/uaccess.h>
    9.58 -#include <asm/io.h>
    9.59 -
    9.60 -#ifdef CONFIG_BLK_DEV_PDC4030
    9.61 -#define IS_PDC4030_DRIVE (HWIF(drive)->chipset == ide_pdc4030)
    9.62 -#else
    9.63 -#define IS_PDC4030_DRIVE (0)	/* auto-NULLs out pdc4030 code */
    9.64 -#endif
    9.65 -
    9.66 -#ifdef CONFIG_IDE_TASKFILE_IO
    9.67 -#  undef __TASKFILE__IO /* define __TASKFILE__IO */
    9.68 -#else /* CONFIG_IDE_TASKFILE_IO */
    9.69 -#  undef __TASKFILE__IO
    9.70 -#endif /* CONFIG_IDE_TASKFILE_IO */
    9.71 -
    9.72 -#ifndef __TASKFILE__IO
    9.73 -
    9.74 -static void idedisk_bswap_data (void *buffer, int wcount)
    9.75 -{
    9.76 -	u16 *p = buffer;
    9.77 -
    9.78 -	while (wcount--) {
    9.79 -		*p = *p << 8 | *p >> 8; p++;
    9.80 -		*p = *p << 8 | *p >> 8; p++;
    9.81 -	}
    9.82 -}
    9.83 -
    9.84 -static inline void idedisk_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
    9.85 -{
    9.86 -	ide_input_data(drive, buffer, wcount);
    9.87 -	if (drive->bswap)
    9.88 -		idedisk_bswap_data(buffer, wcount);
    9.89 -}
    9.90 -
    9.91 -static inline void idedisk_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
    9.92 -{
    9.93 -	if (drive->bswap) {
    9.94 -		idedisk_bswap_data(buffer, wcount);
    9.95 -		ide_output_data(drive, buffer, wcount);
    9.96 -		idedisk_bswap_data(buffer, wcount);
    9.97 -	} else
    9.98 -		ide_output_data(drive, buffer, wcount);
    9.99 -}
   9.100 -
   9.101 -#endif /* __TASKFILE__IO */
   9.102 -
   9.103 -/*
   9.104 - * lba_capacity_is_ok() performs a sanity check on the claimed "lba_capacity"
   9.105 - * value for this drive (from its reported identification information).
   9.106 - *
   9.107 - * Returns:	1 if lba_capacity looks sensible
   9.108 - *		0 otherwise
   9.109 - *
   9.110 - * It is called only once for each drive.
   9.111 - */
   9.112 -static int lba_capacity_is_ok (struct hd_driveid *id)
   9.113 -{
   9.114 -	unsigned long lba_sects, chs_sects, head, tail;
   9.115 -
   9.116 -	if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)) {
   9.117 -		printk("48-bit Drive: %llu \n", id->lba_capacity_2);
   9.118 -		return 1;
   9.119 -	}
   9.120 -
   9.121 -	/*
   9.122 -	 * The ATA spec tells large drives to return
   9.123 -	 * C/H/S = 16383/16/63 independent of their size.
   9.124 -	 * Some drives can be jumpered to use 15 heads instead of 16.
   9.125 -	 * Some drives can be jumpered to use 4092 cyls instead of 16383.
   9.126 -	 */
   9.127 -	if ((id->cyls == 16383
   9.128 -	     || (id->cyls == 4092 && id->cur_cyls == 16383)) &&
   9.129 -	    id->sectors == 63 &&
   9.130 -	    (id->heads == 15 || id->heads == 16) &&
   9.131 -	    id->lba_capacity >= 16383*63*id->heads)
   9.132 -		return 1;
   9.133 -
   9.134 -	lba_sects   = id->lba_capacity;
   9.135 -	chs_sects   = id->cyls * id->heads * id->sectors;
   9.136 -
   9.137 -	/* perform a rough sanity check on lba_sects:  within 10% is OK */
   9.138 -	if ((lba_sects - chs_sects) < chs_sects/10)
   9.139 -		return 1;
   9.140 -
   9.141 -	/* some drives have the word order reversed */
   9.142 -	head = ((lba_sects >> 16) & 0xffff);
   9.143 -	tail = (lba_sects & 0xffff);
   9.144 -	lba_sects = (head | (tail << 16));
   9.145 -	if ((lba_sects - chs_sects) < chs_sects/10) {
   9.146 -		id->lba_capacity = lba_sects;
   9.147 -		return 1;	/* lba_capacity is (now) good */
   9.148 -	}
   9.149 -
   9.150 -	return 0;	/* lba_capacity value may be bad */
   9.151 -}
   9.152 -
   9.153 -#ifndef __TASKFILE__IO
   9.154 -
   9.155 -/*
   9.156 - * read_intr() is the handler for disk read/multread interrupts
   9.157 - */
   9.158 -static ide_startstop_t read_intr (ide_drive_t *drive)
   9.159 -{
   9.160 -	byte stat;
   9.161 -	int i;
   9.162 -	unsigned int msect, nsect;
   9.163 -	struct request *rq;
   9.164 -
   9.165 -	/* new way for dealing with premature shared PCI interrupts */
   9.166 -	if (!OK_STAT(stat=GET_STAT(),DATA_READY,BAD_R_STAT)) {
   9.167 -		if (stat & (ERR_STAT|DRQ_STAT)) {
   9.168 -			return ide_error(drive, "read_intr", stat);
   9.169 -		}
   9.170 -		/* no data yet, so wait for another interrupt */
   9.171 -		ide_set_handler(drive, &read_intr, WAIT_CMD, NULL);
   9.172 -		return ide_started;
   9.173 -	}
   9.174 -	msect = drive->mult_count;
   9.175 -	
   9.176 -read_next:
   9.177 -	rq = HWGROUP(drive)->rq;
   9.178 -	if (msect) {
   9.179 -		if ((nsect = rq->current_nr_sectors) > msect)
   9.180 -			nsect = msect;
   9.181 -		msect -= nsect;
   9.182 -	} else
   9.183 -		nsect = 1;
   9.184 -	idedisk_input_data(drive, rq->buffer, nsect * SECTOR_WORDS);
   9.185 -#ifdef DEBUG
   9.186 -	printk("%s:  read: sectors(%ld-%ld), buffer=0x%08lx, remaining=%ld\n",
   9.187 -		drive->name, rq->sector, rq->sector+nsect-1,
   9.188 -		(unsigned long) rq->buffer+(nsect<<9), rq->nr_sectors-nsect);
   9.189 -#endif
   9.190 -	rq->sector += nsect;
   9.191 -	rq->buffer += nsect<<9;
   9.192 -	rq->errors = 0;
   9.193 -	i = (rq->nr_sectors -= nsect);
   9.194 -	if (((long)(rq->current_nr_sectors -= nsect)) <= 0)
   9.195 -		ide_end_request(1, HWGROUP(drive));
   9.196 -	if (i > 0) {
   9.197 -		if (msect)
   9.198 -			goto read_next;
   9.199 -		ide_set_handler (drive, &read_intr, WAIT_CMD, NULL);
   9.200 -                return ide_started;
   9.201 -	}
   9.202 -        return ide_stopped;
   9.203 -}
   9.204 -
   9.205 -/*
   9.206 - * write_intr() is the handler for disk write interrupts
   9.207 - */
   9.208 -static ide_startstop_t write_intr (ide_drive_t *drive)
   9.209 -{
   9.210 -	byte stat;
   9.211 -	int i;
   9.212 -	ide_hwgroup_t *hwgroup = HWGROUP(drive);
   9.213 -	struct request *rq = hwgroup->rq;
   9.214 -
   9.215 -	if (!OK_STAT(stat=GET_STAT(),DRIVE_READY,drive->bad_wstat)) {
   9.216 -		printk("%s: write_intr error1: nr_sectors=%ld, stat=0x%02x\n", drive->name, rq->nr_sectors, stat);
   9.217 -        } else {
   9.218 -#ifdef DEBUG
   9.219 -		printk("%s: write: sector %ld, buffer=0x%08lx, remaining=%ld\n",
   9.220 -			drive->name, rq->sector, (unsigned long) rq->buffer,
   9.221 -			rq->nr_sectors-1);
   9.222 -#endif
   9.223 -		if ((rq->nr_sectors == 1) ^ ((stat & DRQ_STAT) != 0)) {
   9.224 -			rq->sector++;
   9.225 -			rq->buffer += 512;
   9.226 -			rq->errors = 0;
   9.227 -			i = --rq->nr_sectors;
   9.228 -			--rq->current_nr_sectors;
   9.229 -			if (((long)rq->current_nr_sectors) <= 0)
   9.230 -				ide_end_request(1, hwgroup);
   9.231 -			if (i > 0) {
   9.232 -				idedisk_output_data (drive, rq->buffer, SECTOR_WORDS);
   9.233 -				ide_set_handler (drive, &write_intr, WAIT_CMD, NULL);
   9.234 -                                return ide_started;
   9.235 -			}
   9.236 -                        return ide_stopped;
   9.237 -		}
   9.238 -		return ide_stopped;	/* the original code did this here (?) */
   9.239 -	}
   9.240 -	return ide_error(drive, "write_intr", stat);
   9.241 -}
   9.242 -
   9.243 -/*
   9.244 - * ide_multwrite() transfers a block of up to mcount sectors of data
   9.245 - * to a drive as part of a disk multiple-sector write operation.
   9.246 - *
   9.247 - * Returns 0 on success.
   9.248 - *
   9.249 - * Note that we may be called from two contexts - the do_rw_disk context
   9.250 - * and IRQ context. The IRQ can happen any time after we've output the
   9.251 - * full "mcount" number of sectors, so we must make sure we update the
   9.252 - * state _before_ we output the final part of the data!
   9.253 - */
   9.254 -int ide_multwrite (ide_drive_t *drive, unsigned int mcount)
   9.255 -{
   9.256 - 	ide_hwgroup_t	*hwgroup= HWGROUP(drive);
   9.257 - 	struct request	*rq = &hwgroup->wrq;
   9.258 - 
   9.259 -  	do {
   9.260 -  		char *buffer;
   9.261 -  		int nsect = rq->current_nr_sectors;
   9.262 - 
   9.263 -		if (nsect > mcount)
   9.264 -			nsect = mcount;
   9.265 -		mcount -= nsect;
   9.266 -		buffer = rq->buffer;
   9.267 -
   9.268 -		rq->sector += nsect;
   9.269 -		rq->buffer += nsect << 9;
   9.270 -		rq->nr_sectors -= nsect;
   9.271 -		rq->current_nr_sectors -= nsect;
   9.272 -
   9.273 -		/* Do we move to the next bh after this? */
   9.274 -		if (!rq->current_nr_sectors) {
   9.275 -			struct buffer_head *bh = rq->bh->b_reqnext;
   9.276 -
   9.277 -			/* end early early we ran out of requests */
   9.278 -			if (!bh) {
   9.279 -				mcount = 0;
   9.280 -			} else {
   9.281 -				rq->bh = bh;
   9.282 -				rq->current_nr_sectors = bh->b_size >> 9;
   9.283 -				rq->buffer             = bh->b_data;
   9.284 -			}
   9.285 -		}
   9.286 -
   9.287 -		/*
   9.288 -		 * Ok, we're all setup for the interrupt
   9.289 -		 * re-entering us on the last transfer.
   9.290 -		 */
   9.291 -		idedisk_output_data(drive, buffer, nsect<<7);
   9.292 -	} while (mcount);
   9.293 -
   9.294 -        return 0;
   9.295 -}
   9.296 -
   9.297 -/*
   9.298 - * multwrite_intr() is the handler for disk multwrite interrupts
   9.299 - */
   9.300 -static ide_startstop_t multwrite_intr (ide_drive_t *drive)
   9.301 -{
   9.302 -	byte stat;
   9.303 -	int i;
   9.304 -	ide_hwgroup_t *hwgroup = HWGROUP(drive);
   9.305 -	struct request *rq = &hwgroup->wrq;
   9.306 -
   9.307 -	if (OK_STAT(stat=GET_STAT(),DRIVE_READY,drive->bad_wstat)) {
   9.308 -		if (stat & DRQ_STAT) {
   9.309 -			/*
   9.310 -			 *	The drive wants data. Remember rq is the copy
   9.311 -			 *	of the request
   9.312 -			 */
   9.313 -			if (rq->nr_sectors) {
   9.314 -				if (ide_multwrite(drive, drive->mult_count))
   9.315 -					return ide_stopped;
   9.316 -				ide_set_handler (drive, &multwrite_intr, WAIT_CMD, NULL);
   9.317 -				return ide_started;
   9.318 -			}
   9.319 -		} else {
   9.320 -			/*
   9.321 -			 *	If the copy has all the blocks completed then
   9.322 -			 *	we can end the original request.
   9.323 -			 */
   9.324 -			if (!rq->nr_sectors) {	/* all done? */
   9.325 -				rq = hwgroup->rq;
   9.326 -				for (i = rq->nr_sectors; i > 0;){
   9.327 -					i -= rq->current_nr_sectors;
   9.328 -					ide_end_request(1, hwgroup);
   9.329 -				}
   9.330 -				return ide_stopped;
   9.331 -			}
   9.332 -		}
   9.333 -		return ide_stopped;	/* the original code did this here (?) */
   9.334 -	}
   9.335 -	return ide_error(drive, "multwrite_intr", stat);
   9.336 -}
   9.337 -#endif /* __TASKFILE__IO */
   9.338 -
   9.339 -#ifdef __TASKFILE__IO
   9.340 -
   9.341 -static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block);
   9.342 -static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block);
   9.343 -static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block);
   9.344 -
   9.345 -/*
   9.346 - * do_rw_disk() issues READ and WRITE commands to a disk,
   9.347 - * using LBA if supported, or CHS otherwise, to address sectors.
   9.348 - * It also takes care of issuing special DRIVE_CMDs.
   9.349 - */
   9.350 -static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
   9.351 -{
   9.352 -	if (rq->cmd == READ)
   9.353 -		goto good_command;
   9.354 -	if (rq->cmd == WRITE)
   9.355 -		goto good_command;
   9.356 -
   9.357 -	printk(KERN_ERR "%s: bad command: %d\n", drive->name, rq->cmd);
   9.358 -	ide_end_request(0, HWGROUP(drive));
   9.359 -	return ide_stopped;
   9.360 -
   9.361 -good_command:
   9.362 -
   9.363 -#ifdef CONFIG_BLK_DEV_PDC4030
   9.364 -	if (IS_PDC4030_DRIVE) {
   9.365 -		extern ide_startstop_t promise_rw_disk(ide_drive_t *, struct request *, unsigned long);
   9.366 -		return promise_rw_disk(drive, rq, block);
   9.367 -	}
   9.368 -#endif /* CONFIG_BLK_DEV_PDC4030 */
   9.369 -
   9.370 -	if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing))	/* 48-bit LBA */
   9.371 -		return lba_48_rw_disk(drive, rq, (unsigned long long) block);
   9.372 -	if (drive->select.b.lba)		/* 28-bit LBA */
   9.373 -		return lba_28_rw_disk(drive, rq, (unsigned long) block);
   9.374 -
   9.375 -	/* 28-bit CHS : DIE DIE DIE piece of legacy crap!!! */
   9.376 -	return chs_rw_disk(drive, rq, (unsigned long) block);
   9.377 -}
   9.378 -
   9.379 -static task_ioreg_t get_command (ide_drive_t *drive, int cmd)
   9.380 -{
   9.381 -	int lba48bit = (drive->id->cfs_enable_2 & 0x0400) ? 1 : 0;
   9.382 -
   9.383 -#if 1
   9.384 -	lba48bit = drive->addressing;
   9.385 -#endif
   9.386 -
   9.387 -	if ((cmd == READ) && (drive->using_dma))
   9.388 -		return (lba48bit) ? WIN_READDMA_EXT : WIN_READDMA;
   9.389 -	else if ((cmd == READ) && (drive->mult_count))
   9.390 -		return (lba48bit) ? WIN_MULTREAD_EXT : WIN_MULTREAD;
   9.391 -	else if (cmd == READ)
   9.392 -		return (lba48bit) ? WIN_READ_EXT : WIN_READ;
   9.393 -	else if ((cmd == WRITE) && (drive->using_dma))
   9.394 -		return (lba48bit) ? WIN_WRITEDMA_EXT : WIN_WRITEDMA;
   9.395 -	else if ((cmd == WRITE) && (drive->mult_count))
   9.396 -		return (lba48bit) ? WIN_MULTWRITE_EXT : WIN_MULTWRITE;
   9.397 -	else if (cmd == WRITE)
   9.398 -		return (lba48bit) ? WIN_WRITE_EXT : WIN_WRITE;
   9.399 -	else
   9.400 -		return WIN_NOP;
   9.401 -}
   9.402 -
   9.403 -static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
   9.404 -{
   9.405 -	struct hd_drive_task_hdr	taskfile;
   9.406 -	struct hd_drive_hob_hdr		hobfile;
   9.407 -	ide_task_t			args;
   9.408 -
   9.409 -	task_ioreg_t command	= get_command(drive, rq->cmd);
   9.410 -	unsigned int track	= (block / drive->sect);
   9.411 -	unsigned int sect	= (block % drive->sect) + 1;
   9.412 -	unsigned int head	= (track % drive->head);
   9.413 -	unsigned int cyl	= (track / drive->head);
   9.414 -
   9.415 -	memset(&taskfile, 0, sizeof(task_struct_t));
   9.416 -	memset(&hobfile, 0, sizeof(hob_struct_t));
   9.417 -
   9.418 -	taskfile.sector_count	= (rq->nr_sectors==256)?0x00:rq->nr_sectors;
   9.419 -	taskfile.sector_number	= sect;
   9.420 -	taskfile.low_cylinder	= cyl;
   9.421 -	taskfile.high_cylinder	= (cyl>>8);
   9.422 -	taskfile.device_head	= head;
   9.423 -	taskfile.device_head	|= drive->select.all;
   9.424 -	taskfile.command	= command;
   9.425 -
   9.426 -#ifdef DEBUG
   9.427 -	printk("%s: %sing: ", drive->name, (rq->cmd==READ) ? "read" : "writ");
   9.428 -	if (lba)	printk("LBAsect=%lld, ", block);
   9.429 -	else		printk("CHS=%d/%d/%d, ", cyl, head, sect);
   9.430 -	printk("sectors=%ld, ", rq->nr_sectors);
   9.431 -	printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);
   9.432 -#endif
   9.433 -
   9.434 -	memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
   9.435 -	memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
   9.436 -	args.command_type	= ide_cmd_type_parser(&args);
   9.437 -	args.prehandler		= ide_pre_handler_parser(&taskfile, &hobfile);
   9.438 -	args.handler		= ide_handler_parser(&taskfile, &hobfile);
   9.439 -	args.posthandler	= NULL;
   9.440 -	args.rq			= (struct request *) rq;
   9.441 -	args.block		= block;
   9.442 -	rq->special		= NULL;
   9.443 -	rq->special		= (ide_task_t *)&args;
   9.444 -
   9.445 -	return do_rw_taskfile(drive, &args);
   9.446 -}
   9.447 -
   9.448 -static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
   9.449 -{
   9.450 -	struct hd_drive_task_hdr	taskfile;
   9.451 -	struct hd_drive_hob_hdr		hobfile;
   9.452 -	ide_task_t			args;
   9.453 -
   9.454 -	task_ioreg_t command	= get_command(drive, rq->cmd);
   9.455 -
   9.456 -	memset(&taskfile, 0, sizeof(task_struct_t));
   9.457 -	memset(&hobfile, 0, sizeof(hob_struct_t));
   9.458 -
   9.459 -	taskfile.sector_count	= (rq->nr_sectors==256)?0x00:rq->nr_sectors;
   9.460 -	taskfile.sector_number	= block;
   9.461 -	taskfile.low_cylinder	= (block>>=8);
   9.462 -	taskfile.high_cylinder	= (block>>=8);
   9.463 -	taskfile.device_head	= ((block>>8)&0x0f);
   9.464 -	taskfile.device_head	|= drive->select.all;
   9.465 -	taskfile.command	= command;
   9.466 -
   9.467 -
   9.468 -#ifdef DEBUG
   9.469 -	printk("%s: %sing: ", drive->name, (rq->cmd==READ) ? "read" : "writ");
   9.470 -	if (lba)	printk("LBAsect=%lld, ", block);
   9.471 -	else		printk("CHS=%d/%d/%d, ", cyl, head, sect);
   9.472 -	printk("sectors=%ld, ", rq->nr_sectors);
   9.473 -	printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);
   9.474 -#endif
   9.475 -
   9.476 -	memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
   9.477 -	memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
   9.478 -	args.command_type	= ide_cmd_type_parser(&args);
   9.479 -	args.prehandler		= ide_pre_handler_parser(&taskfile, &hobfile);
   9.480 -	args.handler		= ide_handler_parser(&taskfile, &hobfile);
   9.481 -	args.posthandler	= NULL;
   9.482 -	args.rq			= (struct request *) rq;
   9.483 -	args.block		= block;
   9.484 -	rq->special		= NULL;
   9.485 -	rq->special		= (ide_task_t *)&args;
   9.486 -
   9.487 -	return do_rw_taskfile(drive, &args);
   9.488 -}
   9.489 -
   9.490 -/*
   9.491 - * 268435455  == 137439 MB or 28bit limit
   9.492 - * 320173056  == 163929 MB or 48bit addressing
   9.493 - * 1073741822 == 549756 MB or 48bit addressing fake drive
   9.494 - */
   9.495 -
   9.496 -static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block)
   9.497 -{
   9.498 -	struct hd_drive_task_hdr	taskfile;
   9.499 -	struct hd_drive_hob_hdr		hobfile;
   9.500 -	ide_task_t			args;
   9.501 -
   9.502 -	task_ioreg_t command	= get_command(drive, rq->cmd);
   9.503 -
   9.504 -	memset(&taskfile, 0, sizeof(task_struct_t));
   9.505 -	memset(&hobfile, 0, sizeof(hob_struct_t));
   9.506 -
   9.507 -	taskfile.sector_count	= rq->nr_sectors;
   9.508 -	hobfile.sector_count	= (rq->nr_sectors>>8);
   9.509 -
   9.510 -	if (rq->nr_sectors == 65536) {
   9.511 -		taskfile.sector_count	= 0x00;
   9.512 -		hobfile.sector_count	= 0x00;
   9.513 -	}
   9.514 -
   9.515 -	taskfile.sector_number	= block;	/* low lba */
   9.516 -	taskfile.low_cylinder	= (block>>=8);	/* mid lba */
   9.517 -	taskfile.high_cylinder	= (block>>=8);	/* hi  lba */
   9.518 -	hobfile.sector_number	= (block>>=8);	/* low lba */
   9.519 -	hobfile.low_cylinder	= (block>>=8);	/* mid lba */
   9.520 -	hobfile.high_cylinder	= (block>>=8);	/* hi  lba */
   9.521 -	taskfile.device_head	= drive->select.all;
   9.522 -	hobfile.device_head	= taskfile.device_head;
   9.523 -	hobfile.control		= (drive->ctl|0x80);
   9.524 -	taskfile.command	= command;
   9.525 -
   9.526 -#ifdef DEBUG
   9.527 -	printk("%s: %sing: ", drive->name, (rq->cmd==READ) ? "read" : "writ");
   9.528 -	if (lba)	printk("LBAsect=%lld, ", block);
   9.529 -	else		printk("CHS=%d/%d/%d, ", cyl, head, sect);
   9.530 -	printk("sectors=%ld, ", rq->nr_sectors);
   9.531 -	printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);
   9.532 -#endif
   9.533 -
   9.534 -	memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
   9.535 -	memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
   9.536 -	args.command_type	= ide_cmd_type_parser(&args);
   9.537 -	args.prehandler		= ide_pre_handler_parser(&taskfile, &hobfile);
   9.538 -	args.handler		= ide_handler_parser(&taskfile, &hobfile);
   9.539 -	args.posthandler	= NULL;
   9.540 -	args.rq			= (struct request *) rq;
   9.541 -	args.block		= block;
   9.542 -	rq->special		= NULL;
   9.543 -	rq->special		= (ide_task_t *)&args;
   9.544 -
   9.545 -	return do_rw_taskfile(drive, &args);
   9.546 -}
   9.547 -
   9.548 -#else /* !__TASKFILE__IO */
   9.549 -/*
   9.550 - * do_rw_disk() issues READ and WRITE commands to a disk,
   9.551 - * using LBA if supported, or CHS otherwise, to address sectors.
   9.552 - * It also takes care of issuing special DRIVE_CMDs.
   9.553 - */
   9.554 -static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
   9.555 -{
   9.556 -	if (IDE_CONTROL_REG)
   9.557 -		OUT_BYTE(drive->ctl,IDE_CONTROL_REG);
   9.558 -
   9.559 -#ifdef CONFIG_BLK_DEV_PDC4030
   9.560 -	if (drive->select.b.lba || IS_PDC4030_DRIVE) {
   9.561 -#else /* !CONFIG_BLK_DEV_PDC4030 */
   9.562 -	if (drive->select.b.lba) {
   9.563 -#endif /* CONFIG_BLK_DEV_PDC4030 */
   9.564 -
   9.565 -		if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) {
   9.566 -			task_ioreg_t tasklets[10];
   9.567 -
   9.568 -			tasklets[0] = 0;
   9.569 -			tasklets[1] = 0;
   9.570 -			tasklets[2] = rq->nr_sectors;
   9.571 -			tasklets[3] = (rq->nr_sectors>>8);
   9.572 -			if (rq->nr_sectors == 65536) {
   9.573 -				tasklets[2] = 0x00;
   9.574 -				tasklets[3] = 0x00;
   9.575 -			}
   9.576 -			tasklets[4] = (task_ioreg_t) block;
   9.577 -			tasklets[5] = (task_ioreg_t) (block>>8);
   9.578 -			tasklets[6] = (task_ioreg_t) (block>>16);
   9.579 -			tasklets[7] = (task_ioreg_t) (block>>24);
   9.580 -			tasklets[8] = (task_ioreg_t) 0;
   9.581 -			tasklets[9] = (task_ioreg_t) 0;
   9.582 -//			tasklets[8] = (task_ioreg_t) (block>>32);
   9.583 -//			tasklets[9] = (task_ioreg_t) (block>>40);
   9.584 -#ifdef DEBUG
   9.585 -			printk("%s: %sing: LBAsect=%lu, sectors=%ld, buffer=0x%08lx, LBAsect=0x%012lx\n",
   9.586 -				drive->name,
   9.587 -				(rq->cmd==READ)?"read":"writ",
   9.588 -				block,
   9.589 -				rq->nr_sectors,
   9.590 -				(unsigned long) rq->buffer,
   9.591 -				block);
   9.592 -			printk("%s: 0x%02x%02x 0x%02x%02x%02x%02x%02x%02x\n",
   9.593 -				drive->name, tasklets[3], tasklets[2],
   9.594 -				tasklets[9], tasklets[8], tasklets[7],
   9.595 -				tasklets[6], tasklets[5], tasklets[4]);
   9.596 -#endif
   9.597 -			OUT_BYTE(tasklets[1], IDE_FEATURE_REG);
   9.598 -			OUT_BYTE(tasklets[3], IDE_NSECTOR_REG);
   9.599 -			OUT_BYTE(tasklets[7], IDE_SECTOR_REG);
   9.600 -			OUT_BYTE(tasklets[8], IDE_LCYL_REG);
   9.601 -			OUT_BYTE(tasklets[9], IDE_HCYL_REG);
   9.602 -
   9.603 -			OUT_BYTE(tasklets[0], IDE_FEATURE_REG);
   9.604 -			OUT_BYTE(tasklets[2], IDE_NSECTOR_REG);
   9.605 -			OUT_BYTE(tasklets[4], IDE_SECTOR_REG);
   9.606 -			OUT_BYTE(tasklets[5], IDE_LCYL_REG);
   9.607 -			OUT_BYTE(tasklets[6], IDE_HCYL_REG);
   9.608 -			OUT_BYTE(0x00|drive->select.all,IDE_SELECT_REG);
   9.609 -		} else {
   9.610 -#ifdef DEBUG
   9.611 -			printk("%s: %sing: LBAsect=%ld, sectors=%ld, buffer=0x%08lx\n",
   9.612 -				drive->name, (rq->cmd==READ)?"read":"writ",
   9.613 -				block, rq->nr_sectors, (unsigned long) rq->buffer);
   9.614 -#endif
   9.615 -			OUT_BYTE(0x00, IDE_FEATURE_REG);
   9.616 -			OUT_BYTE((rq->nr_sectors==256)?0x00:rq->nr_sectors,IDE_NSECTOR_REG);
   9.617 -			OUT_BYTE(block,IDE_SECTOR_REG);
   9.618 -			OUT_BYTE(block>>=8,IDE_LCYL_REG);
   9.619 -			OUT_BYTE(block>>=8,IDE_HCYL_REG);
   9.620 -			OUT_BYTE(((block>>8)&0x0f)|drive->select.all,IDE_SELECT_REG);
   9.621 -		}
   9.622 -	} else {
   9.623 -		unsigned int sect,head,cyl,track;
   9.624 -		track = block / drive->sect;
   9.625 -		sect  = block % drive->sect + 1;
   9.626 -		OUT_BYTE(sect,IDE_SECTOR_REG);
   9.627 -		head  = track % drive->head;
   9.628 -		cyl   = track / drive->head;
   9.629 -
   9.630 -		OUT_BYTE(0x00, IDE_FEATURE_REG);
   9.631 -		OUT_BYTE((rq->nr_sectors==256)?0x00:rq->nr_sectors,IDE_NSECTOR_REG);
   9.632 -		OUT_BYTE(cyl,IDE_LCYL_REG);
   9.633 -		OUT_BYTE(cyl>>8,IDE_HCYL_REG);
   9.634 -		OUT_BYTE(head|drive->select.all,IDE_SELECT_REG);
   9.635 -#ifdef DEBUG
   9.636 -		printk("%s: %sing: CHS=%d/%d/%d, sectors=%ld, buffer=0x%08lx\n",
   9.637 -			drive->name, (rq->cmd==READ)?"read":"writ", cyl,
   9.638 -			head, sect, rq->nr_sectors, (unsigned long) rq->buffer);
   9.639 -#endif
   9.640 -	}
   9.641 -#ifdef CONFIG_BLK_DEV_PDC4030
   9.642 -	if (IS_PDC4030_DRIVE) {
   9.643 -		extern ide_startstop_t do_pdc4030_io(ide_drive_t *, struct request *);
   9.644 -		return do_pdc4030_io (drive, rq);
   9.645 -	}
   9.646 -#endif /* CONFIG_BLK_DEV_PDC4030 */
   9.647 -	if (rq->cmd == READ) {
   9.648 -#ifdef CONFIG_BLK_DEV_IDEDMA
   9.649 -		if (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_read, drive)))
   9.650 -			return ide_started;
   9.651 -#endif /* CONFIG_BLK_DEV_IDEDMA */
   9.652 -		ide_set_handler(drive, &read_intr, WAIT_CMD, NULL);
   9.653 -		if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) {
   9.654 -			OUT_BYTE(drive->mult_count ? WIN_MULTREAD_EXT : WIN_READ_EXT, IDE_COMMAND_REG);
   9.655 -		} else {
   9.656 -			OUT_BYTE(drive->mult_count ? WIN_MULTREAD : WIN_READ, IDE_COMMAND_REG);
   9.657 -		}
   9.658 -		return ide_started;
   9.659 -	}
   9.660 -	if (rq->cmd == WRITE) {
   9.661 -		ide_startstop_t startstop;
   9.662 -#ifdef CONFIG_BLK_DEV_IDEDMA
   9.663 -		if (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_write, drive)))
   9.664 -			return ide_started;
   9.665 -#endif /* CONFIG_BLK_DEV_IDEDMA */
   9.666 -		if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) {
   9.667 -			OUT_BYTE(drive->mult_count ? WIN_MULTWRITE_EXT : WIN_WRITE_EXT, IDE_COMMAND_REG);
   9.668 -		} else {
   9.669 -			OUT_BYTE(drive->mult_count ? WIN_MULTWRITE : WIN_WRITE, IDE_COMMAND_REG);
   9.670 -		}
   9.671 -		if (ide_wait_stat(&startstop, drive, DATA_READY, drive->bad_wstat, WAIT_DRQ)) {
   9.672 -			printk(KERN_ERR "%s: no DRQ after issuing %s\n", drive->name,
   9.673 -				drive->mult_count ? "MULTWRITE" : "WRITE");
   9.674 -			return startstop;
   9.675 -		}
   9.676 -		if (!drive->unmask)
   9.677 -			__cli();	/* local CPU only */
   9.678 -		if (drive->mult_count) {
   9.679 -			ide_hwgroup_t *hwgroup = HWGROUP(drive);
   9.680 -	/*
   9.681 -	 * Ugh.. this part looks ugly because we MUST set up
   9.682 -	 * the interrupt handler before outputting the first block
   9.683 -	 * of data to be written.  If we hit an error (corrupted buffer list)
   9.684 -	 * in ide_multwrite(), then we need to remove the handler/timer
   9.685 -	 * before returning.  Fortunately, this NEVER happens (right?).
   9.686 -	 *
   9.687 -	 * Except when you get an error it seems...
   9.688 -	 */
   9.689 -			hwgroup->wrq = *rq; /* scratchpad */
   9.690 -			ide_set_handler(drive, &multwrite_intr, WAIT_CMD, NULL);
   9.691 -			if (ide_multwrite(drive, drive->mult_count)) {
   9.692 -				unsigned long flags;
   9.693 -				spin_lock_irqsave(&io_request_lock, flags);
   9.694 -				hwgroup->handler = NULL;
   9.695 -				del_timer(&hwgroup->timer);
   9.696 -				spin_unlock_irqrestore(&io_request_lock, flags);
   9.697 -				return ide_stopped;
   9.698 -			}
   9.699 -		} else {
   9.700 -			ide_set_handler (drive, &write_intr, WAIT_CMD, NULL);
   9.701 -			idedisk_output_data(drive, rq->buffer, SECTOR_WORDS);
   9.702 -		}
   9.703 -		return ide_started;
   9.704 -	}
   9.705 -	printk(KERN_ERR "%s: bad command: %d\n", drive->name, rq->cmd);
   9.706 -	ide_end_request(0, HWGROUP(drive));
   9.707 -	return ide_stopped;
   9.708 -}
   9.709 -
   9.710 -#endif /* __TASKFILE__IO */
   9.711 -
   9.712 -static int idedisk_open (struct inode *inode, struct file *filp, ide_drive_t *drive)
   9.713 -{
   9.714 -	MOD_INC_USE_COUNT;
   9.715 -	if (drive->removable && drive->usage == 1) {
   9.716 -		struct hd_drive_task_hdr taskfile;
   9.717 -		struct hd_drive_hob_hdr hobfile;
   9.718 -		memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
   9.719 -		memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
   9.720 -		taskfile.command = WIN_DOORLOCK;
   9.721 -		check_disk_change(inode->i_rdev);
   9.722 -		/*
   9.723 -		 * Ignore the return code from door_lock,
   9.724 -		 * since the open() has already succeeded,
   9.725 -		 * and the door_lock is irrelevant at this point.
   9.726 -		 */
   9.727 -		if (drive->doorlocking && ide_wait_taskfile(drive, &taskfile, &hobfile, NULL))
   9.728 -			drive->doorlocking = 0;
   9.729 -	}
   9.730 -	return 0;
   9.731 -}
   9.732 -
   9.733 -static int do_idedisk_flushcache(ide_drive_t *drive);
   9.734 -
   9.735 -static void idedisk_release (struct inode *inode, struct file *filp, ide_drive_t *drive)
   9.736 -{
   9.737 -	if (drive->removable && !drive->usage) {
   9.738 -		struct hd_drive_task_hdr taskfile;
   9.739 -		struct hd_drive_hob_hdr hobfile;
   9.740 -		memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
   9.741 -		memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
   9.742 -		taskfile.command = WIN_DOORUNLOCK;
   9.743 -		invalidate_bdev(inode->i_bdev, 0);
   9.744 -		if (drive->doorlocking && ide_wait_taskfile(drive, &taskfile, &hobfile, NULL))
   9.745 -			drive->doorlocking = 0;
   9.746 -	}
   9.747 -	if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
   9.748 -		if (do_idedisk_flushcache(drive))
   9.749 -			printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
   9.750 -				drive->name);
   9.751 -	MOD_DEC_USE_COUNT;
   9.752 -}
   9.753 -
   9.754 -static int idedisk_media_change (ide_drive_t *drive)
   9.755 -{
   9.756 -	return drive->removable;	/* if removable, always assume it was changed */
   9.757 -}
   9.758 -
   9.759 -static void idedisk_revalidate (ide_drive_t *drive)
   9.760 -{
   9.761 -	grok_partitions(HWIF(drive)->gd, drive->select.b.unit,
   9.762 -			1<<PARTN_BITS,
   9.763 -			current_capacity(drive));
   9.764 -}
   9.765 -
   9.766 -/*
   9.767 - * Queries for true maximum capacity of the drive.
   9.768 - * Returns maximum LBA address (> 0) of the drive, 0 if failed.
   9.769 - */
   9.770 -static unsigned long idedisk_read_native_max_address(ide_drive_t *drive)
   9.771 -{
   9.772 -	ide_task_t args;
   9.773 -	unsigned long addr = 0;
   9.774 -
   9.775 -	if (!(drive->id->command_set_1 & 0x0400) &&
   9.776 -	    !(drive->id->cfs_enable_2 & 0x0100))
   9.777 -		return addr;
   9.778 -
   9.779 -	/* Create IDE/ATA command request structure */
   9.780 -	memset(&args, 0, sizeof(ide_task_t));
   9.781 -	args.tfRegister[IDE_SELECT_OFFSET]	= 0x40;
   9.782 -	args.tfRegister[IDE_COMMAND_OFFSET]	= WIN_READ_NATIVE_MAX;
   9.783 -	args.handler				= task_no_data_intr;
   9.784 -
   9.785 -	/* submit command request */
   9.786 -	ide_raw_taskfile(drive, &args, NULL);
   9.787 -
   9.788 -	/* if OK, compute maximum address value */
   9.789 -	if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
   9.790 -		addr = ((args.tfRegister[IDE_SELECT_OFFSET] & 0x0f) << 24)
   9.791 -		     | ((args.tfRegister[  IDE_HCYL_OFFSET]       ) << 16)
   9.792 -		     | ((args.tfRegister[  IDE_LCYL_OFFSET]       ) <<  8)
   9.793 -		     | ((args.tfRegister[IDE_SECTOR_OFFSET]       ));
   9.794 -	}
   9.795 -	addr++;	/* since the return value is (maxlba - 1), we add 1 */
   9.796 -	return addr;
   9.797 -}
   9.798 -
   9.799 -static unsigned long long idedisk_read_native_max_address_ext(ide_drive_t *drive)
   9.800 -{
   9.801 -	ide_task_t args;
   9.802 -	unsigned long long addr = 0;
   9.803 -
   9.804 -	/* Create IDE/ATA command request structure */
   9.805 -	memset(&args, 0, sizeof(ide_task_t));
   9.806 -
   9.807 -	args.tfRegister[IDE_SELECT_OFFSET]	= 0x40;
   9.808 -	args.tfRegister[IDE_COMMAND_OFFSET]	= WIN_READ_NATIVE_MAX_EXT;
   9.809 -	args.handler				= task_no_data_intr;
   9.810 -
   9.811 -        /* submit command request */
   9.812 -        ide_raw_taskfile(drive, &args, NULL);
   9.813 -
   9.814 -	/* if OK, compute maximum address value */
   9.815 -	if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
   9.816 -		u32 high = ((args.hobRegister[IDE_HCYL_OFFSET_HOB])<<16) |
   9.817 -			   ((args.hobRegister[IDE_LCYL_OFFSET_HOB])<<8) |
   9.818 -  			    (args.hobRegister[IDE_SECTOR_OFFSET_HOB]); 
   9.819 -		u32 low  = ((args.tfRegister[IDE_HCYL_OFFSET])<<16) |
   9.820 -			   ((args.tfRegister[IDE_LCYL_OFFSET])<<8) |
   9.821 -			    (args.tfRegister[IDE_SECTOR_OFFSET]);
   9.822 -		addr = ((__u64)high << 24) | low;
   9.823 -	}
   9.824 -	addr++;	/* since the return value is (maxlba - 1), we add 1 */
   9.825 -	return addr;
   9.826 -}
   9.827 -
   9.828 -#ifdef CONFIG_IDEDISK_STROKE
   9.829 -/*
   9.830 - * Sets maximum virtual LBA address of the drive.
   9.831 - * Returns new maximum virtual LBA address (> 0) or 0 on failure.
   9.832 - */
   9.833 -static unsigned long idedisk_set_max_address(ide_drive_t *drive, unsigned long addr_req)
   9.834 -{
   9.835 -	ide_task_t args;
   9.836 -	unsigned long addr_set = 0;
   9.837 -	
   9.838 -	addr_req--;
   9.839 -	/* Create IDE/ATA command request structure */
   9.840 -	memset(&args, 0, sizeof(ide_task_t));
   9.841 -	args.tfRegister[IDE_SECTOR_OFFSET]	= ((addr_req >>  0) & 0xff);
   9.842 -	args.tfRegister[IDE_LCYL_OFFSET]	= ((addr_req >>  8) & 0xff);
   9.843 -	args.tfRegister[IDE_HCYL_OFFSET]	= ((addr_req >> 16) & 0xff);
   9.844 -	args.tfRegister[IDE_SELECT_OFFSET]	= ((addr_req >> 24) & 0x0f) | 0x40;
   9.845 -	args.tfRegister[IDE_COMMAND_OFFSET]	= WIN_SET_MAX;
   9.846 -	args.handler				= task_no_data_intr;
   9.847 -	/* submit command request */
   9.848 -	ide_raw_taskfile(drive, &args, NULL);
   9.849 -	/* if OK, read new maximum address value */
   9.850 -	if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
   9.851 -		addr_set = ((args.tfRegister[IDE_SELECT_OFFSET] & 0x0f) << 24)
   9.852 -			 | ((args.tfRegister[  IDE_HCYL_OFFSET]       ) << 16)
   9.853 -			 | ((args.tfRegister[  IDE_LCYL_OFFSET]       ) <<  8)
   9.854 -			 | ((args.tfRegister[IDE_SECTOR_OFFSET]       ));
   9.855 -	}
   9.856 -	addr_set++;
   9.857 -	return addr_set;
   9.858 -}
   9.859 -
   9.860 -static unsigned long long idedisk_set_max_address_ext(ide_drive_t *drive, unsigned long long addr_req)
   9.861 -{
   9.862 -	ide_task_t args;
   9.863 -	unsigned long long addr_set = 0;
   9.864 -
   9.865 -	addr_req--;
   9.866 -	/* Create IDE/ATA command request structure */
   9.867 -	memset(&args, 0, sizeof(ide_task_t));
   9.868 -	args.tfRegister[IDE_SECTOR_OFFSET]	= ((addr_req >>  0) & 0xff);
   9.869 -	args.tfRegister[IDE_LCYL_OFFSET]	= ((addr_req >>= 8) & 0xff);
   9.870 -	args.tfRegister[IDE_HCYL_OFFSET]	= ((addr_req >>= 8) & 0xff);
   9.871 -	args.tfRegister[IDE_SELECT_OFFSET]      = 0x40;
   9.872 -	args.tfRegister[IDE_COMMAND_OFFSET]	= WIN_SET_MAX_EXT;
   9.873 -	args.hobRegister[IDE_SECTOR_OFFSET_HOB]	= ((addr_req >>= 8) & 0xff);
   9.874 -	args.hobRegister[IDE_LCYL_OFFSET_HOB]	= ((addr_req >>= 8) & 0xff);
   9.875 -	args.hobRegister[IDE_HCYL_OFFSET_HOB]	= ((addr_req >>= 8) & 0xff);
   9.876 -	args.hobRegister[IDE_SELECT_OFFSET_HOB]	= 0x40;
   9.877 -	args.hobRegister[IDE_CONTROL_OFFSET_HOB]= (drive->ctl|0x80);
   9.878 -        args.handler				= task_no_data_intr;
   9.879 -	/* submit command request */
   9.880 -	ide_raw_taskfile(drive, &args, NULL);
   9.881 -	/* if OK, compute maximum address value */
   9.882 -	if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
   9.883 -		u32 high = ((args.hobRegister[IDE_HCYL_OFFSET_HOB])<<16) |
   9.884 -			   ((args.hobRegister[IDE_LCYL_OFFSET_HOB])<<8) |
   9.885 -			    (args.hobRegister[IDE_SECTOR_OFFSET_HOB]);
   9.886 -		u32 low  = ((args.tfRegister[IDE_HCYL_OFFSET])<<16) |
   9.887 -			   ((args.tfRegister[IDE_LCYL_OFFSET])<<8) |
   9.888 -			    (args.tfRegister[IDE_SECTOR_OFFSET]);
   9.889 -		addr_set = ((__u64)high << 24) | low;
   9.890 -	}
   9.891 -	return addr_set;
   9.892 -}
   9.893 -
   9.894 -/*
   9.895 - * Tests if the drive supports Host Protected Area feature.
   9.896 - * Returns true if supported, false otherwise.
   9.897 - */
   9.898 -static inline int idedisk_supports_host_protected_area(ide_drive_t *drive)
   9.899 -{
   9.900 -	int flag = (drive->id->cfs_enable_1 & 0x0400) ? 1 : 0;
   9.901 -	printk("%s: host protected area => %d\n", drive->name, flag);
   9.902 -	return flag;
   9.903 -}
   9.904 -
   9.905 -#endif /* CONFIG_IDEDISK_STROKE */
   9.906 -
   9.907 -/*
   9.908 - * Compute drive->capacity, the full capacity of the drive
   9.909 - * Called with drive->id != NULL.
   9.910 - *
   9.911 - * To compute capacity, this uses either of
   9.912 - *
   9.913 - *    1. CHS value set by user       (whatever user sets will be trusted)
   9.914 - *    2. LBA value from target drive (require new ATA feature)
   9.915 - *    3. LBA value from system BIOS  (new one is OK, old one may break)
   9.916 - *    4. CHS value from system BIOS  (traditional style)
   9.917 - *
   9.918 - * in above order (i.e., if value of higher priority is available,
   9.919 - * reset will be ignored).
   9.920 - */
   9.921 -static void init_idedisk_capacity (ide_drive_t  *drive)
   9.922 -{
   9.923 -	struct hd_driveid *id = drive->id;
   9.924 -	unsigned long capacity = drive->cyl * drive->head * drive->sect;
   9.925 -	unsigned long set_max = idedisk_read_native_max_address(drive);
   9.926 -	unsigned long long capacity_2 = capacity;
   9.927 -	unsigned long long set_max_ext;
   9.928 -
   9.929 -	drive->capacity48 = 0;
   9.930 -	drive->select.b.lba = 0;
   9.931 -
   9.932 -	if (id->cfs_enable_2 & 0x0400) {
   9.933 -		capacity_2 = id->lba_capacity_2;
   9.934 -		drive->head		= drive->bios_head = 255;
   9.935 -		drive->sect		= drive->bios_sect = 63;
   9.936 -		drive->cyl = (unsigned int) capacity_2 / (drive->head * drive->sect);
   9.937 -		drive->select.b.lba	= 1;
   9.938 -		set_max_ext = idedisk_read_native_max_address_ext(drive);
   9.939 -		if (set_max_ext > capacity_2) {
   9.940 -#ifdef CONFIG_IDEDISK_STROKE
   9.941 -			set_max_ext = idedisk_read_native_max_address_ext(drive);
   9.942 -			set_max_ext = idedisk_set_max_address_ext(drive, set_max_ext);
   9.943 -			if (set_max_ext) {
   9.944 -				drive->capacity48 = capacity_2 = set_max_ext;
   9.945 -				drive->cyl = (unsigned int) set_max_ext / (drive->head * drive->sect);
   9.946 -				drive->select.b.lba = 1;
   9.947 -				drive->id->lba_capacity_2 = capacity_2;
   9.948 -                        }
   9.949 -#else /* !CONFIG_IDEDISK_STROKE */
   9.950 -			printk("%s: setmax_ext LBA %llu, native  %llu\n",
   9.951 -				drive->name, set_max_ext, capacity_2);
   9.952 -#endif /* CONFIG_IDEDISK_STROKE */
   9.953 -		}
   9.954 -		drive->bios_cyl		= drive->cyl;
   9.955 -		drive->capacity48	= capacity_2;
   9.956 -		drive->capacity		= (unsigned long) capacity_2;
   9.957 -		return;
   9.958 -	/* Determine capacity, and use LBA if the drive properly supports it */
   9.959 -	} else if ((id->capability & 2) && lba_capacity_is_ok(id)) {
   9.960 -		capacity = id->lba_capacity;
   9.961 -		drive->cyl = capacity / (drive->head * drive->sect);
   9.962 -		drive->select.b.lba = 1;
   9.963 -	}
   9.964 -
   9.965 -	if (set_max > capacity) {
   9.966 -#ifdef CONFIG_IDEDISK_STROKE
   9.967 -		set_max = idedisk_read_native_max_address(drive);
   9.968 -		set_max = idedisk_set_max_address(drive, set_max);
   9.969 -		if (set_max) {
   9.970 -			drive->capacity = capacity = set_max;
   9.971 -			drive->cyl = set_max / (drive->head * drive->sect);
   9.972 -			drive->select.b.lba = 1;
   9.973 -			drive->id->lba_capacity = capacity;
   9.974 -		}
   9.975 -#else /* !CONFIG_IDEDISK_STROKE */
   9.976 -		printk("%s: setmax LBA %lu, native  %lu\n",
   9.977 -			drive->name, set_max, capacity);
   9.978 -#endif /* CONFIG_IDEDISK_STROKE */
   9.979 -	}
   9.980 -
   9.981 -	drive->capacity = capacity;
   9.982 -
   9.983 -	if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)) {
   9.984 -                drive->capacity48 = id->lba_capacity_2;
   9.985 -		drive->head = 255;
   9.986 -		drive->sect = 63;
   9.987 -		drive->cyl = (unsigned long)(drive->capacity48) / (drive->head * drive->sect);
   9.988 -	}
   9.989 -}
   9.990 -
   9.991 -static unsigned long idedisk_capacity (ide_drive_t *drive)
   9.992 -{
   9.993 -	if (drive->id->cfs_enable_2 & 0x0400)
   9.994 -		return (drive->capacity48 - drive->sect0);
   9.995 -	return (drive->capacity - drive->sect0);
   9.996 -}
   9.997 -
   9.998 -static ide_startstop_t idedisk_special (ide_drive_t *drive)
   9.999 -{
  9.1000 -	special_t *s = &drive->special;
  9.1001 -
  9.1002 -	if (s->b.set_geometry) {
  9.1003 -		struct hd_drive_task_hdr taskfile;
  9.1004 -		struct hd_drive_hob_hdr hobfile;
  9.1005 -		ide_handler_t *handler = NULL;
  9.1006 -
  9.1007 -		memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1008 -		memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1009 -
  9.1010 -		s->b.set_geometry	= 0;
  9.1011 -		taskfile.sector_number	= drive->sect;
  9.1012 -		taskfile.low_cylinder	= drive->cyl;
  9.1013 -		taskfile.high_cylinder	= drive->cyl>>8;
  9.1014 -		taskfile.device_head	= ((drive->head-1)|drive->select.all)&0xBF;
  9.1015 -		if (!IS_PDC4030_DRIVE) {
  9.1016 -			taskfile.sector_count	= drive->sect;
  9.1017 -			taskfile.command	= WIN_SPECIFY;
  9.1018 -			handler			= ide_handler_parser(&taskfile, &hobfile);
  9.1019 -		}
  9.1020 -		do_taskfile(drive, &taskfile, &hobfile, handler);
  9.1021 -	} else if (s->b.recalibrate) {
  9.1022 -		s->b.recalibrate = 0;
  9.1023 -		if (!IS_PDC4030_DRIVE) {
  9.1024 -			struct hd_drive_task_hdr taskfile;
  9.1025 -			struct hd_drive_hob_hdr hobfile;
  9.1026 -			memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1027 -			memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1028 -			taskfile.sector_count	= drive->sect;
  9.1029 -			taskfile.command	= WIN_RESTORE;
  9.1030 -			do_taskfile(drive, &taskfile, &hobfile, ide_handler_parser(&taskfile, &hobfile));
  9.1031 -		}
  9.1032 -	} else if (s->b.set_multmode) {
  9.1033 -		s->b.set_multmode = 0;
  9.1034 -		if (drive->id && drive->mult_req > drive->id->max_multsect)
  9.1035 -			drive->mult_req = drive->id->max_multsect;
  9.1036 -		if (!IS_PDC4030_DRIVE) {
  9.1037 -			struct hd_drive_task_hdr taskfile;
  9.1038 -			struct hd_drive_hob_hdr hobfile;
  9.1039 -			memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1040 -			memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1041 -			taskfile.sector_count	= drive->mult_req;
  9.1042 -			taskfile.command	= WIN_SETMULT;
  9.1043 -			do_taskfile(drive, &taskfile, &hobfile, ide_handler_parser(&taskfile, &hobfile));
  9.1044 -		}
  9.1045 -	} else if (s->all) {
  9.1046 -		int special = s->all;
  9.1047 -		s->all = 0;
  9.1048 -		printk(KERN_ERR "%s: bad special flag: 0x%02x\n", drive->name, special);
  9.1049 -		return ide_stopped;
  9.1050 -	}
  9.1051 -	return IS_PDC4030_DRIVE ? ide_stopped : ide_started;
  9.1052 -}
  9.1053 -
  9.1054 -static void idedisk_pre_reset (ide_drive_t *drive)
  9.1055 -{
  9.1056 -	int legacy = (drive->id->cfs_enable_2 & 0x0400) ? 0 : 1;
  9.1057 -
  9.1058 -	drive->special.all = 0;
  9.1059 -	drive->special.b.set_geometry = legacy;
  9.1060 -	drive->special.b.recalibrate  = legacy;
  9.1061 -	if (OK_TO_RESET_CONTROLLER)
  9.1062 -		drive->mult_count = 0;
  9.1063 -	if (!drive->keep_settings && !drive->using_dma)
  9.1064 -		drive->mult_req = 0;
  9.1065 -	if (drive->mult_req != drive->mult_count)
  9.1066 -		drive->special.b.set_multmode = 1;
  9.1067 -}
  9.1068 -
  9.1069 -#ifdef CONFIG_PROC_FS
  9.1070 -
  9.1071 -static int smart_enable(ide_drive_t *drive)
  9.1072 -{
  9.1073 -	struct hd_drive_task_hdr taskfile;
  9.1074 -	struct hd_drive_hob_hdr hobfile;
  9.1075 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1076 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1077 -	taskfile.feature	= SMART_ENABLE;
  9.1078 -	taskfile.low_cylinder	= SMART_LCYL_PASS;
  9.1079 -	taskfile.high_cylinder	= SMART_HCYL_PASS;
  9.1080 -	taskfile.command	= WIN_SMART;
  9.1081 -	return ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
  9.1082 -}
  9.1083 -
  9.1084 -static int get_smart_values(ide_drive_t *drive, byte *buf)
  9.1085 -{
  9.1086 -	struct hd_drive_task_hdr taskfile;
  9.1087 -	struct hd_drive_hob_hdr hobfile;
  9.1088 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1089 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1090 -	taskfile.feature	= SMART_READ_VALUES;
  9.1091 -	taskfile.sector_count	= 0x01;
  9.1092 -	taskfile.low_cylinder	= SMART_LCYL_PASS;
  9.1093 -	taskfile.high_cylinder	= SMART_HCYL_PASS;
  9.1094 -	taskfile.command	= WIN_SMART;
  9.1095 -	(void) smart_enable(drive);
  9.1096 -	return ide_wait_taskfile(drive, &taskfile, &hobfile, buf);
  9.1097 -}
  9.1098 -
  9.1099 -static int get_smart_thresholds(ide_drive_t *drive, byte *buf)
  9.1100 -{
  9.1101 -	struct hd_drive_task_hdr taskfile;
  9.1102 -	struct hd_drive_hob_hdr hobfile;
  9.1103 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1104 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1105 -	taskfile.feature	= SMART_READ_THRESHOLDS;
  9.1106 -	taskfile.sector_count	= 0x01;
  9.1107 -	taskfile.low_cylinder	= SMART_LCYL_PASS;
  9.1108 -	taskfile.high_cylinder	= SMART_HCYL_PASS;
  9.1109 -	taskfile.command	= WIN_SMART;
  9.1110 -	(void) smart_enable(drive);
  9.1111 -	return ide_wait_taskfile(drive, &taskfile, &hobfile, buf);
  9.1112 -}
  9.1113 -
  9.1114 -static int proc_idedisk_read_cache
  9.1115 -	(char *page, char **start, off_t off, int count, int *eof, void *data)
  9.1116 -{
  9.1117 -	ide_drive_t	*drive = (ide_drive_t *) data;
  9.1118 -	char		*out = page;
  9.1119 -	int		len;
  9.1120 -
  9.1121 -	if (drive->id)
  9.1122 -		len = sprintf(out,"%i\n", drive->id->buf_size / 2);
  9.1123 -	else
  9.1124 -		len = sprintf(out,"(none)\n");
  9.1125 -	PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
  9.1126 -}
  9.1127 -
  9.1128 -static int proc_idedisk_read_smart_thresholds
  9.1129 -	(char *page, char **start, off_t off, int count, int *eof, void *data)
  9.1130 -{
  9.1131 -	ide_drive_t	*drive = (ide_drive_t *)data;
  9.1132 -	int		len = 0, i = 0;
  9.1133 -
  9.1134 -	if (!get_smart_thresholds(drive, page)) {
  9.1135 -		unsigned short *val = (unsigned short *) page;
  9.1136 -		char *out = ((char *)val) + (SECTOR_WORDS * 4);
  9.1137 -		page = out;
  9.1138 -		do {
  9.1139 -			out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
  9.1140 -			val += 1;
  9.1141 -		} while (i < (SECTOR_WORDS * 2));
  9.1142 -		len = out - page;
  9.1143 -	}
  9.1144 -	PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
  9.1145 -}
  9.1146 -
  9.1147 -static int proc_idedisk_read_smart_values
  9.1148 -	(char *page, char **start, off_t off, int count, int *eof, void *data)
  9.1149 -{
  9.1150 -	ide_drive_t	*drive = (ide_drive_t *)data;
  9.1151 -	int		len = 0, i = 0;
  9.1152 -
  9.1153 -	if (!get_smart_values(drive, page)) {
  9.1154 -		unsigned short *val = (unsigned short *) page;
  9.1155 -		char *out = ((char *)val) + (SECTOR_WORDS * 4);
  9.1156 -		page = out;
  9.1157 -		do {
  9.1158 -			out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
  9.1159 -			val += 1;
  9.1160 -		} while (i < (SECTOR_WORDS * 2));
  9.1161 -		len = out - page;
  9.1162 -	}
  9.1163 -	PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
  9.1164 -}
  9.1165 -
  9.1166 -static ide_proc_entry_t idedisk_proc[] = {
  9.1167 -	{ "cache",		S_IFREG|S_IRUGO,	proc_idedisk_read_cache,		NULL },
  9.1168 -	{ "geometry",		S_IFREG|S_IRUGO,	proc_ide_read_geometry,			NULL },
  9.1169 -	{ "smart_values",	S_IFREG|S_IRUSR,	proc_idedisk_read_smart_values,		NULL },
  9.1170 -	{ "smart_thresholds",	S_IFREG|S_IRUSR,	proc_idedisk_read_smart_thresholds,	NULL },
  9.1171 -	{ NULL, 0, NULL, NULL }
  9.1172 -};
  9.1173 -
  9.1174 -#else
  9.1175 -
  9.1176 -#define	idedisk_proc	NULL
  9.1177 -
  9.1178 -#endif	/* CONFIG_PROC_FS */
  9.1179 -
  9.1180 -static int set_multcount(ide_drive_t *drive, int arg)
  9.1181 -{
  9.1182 -#ifdef __TASKFILE__IO
  9.1183 -	struct hd_drive_task_hdr taskfile;
  9.1184 -	struct hd_drive_hob_hdr hobfile;
  9.1185 -
  9.1186 -	if (drive->special.b.set_multmode)
  9.1187 -		return -EBUSY;
  9.1188 -
  9.1189 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1190 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1191 -	taskfile.sector_count	= drive->mult_req;
  9.1192 -	taskfile.command	= WIN_SETMULT;
  9.1193 -	drive->mult_req		= arg;
  9.1194 -	drive->special.b.set_multmode = 1;
  9.1195 -	ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
  9.1196 -#else /* !__TASKFILE__IO */
  9.1197 -	struct request rq;
  9.1198 -
  9.1199 -	if (drive->special.b.set_multmode)
  9.1200 -		return -EBUSY;
  9.1201 -	ide_init_drive_cmd (&rq);
  9.1202 -	rq.cmd = IDE_DRIVE_CMD;
  9.1203 -	drive->mult_req = arg;
  9.1204 -	drive->special.b.set_multmode = 1;
  9.1205 -	(void) ide_do_drive_cmd (drive, &rq, ide_wait);
  9.1206 -#endif /* __TASKFILE__IO */
  9.1207 -	return (drive->mult_count == arg) ? 0 : -EIO;
  9.1208 -}
  9.1209 -
  9.1210 -static int set_nowerr(ide_drive_t *drive, int arg)
  9.1211 -{
  9.1212 -	if (ide_spin_wait_hwgroup(drive))
  9.1213 -		return -EBUSY;
  9.1214 -	drive->nowerr = arg;
  9.1215 -	drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
  9.1216 -	spin_unlock_irq(&io_request_lock);
  9.1217 -	return 0;
  9.1218 -}
  9.1219 -
  9.1220 -static int write_cache (ide_drive_t *drive, int arg)
  9.1221 -{
  9.1222 -	struct hd_drive_task_hdr taskfile;
  9.1223 -	struct hd_drive_hob_hdr hobfile;
  9.1224 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1225 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1226 -	taskfile.feature	= (arg) ? SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE;
  9.1227 -	taskfile.command	= WIN_SETFEATURES;
  9.1228 -
  9.1229 -	if (!(drive->id->cfs_enable_2 & 0x3000))
  9.1230 -		return 1;
  9.1231 -
  9.1232 -	(void) ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
  9.1233 -	drive->wcache = arg;
  9.1234 -	return 0;
  9.1235 -}
  9.1236 -
  9.1237 -static int do_idedisk_standby (ide_drive_t *drive)
  9.1238 -{
  9.1239 -	struct hd_drive_task_hdr taskfile;
  9.1240 -	struct hd_drive_hob_hdr hobfile;
  9.1241 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1242 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1243 -	taskfile.command	= WIN_STANDBYNOW1;
  9.1244 -	return ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
  9.1245 -}
  9.1246 -
  9.1247 -static int do_idedisk_flushcache (ide_drive_t *drive)
  9.1248 -{
  9.1249 -	struct hd_drive_task_hdr taskfile;
  9.1250 -	struct hd_drive_hob_hdr hobfile;
  9.1251 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1252 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1253 -	if (drive->id->cfs_enable_2 & 0x2400) {
  9.1254 -		taskfile.command	= WIN_FLUSH_CACHE_EXT;
  9.1255 -	} else {
  9.1256 -		taskfile.command	= WIN_FLUSH_CACHE;
  9.1257 -	}
  9.1258 -	return ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
  9.1259 -}
  9.1260 -
  9.1261 -static int set_acoustic (ide_drive_t *drive, int arg)
  9.1262 -{
  9.1263 -	struct hd_drive_task_hdr taskfile;
  9.1264 -	struct hd_drive_hob_hdr hobfile;
  9.1265 -	memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
  9.1266 -	memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
  9.1267 -
  9.1268 -	taskfile.feature	= (arg)?SETFEATURES_EN_AAM:SETFEATURES_DIS_AAM;
  9.1269 -	taskfile.sector_count	= arg;
  9.1270 -
  9.1271 -	taskfile.command	= WIN_SETFEATURES;
  9.1272 -	(void) ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
  9.1273 -	drive->acoustic = arg;
  9.1274 -	return 0;
  9.1275 -}
  9.1276 -
  9.1277 -static int probe_lba_addressing (ide_drive_t *drive, int arg)
  9.1278 -{
  9.1279 -	drive->addressing =  0;
  9.1280 -
  9.1281 -	if (!(drive->id->cfs_enable_2 & 0x0400))
  9.1282 -                return -EIO;
  9.1283 -
  9.1284 -	drive->addressing = arg;
  9.1285 -	return 0;
  9.1286 -}
  9.1287 -
  9.1288 -static int set_lba_addressing (ide_drive_t *drive, int arg)
  9.1289 -{
  9.1290 -	return (probe_lba_addressing(drive, arg));
  9.1291 -}
  9.1292 -
  9.1293 -static void idedisk_add_settings(ide_drive_t *drive)
  9.1294 -{
  9.1295 -	struct hd_driveid *id = drive->id;
  9.1296 -#if 0
  9.1297 -	int major = HWIF(drive)->major;
  9.1298 -	int minor = drive->select.b.unit << PARTN_BITS;
  9.1299 -#endif
  9.1300 -
  9.1301 -	ide_add_setting(drive,	"bios_cyl",		SETTING_RW,					-1,			-1,			TYPE_INT,	0,	65535,				1,	1,	&drive->bios_cyl,		NULL);
  9.1302 -	ide_add_setting(drive,	"bios_head",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	255,				1,	1,	&drive->bios_head,		NULL);
  9.1303 -	ide_add_setting(drive,	"bios_sect",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	63,				1,	1,	&drive->bios_sect,		NULL);
  9.1304 -	ide_add_setting(drive,	"address",		SETTING_RW,					HDIO_GET_ADDRESS,	HDIO_SET_ADDRESS,	TYPE_INTA,	0,	2,				1,	1,	&drive->addressing,	set_lba_addressing);
  9.1305 -	ide_add_setting(drive,	"bswap",		SETTING_READ,					-1,			-1,			TYPE_BYTE,	0,	1,				1,	1,	&drive->bswap,			NULL);
  9.1306 -	ide_add_setting(drive,	"multcount",		id ? SETTING_RW : SETTING_READ,			HDIO_GET_MULTCOUNT,	HDIO_SET_MULTCOUNT,	TYPE_BYTE,	0,	id ? id->max_multsect : 0,	1,	1,	&drive->mult_count,		set_multcount);
  9.1307 -	ide_add_setting(drive,	"nowerr",		SETTING_RW,					HDIO_GET_NOWERR,	HDIO_SET_NOWERR,	TYPE_BYTE,	0,	1,				1,	1,	&drive->nowerr,			set_nowerr);
  9.1308 -#if 0
  9.1309 -	ide_add_setting(drive,	"breada_readahead",	SETTING_RW,					BLKRAGET,		BLKRASET,		TYPE_INT,	0,	255,				1,	1,	&read_ahead[major],		NULL);
  9.1310 -	ide_add_setting(drive,	"file_readahead",	SETTING_RW,					BLKFRAGET,		BLKFRASET,		TYPE_INTA,	0,	4096,			PAGE_SIZE,	1024,	&max_readahead[major][minor],	NULL);
  9.1311 -	ide_add_setting(drive,	"max_kb_per_request",	SETTING_RW,					BLKSECTGET,		BLKSECTSET,		TYPE_INTA,	1,	255,				1,	1,	&max_sectors[major][minor],	NULL);
  9.1312 -#endif
  9.1313 -	ide_add_setting(drive,	"lun",			SETTING_RW,					-1,			-1,			TYPE_INT,	0,	7,				1,	1,	&drive->lun,			NULL);
  9.1314 -	ide_add_setting(drive,	"wcache",		SETTING_RW,					HDIO_GET_WCACHE,	HDIO_SET_WCACHE,	TYPE_BYTE,	0,	1,				1,	1,	&drive->wcache,			write_cache);
  9.1315 -	ide_add_setting(drive,	"acoustic",		SETTING_RW,					HDIO_GET_ACOUSTIC,	HDIO_SET_ACOUSTIC,	TYPE_BYTE,	0,	254,				1,	1,	&drive->acoustic,		set_acoustic);
  9.1316 - 	ide_add_setting(drive,	"failures",		SETTING_RW,					-1,			-1,			TYPE_INT,	0,	65535,				1,	1,	&drive->failures,		NULL);
  9.1317 - 	ide_add_setting(drive,	"max_failures",		SETTING_RW,					-1,			-1,			TYPE_INT,	0,	65535,				1,	1,	&drive->max_failures,		NULL);
  9.1318 -}
  9.1319 -
  9.1320 -static void idedisk_setup (ide_drive_t *drive)
  9.1321 -{
  9.1322 -	int i;
  9.1323 -	
  9.1324 -	struct hd_driveid *id = drive->id;
  9.1325 -	unsigned long capacity;
  9.1326 -	
  9.1327 -	idedisk_add_settings(drive);
  9.1328 -
  9.1329 -	if (id == NULL)
  9.1330 -		return;
  9.1331 -
  9.1332 -	/*
  9.1333 -	 * CompactFlash cards and their brethern look just like hard drives
  9.1334 -	 * to us, but they are removable and don't have a doorlock mechanism.
  9.1335 -	 */
  9.1336 -	if (drive->removable && !drive_is_flashcard(drive)) {
  9.1337 -		/*
  9.1338 -		 * Removable disks (eg. SYQUEST); ignore 'WD' drives 
  9.1339 -		 */
  9.1340 -		if (id->model[0] != 'W' || id->model[1] != 'D') {
  9.1341 -			drive->doorlocking = 1;
  9.1342 -		}
  9.1343 -	}
  9.1344 -	for (i = 0; i < MAX_DRIVES; ++i) {
  9.1345 -		ide_hwif_t *hwif = HWIF(drive);
  9.1346 -
  9.1347 -		if (drive != &hwif->drives[i]) continue;
  9.1348 -#ifdef DEVFS_MUST_DIE
  9.1349 -		hwif->gd->de_arr[i] = drive->de;
  9.1350 -#endif
  9.1351 -		if (drive->removable)
  9.1352 -			hwif->gd->flags[i] |= GENHD_FL_REMOVABLE;
  9.1353 -		break;
  9.1354 -	}
  9.1355 -
  9.1356 -	/* Extract geometry if we did not already have one for the drive */
  9.1357 -	if (!drive->cyl || !drive->head || !drive->sect) {
  9.1358 -		drive->cyl     = drive->bios_cyl  = id->cyls;
  9.1359 -		drive->head    = drive->bios_head = id->heads;
  9.1360 -		drive->sect    = drive->bios_sect = id->sectors;
  9.1361 -	}
  9.1362 -
  9.1363 -	/* Handle logical geometry translation by the drive */
  9.1364 -	if ((id->field_valid & 1) && id->cur_cyls &&
  9.1365 -	    id->cur_heads && (id->cur_heads <= 16) && id->cur_sectors) {
  9.1366 -		drive->cyl  = id->cur_cyls;
  9.1367 -		drive->head = id->cur_heads;
  9.1368 -		drive->sect = id->cur_sectors;
  9.1369 -	}
  9.1370 -
  9.1371 -	/* Use physical geometry if what we have still makes no sense */
  9.1372 -	if (drive->head > 16 && id->heads && id->heads <= 16) {
  9.1373 -		drive->cyl  = id->cyls;
  9.1374 -		drive->head = id->heads;
  9.1375 -		drive->sect = id->sectors;
  9.1376 -	}
  9.1377 -
  9.1378 -	/* calculate drive capacity, and select LBA if possible */
  9.1379 -	init_idedisk_capacity (drive);
  9.1380 -
  9.1381 -	/*
  9.1382 -	 * if possible, give fdisk access to more of the drive,
  9.1383 -	 * by correcting bios_cyls:
  9.1384 -	 */
  9.1385 -	capacity = idedisk_capacity (drive);
  9.1386 -	if ((capacity >= (drive->bios_cyl * drive->bios_sect * drive->bios_head)) &&
  9.1387 -	    (!drive->forced_geom) && drive->bios_sect && drive->bios_head)
  9.1388 -		drive->bios_cyl = (capacity / drive->bios_sect) / drive->bios_head;
  9.1389 -	printk (KERN_INFO "XEN %s: %ld sectors", drive->name, capacity);
  9.1390 -
  9.1391 -	/* Give size in megabytes (MB), not mebibytes (MiB). */
  9.1392 -	/* We compute the exact rounded value, avoiding overflow. */
  9.1393 -	printk (" (%ld MB)", (capacity - capacity/625 + 974)/1950);
  9.1394 -
  9.1395 -	/* Only print cache size when it was specified */
  9.1396 -	if (id->buf_size)
  9.1397 -		printk (" w/%dKiB Cache", id->buf_size/2);
  9.1398 -
  9.1399 -	printk(", CHS=%d/%d/%d", 
  9.1400 -	       drive->bios_cyl, drive->bios_head, drive->bios_sect);
  9.1401 -#ifdef CONFIG_BLK_DEV_IDEDMA
  9.1402 -	if (drive->using_dma)
  9.1403 -		(void) HWIF(drive)->dmaproc(ide_dma_verbose, drive);
  9.1404 -#endif /* CONFIG_BLK_DEV_IDEDMA */
  9.1405 -	printk("\n");
  9.1406 -
  9.1407 -	drive->mult_count = 0;
  9.1408 -	if (id->max_multsect) {
  9.1409 -#ifdef CONFIG_IDEDISK_MULTI_MODE
  9.1410 -		id->multsect = ((id->max_multsect/2) > 1) ? id->max_multsect : 0;
  9.1411 -		id->multsect_valid = id->multsect ? 1 : 0;
  9.1412 -		drive->mult_req = id->multsect_valid ? id->max_multsect : INITIAL_MULT_COUNT;
  9.1413 -		drive->special.b.set_multmode = drive->mult_req ? 1 : 0;
  9.1414 -#else	/* original, pre IDE-NFG, per request of AC */
  9.1415 -		drive->mult_req = INITIAL_MULT_COUNT;
  9.1416 -		if (drive->mult_req > id->max_multsect)
  9.1417 -			drive->mult_req = id->max_multsect;
  9.1418 -		if (drive->mult_req || ((id->multsect_valid & 1) && id->multsect))
  9.1419 -			drive->special.b.set_multmode = 1;
  9.1420 -#endif	/* CONFIG_IDEDISK_MULTI_MODE */
  9.1421 -	}
  9.1422 -	drive->no_io_32bit = id->dword_io ? 1 : 0;
  9.1423 -	if (drive->id->cfs_enable_2 & 0x3000)
  9.1424 -		write_cache(drive, (id->cfs_enable_2 & 0x3000));
  9.1425 -	(void) probe_lba_addressing(drive, 1);
  9.1426 -}
  9.1427 -
  9.1428 -static int idedisk_cleanup (ide_drive_t *drive)
  9.1429 -{
  9.1430 -	if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
  9.1431 -		if (do_idedisk_flushcache(drive))
  9.1432 -			printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
  9.1433 -				drive->name);
  9.1434 -	return ide_unregister_subdriver(drive);
  9.1435 -}
  9.1436 -
  9.1437 -int idedisk_reinit(ide_drive_t *drive);
  9.1438 -
  9.1439 -/*
  9.1440 - *      IDE subdriver functions, registered with ide.c
  9.1441 - */
  9.1442 -static ide_driver_t idedisk_driver = {
  9.1443 -	name:			"ide-disk",
  9.1444 -	version:		IDEDISK_VERSION,
  9.1445 -	media:			ide_disk,
  9.1446 -	busy:			0,
  9.1447 -	supports_dma:		1,
  9.1448 -	supports_dsc_overlap:	0,
  9.1449 -	cleanup:		idedisk_cleanup,
  9.1450 -	standby:		do_idedisk_standby,
  9.1451 -	flushcache:		do_idedisk_flushcache,
  9.1452 -	do_request:		do_rw_disk,
  9.1453 -	end_request:		NULL,
  9.1454 -	ioctl:			NULL,
  9.1455 -	open:			idedisk_open,
  9.1456 -	release:		idedisk_release,
  9.1457 -	media_change:		idedisk_media_change,
  9.1458 -	revalidate:		idedisk_revalidate,
  9.1459 -	pre_reset:		idedisk_pre_reset,
  9.1460 -	capacity:		idedisk_capacity,
  9.1461 -	special:		idedisk_special,
  9.1462 -	/*proc:			idedisk_proc,*/
  9.1463 -	reinit:			idedisk_reinit,
  9.1464 -	ata_prebuilder:		NULL,
  9.1465 -	atapi_prebuilder:	NULL,
  9.1466 -};
  9.1467 -
  9.1468 -int idedisk_init (void);
  9.1469 -static ide_module_t idedisk_module = {
  9.1470 -	IDE_DRIVER_MODULE,
  9.1471 -	idedisk_init,
  9.1472 -	&idedisk_driver,
  9.1473 -	NULL
  9.1474 -};
  9.1475 -
  9.1476 -MODULE_DESCRIPTION("ATA DISK Driver");
  9.1477 -
  9.1478 -int idedisk_reinit (ide_drive_t *drive)
  9.1479 -{
  9.1480 -	int failed = 0;
  9.1481 -
  9.1482 -	MOD_INC_USE_COUNT;
  9.1483 -
  9.1484 -	if (ide_register_subdriver (drive, &idedisk_driver, IDE_SUBDRIVER_VERSION)) {
  9.1485 -		printk (KERN_ERR "ide-disk: %s: Failed to register the driver with ide.c\n", drive->name);
  9.1486 -		return 1;
  9.1487 -	}
  9.1488 -	DRIVER(drive)->busy++;
  9.1489 -	idedisk_setup(drive);
  9.1490 -	if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
  9.1491 -		printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", drive->name, drive->head);
  9.1492 -		(void) idedisk_cleanup(drive);
  9.1493 -		DRIVER(drive)->busy--;
  9.1494 -		return 1;
  9.1495 -	}
  9.1496 -	DRIVER(drive)->busy--;
  9.1497 -	failed--;
  9.1498 -
  9.1499 -	ide_register_module(&idedisk_module);
  9.1500 -	MOD_DEC_USE_COUNT;
  9.1501 -	return 0;
  9.1502 -}
  9.1503 -
  9.1504 -static void __exit idedisk_exit (void)
  9.1505 -{
  9.1506 -	ide_drive_t *drive;
  9.1507 -	int failed = 0;
  9.1508 -
  9.1509 -	while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, &idedisk_driver, failed)) != NULL) {
  9.1510 -		if (idedisk_cleanup (drive)) {
  9.1511 -			printk (KERN_ERR "%s: cleanup_module() called while still busy\n", drive->name);
  9.1512 -			failed++;
  9.1513 -		}
  9.1514 -		/* We must remove proc entries defined in this module.
  9.1515 -		   Otherwise we oops while accessing these entries */
  9.1516 -#ifdef CONFIG_PROC_FS
  9.1517 -		if (drive->proc)
  9.1518 -			ide_remove_proc_entries(drive->proc, idedisk_proc);
  9.1519 -#endif
  9.1520 -	}
  9.1521 -	ide_unregister_module(&idedisk_module);
  9.1522 -}
  9.1523 -
  9.1524 -int idedisk_init (void)
  9.1525 -{
  9.1526 -	ide_drive_t *drive;
  9.1527 -	int failed = 0;
  9.1528 -	
  9.1529 -	MOD_INC_USE_COUNT;
  9.1530 -	while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, NULL, failed++)) != NULL) {
  9.1531 -		if (ide_register_subdriver (drive, &idedisk_driver, IDE_SUBDRIVER_VERSION)) {
  9.1532 -			printk (KERN_ERR "ide-disk: %s: Failed to register the driver with ide.c\n", drive->name);
  9.1533 -			continue;
  9.1534 -		}
  9.1535 -		DRIVER(drive)->busy++;
  9.1536 -		idedisk_setup(drive);
  9.1537 -		if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
  9.1538 -			printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", drive->name, drive->head);
  9.1539 -			(void) idedisk_cleanup(drive);
  9.1540 -			DRIVER(drive)->busy--;
  9.1541 -			continue;
  9.1542 -		}
  9.1543 -		DRIVER(drive)->busy--;
  9.1544 -		failed--;
  9.1545 -	}
  9.1546 -	ide_register_module(&idedisk_module);
  9.1547 -	MOD_DEC_USE_COUNT;
  9.1548 -	return 0;
  9.1549 -}
  9.1550 -
  9.1551 -module_init(idedisk_init);
  9.1552 -module_exit(idedisk_exit);
  9.1553 -MODULE_LICENSE("GPL");
    10.1 --- a/xen-2.4.16/drivers/ide/ide-pci.c	Sun Feb 16 15:16:35 2003 +0000
    10.2 +++ b/xen-2.4.16/drivers/ide/ide-pci.c	Sun Feb 16 18:08:23 2003 +0000
    10.3 @@ -12,15 +12,15 @@
    10.4   *  configuration of all PCI IDE interfaces present in a system.  
    10.5   */
    10.6  
    10.7 -#include <xeno/config.h>
    10.8 -#include <xeno/types.h>
    10.9 -#include <xeno/lib.h>
   10.10 -#include <xeno/timer.h>
   10.11 -#include <xeno/mm.h>
   10.12 -#include <xeno/interrupt.h>
   10.13 -#include <xeno/pci.h>
   10.14 -#include <xeno/init.h>
   10.15 -#include <xeno/ide.h>
   10.16 +#include <linux/config.h>
   10.17 +#include <linux/types.h>
   10.18 +#include <linux/kernel.h>
   10.19 +#include <linux/timer.h>
   10.20 +#include <linux/mm.h>
   10.21 +#include <linux/interrupt.h>
   10.22 +#include <linux/pci.h>
   10.23 +#include <linux/init.h>
   10.24 +#include <linux/ide.h>
   10.25  
   10.26  #include <asm/io.h>
   10.27  #include <asm/irq.h>
   10.28 @@ -405,7 +405,7 @@ static ide_pci_device_t ide_pci_chipsets
   10.29  #ifndef CONFIG_PDC202XX_FORCE
   10.30          {DEVID_PDC20246,"PDC20246",	PCI_PDC202XX,	NULL,		INIT_PDC202XX,	NULL,		{{0x00,0x00,0x00}, {0x00,0x00,0x00}},	OFF_BOARD,	16 },
   10.31          {DEVID_PDC20262,"PDC20262",	PCI_PDC202XX,	ATA66_PDC202XX,	INIT_PDC202XX,	NULL,		{{0x00,0x00,0x00}, {0x00,0x00,0x00}},	OFF_BOARD,	48 },
   10.32 -        {DEVID_PDC20265,"PDC20265",	PCI_PDC202XX,	ATA66_PDC202XX,	INIT_PDC202XX,	NULL,		{{0x00,0x00,0x00}, {0x00,0x00,0x00}},	ON_BOARD,	48 },
   10.33 +        {DEVID_PDC20265,"PDC20265",	PCI_PDC202XX,	ATA66_PDC202XX,	INIT_PDC202XX,	NULL,		{{0x00,0x00,0x00}, {0x00,0x00,0x00}},	OFF_BOARD,	48 },
   10.34          {DEVID_PDC20267,"PDC20267",	PCI_PDC202XX,	ATA66_PDC202XX,	INIT_PDC202XX,	NULL,		{{0x00,0x00,0x00}, {0x00,0x00,0x00}},	OFF_BOARD,	48 },
   10.35  #else /* !CONFIG_PDC202XX_FORCE */
   10.36  	{DEVID_PDC20246,"PDC20246",	PCI_PDC202XX,	NULL,		INIT_PDC202XX,	NULL,		{{0x50,0x02,0x02}, {0x50,0x04,0x04}}, 	OFF_BOARD,	16 },
   10.37 @@ -623,8 +623,12 @@ static void __init ide_setup_pci_device 
   10.38  	}
   10.39  
   10.40  	if (pci_enable_device(dev)) {
   10.41 -		printk(KERN_WARNING "%s: (ide_setup_pci_device:) Could not enable device.\n", d->name);
   10.42 -		return;
   10.43 +		if(pci_enable_device_bars(dev, 1<<4))
   10.44 +		{
   10.45 +			printk(KERN_WARNING "%s: (ide_setup_pci_device:) Could not enable device.\n", d->name);
   10.46 +			return;
   10.47 +		}
   10.48 +		printk(KERN_INFO "%s: BIOS setup was incomplete.\n", d->name);
   10.49  	}
   10.50  
   10.51  check_if_enabled:
   10.52 @@ -669,18 +673,27 @@ check_if_enabled:
   10.53  	 */
   10.54  	pciirq = dev->irq;
   10.55  	
   10.56 -#ifdef CONFIG_PDC202XX_FORCE
   10.57 -	if (dev->class >> 8 == PCI_CLASS_STORAGE_RAID) {
   10.58 -		/*
   10.59 -		 * By rights we want to ignore Promise FastTrak and SuperTrak
   10.60 -		 * series here, those use own driver.
   10.61 +	if (dev->class >> 8 == PCI_CLASS_STORAGE_RAID)
   10.62 +	{
   10.63 +	    /*  By rights we want to ignore these, but the Promise Fastrak
   10.64 +		 *	people have some strange ideas about proprietary so we have
   10.65 +		 *	to act otherwise on those. The supertrak however we need
   10.66 +		 *	to skip 
   10.67  		 */
   10.68 -		if (dev->vendor == PCI_VENDOR_ID_PROMISE) {
   10.69 -			printk(KERN_INFO "ide: Skipping Promise RAID controller.\n");
   10.70 -			return;
   10.71 +		if (IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265))
   10.72 +		{
   10.73 +			printk(KERN_INFO "ide: Found promise 20265 in RAID mode.\n");
   10.74 +			if(dev->bus->self && dev->bus->self->vendor == PCI_VENDOR_ID_INTEL &&
   10.75 +			   dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960)
   10.76 +			{
   10.77 +				printk(KERN_INFO "ide: Skipping Promise PDC20265 attached to I2O RAID controller.\n");
   10.78 +				return;
   10.79 +			}
   10.80  		}
   10.81 +		/* Its attached to something else, just a random bridge.
   10.82 +		   Suspect a fastrak and fall through */
   10.83  	}
   10.84 -#endif /* CONFIG_PDC202XX_FORCE */
   10.85 +
   10.86  	if ((dev->class & ~(0xfa)) != ((PCI_CLASS_STORAGE_IDE << 8) | 5)) {
   10.87  		printk("%s: not 100%% native mode: will probe irqs later\n", d->name);
   10.88  		/*
    11.1 --- a/xen-2.4.16/drivers/ide/piix.c	Sun Feb 16 15:16:35 2003 +0000
    11.2 +++ b/xen-2.4.16/drivers/ide/piix.c	Sun Feb 16 18:08:23 2003 +0000
    11.3 @@ -92,6 +92,9 @@ static int piix_get_info (char *buffer, 
    11.4  		case PCI_DEVICE_ID_INTEL_82801BA_8:
    11.5  		case PCI_DEVICE_ID_INTEL_82801BA_9:
    11.6  	        case PCI_DEVICE_ID_INTEL_82801CA_10:
    11.7 +	        case PCI_DEVICE_ID_INTEL_82801CA_11:
    11.8 +	        case PCI_DEVICE_ID_INTEL_82801DB_11:
    11.9 +	        case PCI_DEVICE_ID_INTEL_82801E_11:
   11.10  			p += sprintf(p, "\n                                Intel PIIX4 Ultra 100 Chipset.\n");
   11.11  			break;
   11.12  		case PCI_DEVICE_ID_INTEL_82372FB_1:
   11.13 @@ -258,8 +261,8 @@ static void piix_tune_drive (ide_drive_t
   11.14  			master_data = master_data | 0x0070;
   11.15  		pci_read_config_byte(HWIF(drive)->pci_dev, slave_port, &slave_data);
   11.16  		slave_data = slave_data & (HWIF(drive)->index ? 0x0f : 0xf0);
   11.17 -		slave_data = slave_data | ((timings[pio][0] << 2) | (timings[pio][1]
   11.18 -					   << (HWIF(drive)->index ? 4 : 0)));
   11.19 +		slave_data = slave_data | (((timings[pio][0] << 2) | timings[pio][1])
   11.20 +					   << (HWIF(drive)->index ? 4 : 0));
   11.21  	} else {
   11.22  		master_data = master_data & 0xccf8;
   11.23  		if (pio > 1)
   11.24 @@ -366,7 +369,10 @@ static int piix_config_drive_for_dma (id
   11.25  	byte udma_66		= eighty_ninty_three(drive);
   11.26  	int ultra100		= ((dev->device == PCI_DEVICE_ID_INTEL_82801BA_8) ||
   11.27  				   (dev->device == PCI_DEVICE_ID_INTEL_82801BA_9) ||
   11.28 -				   (dev->device == PCI_DEVICE_ID_INTEL_82801CA_10)) ? 1 : 0;
   11.29 +				   (dev->device == PCI_DEVICE_ID_INTEL_82801CA_10) ||
   11.30 +				   (dev->device == PCI_DEVICE_ID_INTEL_82801CA_11) ||
   11.31 +				   (dev->device == PCI_DEVICE_ID_INTEL_82801DB_11) ||
   11.32 +				   (dev->device == PCI_DEVICE_ID_INTEL_82801E_11)) ? 1 : 0;
   11.33  	int ultra66		= ((ultra100) ||
   11.34  				   (dev->device == PCI_DEVICE_ID_INTEL_82801AA_1) ||
   11.35  				   (dev->device == PCI_DEVICE_ID_INTEL_82372FB_1)) ? 1 : 0;
   11.36 @@ -425,7 +431,7 @@ static int config_drive_xfer_rate (ide_d
   11.37  		}
   11.38  		dma_func = ide_dma_off_quietly;
   11.39  		if (id->field_valid & 4) {
   11.40 -			if (id->dma_ultra & 0x002F) {
   11.41 +			if (id->dma_ultra & 0x003F) {
   11.42  				/* Force if Capable UltraDMA */
   11.43  				dma_func = piix_config_drive_for_dma(drive);
   11.44  				if ((id->field_valid & 2) &&
    12.1 --- a/xen-2.4.16/drivers/pci/gen-devlist.c	Sun Feb 16 15:16:35 2003 +0000
    12.2 +++ b/xen-2.4.16/drivers/pci/gen-devlist.c	Sun Feb 16 18:08:23 2003 +0000
    12.3 @@ -1,7 +1,7 @@
    12.4  /*
    12.5   *	Generate devlist.h and classlist.h from the PCI ID file.
    12.6   *
    12.7 - *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
    12.8 + *	(c) 1999--2002 Martin Mares <mj@ucw.cz>
    12.9   */
   12.10  
   12.11  #include <stdio.h>
   12.12 @@ -15,8 +15,13 @@ pq(FILE *f, const char *c)
   12.13  	while (*c) {
   12.14  		if (*c == '"')
   12.15  			fprintf(f, "\\\"");
   12.16 -		else
   12.17 +		else {
   12.18  			fputc(*c, f);
   12.19 +			if (*c == '?' && c[1] == '?') {
   12.20 +				/* Avoid trigraphs */
   12.21 +				fprintf(f, "\" \"");
   12.22 +			}
   12.23 +		}
   12.24  		c++;
   12.25  	}
   12.26  }
    13.1 --- a/xen-2.4.16/drivers/pci/names.c	Sun Feb 16 15:16:35 2003 +0000
    13.2 +++ b/xen-2.4.16/drivers/pci/names.c	Sun Feb 16 18:08:23 2003 +0000
    13.3 @@ -7,7 +7,7 @@
    13.4  
    13.5  #include <linux/config.h>
    13.6  #include <linux/types.h>
    13.7 -//#include <linux/kernel.h>
    13.8 +/*#include <linux/kernel.h>*/
    13.9  #include <linux/pci.h>
   13.10  #include <linux/init.h>
   13.11  
   13.12 @@ -32,18 +32,18 @@ struct pci_vendor_info {
   13.13   * real memory.. Parse the same file multiple times
   13.14   * to get all the info.
   13.15   */
   13.16 -#define VENDOR( vendor, name )		static char __vendorstr_##vendor[] __initdata = name;
   13.17 +#define VENDOR( vendor, name )		static char __vendorstr_##vendor[] __devinitdata = name;
   13.18  #define ENDVENDOR()
   13.19 -#define DEVICE( vendor, device, name ) 	static char __devicestr_##vendor##device[] __initdata = name;
   13.20 +#define DEVICE( vendor, device, name ) 	static char __devicestr_##vendor##device[] __devinitdata = name;
   13.21  #include "devlist.h"
   13.22  
   13.23  
   13.24 -#define VENDOR( vendor, name )		static struct pci_device_info __devices_##vendor[] __initdata = {
   13.25 +#define VENDOR( vendor, name )		static struct pci_device_info __devices_##vendor[] __devinitdata = {
   13.26  #define ENDVENDOR()			};
   13.27  #define DEVICE( vendor, device, name )	{ 0x##device, 0, __devicestr_##vendor##device },
   13.28  #include "devlist.h"
   13.29  
   13.30 -static struct pci_vendor_info __initdata pci_vendor_list[] = {
   13.31 +static struct pci_vendor_info __devinitdata pci_vendor_list[] = {
   13.32  #define VENDOR( vendor, name )		{ 0x##vendor, sizeof(__devices_##vendor) / sizeof(struct pci_device_info), __vendorstr_##vendor, __devices_##vendor },
   13.33  #define ENDVENDOR()
   13.34  #define DEVICE( vendor, device, name )
   13.35 @@ -121,7 +121,7 @@ pci_class_name(u32 class)
   13.36  
   13.37  #else
   13.38  
   13.39 -void __init pci_name_device(struct pci_dev *dev)
   13.40 +void __devinit pci_name_device(struct pci_dev *dev)
   13.41  {
   13.42  }
   13.43  
    14.1 --- a/xen-2.4.16/drivers/pci/pci.c	Sun Feb 16 15:16:35 2003 +0000
    14.2 +++ b/xen-2.4.16/drivers/pci/pci.c	Sun Feb 16 18:08:23 2003 +0000
    14.3 @@ -13,20 +13,21 @@
    14.4  #include <linux/sched.h>
    14.5  #include <linux/module.h>
    14.6  #include <linux/types.h>
    14.7 -//#include <linux/kernel.h>
    14.8 +/*#include <linux/kernel.h>*/
    14.9  #include <linux/pci.h>
   14.10 -//#include <linux/string.h>
   14.11 +/*#include <linux/string.h>*/
   14.12  #include <linux/init.h>
   14.13  #include <linux/slab.h>
   14.14  #include <linux/ioport.h>
   14.15  #include <linux/spinlock.h>
   14.16 -//#include <linux/pm.h>
   14.17 -//#include <linux/kmod.h>		/* for hotplug_path */
   14.18 -//#include <linux/bitops.h>
   14.19 +/*#include <linux/pm.h>*/
   14.20 +/*#include <linux/kmod.h>*/		/* for hotplug_path */
   14.21 +/*#include <linux/bitops.h>*/
   14.22  #include <linux/delay.h>
   14.23 +#include <linux/cache.h>
   14.24  
   14.25  #include <asm/page.h>
   14.26 -//#include <asm/dma.h>	/* isa_dma_bridge_buggy */
   14.27 +/*#include <asm/dma.h>*/	/* isa_dma_bridge_buggy */
   14.28  
   14.29  #undef DEBUG
   14.30  
   14.31 @@ -358,6 +359,27 @@ pci_restore_state(struct pci_dev *dev, u
   14.32  }
   14.33  
   14.34  /**
   14.35 + * pci_enable_device_bars - Initialize some of a device for use
   14.36 + * @dev: PCI device to be initialized
   14.37 + * @bars: bitmask of BAR's that must be configured
   14.38 + *
   14.39 + *  Initialize device before it's used by a driver. Ask low-level code
   14.40 + *  to enable selected I/O and memory resources. Wake up the device if it 
   14.41 + *  was suspended. Beware, this function can fail.
   14.42 + */
   14.43 + 
   14.44 +int
   14.45 +pci_enable_device_bars(struct pci_dev *dev, int bars)
   14.46 +{
   14.47 +	int err;
   14.48 +
   14.49 +	pci_set_power_state(dev, 0);
   14.50 +	if ((err = pcibios_enable_device(dev, bars)) < 0)
   14.51 +		return err;
   14.52 +	return 0;
   14.53 +}
   14.54 +
   14.55 +/**
   14.56   * pci_enable_device - Initialize device before it's used by a driver.
   14.57   * @dev: PCI device to be initialized
   14.58   *
   14.59 @@ -368,12 +390,7 @@ pci_restore_state(struct pci_dev *dev, u
   14.60  int
   14.61  pci_enable_device(struct pci_dev *dev)
   14.62  {
   14.63 -	int err;
   14.64 -
   14.65 -	pci_set_power_state(dev, 0);
   14.66 -	if ((err = pcibios_enable_device(dev)) < 0)
   14.67 -		return err;
   14.68 -	return 0;
   14.69 +	return pci_enable_device_bars(dev, 0x3F);
   14.70  }
   14.71  
   14.72  /**
   14.73 @@ -463,6 +480,69 @@ pci_get_interrupt_pin(struct pci_dev *de
   14.74  }
   14.75  
   14.76  /**
   14.77 + *	pci_release_region - Release a PCI bar
   14.78 + *	@pdev: PCI device whose resources were previously reserved by pci_request_region
   14.79 + *	@bar: BAR to release
   14.80 + *
   14.81 + *	Releases the PCI I/O and memory resources previously reserved by a
   14.82 + *	successful call to pci_request_region.  Call this function only
   14.83 + *	after all use of the PCI regions has ceased.
   14.84 + */
   14.85 +void pci_release_region(struct pci_dev *pdev, int bar)
   14.86 +{
   14.87 +	if (pci_resource_len(pdev, bar) == 0)
   14.88 +		return;
   14.89 +	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
   14.90 +		release_region(pci_resource_start(pdev, bar),
   14.91 +				pci_resource_len(pdev, bar));
   14.92 +	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
   14.93 +		release_mem_region(pci_resource_start(pdev, bar),
   14.94 +				pci_resource_len(pdev, bar));
   14.95 +}
   14.96 +
   14.97 +/**
   14.98 + *	pci_request_region - Reserved PCI I/O and memory resource
   14.99 + *	@pdev: PCI device whose resources are to be reserved
  14.100 + *	@bar: BAR to be reserved
  14.101 + *	@res_name: Name to be associated with resource.
  14.102 + *
  14.103 + *	Mark the PCI region associated with PCI device @pdev BR @bar as
  14.104 + *	being reserved by owner @res_name.  Do not access any
  14.105 + *	address inside the PCI regions unless this call returns
  14.106 + *	successfully.
  14.107 + *
  14.108 + *	Returns 0 on success, or %EBUSY on error.  A warning
  14.109 + *	message is also printed on failure.
  14.110 + */
  14.111 +int pci_request_region(struct pci_dev *pdev, int bar, char *res_name)
  14.112 +{
  14.113 +	if (pci_resource_len(pdev, bar) == 0)
  14.114 +		return 0;
  14.115 +		
  14.116 +	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
  14.117 +		if (!request_region(pci_resource_start(pdev, bar),
  14.118 +			    pci_resource_len(pdev, bar), res_name))
  14.119 +			goto err_out;
  14.120 +	}
  14.121 +	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
  14.122 +		if (!request_mem_region(pci_resource_start(pdev, bar),
  14.123 +				        pci_resource_len(pdev, bar), res_name))
  14.124 +			goto err_out;
  14.125 +	}
  14.126 +	
  14.127 +	return 0;
  14.128 +
  14.129 +err_out:
  14.130 +	printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %s\n",
  14.131 +		pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem",
  14.132 +		bar + 1, /* PCI BAR # */
  14.133 +		pci_resource_len(pdev, bar), pci_resource_start(pdev, bar),
  14.134 +		pdev->slot_name);
  14.135 +	return -EBUSY;
  14.136 +}
  14.137 +
  14.138 +
  14.139 +/**
  14.140   *	pci_release_regions - Release reserved PCI I/O and memory resources
  14.141   *	@pdev: PCI device whose resources were previously reserved by pci_request_regions
  14.142   *
  14.143 @@ -470,22 +550,13 @@ pci_get_interrupt_pin(struct pci_dev *de
  14.144   *	successful call to pci_request_regions.  Call this function only
  14.145   *	after all use of the PCI regions has ceased.
  14.146   */
  14.147 +
  14.148  void pci_release_regions(struct pci_dev *pdev)
  14.149  {
  14.150  	int i;
  14.151  	
  14.152 -	for (i = 0; i < 6; i++) {
  14.153 -		if (pci_resource_len(pdev, i) == 0)
  14.154 -			continue;
  14.155 -
  14.156 -		if (pci_resource_flags(pdev, i) & IORESOURCE_IO)
  14.157 -			release_region(pci_resource_start(pdev, i),
  14.158 -				       pci_resource_len(pdev, i));
  14.159 -
  14.160 -		else if (pci_resource_flags(pdev, i) & IORESOURCE_MEM)
  14.161 -			release_mem_region(pci_resource_start(pdev, i),
  14.162 -					   pci_resource_len(pdev, i));
  14.163 -	}
  14.164 +	for (i = 0; i < 6; i++)
  14.165 +		pci_release_region(pdev, i);
  14.166  }
  14.167  
  14.168  /**
  14.169 @@ -505,23 +576,9 @@ int pci_request_regions(struct pci_dev *
  14.170  {
  14.171  	int i;
  14.172  	
  14.173 -	for (i = 0; i < 6; i++) {
  14.174 -		if (pci_resource_len(pdev, i) == 0)
  14.175 -			continue;
  14.176 -
  14.177 -		if (pci_resource_flags(pdev, i) & IORESOURCE_IO) {
  14.178 -			if (!request_region(pci_resource_start(pdev, i),
  14.179 -					    pci_resource_len(pdev, i), res_name))
  14.180 -				goto err_out;
  14.181 -		}
  14.182 -		
  14.183 -		else if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) {
  14.184 -			if (!request_mem_region(pci_resource_start(pdev, i),
  14.185 -					        pci_resource_len(pdev, i), res_name))
  14.186 -				goto err_out;
  14.187 -		}
  14.188 -	}
  14.189 -	
  14.190 +	for (i = 0; i < 6; i++)
  14.191 +		if(pci_request_region(pdev, i, res_name))
  14.192 +			goto err_out;
  14.193  	return 0;
  14.194  
  14.195  err_out:
  14.196 @@ -530,7 +587,9 @@ err_out:
  14.197  		i + 1, /* PCI BAR # */
  14.198  		pci_resource_len(pdev, i), pci_resource_start(pdev, i),
  14.199  		pdev->slot_name);
  14.200 -	pci_release_regions(pdev);
  14.201 +	while(--i >= 0)
  14.202 +		pci_release_region(pdev, i);
  14.203 +		
  14.204  	return -EBUSY;
  14.205  }
  14.206  
  14.207 @@ -872,13 +931,14 @@ pdev_set_mwi(struct pci_dev *dev)
  14.208  	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cache_size);
  14.209  	cache_size <<= 2;
  14.210  	if (cache_size != SMP_CACHE_BYTES) {
  14.211 -		printk(KERN_WARNING "PCI: %s PCI cache line size set incorrectly (%i bytes) by BIOS/FW.\n",
  14.212 +		printk(KERN_WARNING "PCI: %s PCI cache line size set incorrectly "
  14.213 +		       "(%i bytes) by BIOS/FW, ",
  14.214  		       dev->slot_name, cache_size);
  14.215  		if (cache_size > SMP_CACHE_BYTES) {
  14.216 -			printk("PCI: %s cache line size too large - expecting %i.\n", dev->slot_name, SMP_CACHE_BYTES);
  14.217 +			printk("expecting %i\n", SMP_CACHE_BYTES);
  14.218  			rc = -EINVAL;
  14.219  		} else {
  14.220 -			printk("PCI: %s PCI cache line size corrected to %i.\n", dev->slot_name, SMP_CACHE_BYTES);
  14.221 +			printk("correcting to %i\n", SMP_CACHE_BYTES);
  14.222  			pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE,
  14.223  					      SMP_CACHE_BYTES >> 2);
  14.224  		}
  14.225 @@ -1008,13 +1068,15 @@ static void pci_read_bases(struct pci_de
  14.226  			l = 0;
  14.227  		if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) {
  14.228  			res->start = l & PCI_BASE_ADDRESS_MEM_MASK;
  14.229 +			res->flags |= l & ~PCI_BASE_ADDRESS_MEM_MASK;
  14.230  			sz = pci_size(sz, PCI_BASE_ADDRESS_MEM_MASK);
  14.231  		} else {
  14.232  			res->start = l & PCI_BASE_ADDRESS_IO_MASK;
  14.233 +			res->flags |= l & ~PCI_BASE_ADDRESS_IO_MASK;
  14.234  			sz = pci_size(sz, PCI_BASE_ADDRESS_IO_MASK & 0xffff);
  14.235  		}
  14.236  		res->end = res->start + (unsigned long) sz;
  14.237 -		res->flags |= (l & 0xf) | pci_calc_resource_flags(l);
  14.238 +		res->flags |= pci_calc_resource_flags(l);
  14.239  		if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK))
  14.240  		    == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) {
  14.241  			pci_read_config_dword(dev, reg+4, &l);
  14.242 @@ -1058,7 +1120,7 @@ static void pci_read_bases(struct pci_de
  14.243  	}
  14.244  }
  14.245  
  14.246 -void __devinit  pci_read_bridge_bases(struct pci_bus *child)
  14.247 +void __devinit pci_read_bridge_bases(struct pci_bus *child)
  14.248  {
  14.249  	struct pci_dev *dev = child->self;
  14.250  	u8 io_base_lo, io_limit_lo;
  14.251 @@ -1070,6 +1132,13 @@ void __devinit  pci_read_bridge_bases(st
  14.252  	if (!dev)		/* It's a host bus, nothing to read */
  14.253  		return;
  14.254  
  14.255 +	if (dev->transparent) {
  14.256 +		printk("Transparent bridge - %s\n", dev->name);
  14.257 +		for(i = 0; i < 4; i++)
  14.258 +			child->resource[i] = child->parent->resource[i];
  14.259 +		return;
  14.260 +	}
  14.261 +
  14.262  	for(i=0; i<3; i++)
  14.263  		child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
  14.264  
  14.265 @@ -1091,14 +1160,6 @@ void __devinit  pci_read_bridge_bases(st
  14.266  		res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
  14.267  		res->start = base;
  14.268  		res->end = limit + 0xfff;
  14.269 -		res->name = child->name;
  14.270 -	} else {
  14.271 -		/*
  14.272 -		 * Ugh. We don't know enough about this bridge. Just assume
  14.273 -		 * that it's entirely transparent.
  14.274 -		 */
  14.275 -		printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 0);
  14.276 -		child->resource[0] = child->parent->resource[0];
  14.277  	}
  14.278  
  14.279  	res = child->resource[1];
  14.280 @@ -1110,11 +1171,6 @@ void __devinit  pci_read_bridge_bases(st
  14.281  		res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
  14.282  		res->start = base;
  14.283  		res->end = limit + 0xfffff;
  14.284 -		res->name = child->name;
  14.285 -	} else {
  14.286 -		/* See comment above. Same thing */
  14.287 -		printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 1);
  14.288 -		child->resource[1] = child->parent->resource[1];
  14.289  	}
  14.290  
  14.291  	res = child->resource[2];
  14.292 @@ -1141,15 +1197,10 @@ void __devinit  pci_read_bridge_bases(st
  14.293  		res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH;
  14.294  		res->start = base;
  14.295  		res->end = limit + 0xfffff;
  14.296 -		res->name = child->name;
  14.297 -	} else {
  14.298 -		/* See comments above */
  14.299 -		printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 2);
  14.300 -		child->resource[2] = child->parent->resource[2];
  14.301  	}
  14.302  }
  14.303  
  14.304 -static struct pci_bus * __devinit  pci_alloc_bus(void)
  14.305 +static struct pci_bus * __devinit pci_alloc_bus(void)
  14.306  {
  14.307  	struct pci_bus *b;
  14.308  
  14.309 @@ -1187,9 +1238,11 @@ struct pci_bus * __devinit pci_add_new_b
  14.310  	child->primary = parent->secondary;
  14.311  	child->subordinate = 0xff;
  14.312  
  14.313 -	/* Set up default resource pointers.. */
  14.314 -	for (i = 0; i < 4; i++)
  14.315 +	/* Set up default resource pointers and names.. */
  14.316 +	for (i = 0; i < 4; i++) {
  14.317  		child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
  14.318 +		child->resource[i]->name = child->name;
  14.319 +	}
  14.320  
  14.321  	return child;
  14.322  }
  14.323 @@ -1331,6 +1384,10 @@ int pci_setup_device(struct pci_dev * de
  14.324  	case PCI_HEADER_TYPE_BRIDGE:		    /* bridge header */
  14.325  		if (class != PCI_CLASS_BRIDGE_PCI)
  14.326  			goto bad;
  14.327 +		/* The PCI-to-PCI bridge spec requires that subtractive
  14.328 +		   decoding (i.e. transparent) bridge must have programming
  14.329 +		   interface code of 0x01. */ 
  14.330 +		dev->transparent = ((dev->class & 0xff) == 1);
  14.331  		pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
  14.332  		break;
  14.333  
  14.334 @@ -1474,7 +1531,7 @@ unsigned int __devinit pci_do_scan_bus(s
  14.335  	return max;
  14.336  }
  14.337  
  14.338 -int __devinit  pci_bus_exists(const struct list_head *list, int nr)
  14.339 +int __devinit pci_bus_exists(const struct list_head *list, int nr)
  14.340  {
  14.341  	const struct list_head *l;
  14.342  
  14.343 @@ -1486,7 +1543,7 @@ int __devinit  pci_bus_exists(const stru
  14.344  	return 0;
  14.345  }
  14.346  
  14.347 -struct pci_bus * __devinit  pci_alloc_primary_bus(int bus)
  14.348 +struct pci_bus * __devinit pci_alloc_primary_bus(int bus)
  14.349  {
  14.350  	struct pci_bus *b;
  14.351  
  14.352 @@ -1505,7 +1562,7 @@ struct pci_bus * __devinit  pci_alloc_pr
  14.353  	return b;
  14.354  }
  14.355  
  14.356 -struct pci_bus * __devinit  pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
  14.357 +struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
  14.358  {
  14.359  	struct pci_bus *b = pci_alloc_primary_bus(bus);
  14.360  	if (b) {
  14.361 @@ -1639,7 +1696,7 @@ static int pci_pm_suspend(u32 state)
  14.362  	return 0;
  14.363  }
  14.364  
  14.365 -static int pci_pm_resume(void)
  14.366 +int pci_pm_resume(void)
  14.367  {
  14.368  	struct list_head *list;
  14.369  	struct pci_bus *bus;
  14.370 @@ -1659,10 +1716,10 @@ pci_pm_callback(struct pm_dev *pm_device
  14.371  
  14.372  	switch (rqst) {
  14.373  	case PM_SAVE_STATE:
  14.374 -		error = pci_pm_save_state((u32)data);
  14.375 +		error = pci_pm_save_state((unsigned long)data);
  14.376  		break;
  14.377  	case PM_SUSPEND:
  14.378 -		error = pci_pm_suspend((u32)data);
  14.379 +		error = pci_pm_suspend((unsigned long)data);
  14.380  		break;
  14.381  	case PM_RESUME:
  14.382  		error = pci_pm_resume();
  14.383 @@ -2042,7 +2099,7 @@ void __devinit  pci_init(void)
  14.384  #endif
  14.385  }
  14.386  
  14.387 -static int __devinit  pci_setup(char *str)
  14.388 +static int __devinit pci_setup(char *str)
  14.389  {
  14.390  	while (str) {
  14.391  		char *k = strchr(str, ',');
  14.392 @@ -2067,16 +2124,22 @@ EXPORT_SYMBOL(pci_write_config_word);
  14.393  EXPORT_SYMBOL(pci_write_config_dword);
  14.394  EXPORT_SYMBOL(pci_devices);
  14.395  EXPORT_SYMBOL(pci_root_buses);
  14.396 +EXPORT_SYMBOL(pci_enable_device_bars);
  14.397  EXPORT_SYMBOL(pci_enable_device);
  14.398  EXPORT_SYMBOL(pci_disable_device);
  14.399  EXPORT_SYMBOL(pci_find_capability);
  14.400  EXPORT_SYMBOL(pci_release_regions);
  14.401  EXPORT_SYMBOL(pci_request_regions);
  14.402 +EXPORT_SYMBOL(pci_release_region);
  14.403 +EXPORT_SYMBOL(pci_request_region);
  14.404  EXPORT_SYMBOL(pci_find_class);
  14.405  EXPORT_SYMBOL(pci_find_device);
  14.406  EXPORT_SYMBOL(pci_find_slot);
  14.407  EXPORT_SYMBOL(pci_find_subsys);
  14.408  EXPORT_SYMBOL(pci_set_master);
  14.409 +EXPORT_SYMBOL(pci_set_mwi);
  14.410 +EXPORT_SYMBOL(pci_clear_mwi);
  14.411 +EXPORT_SYMBOL(pdev_set_mwi);
  14.412  EXPORT_SYMBOL(pci_set_dma_mask);
  14.413  EXPORT_SYMBOL(pci_dac_set_dma_mask);
  14.414  EXPORT_SYMBOL(pci_assign_resource);
  14.415 @@ -2094,10 +2157,14 @@ EXPORT_SYMBOL(pci_announce_device_to_dri
  14.416  EXPORT_SYMBOL(pci_add_new_bus);
  14.417  EXPORT_SYMBOL(pci_do_scan_bus);
  14.418  EXPORT_SYMBOL(pci_scan_slot);
  14.419 +EXPORT_SYMBOL(pci_scan_bus);
  14.420 +#ifdef CONFIG_PROC_FS
  14.421  EXPORT_SYMBOL(pci_proc_attach_device);
  14.422  EXPORT_SYMBOL(pci_proc_detach_device);
  14.423  EXPORT_SYMBOL(pci_proc_attach_bus);
  14.424  EXPORT_SYMBOL(pci_proc_detach_bus);
  14.425 +EXPORT_SYMBOL(proc_bus_pci_dir);
  14.426 +#endif
  14.427  #endif
  14.428  
  14.429  EXPORT_SYMBOL(pci_set_power_state);
    15.1 --- a/xen-2.4.16/drivers/pci/pci.ids	Sun Feb 16 15:16:35 2003 +0000
    15.2 +++ b/xen-2.4.16/drivers/pci/pci.ids	Sun Feb 16 18:08:23 2003 +0000
    15.3 @@ -7,7 +7,7 @@
    15.4  #	so if you have anything to contribute, please visit the home page or
    15.5  #	send a diff -u against the most recent pci.ids to pci-ids@ucw.cz.
    15.6  #
    15.7 -#	$Id: pci.ids,v 1.24 2001/10/28 21:55:26 mares Exp $
    15.8 +#	$Id: pci.ids,v 1.46 2002/08/14 17:38:51 mares Exp $
    15.9  #
   15.10  
   15.11  # Vendors, devices and subsystems. Please keep sorted.
   15.12 @@ -26,6 +26,10 @@ 0100  Ncipher Corp Ltd
   15.13  0675  Dynalink
   15.14  	1700  IS64PH ISDN Adapter
   15.15  	1702  IS64PH ISDN Adapter
   15.16 +# Wrong ID used in subsystem ID of VIA USB controllers.
   15.17 +0925  VIA Technologies, Inc. (Wrong ID)
   15.18 +09c1  Arris
   15.19 +	0704  CM 200E Cable Modem
   15.20  0a89  BREA Technologies Inc
   15.21  0e11  Compaq Computer Corporation
   15.22  	0001  PCI to EISA Bridge
   15.23 @@ -47,7 +51,7 @@ 0e11  Compaq Computer Corporation
   15.24  	a0f7  PCI Hotplug Controller
   15.25  		8086 002a  PCI Hotplug Controller A
   15.26  		8086 002b  PCI Hotplug Controller B
   15.27 -	a0f8  USB Open Host Controller
   15.28 +	a0f8  ZFMicro Chipset USB
   15.29  	a0fc  Fibre Channel Host Controller
   15.30  	ae10  Smart-2/P RAID Controller
   15.31  		0e11 4030  Smart-2/P Array Controller
   15.32 @@ -88,11 +92,12 @@ 0e11  Compaq Computer Corporation
   15.33  	b13c  NC3162 Fast Ethernet NIC
   15.34  	b144  NC3123 Fast Ethernet NIC
   15.35  	b163  NC3134 Fast Ethernet NIC
   15.36 -	b164  NC3135 Fast Ethernet Upgrade Module
   15.37 +	b164  NC3165 Fast Ethernet Upgrade Module
   15.38  	b178  Smart Array 5i/532
   15.39  	b1a4  NC7131 Gigabit Server Adapter
   15.40  	f130  NetFlex-3/P ThunderLAN 1.0
   15.41  	f150  NetFlex-3/P ThunderLAN 2.3
   15.42 +0e55  HaSoTec GmbH
   15.43  1000  LSI Logic / Symbios Logic (formerly NCR)
   15.44  	0001  53c810
   15.45  		1000 1000  8100S
   15.46 @@ -104,15 +109,22 @@ 1000  LSI Logic / Symbios Logic (formerl
   15.47  	000a  53c1510
   15.48  	000b  53c896
   15.49  	000c  53c895
   15.50 +		1de1 3907  DC-390U2W
   15.51  	000d  53c885
   15.52  	000f  53c875
   15.53  		0e11 7004  Embedded Ultra Wide SCSI Controller
   15.54  		1092 8760  FirePort 40 Dual SCSI Controller
   15.55  		1de1 3904  DC390F Ultra Wide SCSI Controller
   15.56 +	0010  53c895
   15.57 +		0e11 4040  Integrated Array Controller
   15.58 +		0e11 4048  Integrated Array Controller
   15.59  	0012  53c895a
   15.60 +	0013  53c875a
   15.61  	0020  53c1010 Ultra3 SCSI Adapter
   15.62 +		1de1 1020  DC-390U3W
   15.63  	0021  53c1010 66MHz  Ultra3 SCSI Adapter
   15.64  	0030  53c1030
   15.65 +		1028 1010  LSI U320 SCSI Controller
   15.66  	0040  53c1035
   15.67  	008f  53c875J
   15.68  		1092 8000  FirePort 40 SCSI Controller
   15.69 @@ -122,12 +134,20 @@ 1000  LSI Logic / Symbios Logic (formerl
   15.70  	0623  FC929 LAN
   15.71  	0624  FC919
   15.72  	0625  FC919 LAN
   15.73 -	0701  83C885
   15.74 +	0626  FC929X
   15.75 +	0627  FC929X LAN
   15.76 +	0628  FC919X
   15.77 +	0629  FC919X LAN
   15.78 +	0701  83C885 NT50 DigitalScape Fast Ethernet
   15.79  	0702  Yellowfin G-NIC gigabit ethernet
   15.80  		1318 0000  PEI100X
   15.81  	0901  61C102
   15.82  	1000  63C815
   15.83 -1001  Initio
   15.84 +	1960  PowerEdge Expandable RAID Controller 4
   15.85 +		1028 0518  PowerEdge Expandable RAID Controller 4/DC
   15.86 +		1028 0520  PowerEdge Expandable RAID Controller 4/SC
   15.87 +		1028 0531  PowerEdge Expandable RAID Controller 4/QC
   15.88 +1001  Kolter Electronic
   15.89  	0010  PCI 1616 Measurement card with 32 digital I/O lines
   15.90  	0011  OPTO-PCI Opto-Isolated digital I/O board
   15.91  	0012  PCI-AD/DA Analogue I/O board
   15.92 @@ -139,28 +159,65 @@ 1001  Initio
   15.93  	9100  INI-9100/9100W SCSI Host
   15.94  1002  ATI Technologies Inc
   15.95  	4158  68800AX [Mach32]
   15.96 +	4242  Radeon 8500 DV
   15.97 +		1002 02aa  Radeon 8500 AIW DV Edition
   15.98  	4354  215CT [Mach64 CT]
   15.99  	4358  210888CX [Mach64 CX]
  15.100  	4554  210888ET [Mach64 ET]
  15.101  	4654  Mach64 VT
  15.102  	4742  3D Rage Pro AGP 1X/2X
  15.103 +		1002 0040  Rage Pro Turbo AGP 2X
  15.104 +		1002 0044  Rage Pro Turbo AGP 2X
  15.105 +		1002 0061  Rage Pro AIW AGP 2X
  15.106 +		1002 0062  Rage Pro AIW AGP 2X
  15.107 +		1002 0063  Rage Pro AIW AGP 2X
  15.108 +		1002 0080  Rage Pro Turbo AGP 2X
  15.109 +		1002 0084  Rage Pro Turbo AGP 2X
  15.110 +		1002 4742  Rage Pro Turbo AGP 2X
  15.111 +		1002 8001  Rage Pro Turbo AGP 2X
  15.112 +		1028 0082  Rage Pro Turbo AGP 2X
  15.113  		1028 4082  Optiplex GX1 Onboard Display Adapter
  15.114 -		8086 4152  Rage 3D Pro AGP
  15.115 +		1028 8082  Rage Pro Turbo AGP 2X
  15.116 +		1028 c082  Rage Pro Turbo AGP 2X
  15.117 +		8086 4152  Xpert 98D AGP 2X
  15.118 +		8086 464a  Rage Pro Turbo AGP 2X
  15.119  	4744  3D Rage Pro AGP 1X
  15.120 +		1002 4744  Rage Pro Turbo AGP
  15.121  	4747  3D Rage Pro
  15.122  	4749  3D Rage Pro
  15.123 +		1002 0061  Rage Pro AIW
  15.124 +		1002 0062  Rage Pro AIW
  15.125  	474c  Rage XC
  15.126 -	474d  Rage XL AGP
  15.127 +	474d  Rage XL AGP 2X
  15.128 +		1002 0004  Xpert 98 RXL AGP 2X
  15.129 +		1002 0008  Xpert 98 RXL AGP 2X
  15.130 +		1002 0080  Rage XL AGP 2X
  15.131 +		1002 0084  Xpert 98 AGP 2X
  15.132 +		1002 474d  Rage XL AGP
  15.133 +		1033 806a  Rage XL AGP
  15.134  	474e  Rage XC AGP
  15.135 +		1002 474e  Rage XC AGP
  15.136  	474f  Rage XL
  15.137 +		1002 0008  Rage XL
  15.138 +		1002 474f  Rage XL
  15.139  	4750  3D Rage Pro 215GP
  15.140 +		1002 0040  Rage Pro Turbo
  15.141 +		1002 0044  Rage Pro Turbo
  15.142 +		1002 0080  Rage Pro Turbo
  15.143 +		1002 0084  Rage Pro Turbo
  15.144 +		1002 4750  Rage Pro Turbo
  15.145  	4751  3D Rage Pro 215GQ
  15.146  	4752  Rage XL
  15.147 +		1002 0008  Rage XL
  15.148 +		1002 4752  Rage XL
  15.149  	4753  Rage XC
  15.150 +		1002 4753  Rage XC
  15.151  	4754  3D Rage I/II 215GT [Mach64 GT]
  15.152  	4755  3D Rage II+ 215GTB [Mach64 GTB]
  15.153  	4756  3D Rage IIC 215IIC [Mach64 GT IIC]
  15.154 +		1002 4756  Rage IIC
  15.155  	4757  3D Rage IIC AGP
  15.156 +		1002 4757  Rage IIC AGP
  15.157  		1028 0089  Rage 3D IIC
  15.158  		1028 4082  Rage 3D IIC
  15.159  		1028 8082  Rage 3D IIC
  15.160 @@ -169,77 +226,166 @@ 1002  ATI Technologies Inc
  15.161  	4759  3D Rage IIC
  15.162  	475a  3D Rage IIC AGP
  15.163  		1002 0087  Rage 3D IIC
  15.164 +		1002 475a  Rage IIC AGP
  15.165  	4c42  3D Rage LT Pro AGP-133
  15.166  		0e11 b0e8  Rage 3D LT Pro
  15.167  		0e11 b10e  3D Rage LT Pro (Compaq Armada 1750)
  15.168 +		1002 0040  Rage LT Pro AGP 2X
  15.169 +		1002 0044  Rage LT Pro AGP 2X
  15.170 +		1002 4c42  Rage LT Pro AGP 2X
  15.171 +		1002 8001  Rage LT Pro AGP 2X
  15.172  		1028 0085  Rage 3D LT Pro
  15.173  	4c44  3D Rage LT Pro AGP-66
  15.174  	4c45  Rage Mobility M3 AGP
  15.175  	4c46  Rage Mobility M3 AGP 2x
  15.176  	4c47  3D Rage LT-G 215LG
  15.177  	4c49  3D Rage LT Pro
  15.178 +		1002 0004  Rage LT Pro
  15.179 +		1002 0040  Rage LT Pro
  15.180 +		1002 0044  Rage LT Pro
  15.181 +		1002 4c49  Rage LT Pro
  15.182  	4c4d  Rage Mobility P/M AGP 2x
  15.183 +		1002 0084  Xpert 98 AGP 2X (Mobility)
  15.184  	4c4e  Rage Mobility L AGP 2x
  15.185  	4c50  3D Rage LT Pro
  15.186 +		1002 4c50  Rage LT Pro
  15.187  	4c51  3D Rage LT Pro
  15.188  	4c52  Rage Mobility P/M
  15.189  	4c53  Rage Mobility L
  15.190  	4c54  264LT [Mach64 LT]
  15.191 -	4c57  Radeon Mobility M6 LW
  15.192 +	4c57  Radeon Mobility M7 LW
  15.193 +		1028 00e6  Radeon Mobility M7 LW (Dell Inspiron 8100)
  15.194 +	4c58  Radeon Mobility M7 LX [Radeon Mobility FireGL 7800]
  15.195  	4c59  Radeon Mobility M6 LY
  15.196 +		1014 0235  ThinkPad A30p (2653-64G)
  15.197 +		1014 0239  ThinkPad X22/X23/X24
  15.198 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
  15.199  	4c5a  Radeon Mobility M6 LZ
  15.200  	4d46  Rage Mobility M4 AGP
  15.201  	4d4c  Rage Mobility M4 AGP
  15.202 -	5041  Rage 128 PA
  15.203 -	5042  Rage 128 PB
  15.204 -	5043  Rage 128 PC
  15.205 -	5044  Rage 128 PD
  15.206 -	5045  Rage 128 PE
  15.207 -	5046  Rage 128 PF
  15.208 +	5041  Rage 128 PA/PRO
  15.209 +	5042  Rage 128 PB/PRO AGP 2x
  15.210 +	5043  Rage 128 PC/PRO AGP 4x
  15.211 +	5044  Rage 128 PD/PRO TMDS
  15.212 +		1002 0028  Rage 128 AIW
  15.213 +		1002 0029  Rage 128 AIW
  15.214 +	5045  Rage 128 PE/PRO AGP 2x TMDS
  15.215 +	5046  Rage 128 PF/PRO AGP 4x TMDS
  15.216 +		1002 0004  Rage Fury Pro
  15.217 +		1002 0008  Rage Fury Pro/Xpert 2000 Pro
  15.218 +		1002 0014  Rage Fury Pro
  15.219 +		1002 0018  Rage Fury Pro/Xpert 2000 Pro
  15.220 +		1002 0028  Rage 128 Pro AIW AGP
  15.221 +		1002 002a  Rage 128 Pro AIW AGP
  15.222 +		1002 0048  Rage Fury Pro
  15.223  		1002 2000  Rage Fury MAXX AGP 4x (TMDS) (VGA device)
  15.224  		1002 2001  Rage Fury MAXX AGP 4x (TMDS) (Extra device?!)
  15.225 -	5047  Rage 128 PG
  15.226 -	5048  Rage 128 PH
  15.227 -	5049  Rage 128 PI
  15.228 -	504a  Rage 128 PJ
  15.229 -	504b  Rage 128 PK
  15.230 -	504c  Rage 128 PL
  15.231 -	504d  Rage 128 PM
  15.232 -	504e  Rage 128 PN
  15.233 -	504f  Rage 128 PO
  15.234 -	5050  Rage 128 PP
  15.235 -	5051  Rage 128 PQ
  15.236 -	5052  Rage 128 PR
  15.237 -	5053  Rage 128 PS
  15.238 -	5054  Rage 128 PT
  15.239 -	5055  Rage 128 PU
  15.240 -	5056  Rage 128 PV
  15.241 -	5057  Rage 128 PW
  15.242 -	5058  Rage 128 PX
  15.243 +	5047  Rage 128 PG/PRO
  15.244 +	5048  Rage 128 PH/PRO AGP 2x
  15.245 +	5049  Rage 128 PI/PRO AGP 4x
  15.246 +	504a  Rage 128 PJ/PRO TMDS
  15.247 +	504b  Rage 128 PK/PRO AGP 2x TMDS
  15.248 +	504c  Rage 128 PL/PRO AGP 4x TMDS
  15.249 +	504d  Rage 128 PM/PRO
  15.250 +	504e  Rage 128 PN/PRO AGP 2x
  15.251 +	504f  Rage 128 PO/PRO AGP 4x
  15.252 +	5050  Rage 128 PP/PRO TMDS
  15.253 +		1002 0008  Xpert 128
  15.254 +	5051  Rage 128 PQ/PRO AGP 2x TMDS
  15.255 +	5052  Rage 128 PR/PRO AGP 4x TMDS
  15.256 +	5053  Rage 128 PS/PRO
  15.257 +	5054  Rage 128 PT/PRO AGP 2x
  15.258 +	5055  Rage 128 PU/PRO AGP 4x
  15.259 +	5056  Rage 128 PV/PRO TMDS
  15.260 +	5057  Rage 128 PW/PRO AGP 2x TMDS
  15.261 +	5058  Rage 128 PX/PRO AGP 4x TMDS
  15.262  	5144  Radeon QD
  15.263 +		1002 0008  Radeon 7000/Radeon VE
  15.264 +		1002 0009  Radeon 7000/Radeon
  15.265 +		1002 000a  Radeon 7000/Radeon
  15.266 +		1002 001a  Radeon 7000/Radeon
  15.267 +		1002 0029  Radeon AIW
  15.268 +		1002 0038  Radeon 7000/Radeon
  15.269 +		1002 0039  Radeon 7000/Radeon
  15.270 +		1002 008a  Radeon 7000/Radeon
  15.271 +		1002 00ba  Radeon 7000/Radeon
  15.272 +		1002 0139  Radeon 7000/Radeon
  15.273 +		1002 028a  Radeon 7000/Radeon
  15.274 +		1002 02aa  Radeon AIW
  15.275 +		1002 053a  Radeon 7000/Radeon
  15.276  	5145  Radeon QE
  15.277  	5146  Radeon QF
  15.278  	5147  Radeon QG
  15.279 +	5148  Radeon R200 QH [Radeon 8500]
  15.280 +		1002 0152  FireGL 8800
  15.281 +		1002 0172  FireGL 8700
  15.282 +	5149  Radeon R200 QI
  15.283 +	514a  Radeon R200 QJ
  15.284 +	514b  Radeon R200 QK
  15.285 +	514c  Radeon R200 QL [Radeon 8500 LE]
  15.286 +		1002 003a  Radeon R200 QL [Radeon 8500 LE]
  15.287 +		1002 013a  Radeon 8500
  15.288 +	5157  Radeon 7500 QW
  15.289 +		1002 013a  Radeon 7500
  15.290 +		174b 7161  Radeon RV200 QW [Radeon 7500 LE]
  15.291 +	5158  Radeon 7500 QX
  15.292  	5159  Radeon VE QY
  15.293 +		1002 000a  Radeon 7000/Radeon VE
  15.294 +		1002 0038  Radeon 7000/Radeon VE
  15.295 +		1002 003a  Radeon 7000/Radeon VE
  15.296 +		1002 00ba  Radeon 7000/Radeon VE
  15.297 +		1002 013a  Radeon 7000/Radeon VE
  15.298 +		174b 7112  Radeon 7000 64M TVO
  15.299  	515a  Radeon VE QZ
  15.300 -	5245  Rage 128 RE
  15.301 -	5246  Rage 128 RF
  15.302 +	5168  Radeon R200 Qh
  15.303 +	5169  Radeon R200 Qi
  15.304 +	516a  Radeon R200 Qj
  15.305 +	516b  Radeon R200 Qk
  15.306 +	5245  Rage 128 RE/SG
  15.307 +		1002 0008  Xpert 128
  15.308 +		1002 0028  Rage 128 AIW
  15.309 +		1002 0029  Rage 128 AIW
  15.310 +		1002 0068  Rage 128 AIW
  15.311 +	5246  Rage 128 RF/SG AGP
  15.312 +		1002 0004  Magnum/Xpert 128/Xpert 99
  15.313 +		1002 0008  Magnum/Xpert128/X99/Xpert2000
  15.314 +		1002 0028  Rage 128 AIW AGP
  15.315 +		1002 0044  Rage Fury/Xpert 128/Xpert 2000
  15.316 +		1002 0068  Rage 128 AIW AGP
  15.317 +		1002 0448  Rage Fury
  15.318  	5247  Rage 128 RG
  15.319 -	524b  Rage 128 RK
  15.320 -	524c  Rage 128 RL
  15.321 -	5345  Rage 128 SE
  15.322 -	5346  Rage 128 SF
  15.323 -	5347  Rage 128 SG
  15.324 -	5348  Rage 128 4x
  15.325 -	534b  Rage 128 SK
  15.326 -	534c  Rage 128 SL
  15.327 -	534d  Rage 128 SM
  15.328 -	534e  Rage 128 SN
  15.329 +	524b  Rage 128 RK/VR
  15.330 +	524c  Rage 128 RL/VR AGP
  15.331 +		1002 0008  Xpert 99/Xpert 2000
  15.332 +		1002 0088  Xpert 99
  15.333 +	5345  Rage 128 SE/4x
  15.334 +	5346  Rage 128 SF/4x AGP 2x
  15.335 +	5347  Rage 128 SG/4x AGP 4x
  15.336 +	5348  Rage 128 SH
  15.337 +	534b  Rage 128 SK/4x
  15.338 +	534c  Rage 128 SL/4x AGP 2x
  15.339 +	534d  Rage 128 SM/4x AGP 4x
  15.340 +		1002 0008  Xpert 99/Xpert 2000
  15.341 +		1002 0018  Xpert 2000
  15.342 +	534e  Rage 128 4x
  15.343  	5354  Mach 64 VT
  15.344  		1002 5654  Mach 64 reference
  15.345 -	5446  Rage 128 Pro TF
  15.346 -	544c  Rage 128 Pro TL
  15.347 -	5452  Rage 128 Pro TR
  15.348 +	5446  Rage 128 Pro Ultra TF
  15.349 +		1002 0004  Rage Fury Pro
  15.350 +		1002 0008  Rage Fury Pro/Xpert 2000 Pro
  15.351 +		1002 0018  Rage Fury Pro/Xpert 2000 Pro
  15.352 +		1002 0028  Rage 128 AIW Pro AGP
  15.353 +		1002 0029  Rage 128 AIW
  15.354 +		1002 002a  Rage 128 AIW Pro AGP
  15.355 +		1002 002b  Rage 128 AIW
  15.356 +		1002 0048  Xpert 2000 Pro
  15.357 +	544c  Rage 128 Pro Ultra TL
  15.358 +	5452  Rage 128 Pro Ultra TR
  15.359 +		1002 001c  Rage 128 Pro 4XL
  15.360 +		103c 1279  Rage 128 Pro 4XL
  15.361 +	5453  Rage 128 Pro Ultra TS
  15.362 +	5454  Rage 128 Pro Ultra TT
  15.363 +	5455  Rage 128 Pro Ultra TU
  15.364  	5654  264VT [Mach64 VT]
  15.365  		1002 5654  Mach64VT Reference
  15.366  	5655  264VT3 [Mach64 VT3]
  15.367 @@ -255,7 +401,7 @@ 1004  VLSI Technology Inc
  15.368  	000c  82C541 [Lynx]
  15.369  	000d  82C543 [Lynx]
  15.370  	0101  82C532
  15.371 -	0102  82C534
  15.372 +	0102  82C534 [Eagle]
  15.373  	0103  82C538
  15.374  	0104  82C535
  15.375  	0105  82C147
  15.376 @@ -290,11 +436,17 @@ 100b  National Semiconductor Corporation
  15.377  	0001  DP83810
  15.378  	0002  87415/87560 IDE
  15.379  	000e  87560 Legacy I/O
  15.380 -	000f  OHCI Compliant FireWire Controller
  15.381 -	0011  National PCI System I/O
  15.382 +	000f  FireWire Controller
  15.383 +	0011  NS87560 National PCI System I/O
  15.384  	0012  USB Controller
  15.385  	0020  DP83815 (MacPhyter) Ethernet Controller
  15.386  	0022  DP83820 10/100/1000 Ethernet Controller
  15.387 +	0500  SCx200 Bridge
  15.388 +	0501  SCx200 SMI
  15.389 +	0502  SCx200 IDE
  15.390 +	0503  SCx200 Audio
  15.391 +	0504  SCx200 Video
  15.392 +	0505  SCx200 XBus
  15.393  	d001  87410 IDE
  15.394  100c  Tseng Labs Inc
  15.395  	3202  ET4000/W32p rev A
  15.396 @@ -305,9 +457,10 @@ 100c  Tseng Labs Inc
  15.397  	4702  ET6300
  15.398  100d  AST Research Inc
  15.399  100e  Weitek
  15.400 -	9000  P9000
  15.401 -	9001  P9000
  15.402 -	9100  P9100
  15.403 +	9000  P9000 Viper
  15.404 +	9001  P9000 Viper
  15.405 +	9002  P9000 Viper
  15.406 +	9100  P9100 Viper Pro/SE
  15.407  1010  Video Logic, Ltd.
  15.408  1011  Digital Equipment Corporation
  15.409  	0001  DECchip 21050
  15.410 @@ -316,6 +469,7 @@ 1011  Digital Equipment Corporation
  15.411  	0007  NVRAM [Zephyr NVRAM]
  15.412  	0008  KZPSA [KZPSA]
  15.413  	0009  DECchip 21140 [FasterNet]
  15.414 +		1025 0310  21140 Fast Ethernet
  15.415  		10b8 2001  SMC9332BDT EtherPower 10/100
  15.416  		10b8 2002  SMC9332BVT EtherPower T4 10/100
  15.417  		10b8 2003  SMC9334BDT EtherPower 10/100 (1-port)
  15.418 @@ -328,6 +482,7 @@ 1011  Digital Equipment Corporation
  15.419  		1186 1112  DFE-570TX Fast Ethernet
  15.420  		1186 1140  DFE-660 Cardbus Ethernet 10/100
  15.421  		1186 1142  DFE-660 Cardbus Ethernet 10/100
  15.422 +		11f6 0503  Freedomline Fast Ethernet
  15.423  		1282 9100  AEF-380TXD Fast Ethernet
  15.424  		1385 1100  FA310TX Fast Ethernet
  15.425  		2646 0001  KNE100TX Fast Ethernet
  15.426 @@ -338,11 +493,16 @@ 1011  Digital Equipment Corporation
  15.427  		1186 0100  DE-530+
  15.428  	0016  DGLPB [OPPO]
  15.429  	0019  DECchip 21142/43
  15.430 -		1011 500b  DE500 Fast Ethernet
  15.431 +		1011 500a  DE500A Fast Ethernet
  15.432 +		1011 500b  DE500B Fast Ethernet
  15.433  		1014 0001  10/100 EtherJet Cardbus
  15.434  		1025 0315  ALN315 Fast Ethernet
  15.435 +		1033 800c  PC-9821-CS01
  15.436 +		1033 800d  PC-9821NR-B06
  15.437  		108d 0016  Rapidfire 2327 10/100 Ethernet
  15.438 +		108d 0017  GoCard 2250 Ethernet 10/100 Cardbus
  15.439  		10b8 2005  SMC8032DT Extreme Ethernet 10/100
  15.440 +		10b8 8034  SMC8034 Extreme Ethernet 10/100
  15.441  		10ef 8169  Cardbus Fast Ethernet
  15.442  		1109 2a00  ANA-6911A/TX Fast Ethernet
  15.443  		1109 2b00  ANA-6911A/TXC Fast Ethernet
  15.444 @@ -355,25 +515,38 @@ 1011  Digital Equipment Corporation
  15.445  		1186 1100  DFE-500TX Fast Ethernet
  15.446  		1186 1101  DFE-500TX Fast Ethernet
  15.447  		1186 1102  DFE-500TX Fast Ethernet
  15.448 +		1259 2800  AT-2800Tx Fast Ethernet
  15.449  		1266 0004  Eagle Fast EtherMAX
  15.450  		12af 0019  NetFlyer Cardbus Fast Ethernet
  15.451  		1374 0001  Cardbus Ethernet Card 10/100
  15.452 +		1374 0002  Cardbus Ethernet Card 10/100
  15.453 +		1374 0007  Cardbus Ethernet Card 10/100
  15.454 +		1374 0008  Cardbus Ethernet Card 10/100
  15.455  		1395 0001  10/100 Ethernet CardBus PC Card
  15.456 +		13d1 ab01  EtherFast 10/100 Cardbus (PCMPC200)
  15.457  		8086 0001  EtherExpress PRO/100 Mobile CardBus 32
  15.458 +	001a  Farallon PN9000SX
  15.459  	0021  DECchip 21052
  15.460  	0022  DECchip 21150
  15.461  	0023  DECchip 21150
  15.462  	0024  DECchip 21152
  15.463  	0025  DECchip 21153
  15.464  	0026  DECchip 21154
  15.465 +	0034  56k Modem Cardbus
  15.466 +		1374 0003  56k Modem Cardbus
  15.467  	0045  DECchip 21553
  15.468  	0046  DECchip 21554
  15.469 +		0e11 4050  Integrated Smart Array
  15.470 +		0e11 4051  Integrated Smart Array
  15.471 +		0e11 4058  Integrated Smart Array
  15.472  		103c 10c2  Hewlett-Packard NetRAID-4M
  15.473 +		12d9 000a  VoIP PCI Gateway
  15.474  		9005 0365  Adaptec 5400S
  15.475  		9005 1364  Dell PowerEdge RAID Controller 2
  15.476  		9005 1365  Dell PowerEdge RAID Controller 2
  15.477 +		e4bf 1000  CC8-1-BLUES
  15.478  	1065  StrongARM DC21285
  15.479 -		1069 0020  DAC960P
  15.480 +		1069 0020  DAC960P / DAC1164P
  15.481  1012  Micronics Computers Inc
  15.482  1013  Cirrus Logic
  15.483  	0038  GD 7548
  15.484 @@ -391,10 +564,13 @@ 1013  Cirrus Logic
  15.485  	00d0  GD 5462
  15.486  	00d2  GD 5462 [Laguna I]
  15.487  	00d4  GD 5464 [Laguna]
  15.488 +	00d5  GD 5464 BD [Laguna]
  15.489  	00d6  GD 5465 [Laguna]
  15.490 +		13ce 8031  Barco Metheus 2 Megapixel, Dual Head
  15.491 +		13cf 8031  Barco Metheus 2 Megapixel, Dual Head
  15.492  	00e8  GD 5436U
  15.493  	1100  CL 6729
  15.494 -	1110  PD 6832
  15.495 +	1110  PD 6832 PCMCIA/CardBus Ctrlr
  15.496  	1112  PD 6834 PCMCIA/CardBus Ctrlr
  15.497  	1113  PD 6833 PCMCIA/CardBus Ctrlr
  15.498  	1200  GD 7542 [Nordic]
  15.499 @@ -405,6 +581,8 @@ 1013  Cirrus Logic
  15.500  		1014 1010  CS4610 SoundFusion Audio Accelerator
  15.501  	6003  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
  15.502  		1013 4280  Crystal SoundFusion PCI Audio Accelerator
  15.503 +		1681 0050  Hercules Game Theater XP
  15.504 +	6004  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
  15.505  	6005  Crystal CS4281 PCI Audio
  15.506  		1013 4281  Crystal CS4281 PCI Audio
  15.507  		10cf 10a8  Crystal CS4281 PCI Audio
  15.508 @@ -424,6 +602,7 @@ 1014  IBM
  15.509  	0017  CPU to PCI Bridge
  15.510  	0018  TR Auto LANstreamer
  15.511  	001b  GXT-150P
  15.512 +	001c  Carrera
  15.513  	001d  82G2675
  15.514  	0020  MCA
  15.515  	0022  IBM27-82351
  15.516 @@ -464,11 +643,14 @@ 1014  IBM
  15.517  	00b7  256-bit Graphics Rasterizer [Fire GL1]
  15.518  		1902 00b8  Fire GL1
  15.519  	00be  ATM 622MBPS Controller (1410be00)
  15.520 +	00fc  CPC710 Dual Bridge and Memory Controller (PCI-64)
  15.521 +	0105  CPC710 Dual Bridge and Memory Controller (PCI-32)
  15.522  	0142  Yotta Video Compositor Input
  15.523  		1014 0143  Yotta Input Controller (ytin)
  15.524  	0144  Yotta Video Compositor Output
  15.525  		1014 0145  Yotta Output Controller (ytout)
  15.526  	0156  405GP PLB to PCI Bridge
  15.527 +	01a7  PCI-X to PCI-X Bridge
  15.528  	01bd  Netfinity ServeRAID controller
  15.529  	01be  ServeRAID-4M
  15.530  	01bf  ServeRAID-4L
  15.531 @@ -497,20 +679,28 @@ 101c  Western Digital
  15.532  	c24a  90C
  15.533  101e  American Megatrends Inc.
  15.534  	1960  MegaRAID
  15.535 +		101e 0471  MegaRAID 471 Enterprise 1600 RAID Controller
  15.536 +		101e 0475  MegaRAID 475 Express 500 RAID Controller
  15.537 +		101e 0493  MegaRAID 493 Elite 1600 RAID Controller
  15.538  		1028 0471  PowerEdge RAID Controller 3/QC
  15.539 +		1028 0475  PowerEdge RAID Controller 3/SC
  15.540  		1028 0493  PowerEdge RAID Controller 3/DC
  15.541 -	9010  MegaRAID
  15.542 +		1028 0511  PowerEdge Cost Effective RAID Controller ATA100/4Ch
  15.543 +	9010  MegaRAID 428 Ultra RAID Controller
  15.544  	9030  EIDE Controller
  15.545  	9031  EIDE Controller
  15.546  	9032  EIDE & SCSI Controller
  15.547  	9033  SCSI Controller
  15.548  	9040  Multimedia card
  15.549 -	9060  MegaRAID
  15.550 +	9060  MegaRAID 434 Ultra GT RAID Controller
  15.551 +	9063  MegaRAC
  15.552 +		101e 0767  Dell Remote Assistant Card 2
  15.553  101f  PictureTel
  15.554  1020  Hitachi Computer Products
  15.555  1021  OKI Electric Industry Co. Ltd.
  15.556  1022  Advanced Micro Devices [AMD]
  15.557  	2000  79c970 [PCnet LANCE]
  15.558 +		1014 2000  NetFinity 10/100 Fast Ethernet
  15.559  		103c 104c  Ethernet with LAN remote power Adapter
  15.560  		103c 1064  Ethernet with LAN remote power Adapter
  15.561  		103c 1065  Ethernet with LAN remote power Adapter
  15.562 @@ -519,15 +709,21 @@ 1022  Advanced Micro Devices [AMD]
  15.563  		103c 10ea  Ethernet with LAN remote power Adapter
  15.564  		1113 1220  EN1220 10/100 Fast Ethernet
  15.565  		1259 2450  AT-2450 10/100 Fast Ethernet
  15.566 +		1259 2454  AT-2450v4 10Mb Ethernet Adapter
  15.567  		1259 2700  AT-2700TX 10/100 Fast Ethernet
  15.568  		1259 2701  AT-2700FX 100Mb Ethernet
  15.569  	2001  79c978 [HomePNA]
  15.570 +		1092 0a78  Multimedia Home Network Adapter
  15.571 +		1668 0299  ActionLink Home Network Adapter
  15.572  	2020  53c974 [PCscsi]
  15.573  	2040  79c974
  15.574 +	3000  ELanSC520 Microcontroller
  15.575  	7006  AMD-751 [Irongate] System Controller
  15.576  	7007  AMD-751 [Irongate] AGP Bridge
  15.577 -	700e  AMD-760 [Irongate] System Controller
  15.578 -	700f  AMD-760 [Irongate] AGP Bridge
  15.579 +	700c  AMD-760 MP [IGD4-2P] System Controller
  15.580 +	700d  AMD-760 MP [IGD4-2P] AGP Bridge
  15.581 +	700e  AMD-760 [IGD4-1P] System Controller
  15.582 +	700f  AMD-760 [IGD4-1P] AGP Bridge
  15.583  	7400  AMD-755 [Cobra] ISA
  15.584  	7401  AMD-755 [Cobra] IDE
  15.585  	7403  AMD-755 [Cobra] ACPI
  15.586 @@ -536,15 +732,29 @@ 1022  Advanced Micro Devices [AMD]
  15.587  	7409  AMD-756 [Viper] IDE
  15.588  	740b  AMD-756 [Viper] ACPI
  15.589  	740c  AMD-756 [Viper] USB
  15.590 -	7410  AMD-765 [Viper] ISA
  15.591 -	7411  AMD-765 [Viper] IDE
  15.592 -	7413  AMD-765 [Viper] ACPI
  15.593 -	7414  AMD-765 [Viper] USB
  15.594 -	7440  AMD-768 [??] ISA
  15.595 -	7441  AMD-768 [??] IDE
  15.596 -	7443  AMD-768 [??] ACPI
  15.597 -	7448  AMD-768 [??] PCI
  15.598 -	7449  AMD-768 [??] USB
  15.599 +	7410  AMD-766 [ViperPlus] ISA
  15.600 +	7411  AMD-766 [ViperPlus] IDE
  15.601 +	7413  AMD-766 [ViperPlus] ACPI
  15.602 +	7414  AMD-766 [ViperPlus] USB
  15.603 +	7440  AMD-768 [Opus] ISA
  15.604 +		1043 8044  A7M-D Mainboard
  15.605 +	7441  AMD-768 [Opus] IDE
  15.606 +	7443  AMD-768 [Opus] ACPI
  15.607 +		1043 8044  A7M-D Mainboard
  15.608 +	7445  AMD-768 [Opus] Audio
  15.609 +	7448  AMD-768 [Opus] PCI
  15.610 +	7449  AMD-768 [Opus] USB
  15.611 +	7454  AMD-8151 System Controller
  15.612 +	7455  AMD-8151 AGP Bridge
  15.613 +	7460  AMD-8111 PCI
  15.614 +	7461  AMD-8111 USB
  15.615 +	7462  AMD-8111 Ethernet
  15.616 +	7468  AMD-8111 LPC
  15.617 +	7469  AMD-8111 IDE
  15.618 +	746a  AMD-8111 SMBus 2.0
  15.619 +	746b  AMD-8111 ACPI
  15.620 +	746d  AMD-8111 AC97 Audio
  15.621 +	756b  AMD-8111 ACPI
  15.622  1023  Trident Microsystems
  15.623  	0194  82C194
  15.624  	2000  4DWave DX
  15.625 @@ -557,6 +767,7 @@ 1023  Trident Microsystems
  15.626  	8520  CyberBlade i1
  15.627  		0e11 b16e  CyberBlade i1 AGP
  15.628  		1023 8520  CyberBlade i1 AGP
  15.629 +	8820  CyberBlade XPAi1
  15.630  	9320  TGUI 9320
  15.631  	9350  GUI Accelerator
  15.632  	9360  Flat panel GUI Accelerator
  15.633 @@ -574,13 +785,14 @@ 1023  Trident Microsystems
  15.634  	9470  TGUI 9470
  15.635  	9520  Cyber 9520
  15.636  	9525  Cyber 9525
  15.637 +		10cf 1094  Lifebook C6155
  15.638  	9540  Cyber 9540
  15.639 -	9660  TGUI 9660/968x/968x
  15.640 +	9660  TGUI 9660/938x/968x
  15.641  	9680  TGUI 9680
  15.642  	9682  TGUI 9682
  15.643  	9683  TGUI 9683
  15.644  	9685  ProVIDIA 9685
  15.645 -	9750  3DIm`age 975
  15.646 +	9750  3DImage 9750
  15.647  		1014 9750  3DImage 9750
  15.648  		1023 9750  3DImage 9750
  15.649  	9753  TGUI 9753
  15.650 @@ -620,6 +832,7 @@ 1025  Acer Incorporated [ALI]
  15.651  	1621  M1621 Northbridge [Aladdin-Pro II]
  15.652  	1631  M1631 Northbridge+3D Graphics [Aladdin TNT2]
  15.653  	1641  M1641 Northbridge [Aladdin-Pro IV]
  15.654 +	1647  M1647 [MaGiK1] PCI North Bridge
  15.655  	3141  M3141
  15.656  	3143  M3143
  15.657  	3145  M3145
  15.658 @@ -629,35 +842,48 @@ 1025  Acer Incorporated [ALI]
  15.659  	3307  M3307 MPEG-I Video Controller
  15.660  	3309  M3309 MPEG-II Video w/ Software Audio Decoder
  15.661  	3321  M3321 MPEG-II Audio/Video Decoder
  15.662 -	5212  ALI M4803
  15.663 +	5212  M4803
  15.664  	5215  ALI PCI EIDE Controller
  15.665  	5217  M5217H
  15.666  	5219  M5219
  15.667  	5225  M5225
  15.668  	5229  M5229
  15.669  	5235  M5235
  15.670 -	5237  ALI M5237 PCI USB Host Controller
  15.671 +	5237  M5237 PCI USB Host Controller
  15.672  	5240  EIDE Controller
  15.673  	5241  PCMCIA Bridge
  15.674  	5242  General Purpose Controller
  15.675  	5243  PCI to PCI Bridge Controller
  15.676  	5244  Floppy Disk Controller
  15.677 -	5247  ALI M1541 PCI to PCI Bridge
  15.678 -	5251  M5251 P1394 OHCI Controller
  15.679 -	5427  ALI PCI to AGP Bridge
  15.680 -	5451  ALI M5451 PCI AC-Link Controller Audio Device
  15.681 -	5453  ALI M5453 PCI AC-Link Controller Modem Device
  15.682 -	7101  ALI M7101 PCI PMU Power Management Controller
  15.683 -		10b9 7101  ALI M7101 PCI PMU Power Management Controller
  15.684 +	5247  M1541 PCI to PCI Bridge
  15.685 +	5251  M5251 P1394 Controller
  15.686 +	5427  PCI to AGP Bridge
  15.687 +	5451  M5451 PCI AC-Link Controller Audio Device
  15.688 +	5453  M5453 PCI AC-Link Controller Modem Device
  15.689 +	7101  M7101 PCI PMU Power Management Controller
  15.690 +		10b9 7101  M7101 PCI PMU Power Management Controller
  15.691  1028  Dell Computer Corporation
  15.692  	0001  PowerEdge Expandable RAID Controller 2/Si
  15.693 -	0002  PowerEdge Expandable RAID Controller 3/Di
  15.694 +		1028 0001  PowerEdge Expandable RAID Controller 2/Si
  15.695 +	0002  PowerEdge Expandable RAID Controller 3
  15.696 +		1028 0002  PowerEdge Expandable RAID Controller 3/Di
  15.697 +		1028 00d1  PowerEdge Expandable RAID Controller 3/Di
  15.698 +		1028 00d9  PowerEdge Expandable RAID Controller 3/Di
  15.699  	0003  PowerEdge Expandable RAID Controller 3/Si
  15.700 +		1028 0003  PowerEdge Expandable RAID Controller 3/Si
  15.701  	0004  PowerEdge Expandable RAID Controller 3/Si
  15.702 +		1028 00d0  PowerEdge Expandable RAID Controller 3/Si
  15.703  	0005  PowerEdge Expandable RAID Controller 3/Di
  15.704  	0006  PowerEdge Expandable RAID Controller 3/Di
  15.705 +	0007  Remote Assistant Card 3
  15.706  	0008  PowerEdge Expandable RAID Controller 3/Di
  15.707 -	000a  PowerEdge Expandable RAID Controller 3/Di
  15.708 +	000a  PowerEdge Expandable RAID Controller 3
  15.709 +		1027 0121  PowerEdge Expandable RAID Controller 3/Di
  15.710 +		1028 0106  PowerEdge Expandable RAID Controller 3/Di
  15.711 +		1028 011b  PowerEdge Expandable RAID Controller 3/Di
  15.712 +	000c  Embedded Systems Management Device 4
  15.713 +	000e  PowerEdge Expandable RAID Controller
  15.714 +	000f  PowerEdge Expandable RAID Controller 4/Di
  15.715  1029  Siemens Nixdorf IS
  15.716  102a  LSI Logic
  15.717  	0000  HYDRA
  15.718 @@ -698,9 +924,23 @@ 102b  Matrox Graphics, Inc.
  15.719  		102b ca6c  Millennium G250 AGP
  15.720  		102b dbbc  Millennium G200 AGP
  15.721  		102b dbc2  Millennium G200 MMS (Dual G200)
  15.722 +		102b dbc3  G200 Multi-Monitor
  15.723  		102b dbc8  Millennium G200 MMS (Dual G200)
  15.724 +		102b dbd2  G200 Multi-Monitor
  15.725 +		102b dbd3  G200 Multi-Monitor
  15.726 +		102b dbd4  G200 Multi-Monitor
  15.727 +		102b dbd5  G200 Multi-Monitor
  15.728 +		102b dbd8  G200 Multi-Monitor
  15.729 +		102b dbd9  G200 Multi-Monitor
  15.730  		102b dbe2  Millennium G200 MMS (Quad G200)
  15.731 +		102b dbe3  G200 Multi-Monitor
  15.732  		102b dbe8  Millennium G200 MMS (Quad G200)
  15.733 +		102b dbf2  G200 Multi-Monitor
  15.734 +		102b dbf3  G200 Multi-Monitor
  15.735 +		102b dbf4  G200 Multi-Monitor
  15.736 +		102b dbf5  G200 Multi-Monitor
  15.737 +		102b dbf8  G200 Multi-Monitor
  15.738 +		102b dbf9  G200 Multi-Monitor
  15.739  		102b f806  Mystique G200 Video AGP
  15.740  		102b ff00  MGA-G200 AGP
  15.741  		102b ff02  Mystique G200 AGP
  15.742 @@ -708,16 +948,18 @@ 102b  Matrox Graphics, Inc.
  15.743  		102b ff04  Marvel G200 AGP
  15.744  		110a 0032  MGA-G200 AGP
  15.745  	0525  MGA G400 AGP
  15.746 -		0e11 b16f  Matrox MGA-G400 AGP
  15.747 +		0e11 b16f  MGA-G400 AGP
  15.748  		102b 0328  Millennium G400 16Mb SDRAM
  15.749  		102b 0338  Millennium G400 16Mb SDRAM
  15.750  		102b 0378  Millennium G400 32Mb SDRAM
  15.751  		102b 0541  Millennium G450 Dual Head
  15.752  		102b 0542  Millennium G450 Dual Head LX
  15.753 -		102b 0641  Millennium G450 32Mb SDRAM
  15.754 +		102b 0543  Millennium G450 Single Head LX
  15.755 +		102b 0641  Millennium G450 32Mb SDRAM Dual Head
  15.756  		102b 0642  Millennium G450 32Mb SDRAM Dual Head LX
  15.757 +		102b 0643  Millennium G450 32Mb SDRAM Single Head LX
  15.758  		102b 07c0  Millennium G450 Dual Head LE
  15.759 -		102b 07c1  Millennium G450 SDR Dual Head
  15.760 +		102b 07c1  Millennium G450 SDR Dual Head LE
  15.761  		102b 0d41  Millennium G450 Dual Head PCI
  15.762  		102b 0d42  Millennium G450 Dual Head LX PCI
  15.763  		102b 0e00  Marvel G450 eTV
  15.764 @@ -733,11 +975,26 @@ 102b  Matrox Graphics, Inc.
  15.765  		102b 2159  Millennium G400 Dual Head 16Mb
  15.766  		102b 2179  Millennium G400 MAX/Dual Head 32Mb
  15.767  		102b 217d  Millennium G400 Dual Head Max
  15.768 +		102b 23c0  Millennium G450
  15.769 +		102b 23c1  Millennium G450
  15.770 +		102b 23c2  Millennium G450 DVI
  15.771 +		102b 23c3  Millennium G450 DVI
  15.772  		102b 2f58  Millennium G400
  15.773  		102b 2f78  Millennium G400
  15.774  		102b 3693  Marvel G400 AGP
  15.775 -		1705 0001  Millennium G450 32MB SGRAM
  15.776 -		b16f 0e11  Matrox MGA-G400 AGP
  15.777 +		102b 5dd0  4Sight II
  15.778 +		102b 5f50  4Sight II
  15.779 +		102b 5f51  4Sight II
  15.780 +		102b 5f52  4Sight II
  15.781 +		102b 9010  Millennium G400 Dual Head
  15.782 +		1458 0400  GA-G400
  15.783 +		1705 0001  Digital First Millennium G450 32MB SGRAM
  15.784 +		1705 0002  Digital First Millennium G450 16MB SGRAM
  15.785 +		1705 0003  Digital First Millennium G450 32MB
  15.786 +		1705 0004  Digital First Millennium G450 16MB
  15.787 +		b16f 0e11  MGA-G400 AGP
  15.788 +	0527  MGA Parhelia AGP
  15.789 +		102b 0840  Parhelia 128Mb
  15.790  	0d10  MGA Ultima/Impression
  15.791  	1000  MGA G100 [Productiva]
  15.792  		102b ff01  Productiva G100
  15.793 @@ -752,12 +1009,15 @@ 102b  Matrox Graphics, Inc.
  15.794  		110a 001e  MGA-G100 AGP
  15.795  	2007  MGA Mistral
  15.796  	2527  MGA G550 AGP
  15.797 +		102b 0f83  Millennium G550
  15.798  		102b 0f84  Millennium G550 Dual Head DDR 32Mb
  15.799 +		102b 1e41  Millennium G550
  15.800  	4536  VIA Framegrabber
  15.801  	6573  Shark 10/100 Multiport SwitchNIC
  15.802  102c  Chips and Technologies
  15.803  	00b8  F64310
  15.804  	00c0  F69000 HiQVideo
  15.805 +		102c 00c0  F69000 HiQVideo
  15.806  	00d0  F65545
  15.807  	00d8  F65545
  15.808  	00dc  F65548
  15.809 @@ -768,12 +1028,14 @@ 102c  Chips and Technologies
  15.810  	00f0  F68554
  15.811  	00f4  F68554 HiQVision
  15.812  	00f5  F68555
  15.813 +	0c30  F69030
  15.814  102d  Wyse Technology Inc.
  15.815  	50dc  3328 Audio
  15.816  102e  Olivetti Advanced Technology
  15.817  102f  Toshiba America
  15.818  	0009  r4x00
  15.819  	0020  ATM Meteor 155
  15.820 +		102f 00f8  ATM Meteor 155
  15.821  1030  TMC Research
  15.822  1031  Miro Computer Products AG
  15.823  	5601  DC20 ASIC
  15.824 @@ -796,6 +1058,8 @@ 1033  NEC Corporation
  15.825  	0029  PowerVR PCX1
  15.826  	002a  PowerVR 3D
  15.827  	0035  USB
  15.828 +		1179 0001  USB
  15.829 +		12ee 7000  Root Hub
  15.830  	003e  NAPCCARD Cardbus Controller
  15.831  	0046  PowerVR PCX2 [midas]
  15.832  	005a  Vrc5074 [Nile 4]
  15.833 @@ -812,6 +1076,11 @@ 1033  NEC Corporation
  15.834  	0074  56k Voice Modem
  15.835  		1033 8014  RCV56ACF 56k Voice Modem
  15.836  	009b  Vrc5476
  15.837 +	00a6  VRC5477 AC97
  15.838 +	00cd  IEEE 1394 [OrangeLink] Host Controller
  15.839 +		12ee 8011  Root hub
  15.840 +	00e0  USB 2.0
  15.841 +		12ee 7001  Root hub
  15.842  1034  Framatome Connectors USA Inc.
  15.843  1035  Comp. & Comm. Research Lab
  15.844  1036  Future Domain Corp.
  15.845 @@ -825,10 +1094,12 @@ 1039  Silicon Integrated Systems [SiS]
  15.846  	0008  85C503/5513
  15.847  	0009  ACPI
  15.848  	0018  SiS85C503/5513 (LPC Bridge)
  15.849 -	0200  5597/5598 VGA
  15.850 +	0200  5597/5598/6326 VGA
  15.851  		1039 0000  SiS5597 SVGA (Shared RAM)
  15.852  	0204  82C204
  15.853  	0205  SG86C205
  15.854 +	0300  300/200
  15.855 +		107d 2720  Leadtek WinFast VR300
  15.856  	0406  85C501/2
  15.857  	0496  85C496
  15.858  	0530  530 Host
  15.859 @@ -837,10 +1108,19 @@ 1039  Silicon Integrated Systems [SiS]
  15.860  	0601  85C601
  15.861  	0620  620 Host
  15.862  	0630  630 Host
  15.863 +	0633  633 Host
  15.864 +	0635  635 Host
  15.865 +	0645  645 Host
  15.866 +	0646  645DX Host
  15.867 +	0650  650 Host
  15.868  	0730  730 Host
  15.869 +	0733  733 Host
  15.870  	0735  735 Host
  15.871 +	0740  740 Host
  15.872 +	0745  745 Host
  15.873  	0900  SiS900 10/100 Ethernet
  15.874  		1039 0900  SiS900 10/100 Ethernet Adapter
  15.875 +	0961  SiS961 [MuTIOL Media IO]
  15.876  	3602  83C602
  15.877  	5107  5107
  15.878  	5300  SiS540 PCI Display Adapter
  15.879 @@ -862,7 +1142,7 @@ 1039  Silicon Integrated Systems [SiS]
  15.880  	6300  SiS630 GUI Accelerator+3D
  15.881  	6306  6306 3D-AGP
  15.882  		1039 6306  SiS530,620 GUI Accelerator+3D
  15.883 -	6326  86C326
  15.884 +	6326  86C326 5598/6326
  15.885  		1039 6326  SiS6326 GUI Accelerator
  15.886  		1092 0a50  SpeedStar A50
  15.887  		1092 0a70  SpeedStar A70
  15.888 @@ -870,8 +1150,9 @@ 1039  Silicon Integrated Systems [SiS]
  15.889  		1092 4920  SpeedStar A70
  15.890  		1569 6326  SiS6326 GUI Accelerator
  15.891  	7001  7001
  15.892 -	7007  OHCI Compliant FireWire Controller
  15.893 +	7007  FireWire Controller
  15.894  	7012  SiS7012 PCI Audio Accelerator
  15.895 +	7013  56k Winmodem (Smart Link HAMR5600 compatible)
  15.896  	7016  SiS7016 10/100 Ethernet Adapter
  15.897  		1039 7016  SiS7016 10/100 Ethernet Adapter
  15.898  	7018  SiS PCI Audio Accelerator
  15.899 @@ -901,15 +1182,36 @@ 103a  Seiko Epson Corporation
  15.900  103b  Tatung Co. of America
  15.901  103c  Hewlett-Packard Company
  15.902  	1005  A4977A Visualize EG
  15.903 -	1030  J2585A
  15.904 -	1031  J2585B
  15.905 +	1006  Visualize FX6
  15.906 +	1008  Visualize FX4
  15.907 +	100a  Visualize FX2
  15.908 +	1028  Tach TL Fibre Channel Host Adapter
  15.909 +	1029  Tach XL2 Fibre Channel Host Adapter
  15.910 +		107e 000f  Interphase 5560 Fibre Channel Adapter
  15.911 +		9004 9210  1Gb/2Gb Family Fibre Channel Controller
  15.912 +		9004 9211  1Gb/2Gb Family Fibre Channel Controller
  15.913 +	102a  Tach TS Fibre Channel Host Adapter
  15.914 +		107e 000e  Interphase 5540/5541 Fibre Channel Adapter
  15.915 +		9004 9110  1Gb/2Gb Family Fibre Channel Controller
  15.916 +		9004 9111  1Gb/2Gb Family Fibre Channel Controller
  15.917 +	1030  J2585A DeskDirect 10/100VG NIC
  15.918 +	1031  J2585B HP 10/100VG PCI LAN Adapter
  15.919  		103c 1040  J2973A DeskDirect 10BaseT NIC
  15.920  		103c 1041  J2585B DeskDirect 10/100VG NIC
  15.921  		103c 1042  J2970A DeskDirect 10BaseT/2 NIC
  15.922  	1040  J2973A DeskDirect 10BaseT NIC
  15.923  	1041  J2585B DeskDirect 10/100 NIC
  15.924  	1042  J2970A DeskDirect 10BaseT/2 NIC
  15.925 +	1048  Diva Serial [GSP] Multiport UART
  15.926 +		103c 1049  Tosca Console
  15.927 +		103c 104a  Tosca Secondary
  15.928 +		103c 104b  Maestro SP2
  15.929 +		103c 1223  Halfdome Console
  15.930 +		103c 1226  Keystone SP2
  15.931 +		103c 1227  Powerbar SP2
  15.932 +		103c 1282  Everest SP2
  15.933  	1064  79C970 PCnet Ethernet Controller
  15.934 +	108b  Visualize FXe
  15.935  	10c1  NetServer Smart IRQ Router
  15.936  	10ed  TopTools Remote Control
  15.937  	1200  82557B 10/100 NIC
  15.938 @@ -917,8 +1219,12 @@ 103c  Hewlett-Packard Company
  15.939  	121a  NetServer SMIC Controller
  15.940  	121b  NetServer Legacy COM Port Decoder
  15.941  	121c  NetServer PCI COM Port Decoder
  15.942 -	2910  E2910A
  15.943 -	2925  E2925A
  15.944 +	1229  zx1 System Bus Adapter
  15.945 +	122a  zx1 I/O Controller
  15.946 +	122e  zx1 Local Bus Adapter
  15.947 +	1290  Auxiliary Diva Serial Port
  15.948 +	2910  E2910A PCIBus Exerciser
  15.949 +	2925  E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
  15.950  103e  Solliday Engineering
  15.951  103f  Synopsys/Logic Modeling Group
  15.952  1040  Accelgraphics Inc.
  15.953 @@ -930,11 +1236,49 @@ 1042  Micron
  15.954  	3010  Samurai_1
  15.955  	3020  Samurai_IDE
  15.956  1043  Asustek Computer, Inc.
  15.957 +	0675  ISDNLink P-IN100-ST-D
  15.958 +	4057  V8200 GeForce 3
  15.959  1044  Distributed Processing Technology
  15.960  	1012  Domino RAID Engine
  15.961  	a400  SmartCache/Raid I-IV Controller
  15.962  	a500  PCI Bridge
  15.963  	a501  SmartRAID V Controller
  15.964 +		1044 c001  PM1554U2 Ultra2 Single Channel
  15.965 +		1044 c002  PM1654U2 Ultra2 Single Channel
  15.966 +		1044 c003  PM1564U3 Ultra3 Single Channel
  15.967 +		1044 c004  PM1564U3 Ultra3 Dual Channel
  15.968 +		1044 c005  PM1554U2 Ultra2 Single Channel (NON ACPI)
  15.969 +		1044 c00a  PM2554U2 Ultra2 Single Channel
  15.970 +		1044 c00b  PM2654U2 Ultra2 Single Channel
  15.971 +		1044 c00c  PM2664U3 Ultra3 Single Channel
  15.972 +		1044 c00d  PM2664U3 Ultra3 Dual Channel
  15.973 +		1044 c00e  PM2554U2 Ultra2 Single Channel (NON ACPI)
  15.974 +		1044 c00f  PM2654U2 Ultra2 Single Channel (NON ACPI)
  15.975 +		1044 c014  PM3754U2 Ultra2 Single Channel (NON ACPI)
  15.976 +		1044 c015  PM3755U2B Ultra2 Single Channel (NON ACPI)
  15.977 +		1044 c016  PM3755F Fibre Channel (NON ACPI)
  15.978 +		1044 c01e  PM3757U2 Ultra2 Single Channel
  15.979 +		1044 c01f  PM3757U2 Ultra2 Dual Channel
  15.980 +		1044 c020  PM3767U3 Ultra3 Dual Channel
  15.981 +		1044 c021  PM3767U3 Ultra3 Quad Channel
  15.982 +		1044 c028  PM2865U3 Ultra3 Single Channel
  15.983 +		1044 c029  PM2865U3 Ultra3 Dual Channel
  15.984 +		1044 c02a  PM2865F Fibre Channel
  15.985 +		1044 c03c  2000S Ultra3 Single Channel
  15.986 +		1044 c03d  2000S Ultra3 Dual Channel
  15.987 +		1044 c03e  2000F Fibre Channel
  15.988 +		1044 c046  3000S Ultra3 Single Channel
  15.989 +		1044 c047  3000S Ultra3 Dual Channel
  15.990 +		1044 c048  3000F Fibre Channel
  15.991 +		1044 c050  5000S Ultra3 Single Channel
  15.992 +		1044 c051  5000S Ultra3 Dual Channel
  15.993 +		1044 c052  5000F Fibre Channel
  15.994 +		1044 c05a  2400A UDMA Four Channel
  15.995 +		1044 c05b  2400A UDMA Four Channel DAC
  15.996 +		1044 c064  3010S Ultra3 Dual Channel
  15.997 +		1044 c065  3010S Ultra3 Four Channel
  15.998 +		1044 c066  3010S Fibre Channel
  15.999 +	a511  SmartRAID V Controller
 15.1000  1045  OPTi Inc.
 15.1001  	a0f8  82C750 [Vendetta] USB Controller
 15.1002  	c101  92C264
 15.1003 @@ -945,8 +1289,8 @@ 1045  OPTi Inc.
 15.1004  	c567  82C750 [Vendetta], device 0
 15.1005  	c568  82C750 [Vendetta], device 1
 15.1006  	c569  82C579 [Viper XPress+ Chipset]
 15.1007 -	c621  82C621
 15.1008 -	c700  82C700
 15.1009 +	c621  82C621 [Viper-M/N+]
 15.1010 +	c700  82C700 [FireStar]
 15.1011  	c701  82C701 [FireStar Plus]
 15.1012  	c814  82C814 [Firebridge 1]
 15.1013  	c822  82C822
 15.1014 @@ -957,16 +1301,20 @@ 1045  OPTi Inc.
 15.1015  	c895  82C895
 15.1016  	c935  EV1935 ECTIVA MachOne PCI Audio
 15.1017  	d568  82C825 [Firebridge 2]
 15.1018 +	d721  IDE [FireStar]
 15.1019  1046  IPC Corporation, Ltd.
 15.1020  1047  Genoa Systems Corp
 15.1021  1048  Elsa AG
 15.1022 +	0d22  Quadro4 900XGL [ELSA GLoria4 900XGL]
 15.1023  	1000  QuickStep 1000
 15.1024  	3000  QuickStep 3000
 15.1025  1049  Fountain Technologies, Inc.
 15.1026  104a  SGS Thomson Microelectronics
 15.1027  	0008  STG 2000X
 15.1028  	0009  STG 1764X
 15.1029 +	0981  DEC-Tulip compatible 10/100 Ethernet
 15.1030  	1746  STG 1764X
 15.1031 +	2774  DEC-Tulip compatible 10/100 Ethernet
 15.1032  	3520  MPEG-II decoder card
 15.1033  104b  BusLogic
 15.1034  	0140  BT-946C (old) [multimaster  01]
 15.1035 @@ -978,6 +1326,13 @@ 104c  Texas Instruments
 15.1036  	1000  Eagle i/f AS
 15.1037  	3d04  TVP4010 [Permedia]
 15.1038  	3d07  TVP4020 [Permedia 2]
 15.1039 +		1011 4d10  Comet
 15.1040 +		1040 000f  AccelStar II
 15.1041 +		1040 0011  AccelStar II
 15.1042 +		1048 0a31  WINNER 2000
 15.1043 +		1048 0a32  GLoria Synergy
 15.1044 +		1048 0a35  GLoria Synergy
 15.1045 +		107d 2633  WinFast 3D L2300
 15.1046  		1092 0127  FIRE GL 1000 PRO
 15.1047  		1092 0136  FIRE GL 1000 PRO
 15.1048  		1092 0141  FIRE GL 1000 PRO
 15.1049 @@ -990,17 +1345,31 @@ 104c  Texas Instruments
 15.1050  		1092 0156  FIRE GL 1000 PRO
 15.1051  		1092 0157  FIRE GL 1000 PRO
 15.1052  		1097 3d01  Jeronimo Pro
 15.1053 +		1102 100f  Graphics Blaster Extreme
 15.1054  		3d3d 0100  Reference Permedia 2 3D
 15.1055  	8000  PCILynx/PCILynx2 IEEE 1394 Link Layer Controller
 15.1056  		e4bf 1010  CF1-1-SNARE
 15.1057  		e4bf 1020  CF1-2-SNARE
 15.1058 -	8009  OHCI Compliant FireWire Controller
 15.1059 -	8019  TSB12LV23 OHCI Compliant IEEE-1394 Controller
 15.1060 +	8009  FireWire Controller
 15.1061 +		104d 8032  8032 OHCI i.LINK (IEEE 1394) Controller
 15.1062 +	8017  PCI4410 FireWire Controller
 15.1063 +	8019  TSB12LV23 IEEE-1394 Controller
 15.1064  		11bd 000a  Studio DV500-1394
 15.1065  		11bd 000e  Studio DV
 15.1066  		e4bf 1010  CF2-1-CYMBAL
 15.1067 +	8020  TSB12LV26 IEEE-1394 Controller (Link)
 15.1068 +	8021  TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated)
 15.1069 +		104d 80df  Vaio PCG-FX403
 15.1070 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.1071 +	8022  TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link)
 15.1072 +	8023  TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
 15.1073 +	8024  TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
 15.1074 +	8026  TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)
 15.1075 +	8027  PCI4451 IEEE-1394 Controller
 15.1076 +		1028 00e6  PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)
 15.1077  	a001  TDC1570
 15.1078  	a100  TDC1561
 15.1079 +	a102  TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f
 15.1080  	ac10  PCI1050
 15.1081  	ac11  PCI1053
 15.1082  	ac12  PCI1130
 15.1083 @@ -1017,14 +1386,24 @@ 104c  Texas Instruments
 15.1084  	ac1e  PCI1211
 15.1085  	ac1f  PCI1251B
 15.1086  	ac20  TI 2030
 15.1087 +	ac21  PCI2031
 15.1088 +	ac22  PCI2032 PCI Docking Bridge
 15.1089 +	ac23  PCI2250 PCI-to-PCI Bridge
 15.1090 +	ac28  PCI2050 PCI-to-PCI Bridge
 15.1091  	ac30  PCI1260 PC card Cardbus Controller
 15.1092  	ac40  PCI4450 PC card Cardbus Controller
 15.1093  	ac41  PCI4410 PC card Cardbus Controller
 15.1094  	ac42  PCI4451 PC card Cardbus Controller
 15.1095 +		1028 00e6  PCI4451 PC card CardBus Controller (Dell Inspiron 8100)
 15.1096  	ac50  PCI1410 PC card Cardbus Controller
 15.1097  	ac51  PCI1420
 15.1098 +		1014 023b  ThinkPad T23 (2647-4MG)
 15.1099 +		10cf 1095  Lifebook C6155
 15.1100 +		e4bf 1000  CP2-2-HIPHOP
 15.1101  	ac52  PCI1451 PC card Cardbus Controller
 15.1102  	ac53  PCI1421 PC card Cardbus Controller
 15.1103 +	ac55  PCI1250 PC card Cardbus Controller
 15.1104 +	ac60  PCI2040 PCI to DSP Bridge Controller
 15.1105  	fe00  FireWire Host Controller
 15.1106  	fe03  12C01A FireWire Host Controller
 15.1107  104d  Sony Corporation
 15.1108 @@ -1054,20 +1433,22 @@ 1051  Anigma, Inc.
 15.1109  1052  ?Young Micro Systems
 15.1110  1053  Young Micro Systems
 15.1111  1054  Hitachi, Ltd
 15.1112 -1055  EFAR Microsystems
 15.1113 -	9130  EIDE Controller
 15.1114 -	9460  PCI to ISA Bridge
 15.1115 -	9462  USB Universal Host Controller [OHCI]
 15.1116 -	9463  Power Management Controller [Bridge]
 15.1117 +1055  Efar Microsystems
 15.1118 +	9130  SLC90E66 [Victory66] IDE
 15.1119 +	9460  SLC90E66 [Victory66] ISA
 15.1120 +	9462  SLC90E66 [Victory66] USB
 15.1121 +	9463  SLC90E66 [Victory66] ACPI
 15.1122  1056  ICL
 15.1123  # Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this.
 15.1124  1057  Motorola
 15.1125  	0001  MPC105 [Eagle]
 15.1126  	0002  MPC106 [Grackle]
 15.1127 +	0003  MPC8240 [Kahlua]
 15.1128  	0100  MC145575 [HFC-PCI]
 15.1129  	0431  KTI829c 100VG
 15.1130  	1801  Audio I/O Controller (MIDI)
 15.1131  		ecc0 0030  Layla
 15.1132 +	18c0  MPC8265A/MPC8266
 15.1133  	4801  Raven
 15.1134  	4802  Falcon
 15.1135  	4803  Hawk
 15.1136 @@ -1091,17 +1472,34 @@ 1057  Motorola
 15.1137  		14c8 0302  SM56 PCI Fax Modem
 15.1138  		1668 0300  SM56 PCI Speakerphone Modem
 15.1139  		1668 0302  SM56 PCI Fax Modem
 15.1140 +	6400  MPC190 Security Processor (S1 family, encryption)
 15.1141  1058  Electronics & Telecommunications RSH
 15.1142  1059  Teknor Industrial Computers Inc
 15.1143  105a  Promise Technology, Inc.
 15.1144  	0d30  20265
 15.1145 +		105a 4d33  Ultra100
 15.1146 +	0d38  20263
 15.1147 +		105a 4d39  Fasttrak66
 15.1148 +	1275  20275
 15.1149  	4d30  20267
 15.1150 +		105a 4d33  Ultra100
 15.1151 +		105a 4d39  Fasttrak100
 15.1152  	4d33  20246
 15.1153 +		105a 4d33  20246 IDE Controller
 15.1154  	4d38  20262
 15.1155 +		105a 4d30  Ultra Device on SuperTrak
 15.1156 +		105a 4d33  Ultra66
 15.1157 +		105a 4d39  Fasttrak66
 15.1158  	4d68  20268
 15.1159 -	6268  20268R
 15.1160 +		105a 4d68  Ultra100TX2
 15.1161  	4d69  20269
 15.1162 +	5275  PDC20276 IDE
 15.1163 +		105a 0275  SuperTrak SX6000 IDE
 15.1164  	5300  DC5300
 15.1165 +	6268  20268R
 15.1166 +	6269  PDC20271
 15.1167 +		105a 6269  Fasttrack tx2
 15.1168 +	7275  PDC20277
 15.1169  105b  Foxconn International, Inc.
 15.1170  105c  Wipro Infotech Limited
 15.1171  105d  Number 9 Computer Company
 15.1172 @@ -1119,7 +1517,24 @@ 105d  Number 9 Computer Company
 15.1173  		105d 0009  Imagine 128 series 2e 4Mb DRAM
 15.1174  		105d 000a  Imagine 128 series 2 8Mb VRAM
 15.1175  		105d 000b  Imagine 128 series 2 8Mb H-VRAM
 15.1176 +		11a4 000a  Barco Metheus 5 Megapixel
 15.1177 +		13cc 0000  Barco Metheus 5 Megapixel
 15.1178 +		13cc 0004  Barco Metheus 5 Megapixel
 15.1179 +		13cc 0005  Barco Metheus 5 Megapixel
 15.1180 +		13cc 0006  Barco Metheus 5 Megapixel
 15.1181 +		13cc 0008  Barco Metheus 5 Megapixel
 15.1182 +		13cc 0009  Barco Metheus 5 Megapixel
 15.1183 +		13cc 000a  Barco Metheus 5 Megapixel
 15.1184 +		13cc 000c  Barco Metheus 5 Megapixel
 15.1185  	493d  Imagine 128 T2R [Ticket to Ride]
 15.1186 +		11a4 000a  Barco Metheus 5 Megapixel, Dual Head
 15.1187 +		11a4 000b  Barco Metheus 5 Megapixel, Dual Head
 15.1188 +		13cc 0002  Barco Metheus 4 Megapixel, Dual Head
 15.1189 +		13cc 0003  Barco Metheus 5 Megapixel, Dual Head
 15.1190 +		13cc 0007  Barco Metheus 5 Megapixel, Dual Head
 15.1191 +		13cc 0008  Barco Metheus 5 Megapixel, Dual Head
 15.1192 +		13cc 0009  Barco Metheus 5 Megapixel, Dual Head
 15.1193 +		13cc 000a  Barco Metheus 5 Megapixel, Dual Head
 15.1194  	5348  Revolution 4
 15.1195  105e  Vtech Computers Ltd
 15.1196  105f  Infotronic America Inc
 15.1197 @@ -1155,10 +1570,12 @@ 1064  Alcatel
 15.1198  1065  Texas Microsystems
 15.1199  1066  PicoPower Technology
 15.1200  	0000  PT80C826
 15.1201 -	0001  PT86C52x [Vesuvius]
 15.1202 -	0002  PT80C524 [Nile]
 15.1203 +	0001  PT86C521 [Vesuvius v1] Host Bridge
 15.1204 +	0002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Master
 15.1205 +	0003  PT86C524 [Nile] PCI-to-PCI Bridge
 15.1206 +	0004  PT86C525 [Nile-II] PCI-to-PCI Bridge
 15.1207  	0005  National PC87550 System Controller
 15.1208 -	8002  PT80C524 [Nile]
 15.1209 +	8002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave
 15.1210  1067  Mitsubishi Electric
 15.1211  	1002  VG500 [VolumePro Volume Rendering Accelerator]
 15.1212  1068  Diversified Technology
 15.1213 @@ -1166,7 +1583,9 @@ 1069  Mylex Corporation
 15.1214  	0001  DAC960P
 15.1215  	0002  DAC960PD
 15.1216  	0010  DAC960PX
 15.1217 -	ba55  eXtremeRAID support Device
 15.1218 +	0050  AcceleRAID 352/170/160 support Device
 15.1219 +	ba55  eXtremeRAID 1100 support Device
 15.1220 +	ba56  eXtremeRAID 2000/3000 support Device
 15.1221  106a  Aten Research Inc
 15.1222  106b  Apple Computer Inc.
 15.1223  	0001  Bandit PowerPC host bridge
 15.1224 @@ -1179,11 +1598,21 @@ 106b  Apple Computer Inc.
 15.1225  	0017  Paddington Mac I/O
 15.1226  	0018  UniNorth FireWire
 15.1227  	0019  KeyLargo USB
 15.1228 -	001e  UniNorth PCI
 15.1229 +	001e  UniNorth Internal PCI
 15.1230  	001f  UniNorth PCI
 15.1231  	0020  UniNorth AGP
 15.1232 -	0021  UniNorth GMAC
 15.1233 +	0021  UniNorth GMAC (Sun GEM)
 15.1234  	0022  KeyLargo Mac I/O
 15.1235 +	0024  UniNorth/Pangea GMAC (Sun GEM)
 15.1236 +	0025  KeyLargo/Pangea Mac I/O
 15.1237 +	0026  KeyLargo/Pangea USB
 15.1238 +	0027  UniNorth/Pangea AGP
 15.1239 +	0028  UniNorth/Pangea PCI
 15.1240 +	0029  UniNorth/Pangea Internal PCI
 15.1241 +	002d  UniNorth 1.5 AGP
 15.1242 +	002e  UniNorth 1.5 PCI
 15.1243 +	002f  UniNorth 1.5 Internal PCI
 15.1244 +	0030  UniNorth/Pangea FireWire
 15.1245  106c  Hyundai Electronics America
 15.1246  	8801  Dual Pentium ISA/PCI Motherboard
 15.1247  	8802  PowerPC ISA/PCI Motherboard
 15.1248 @@ -1227,19 +1656,21 @@ 1074  NexGen Microsystems
 15.1249  1075  Advanced Integrations Research
 15.1250  1076  Chaintech Computer Co. Ltd
 15.1251  1077  QLogic Corp.
 15.1252 -	1016  QLA10160
 15.1253 -	1020  ISP1020
 15.1254 -	1022  ISP1022
 15.1255 -	1080  QLA1080
 15.1256 -	1216  QLA12160
 15.1257 +	1016  ISP10160 Single Channel Ultra3 SCSI Processor
 15.1258 +	1020  ISP1020 Fast-wide SCSI
 15.1259 +	1022  ISP1022 Fast-wide SCSI
 15.1260 +	1080  ISP1080 SCSI Host Adapter
 15.1261 +	1216  ISP12160 Dual Channel Ultra3 SCSI Processor
 15.1262  		101e 8471  QLA12160 on AMI MegaRAID
 15.1263  		101e 8493  QLA12160 on AMI MegaRAID
 15.1264 -	1240  QLA1240
 15.1265 -	1280  QLA1280
 15.1266 -	2020  ISP2020A
 15.1267 -	2100  QLA2100
 15.1268 +	1240  ISP1240 SCSI Host Adapter
 15.1269 +	1280  ISP1280
 15.1270 +	2020  ISP2020A Fast!SCSI Basic Adapter
 15.1271 +	2100  QLA2100 64-bit Fibre Channel Adapter
 15.1272 +		1077 0001  QLA2100 64-bit Fibre Channel Adapter
 15.1273  	2200  QLA2200
 15.1274 -	2300  QLA2300
 15.1275 +	2300  QLA2300 64-bit FC-AL Adapter
 15.1276 +	2312  QLA2312 Fibre Channel Adapter
 15.1277  1078  Cyrix Corporation
 15.1278  	0000  5510 [Grappa]
 15.1279  	0001  PCI Master
 15.1280 @@ -1249,6 +1680,10 @@ 1078  Cyrix Corporation
 15.1281  	0102  5530 IDE [Kahlua]
 15.1282  	0103  5530 Audio [Kahlua]
 15.1283  	0104  5530 Video [Kahlua]
 15.1284 +	0400  ZFMicro PCI Bridge
 15.1285 +	0401  ZFMicro Chipset SMI
 15.1286 +	0402  ZFMicro Chipset IDE
 15.1287 +	0403  ZFMicro Expansion Bus
 15.1288  1079  I-Bus
 15.1289  107a  NetWorth
 15.1290  107b  Gateway 2000
 15.1291 @@ -1256,9 +1691,22 @@ 107c  LG Electronics [Lucky Goldstar Co.
 15.1292  107d  LeadTek Research Inc.
 15.1293  	0000  P86C850
 15.1294  107e  Interphase Corporation
 15.1295 -	0001  ATM Interface Card
 15.1296 +	0001  5515 ATM Adapter [Flipper]
 15.1297  	0002  100 VG AnyLan Controller
 15.1298 -	0008  155 Mbit ATM Controller
 15.1299 +	0004  5526 Fibre Channel Host Adapter
 15.1300 +	0005  x526 Fibre Channel Host Adapter
 15.1301 +	0008  5525/5575 ATM Adapter (155 Mbit) [Atlantic]
 15.1302 +	9003  5535-4P-BRI-ST
 15.1303 +	9007  5535-4P-BRI-U
 15.1304 +	9008  5535-1P-SR
 15.1305 +	900c  5535-1P-SR-ST
 15.1306 +	900e  5535-1P-SR-U
 15.1307 +	9011  5535-1P-PRI
 15.1308 +	9013  5535-2P-PRI
 15.1309 +	9023  5536-4P-BRI-ST
 15.1310 +	9027  5536-4P-BRI-U
 15.1311 +	9031  5536-1P-PRI
 15.1312 +	9033  5536-2P-PRI
 15.1313  107f  Data Technology Corporation
 15.1314  	0802  SL82C105
 15.1315  1080  Contaq Microsystems
 15.1316 @@ -1276,9 +1724,10 @@ 1086  J. Bond Computer Systems
 15.1317  1087  Cache Computer
 15.1318  1088  Microcomputer Systems (M) Son
 15.1319  1089  Data General Corporation
 15.1320 -108a  Bit3 Computer Corp.
 15.1321 +108a  SBS Technologies (formerly Bit3 Computer Corp.)
 15.1322  	0001  VME Bridge Model 617
 15.1323  	0010  VME Bridge Model 618
 15.1324 +	0040  dataBLIZZARD
 15.1325  	3000  VME Bridge Model 2706
 15.1326  108c  Oakleigh Systems Inc.
 15.1327  108d  Olicom
 15.1328 @@ -1331,6 +1780,7 @@ 1092  Diamond Multimedia Systems
 15.1329  	00a8  Speedstar 64
 15.1330  	0550  Viper V550
 15.1331  	08d4  Supra 2260 Modem
 15.1332 +	094c  SupraExpress 56i Pro
 15.1333  	1092  Viper V330
 15.1334  	6120  Maximum DVD
 15.1335  	8810  Stealth SE
 15.1336 @@ -1374,8 +1824,12 @@ 1095  CMD Technology Inc
 15.1337  	0647  PCI0647
 15.1338  	0648  PCI0648
 15.1339  	0649  PCI0649
 15.1340 +		0e11 005d  Integrated Ultra ATA-100 Dual Channel Controller
 15.1341 +		0e11 007e  Integrated Ultra ATA-100 IDE RAID Controller
 15.1342 +		101e 0649  AMI MegaRAID IDE 100 Controller
 15.1343  	0650  PBC0650A
 15.1344  	0670  USB0670
 15.1345 +		1095 0670  USB0670
 15.1346  	0673  USB0673
 15.1347  	0680  PCI0680
 15.1348  1096  Alacron
 15.1349 @@ -1389,17 +1843,23 @@ 109b  Gemlight Computer Ltd.
 15.1350  109c  Megachips Corporation
 15.1351  109d  Zida Technologies Ltd.
 15.1352  109e  Brooktree Corporation
 15.1353 -	0350  Bt848 TV with DMA push
 15.1354 +	0350  Bt848 Video Capture
 15.1355  	0351  Bt849A Video capture
 15.1356 +	0369  Bt878 Video Capture
 15.1357 +		1002 0001  TV-Wonder
 15.1358 +		1002 0003  TV-Wonder/VE
 15.1359  	036c  Bt879(??) Video Capture
 15.1360  		13e9 0070  Win/TV (Video Section)
 15.1361 -	036e  Bt878
 15.1362 +	036e  Bt878 Video Capture
 15.1363  		0070 13eb  WinTV/GO
 15.1364 +		0070 ff01  Viewcast Osprey 200
 15.1365 +		11bd 001c  PCTV Sat (DBC receiver)
 15.1366  		127a 0001  Bt878 Mediastream Controller NTSC
 15.1367  		127a 0002  Bt878 Mediastream Controller PAL BG
 15.1368  		127a 0003  Bt878a Mediastream Controller PAL BG
 15.1369  		127a 0048  Bt878/832 Mediastream Controller
 15.1370  		144f 3000  MagicTView CPH060 - Video
 15.1371 +		1461 0004  AVerTV WDM Video Capture
 15.1372  		14f1 0001  Bt878 Mediastream Controller NTSC
 15.1373  		14f1 0002  Bt878 Mediastream Controller PAL BG
 15.1374  		14f1 0003  Bt878a Mediastream Controller PAL BG
 15.1375 @@ -1407,7 +1867,7 @@ 109e  Brooktree Corporation
 15.1376  		1851 1850  FlyVideo'98 - Video
 15.1377  		1851 1851  FlyVideo II
 15.1378  		1852 1852  FlyVideo'98 - Video (with FM Tuner)
 15.1379 -	036f  Bt879
 15.1380 +	036f  Bt879 Video Capture
 15.1381  		127a 0044  Bt879 Video Capture NTSC
 15.1382  		127a 0122  Bt879 Video Capture PAL I
 15.1383  		127a 0144  Bt879 Video Capture NTSC
 15.1384 @@ -1441,19 +1901,24 @@ 109e  Brooktree Corporation
 15.1385  		1851 1850  FlyVideo'98
 15.1386  		1851 1851  FlyVideo'98 EZ - video
 15.1387  		1852 1852  FlyVideo'98 (with FM Tuner)
 15.1388 -	0878  Bt878
 15.1389 +	0878  Bt878 Audio Capture
 15.1390  		0070 13eb  WinTV/GO
 15.1391 +		0070 ff01  Viewcast Osprey 200
 15.1392 +		1002 0001  TV-Wonder
 15.1393 +		1002 0003  TV-Wonder/VE
 15.1394 +		11bd 001c  PCTV Sat (DBC receiver)
 15.1395  		127a 0001  Bt878 Video Capture (Audio Section)
 15.1396  		127a 0002  Bt878 Video Capture (Audio Section)
 15.1397  		127a 0003  Bt878 Video Capture (Audio Section)
 15.1398  		127a 0048  Bt878 Video Capture (Audio Section)
 15.1399  		13e9 0070  Win/TV (Audio Section)
 15.1400  		144f 3000  MagicTView CPH060 - Audio
 15.1401 +		1461 0004  AVerTV WDM Audio Capture
 15.1402  		14f1 0001  Bt878 Video Capture (Audio Section)
 15.1403  		14f1 0002  Bt878 Video Capture (Audio Section)
 15.1404  		14f1 0003  Bt878 Video Capture (Audio Section)
 15.1405  		14f1 0048  Bt878 Video Capture (Audio Section)
 15.1406 -	0879  Bt879 Video Capture (Audio Section)
 15.1407 +	0879  Bt879 Audio Capture
 15.1408  		127a 0044  Bt879 Video Capture (Audio Section)
 15.1409  		127a 0122  Bt879 Video Capture (Audio Section)
 15.1410  		127a 0144  Bt879 Video Capture (Audio Section)
 15.1411 @@ -1480,7 +1945,7 @@ 109e  Brooktree Corporation
 15.1412  		14f1 1522  Bt879 Video Capture (Audio Section)
 15.1413  		14f1 1622  Bt879 Video Capture (Audio Section)
 15.1414  		14f1 1722  Bt879 Video Capture (Audio Section)
 15.1415 -	0880  Bt880 Video Capture (Audio Section)
 15.1416 +	0880  Bt880 Audio Capture
 15.1417  	2115  BtV 2115 Mediastream controller
 15.1418  	2125  BtV 2125 Mediastream controller
 15.1419  	2164  BtV 2164
 15.1420 @@ -1550,9 +2015,28 @@ 10b5  PLX Technology, Inc.
 15.1421  	0001  i960 PCI bus interface
 15.1422  	1076  VScom 800 8 port serial adaptor
 15.1423  	1077  VScom 400 4 port serial adaptor
 15.1424 +	1078  VScom 210 2 port serial and 1 port parallel adaptor
 15.1425 +	1103  VScom 200 2 port serial adaptor
 15.1426 +	1146  VScom 010 1 port parallel adaptor
 15.1427 +	1147  VScom 020 2 port parallel adaptor
 15.1428 +	2724  Thales PCSM Security Card
 15.1429 +	9030  PCI <-> IOBus Bridge Hot Swap
 15.1430 +		15ed 1002  MCCS 8-port Serial Hot Swap
 15.1431 +		15ed 1003  MCCS 16-port Serial Hot Swap
 15.1432  	9036  9036
 15.1433  	9050  PCI <-> IOBus Bridge
 15.1434  		10b5 2273  SH-ARC SoHard ARCnet card
 15.1435 +		1522 0001  RockForce 4 Port V.90 Data/Fax/Voice Modem
 15.1436 +		1522 0002  RockForce 2 Port V.90 Data/Fax/Voice Modem
 15.1437 +		1522 0003  RockForce 6 Port V.90 Data/Fax/Voice Modem
 15.1438 +		1522 0004  RockForce 8 Port V.90 Data/Fax/Voice Modem
 15.1439 +		1522 0010  RockForce2000 4 Port V.90 Data/Fax/Voice Modem
 15.1440 +		1522 0020  RockForce2000 2 Port V.90 Data/Fax/Voice Modem
 15.1441 +		15ed 1000  Macrolink MCCS 8-port Serial
 15.1442 +		15ed 1001  Macrolink MCCS 16-port Serial
 15.1443 +		15ed 1002  Macrolink MCCS 8-port Serial Hot Swap
 15.1444 +		15ed 1003  Macrolink MCCS 16-port Serial Hot Swap
 15.1445 +		d531 c002  PCIntelliCAN 2xSJA1000 CAN bus
 15.1446  		d84d 4006  EX-4006 1P
 15.1447  		d84d 4008  EX-4008 1P EPP/ECP
 15.1448  		d84d 4014  EX-4014 2P
 15.1449 @@ -1570,12 +2054,15 @@ 10b5  PLX Technology, Inc.
 15.1450  		d84d 4065  EX-4065 8S(16C550) RS-232
 15.1451  		d84d 4068  EX-4068 8S(16C650) RS-232
 15.1452  		d84d 4078  EX-4078 2S(16C552) RS-232+1P
 15.1453 +	9054  PCI <-> IOBus Bridge
 15.1454 +		10b5 2455  Wessex Techology PHIL-PCI
 15.1455  	9060  9060
 15.1456  	906d  9060SD
 15.1457  		125c 0640  Aries 16000P
 15.1458  	906e  9060ES
 15.1459  	9080  9080
 15.1460  		10b5 9080  9080 [real subsystem ID not set]
 15.1461 +		129d 0002  Aculab PCI Prosidy card
 15.1462  	a001  GTEK Jetport II 2 port serial adaptor
 15.1463  	c001  GTEK Cyclone 16/32 port serial adaptor
 15.1464  10b6  Madge Networks
 15.1465 @@ -1597,14 +2084,20 @@ 10b6  Madge Networks
 15.1466  	000a  Smart 100/16/4 PCI Ringnode
 15.1467  		10b6 000a  Smart 100/16/4 PCI Ringnode
 15.1468  	000b  16/4 CardBus Adapter Mk2
 15.1469 +		10b6 0008  16/4 CardBus Adapter Mk2
 15.1470  		10b6 000b  16/4 Cardbus Adapter Mk2
 15.1471 -	1000  Collage 25 ATM Adapter
 15.1472 +	000c  RapidFire 3140V2 16/4 TR Adapter
 15.1473 +		10b6 000c  RapidFire 3140V2 16/4 TR Adapter
 15.1474 +	1000  Collage 25/155 ATM Client Adapter
 15.1475  	1001  Collage 155 ATM Server Adapter
 15.1476  10b7  3Com Corporation
 15.1477 -	0001  3c985 1000BaseSX
 15.1478 -	3390  Token Link Velocity
 15.1479 +	0001  3c985 1000BaseSX (SX/TX)
 15.1480 +	1006  MINI PCI type 3B Data Fax Modem
 15.1481 +	1007  Mini PCI 56k Winmodem
 15.1482 +		10b7 615c  Mini PCI 56K Modem
 15.1483 +	3390  3c339 TokenLink Velocity
 15.1484  	3590  3c359 TokenLink Velocity XL
 15.1485 -		10b7 3590  TokenLink Velocity XL Adapter
 15.1486 +		10b7 3590  TokenLink Velocity XL Adapter (3C359/359B)
 15.1487  	4500  3c450 Cyclone/unknown
 15.1488  	5055  3c555 Laptop Hurricane
 15.1489  	5057  3c575 [Megahertz] 10/100 LAN CardBus
 15.1490 @@ -1612,6 +2105,7 @@ 10b7  3Com Corporation
 15.1491  	5157  3c575 [Megahertz] 10/100 LAN CardBus
 15.1492  		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card
 15.1493  	5257  3CCFE575CT Cyclone CardBus
 15.1494 +		10b7 5c57  FE575C-3Com 10/100 LAN CardBus-Fast Ethernet
 15.1495  	5900  3c590 10BaseT [Vortex]
 15.1496  	5920  3c592 EISA 10mbps Demon/Vortex
 15.1497  	5950  3c595 100BaseTX [Vortex]
 15.1498 @@ -1622,10 +2116,20 @@ 10b7  3Com Corporation
 15.1499  		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card
 15.1500  	6055  3c556 Hurricane CardBus
 15.1501  	6056  3c556B Hurricane CardBus
 15.1502 +		10b7 6556  10/100 Mini PCI Ethernet Adapter
 15.1503  	6560  3CCFE656 Cyclone CardBus
 15.1504 +		10b7 656a  3CCFEM656 10/100 LAN+56K Modem CardBus
 15.1505 +	6561  3CCFEM656 10/100 LAN+56K Modem CardBus
 15.1506 +		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus
 15.1507  	6562  3CCFEM656 [id 6562] Cyclone CardBus
 15.1508 +		10b7 656b  3CCFEM656B 10/100 LAN+56K Modem CardBus
 15.1509 +	6563  3CCFEM656B 10/100 LAN+56K Modem CardBus
 15.1510 +		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus
 15.1511  	6564  3CCFEM656 [id 6564] Cyclone CardBus
 15.1512  	7646  3cSOHO100-TX Hurricane
 15.1513 +	7940  3c803 FDDILink UTP Controller
 15.1514 +	7980  3c804 FDDILink SAS Controller
 15.1515 +	7990  3c805 FDDILink DAS Controller
 15.1516  	8811  Token ring
 15.1517  	9000  3c900 10BaseT [Boomerang]
 15.1518  	9001  3c900 Combo [Boomerang]
 15.1519 @@ -1636,7 +2140,7 @@ 10b7  3Com Corporation
 15.1520  	9006  3c900B-TPC [Etherlink XL TPC]
 15.1521  	900a  3c900B-FL [Etherlink XL FL]
 15.1522  	9050  3c905 100BaseTX [Boomerang]
 15.1523 -	9051  3c905 100BaseT4
 15.1524 +	9051  3c905 100BaseT4 [Boomerang]
 15.1525  	9055  3c905B 100BaseTX [Cyclone]
 15.1526  		1028 0080  3C905B Fast Etherlink XL 10/100
 15.1527  		1028 0081  3C905B Fast Etherlink XL 10/100
 15.1528 @@ -1659,19 +2163,31 @@ 10b7  3Com Corporation
 15.1529  		1028 0098  3C905B Fast Etherlink XL 10/100
 15.1530  		1028 0099  3C905B Fast Etherlink XL 10/100
 15.1531  		10b7 9055  3C905B Fast Etherlink XL 10/100
 15.1532 -	9056  3c905B-T4
 15.1533 +	9056  3c905B-T4 [Fast EtherLink XL 10/100]
 15.1534  	9058  3c905B-Combo [Deluxe Etherlink XL 10/100]
 15.1535  	905a  3c905B-FX [Fast Etherlink XL FX 10/100]
 15.1536 -	9200  3c905C-TX [Fast Etherlink]
 15.1537 +	9200  3c905C-TX/TX-M [Tornado]
 15.1538 +		1028 0095  Integrated 3C905C-TX Fast Etherlink for PC Management NIC
 15.1539  		10b7 1000  3C905C-TX Fast Etherlink for PC Management NIC
 15.1540 +		10b7 7000  10/100 Mini PCI Ethernet Adapter
 15.1541  	9800  3c980-TX [Fast Etherlink XL Server Adapter]
 15.1542  		10b7 9800  3c980-TX Fast Etherlink XL Server Adapter
 15.1543  	9805  3c980-TX 10/100baseTX NIC [Python-T]
 15.1544 +		10b7 1201  3c982-TXM 10/100baseTX Dual Port A [Hydra]
 15.1545 +		10b7 1202  3c982-TXM 10/100baseTX Dual Port B [Hydra]
 15.1546  		10b7 9805  3c980 10/100baseTX NIC [Python-T]
 15.1547 +	9900  3C990-TX Typhoon
 15.1548 +	9902  3CR990-TX-95 56-bit Typhoon Client
 15.1549 +	9903  3CR990-TX-97 168-bit Typhoon Client
 15.1550 +	9904  3C990B-TX-M/3C990BSVR [Typhoon2]
 15.1551 +	9905  3CR990-FX-95/97/95 [Typhon Fiber]
 15.1552 +	9908  3CR990SVR95 56-bit Typhoon Server
 15.1553 +	9909  3CR990SVR97 Typhoon Server
 15.1554 +	990b  3C990SVR [Typhoon Server]
 15.1555  10b8  Standard Microsystems Corp [SMC]
 15.1556  	0005  83C170QF
 15.1557 -		1055 e000  LANEPIC
 15.1558 -		1055 e002  LANEPIC
 15.1559 +		1055 e000  LANEPIC 10/100 [EVB171Q-PCI]
 15.1560 +		1055 e002  LANEPIC 10/100 [EVB171G-PCI]
 15.1561  		10b8 a011  EtherPower II 10/100
 15.1562  		10b8 a014  EtherPower II 10/100
 15.1563  		10b8 a015  EtherPower II 10/100
 15.1564 @@ -1713,7 +2229,13 @@ 10b9  Acer Laboratories Inc. [ALi]
 15.1565  	1543  M1543
 15.1566  	1621  M1621
 15.1567  	1631  ALI M1631 PCI North Bridge Aladdin Pro III
 15.1568 +	1632  M1632M Northbridge+Trident
 15.1569  	1641  ALI M1641 PCI North Bridge Aladdin Pro IV
 15.1570 +	1644  M1644/M1644T Northbridge+Trident
 15.1571 +	1646  M1646 Northbridge+Trident
 15.1572 +	1647  M1647 Northbridge [MAGiK 1 / MobileMAGiK 1]
 15.1573 +	1651  M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM]
 15.1574 +	1671  M1671 Northbridge [Aladdin-P4]
 15.1575  	3141  M3141
 15.1576  	3143  M3143
 15.1577  	3145  M3145
 15.1578 @@ -1728,11 +2250,21 @@ 10b9  Acer Laboratories Inc. [ALi]
 15.1579  	5219  M5219
 15.1580  	5225  M5225
 15.1581  	5229  M5229 IDE
 15.1582 +		1043 8053  A7A266 Motherboard IDE
 15.1583  	5235  M5225
 15.1584 -	5237  M5237 USB
 15.1585 -	5243  M5243
 15.1586 -	5247  M5247
 15.1587 -	5451  M5451 PCI South Bridge Audio
 15.1588 +	5237  USB 1.1 Controller
 15.1589 +	5239  USB 2.0 Controller
 15.1590 +	5243  M1541 PCI to AGP Controller
 15.1591 +	5247  PCI to AGP Controller
 15.1592 +	5251  M5251 P1394 OHCI 1.0 Controller
 15.1593 +	5253  M5253 P1394 OHCI 1.1 Controller
 15.1594 +	5261  M5261 Ethernet Controller
 15.1595 +	5451  M5451 PCI AC-Link Controller Audio Device
 15.1596 +	5453  M5453 PCI AC-Link Controller Modem Device
 15.1597 +	5455  M5455 PCI AC-Link Controller Audio Device
 15.1598 +	5457  M5457 AC-Link Modem Interface Controller
 15.1599 +	5471  M5471 Memory Stick Controller
 15.1600 +	5473  M5473 SD-MMC Controller
 15.1601  	7101  M7101 PMU
 15.1602  		10b9 7101  ALI M7101 Power Management Controller
 15.1603  10ba  Mitsubishi Electric Corp.
 15.1604 @@ -1794,6 +2326,7 @@ 10c8  Neomagic Corporation
 15.1605  		110a 8005  MagicMedia 256AV Audio Device
 15.1606  		14c0 0004  MagicMedia 256AV Audio Device
 15.1607  	8006  NM2360 [MagicMedia 256ZX Audio]
 15.1608 +	8016  NM2360 [MagicMedia 256ZX Audio]
 15.1609  10c9  Dataexpert Corporation
 15.1610  10ca  Fujitsu Microelectr., Inc.
 15.1611  10cb  Omron Corporation
 15.1612 @@ -1820,6 +2353,7 @@ 10d8  Advanced Peripherals Labs
 15.1613  10d9  Macronix, Inc. [MXIC]
 15.1614  	0512  MX98713
 15.1615  	0531  MX987x5
 15.1616 +		1186 1200  DFE-540TX ProFAST 10/100 Adapter
 15.1617  	8625  MX86250
 15.1618  	8888  MX86200
 15.1619  10da  Compaq IPG-Austin
 15.1620 @@ -1834,12 +2368,13 @@ 10dc  CERN/ECP/EDU
 15.1621  	10dc  ATT2C15-3 FPGA
 15.1622  10dd  Evans & Sutherland
 15.1623  10de  nVidia Corporation
 15.1624 -	0008  EDGE 3D [NV1]
 15.1625 -	0009  EDGE 3D [NV1]
 15.1626 -	0010  Mutara V08 [NV2]
 15.1627 -	0020  Riva TnT [NV04]
 15.1628 +	0008  NV1 [EDGE 3D]
 15.1629 +	0009  NV1 [EDGE 3D]
 15.1630 +	0010  NV2 [Mutara V08]
 15.1631 +	0020  NV4 [Riva TnT]
 15.1632  		1043 0200  V3400 TNT
 15.1633  		1048 0c18  Erazor II SGRAM
 15.1634 +		1048 0c1b  Erazor II
 15.1635  		1092 0550  Viper V550
 15.1636  		1092 0552  Viper V550
 15.1637  		1092 4804  Viper V550
 15.1638 @@ -1852,10 +2387,12 @@ 10de  nVidia Corporation
 15.1639  		1092 4904  Viper V550
 15.1640  		1092 4914  Viper V550
 15.1641  		1092 8225  Viper V550
 15.1642 +		10b4 273d  Velocity 4400
 15.1643 +		10b4 2740  Velocity 4400
 15.1644  		10de 0020  Riva TNT
 15.1645  		1102 1015  Graphics Blaster CT6710
 15.1646  		1102 1016  Graphics Blaster RIVA TNT
 15.1647 -	0028  Riva TnT2 [NV5]
 15.1648 +	0028  NV5 [Riva TnT2]
 15.1649  		1043 0200  AGP-V3800 SGRAM
 15.1650  		1043 0201  AGP-V3800 SDRAM
 15.1651  		1043 0205  PCI-V3800
 15.1652 @@ -1863,13 +2400,15 @@ 10de  nVidia Corporation
 15.1653  		1092 4804  Viper V770
 15.1654  		1092 4a00  Viper V770
 15.1655  		1092 4a02  Viper V770 Ultra
 15.1656 +		1092 5a00  RIVA TNT2/TNT2 Pro
 15.1657  		1092 6a02  Viper V770 Ultra
 15.1658  		1092 7a02  Viper V770 Ultra
 15.1659  		10de 0005  RIVA TNT2 Pro
 15.1660 +		10de 000f  Compaq NVIDIA TNT2 Pro
 15.1661  		1102 1020  3D Blaster RIVA TNT2
 15.1662  		1102 1026  3D Blaster RIVA TNT2 Digital
 15.1663  		14af 5810  Maxi Gamer Xentor
 15.1664 -	0029  Riva TnT2 Ultra [NV5]
 15.1665 +	0029  NV5 [Riva TnT2 Ultra]
 15.1666  		1043 0200  AGP-V3800 Deluxe
 15.1667  		1043 0201  AGP-V3800 Ultra SDRAM
 15.1668  		1043 0205  PCI-V3800 Ultra
 15.1669 @@ -1877,54 +2416,97 @@ 10de  nVidia Corporation
 15.1670  		1102 1029  3D Blaster RIVA TNT2 Ultra
 15.1671  		1102 102f  3D Blaster RIVA TNT2 Ultra
 15.1672  		14af 5820  Maxi Gamer Xentor 32
 15.1673 -	002a  Riva TnT2 [NV5]
 15.1674 -	002b  Riva TnT2 [NV5]
 15.1675 -	002c  Vanta [NV6]
 15.1676 +	002a  NV5 [Riva TnT2]
 15.1677 +	002b  NV5 [Riva TnT2]
 15.1678 +	002c  NV6 [Vanta]
 15.1679  		1043 0200  AGP-V3800 Combat SDRAM
 15.1680  		1043 0201  AGP-V3800 Combat
 15.1681  		1092 6820  Viper V730
 15.1682  		1102 1031  CT6938 VANTA 8MB
 15.1683  		1102 1034  CT6894 VANTA 16MB
 15.1684  		14af 5008  Maxi Gamer Phoenix 2
 15.1685 -	002d  Vanta [NV6]
 15.1686 +	002d  RIVA TNT2 Model 64
 15.1687  		1043 0200  AGP-V3800M
 15.1688  		1043 0201  AGP-V3800M
 15.1689  		1102 1023  CT6892 RIVA TNT2 Value
 15.1690  		1102 1024  CT6932 RIVA TNT2 Value 32Mb
 15.1691 -		1102 102c  CT6931 RIVA TNT2 Value (Jumper)
 15.1692 +		1102 102c  CT6931 RIVA TNT2 Value [Jumper]
 15.1693  		1462 8808  MSI-8808
 15.1694 -	002e  Vanta [NV6]
 15.1695 -	002f  Vanta [NV6]
 15.1696 -	00a0  Riva TNT2
 15.1697 +		1554 1041  PixelView RIVA TNT2 M64 32MB
 15.1698 +	002e  NV6 [Vanta]
 15.1699 +	002f  NV6 [Vanta]
 15.1700 +	00a0  NV5 [Riva TNT2]
 15.1701  		14af 5810  Maxi Gamer Xentor
 15.1702 -	0100  GeForce 256
 15.1703 +	0100  NV10 [GeForce 256 SDR]
 15.1704  		1043 0200  AGP-V6600 SGRAM
 15.1705  		1043 0201  AGP-V6600 SDRAM
 15.1706  		1043 4008  AGP-V6600 SGRAM
 15.1707  		1043 4009  AGP-V6600 SDRAM
 15.1708  		1102 102d  CT6941 GeForce 256
 15.1709 -	0101  GeForce 256 DDR
 15.1710 +		14af 5022  3D Prophet SE
 15.1711 +	0101  NV10 [GeForce 256 DDR]
 15.1712  		1043 0202  AGP-V6800 DDR
 15.1713  		1043 400a  AGP-V6800 DDR SGRAM
 15.1714  		1043 400b  AGP-V6800 DDR SDRAM
 15.1715  		1102 102e  CT6971 GeForce 256 DDR
 15.1716  		14af 5021  3D Prophet DDR-DVI
 15.1717 -	0103  Quadro (GeForce 256 GL)
 15.1718 -	0110  NV11 (GeForce2 MX)
 15.1719 -	0111  NV11 (GeForce2 MX DDR)
 15.1720 -	0112  GeForce2 Go
 15.1721 -	0113  NV11 (GeForce2 MXR)
 15.1722 -	0150  NV15 (GeForce2 Pro)
 15.1723 +	0103  NV10 [Quadro]
 15.1724 +	0110  NV11 [GeForce2 MX]
 15.1725 +		1043 4015  AGP-V7100 Pro
 15.1726 +		1043 4031  V7100 Pro with TV output
 15.1727 +		14af 7103  3D Prophet II MX Dual-Display
 15.1728 +	0111  NV11 [GeForce2 MX DDR]
 15.1729 +	0112  NV11 [GeForce2 Go]
 15.1730 +	0113  NV11 [GeForce2 MXR]
 15.1731 +	0150  NV15 [GeForce2 GTS]
 15.1732 +		1043 4016  V7700 AGP Video Card
 15.1733  		107d 2840  WinFast GeForce2 GTS with TV output
 15.1734 -	0151  NV15 DDR (GeForce2 GTS)
 15.1735 -	0152  NV15 Bladerunner (GeForce2 Ultra)
 15.1736 -	0153  NV15 GL (Quadro2 Pro)
 15.1737 -	0200  NV20 (GeForce3)
 15.1738 -	0203  Quadro DCC
 15.1739 +		1462 8831  Creative GeForce2 Pro
 15.1740 +	0151  NV15 [GeForce2 Ti]
 15.1741 +	0152  NV15 [GeForce2 Ultra, Bladerunner]
 15.1742 +		1048 0c56  GLADIAC Ultra
 15.1743 +	0153  NV15 [Quadro2 Pro]
 15.1744 +	0170  NV17 [GeForce4 MX460]
 15.1745 +	0171  NV17 [GeForce4 MX440]
 15.1746 +	0172  NV17 [GeForce4 MX420]
 15.1747 +	0173  NV1x
 15.1748 +	0174  NV17 [GeForce4 440 Go]
 15.1749 +	0175  NV17 [GeForce4 420 Go]
 15.1750 +	0176  NV17 [GeForce4 420 Go 32M]
 15.1751 +	0178  Quadro4 500XGL
 15.1752 +	0179  NV17 [GeForce4 440 Go 64M]
 15.1753 +	017a  Quadro4 200/400NVS
 15.1754 +	017b  Quadro4 550XGL
 15.1755 +	017c  Quadro4 550 GoGL
 15.1756 +	01a0  NV15 [GeForce2 - nForce GPU]
 15.1757 +	01a4  nForce CPU bridge
 15.1758 +	01ab  nForce 420 Memory Controller (DDR)
 15.1759 +	01ac  nForce 220/420 Memory Controller
 15.1760 +	01ad  nForce 220/420 Memory Controller
 15.1761 +	01b1  nForce Audio
 15.1762 +	01b2  nForce ISA Bridge
 15.1763 +	01b4  nForce PCI System Management
 15.1764 +	01b7  nForce AGP to PCI Bridge
 15.1765 +	01b8  nForce PCI-to-PCI bridge
 15.1766 +	01bc  nForce IDE
 15.1767 +	0200  NV20 [GeForce3]
 15.1768 +		1043 402f  AGP-V8200 DDR
 15.1769 +	0201  NV20 [GeForce3 Ti200]
 15.1770 +	0202  NV20 [GeForce3 Ti500]
 15.1771 +		1043 405b  V8200 T5
 15.1772 +	0203  NV20 [Quadro DCC]
 15.1773 +	0250  NV25 [GeForce4 Ti4600]
 15.1774 +	0251  NV25 [GeForce4 Ti4400]
 15.1775 +	0253  NV25 [GeForce4 Ti4200]
 15.1776 +	0258  Quadro4 900XGL
 15.1777 +	0259  Quadro4 750XGL
 15.1778 +	025b  Quadro4 700XGL
 15.1779  10df  Emulex Corporation
 15.1780  	10df  Light Pulse Fibre Channel Adapter
 15.1781  	1ae5  LP6000 Fibre Channel Host Adapter
 15.1782  	f700  LP7000 Fibre Channel Host Adapter
 15.1783 +	f800  LP8000 Fibre Channel Host Adapter
 15.1784 +	f900  LP9000 Fibre Channel Host Adapter
 15.1785  10e0  Integrated Micro Solutions Inc.
 15.1786  	5026  IMS5026/27/28
 15.1787  	5027  IMS5027
 15.1788 @@ -1952,14 +2534,15 @@ 10e8  Applied Micro Circuits Corp.
 15.1789  	8043  LANai4.x [Myrinet LANai interface chip]
 15.1790  	8062  S5933_PARASTATION
 15.1791  	807d  S5933 [Matchmaker]
 15.1792 -	8088  Kingsberg Spacetec Format Synchronizer
 15.1793 -	8089  Kingsberg Spacetec Serial Output Board
 15.1794 +	8088  Kongsberg Spacetec Format Synchronizer
 15.1795 +	8089  Kongsberg Spacetec Serial Output Board
 15.1796  	809c  S5933_HEPC3
 15.1797  	80d7  PCI-9112
 15.1798  	80d9  PCI-9118
 15.1799  	80da  PCI-9812
 15.1800  	811a  PCI-IEEE1355-DS-DE Interface
 15.1801  	8170  S5933 [Matchmaker] (Chipset Development Tool)
 15.1802 +	82db  AJA HDNTV HD SDI Framestore
 15.1803  10e9  Alps Electric Co., Ltd.
 15.1804  10ea  Intergraphics Systems
 15.1805  	1680  IGA-1680
 15.1806 @@ -1974,8 +2557,8 @@ 10eb  Artists Graphics
 15.1807  	8111  Twist3 Frame Grabber
 15.1808  10ec  Realtek Semiconductor Co., Ltd.
 15.1809  	8029  RTL-8029(AS)
 15.1810 -		10b8 2011  EZ-Card
 15.1811 -		10ec 8029  RT8029(AS)
 15.1812 +		10b8 2011  EZ-Card (SMC1208)
 15.1813 +		10ec 8029  RTL-8029(AS)
 15.1814  		1113 1208  EN1208
 15.1815  		1186 0300  DE-528
 15.1816  		1259 2400  AT-2400
 15.1817 @@ -1983,14 +2566,16 @@ 10ec  Realtek Semiconductor Co., Ltd.
 15.1818  		10ec 8129  RT8129 Fast Ethernet Adapter
 15.1819  	8138  RT8139 (B/C) Cardbus Fast Ethernet Adapter
 15.1820  		10ec 8138  RT8139 (B/C) Fast Ethernet Adapter
 15.1821 -	8139  RTL-8139
 15.1822 +	8139  RTL-8139/8139C/8139C+
 15.1823  		1025 8920  ALN-325
 15.1824  		1025 8921  ALN-325
 15.1825  		10bd 0320  EP-320X-R
 15.1826  		10ec 8139  RT8139
 15.1827  		1186 1300  DFE-538TX
 15.1828  		1186 1320  SN5200
 15.1829 +		1186 8139  DRN-32TX
 15.1830  		1259 2500  AT-2500TX
 15.1831 +		1259 2503  AT-2500TX/ACPI
 15.1832  		1429 d010  ND010
 15.1833  		1432 9130  EN-9130TX
 15.1834  		1436 8139  RT8139
 15.1835 @@ -2003,6 +2588,7 @@ 10ec  Realtek Semiconductor Co., Ltd.
 15.1836  		8e2e 7000  KF-230TX
 15.1837  		8e2e 7100  KF-230TX/2
 15.1838  		a0a0 0007  ALN-325C
 15.1839 +	8169  RTL-8169
 15.1840  10ed  Ascii Corporation
 15.1841  	7310  V7310
 15.1842  10ee  Xilinx, Inc.
 15.1843 @@ -2010,6 +2596,8 @@ 10ee  Xilinx, Inc.
 15.1844  	3fc1  RME Digi96/8
 15.1845  	3fc2  RME Digi96/8 Pro
 15.1846  	3fc3  RME Digi96/8 Pad
 15.1847 +	3fc4  RME Digi9652 (Hammerfall)
 15.1848 +	3fc5  RME Hammerfall DSP
 15.1849  10ef  Racore Computer Products, Inc.
 15.1850  	8154  M815x Token Ring Adapter
 15.1851  10f0  Peritek Corporation
 15.1852 @@ -2027,6 +2615,8 @@ 10fa  Truevision
 15.1853  	000c  TARGA 1000
 15.1854  10fb  Thesys Gesellschaft für Mikroelektronik mbH
 15.1855  10fc  I-O Data Device, Inc.
 15.1856 +# What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives
 15.1857 +	0003  Cardbus IDE Controller
 15.1858  10fd  Soyo Computer, Inc
 15.1859  10fe  Fast Multimedia AG
 15.1860  10ff  NCube
 15.1861 @@ -2049,26 +2639,45 @@ 1102  Creative Labs
 15.1862  		1102 8025  SBLive! Mainboard Implementation
 15.1863  		1102 8026  CT4830 SBLive! Value
 15.1864  		1102 8027  CT4832 SBLive! Value
 15.1865 +		1102 8028  CT4760 SBLive! OEM version
 15.1866  		1102 8031  CT4831 SBLive! Value
 15.1867  		1102 8040  CT4760 SBLive!
 15.1868  		1102 8051  CT4850 SBLive! Value
 15.1869 -	7002  SB Live!
 15.1870 +		1102 8061  SBLive! Player 5.1
 15.1871 +	0004  SB Audigy
 15.1872 +		1102 0051  SB0090 Audigy Player
 15.1873 +	4001  SB Audigy FireWire Port
 15.1874 +	7002  SB Live! MIDI/Game Port
 15.1875  		1102 0020  Gameport Joystick
 15.1876 +	7003  SB Audigy MIDI/Game port
 15.1877 +		1102 0040  SB Audigy MIDI/Gameport
 15.1878  	8938  ES1371
 15.1879  1103  Triones Technologies, Inc.
 15.1880  	0003  HPT343
 15.1881 -	0004  HPT366 / HPT370
 15.1882 +# Revisions: 01=HPT366, 03=HPT370, 04=HPT370A, 05=HPT372
 15.1883 +	0004  HPT366/368/370/370A/372
 15.1884 +		1103 0001  HPT370A
 15.1885  		1103 0005  HPT370 UDMA100
 15.1886 +	0005  HPT372A
 15.1887 +	0006  HPT302
 15.1888 +	0007  HPT371
 15.1889 +	0008  HPT374
 15.1890  1104  RasterOps Corp.
 15.1891  1105  Sigma Designs, Inc.
 15.1892 +	1105  REALmagic Xcard MPEG 1/2/3/4 DVD Decoder
 15.1893  	8300  REALmagic Hollywood Plus DVD Decoder
 15.1894 +	8400  EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder
 15.1895  1106  VIA Technologies, Inc.
 15.1896 +	0130  VT6305 1394.A Controller
 15.1897  	0305  VT8363/8365 [KT133/KM133]
 15.1898 +		1043 8033  A7V Mainboard
 15.1899 +		1043 8042  A7V133/A7V133-C Mainboard
 15.1900 +		147b a401  KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard
 15.1901  	0391  VT8371 [KX133]
 15.1902  	0501  VT8501 [Apollo MVP4]
 15.1903  	0505  VT82C505
 15.1904  	0561  VT82C561
 15.1905 -	0571  Bus Master IDE
 15.1906 +	0571  VT82C586B PIPC Bus Master IDE
 15.1907  	0576  VT82C576 3V [Apollo Master]
 15.1908  	0585  VT82C585VP [Apollo VP1/VPX]
 15.1909  	0586  VT82C586/A/B PCI-to-ISA [Apollo VP]
 15.1910 @@ -2083,6 +2692,8 @@ 1106  VIA Technologies, Inc.
 15.1911  	0605  VT8605 [ProSavage PM133]
 15.1912  	0680  VT82C680 [Apollo P6]
 15.1913  	0686  VT82C686 [Apollo Super South]
 15.1914 +		1043 8033  A7V Mainboard
 15.1915 +		1043 8042  A7V133/A7V133-C Mainboard
 15.1916  		1106 0000  VT82C686/A PCI to ISA Bridge
 15.1917  		1106 0686  VT82C686/A PCI to ISA Bridge
 15.1918  	0691  VT82C693A/694x [Apollo PRO133x]
 15.1919 @@ -2094,30 +2705,52 @@ 1106  VIA Technologies, Inc.
 15.1920  	1106  VT82C570MV
 15.1921  	1571  VT82C416MV
 15.1922  	1595  VT82C595/97 [Apollo VP2/97]
 15.1923 -	3038  UHCI USB
 15.1924 +	3038  USB
 15.1925 +		0925 1234  USB Controller
 15.1926  		1234 0925  MVP3 USB Controller
 15.1927  	3040  VT82C586B ACPI
 15.1928 -	3043  VT86C100A [Rhine 10/100]
 15.1929 +	3043  VT86C100A [Rhine]
 15.1930  		10bd 0000  VT86C100A Fast Ethernet Adapter
 15.1931  		1106 0100  VT86C100A Fast Ethernet Adapter
 15.1932 -		1186 1400  DFE-530TX
 15.1933 -	3044  OHCI Compliant IEEE 1394 Host Controller
 15.1934 +		1186 1400  DFE-530TX rev A
 15.1935 +	3044  IEEE 1394 Host Controller
 15.1936  	3050  VT82C596 Power Management
 15.1937  	3051  VT82C596 Power Management
 15.1938  	3057  VT82C686 [Apollo Super ACPI]
 15.1939 -	3058  AC97 Audio Controller
 15.1940 +		1043 8033  A7V Mainboard
 15.1941 +		1043 8042  A7V133/A7V133-C Mainboard
 15.1942 +	3058  VT82C686 AC97 Audio Controller
 15.1943 +		0e11 b194  Soundmax integrated digital audio
 15.1944 +		1106 4511  Onboard Audio on EP7KXA
 15.1945 +		1458 7600  Onboard Audio
 15.1946  		1462 3091  MS-6309 Onboard Audio
 15.1947 -	3059  AC97 Audio Controller
 15.1948 -	3065  Ethernet Controller
 15.1949 +		15dd 7609  Onboard Audio
 15.1950 +	3059  VT8233 AC97 Audio Controller
 15.1951 +	3065  VT6102 [Rhine-II]
 15.1952 +		1186 1400  DFE-530TX rev A
 15.1953 +		1186 1401  DFE-530TX rev B
 15.1954  	3068  AC97 Modem Controller
 15.1955  	3074  VT8233 PCI to ISA Bridge
 15.1956  	3091  VT8633 [Apollo Pro266]
 15.1957  	3099  VT8367 [KT266]
 15.1958 +		1043 8064  A7V266-E
 15.1959 +		1043 807f  A7V333
 15.1960 +	3101  VT8653 Host Bridge
 15.1961 +	3102  VT8662 Host Bridge
 15.1962 +	3103  VT8615 Host Bridge
 15.1963 +	3104  USB 2.0
 15.1964  	3109  VT8233C PCI to ISA Bridge
 15.1965 +	3112  VT8361 [KLE133] Host Bridge
 15.1966 +	3128  VT8753 [P4X266 AGP]
 15.1967 +	3133  VT3133 Host Bridge
 15.1968 +	3147  VT8233A ISA Bridge
 15.1969 +	3148  P4M266 Host Bridge
 15.1970 +	3156  P/KN266 Host Bridge
 15.1971 +	3177  VT8233A ISA Bridge
 15.1972  	5030  VT82C596 ACPI [Apollo PRO]
 15.1973  	6100  VT85C100A [Rhine II]
 15.1974  	8231  VT8231 [PCI-to-ISA Bridge]
 15.1975 -	8235  VT8235 Power Management
 15.1976 +	8235  VT8235 ACPI
 15.1977  	8305  VT8363/8365 [KT133/KM133 AGP]
 15.1978  	8391  VT8371 [KX133 AGP]
 15.1979  	8501  VT8501 [Apollo MVP4 AGP]
 15.1980 @@ -2127,8 +2760,13 @@ 1106  VIA Technologies, Inc.
 15.1981  	8601  VT8601 [Apollo ProMedia AGP]
 15.1982  	8605  VT8605 [PM133 AGP]
 15.1983  	8691  VT82C691 [Apollo Pro]
 15.1984 +	8693  VT82C693 [Apollo Pro Plus] PCI Bridge
 15.1985  	b091  VT8633 [Apollo Pro266 AGP]
 15.1986 -	b099  VT8367 [KT266 AGP]
 15.1987 +	b099  VT8367 [KT333 AGP]
 15.1988 +	b101  VT8653 AGP Bridge
 15.1989 +	b102  VT8362 AGP Bridge
 15.1990 +	b103  VT8615 AGP Bridge
 15.1991 +	b112  VT8361 [KLE133] AGP Bridge
 15.1992  1107  Stratus Computers
 15.1993  	0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)
 15.1994  1108  Proteon, Inc.
 15.1995 @@ -2150,6 +2788,7 @@ 110a  Siemens Nixdorf AG
 15.1996  	6120  SZB6120
 15.1997  110b  Chromatic Research Inc.
 15.1998  	0001  Mpact Media Processor
 15.1999 +	0004  Mpact 2
 15.2000  110c  Mini-Max Technology, Inc.
 15.2001  110d  Znyx Advanced Systems
 15.2002  110e  CPU Technology
 15.2003 @@ -2173,6 +2812,7 @@ 1113  Accton Technology Corporation
 15.2004  	5105  10Mbps Network card
 15.2005  	9211  EN-1207D Fast Ethernet Adapter
 15.2006  		1113 9211  EN-1207D Fast Ethernet Adapter
 15.2007 +	9511  Fast Ethernet Adapter
 15.2008  1114  Atmel Corporation
 15.2009  1115  3D Labs
 15.2010  1116  Data Translation
 15.2011 @@ -2277,6 +2917,7 @@ 111c  Tricord Systems Inc.
 15.2012  	0001  Powerbis Bridge
 15.2013  111d  Integrated Device Tech
 15.2014  	0001  IDT77211 ATM Adapter
 15.2015 +	0003  IDT77252 ATM network controller
 15.2016  111e  Eldec
 15.2017  111f  Precision Digital Images
 15.2018  	4a47  Precision MX Video engine interface
 15.2019 @@ -2292,9 +2933,10 @@ 1127  FORE Systems Inc
 15.2020  	0200  ForeRunner PCA-200 ATM
 15.2021  	0210  PCA-200PC
 15.2022  	0250  ATM
 15.2023 -	0300  PCA-200E
 15.2024 +	0300  ForeRunner PCA-200EPC ATM
 15.2025  	0310  ATM
 15.2026  	0400  ForeRunnerHE ATM Adapter
 15.2027 +		1127 0400  ForeRunnerHE ATM
 15.2028  1129  Firmworks
 15.2029  112a  Hermes Electronics Company, Ltd.
 15.2030  112b  Linotype - Hell AG
 15.2031 @@ -2306,6 +2948,9 @@ 112f  Imaging Technology Inc
 15.2032  	0001  MVC IM-PCI Video frame grabber/processor
 15.2033  1130  Computervision
 15.2034  1131  Philips Semiconductors
 15.2035 +	7130  SAA7130 Video Broadcast Decoder
 15.2036 +# PCI audio and video broadcast decoder (http://www.semiconductors.philips.com/pip/saa7134hl)
 15.2037 +	7134  SAA7134
 15.2038  	7145  SAA7145
 15.2039  	7146  SAA7146
 15.2040  		114b 2003  DVRaptor Video Edit/Capture Card
 15.2041 @@ -2319,8 +2964,11 @@ 1133  Eicon Technology Corporation
 15.2042  	7912  EiconCard S91
 15.2043  	7941  EiconCard S94
 15.2044  	7942  EiconCard S94
 15.2045 +	7943  EiconCard S94
 15.2046 +	7944  EiconCard S94
 15.2047  	b921  EiconCard P92
 15.2048  	b922  EiconCard P92
 15.2049 +	b923  EiconCard P92
 15.2050  	e001  DIVA 20PRO
 15.2051  		1133 e001  DIVA Pro 2.0 S/T
 15.2052  	e002  DIVA 20
 15.2053 @@ -2329,10 +2977,15 @@ 1133  Eicon Technology Corporation
 15.2054  		1133 e003  DIVA Pro 2.0 U
 15.2055  	e004  DIVA 20_U
 15.2056  		1133 e004  DIVA 2.0 U
 15.2057 +	e005  DIVA LOW
 15.2058 +		1133 e005  DIVA 2.01 S/T
 15.2059  	e010  DIVA Server BRI-2M
 15.2060  		1133 e010  DIVA Server BRI-2M
 15.2061 +	e012  DIVA Server BRI-8M
 15.2062 +		1133 e012  DIVA Server BRI-8M
 15.2063  	e014  DIVA Server PRI-30M
 15.2064  		1133 e014  DIVA Server PRI-30M
 15.2065 +	e018  DIVA Server BRI-2M/-2F
 15.2066  1134  Mercury Computer Systems
 15.2067  	0001  Raceway Bridge
 15.2068  1135  Fuji Xerox Co Ltd
 15.2069 @@ -2357,8 +3010,8 @@ 113e  Sanyo Electric Co - Computer Engin
 15.2070  113f  Equinox Systems, Inc.
 15.2071  	0808  SST-64P Adapter
 15.2072  	1010  SST-128P Adapter
 15.2073 -	80c0  SST-16P Adapter
 15.2074 -	80c4  SST-16P Adapter
 15.2075 +	80c0  SST-16P DB Adapter
 15.2076 +	80c4  SST-16P RJ Adapter
 15.2077  	80c8  SST-16P Adapter
 15.2078  	8888  SST-4P Adapter
 15.2079  	9090  SST-8P Adapter
 15.2080 @@ -2403,8 +3056,10 @@ 1148  Syskonnect (Schneider & Koch)
 15.2081  		1148 9844  SK-9844 (1000Base-SX dual link)
 15.2082  		1148 9861  SK-9861 (1000Base-SX VF45 single link)
 15.2083  		1148 9862  SK-9862 (1000Base-SX VF45 dual link)
 15.2084 +	4400  Gigabit Ethernet
 15.2085  1149  Win System Corporation
 15.2086  114a  VMIC
 15.2087 +	5579  VMIPCI-5579 (Reflective Memory Card)
 15.2088  	7587  VMIVME-7587
 15.2089  114b  Canopus Co., Ltd
 15.2090  114c  Annabooks
 15.2091 @@ -2430,12 +3085,24 @@ 114f  Digi International
 15.2092  	001a  DataFirePRIme E1 (1-port)
 15.2093  	001b  AccelePort C/X (IBM)
 15.2094  	001d  DataFire RAS T1/E1/PRI
 15.2095 +		114f 0050  DataFire RAS E1 Adapter
 15.2096 +		114f 0051  DataFire RAS Dual E1 Adapter
 15.2097 +		114f 0052  DataFire RAS T1 Adapter
 15.2098 +		114f 0053  DataFire RAS Dual T1 Adapter
 15.2099  	0023  AccelePort RAS
 15.2100  	0024  DataFire RAS B4 ST/U
 15.2101 +		114f 0030  DataFire RAS BRI U Adapter
 15.2102 +		114f 0031  DataFire RAS BRI S/T Adapter
 15.2103  	0026  AccelePort 4r 920
 15.2104  	0027  AccelePort Xr 920
 15.2105  	0034  AccelePort 2r 920
 15.2106  	0035  DataFire DSP T1/E1/PRI cPCI
 15.2107 +	0040  AccelePort Xp
 15.2108 +	0042  AccelePort 2p PCI
 15.2109 +	0070  Datafire Micro V IOM2 (Europe)
 15.2110 +	0071  Datafire Micro V (Europe)
 15.2111 +	0072  Datafire Micro V IOM2 (North America)
 15.2112 +	0073  Datafire Micro V (North America)
 15.2113  	6001  Avanstar
 15.2114  1150  Thinking Machines Corp
 15.2115  1151  JAE Electronics Inc.
 15.2116 @@ -2458,8 +3125,11 @@ 115d  Xircom
 15.2117  	0003  Cardbus Ethernet 10/100
 15.2118  		1014 0181  10/100 EtherJet Cardbus Adapter
 15.2119  		1014 1181  10/100 EtherJet Cardbus Adapter
 15.2120 +		1014 8181  10/100 EtherJet Cardbus Adapter
 15.2121 +		1014 9181  10/100 EtherJet Cardbus Adapter
 15.2122  		115d 0181  Cardbus Ethernet 10/100
 15.2123  		115d 1181  Cardbus Ethernet 10/100
 15.2124 +		1179 0181  Cardbus Ethernet 10/100
 15.2125  		8086 8181  EtherExpress PRO/100 Mobile CardBus 32 Adapter
 15.2126  		8086 9181  EtherExpress PRO/100 Mobile CardBus 32 Adapter
 15.2127  	0005  Cardbus Ethernet 10/100
 15.2128 @@ -2475,12 +3145,15 @@ 115d  Xircom
 15.2129  	000b  Cardbus Ethernet 10/100
 15.2130  		1014 0183  10/100 EtherJet Cardbus Adapter
 15.2131  		115d 0183  Cardbus Ethernet 10/100
 15.2132 +	000c  Mini-PCI V.90 56k Modem
 15.2133  	000f  Cardbus Ethernet 10/100
 15.2134  		1014 0183  10/100 EtherJet Cardbus Adapter
 15.2135  		115d 0183  Cardbus Ethernet 10/100
 15.2136  	0101  Cardbus 56k modem
 15.2137  		115d 1081  Cardbus 56k Modem
 15.2138  	0103  Cardbus Ethernet + 56k Modem
 15.2139 +		1014 9181  Cardbus 56k Modem
 15.2140 +		1115 1181  Cardbus Ethernet 100 + 56k Modem
 15.2141  		115d 1181  CBEM56G-100 Ethernet + 56k Modem
 15.2142  		8086 9181  PRO/100 LAN + Modem56 CardBus
 15.2143  115e  Peer Protocols Inc
 15.2144 @@ -2496,16 +3169,27 @@ 1164  Advanced Peripherals Technologies
 15.2145  1165  Imagraph Corporation
 15.2146  	0001  Motion TPEG Recorder/Player with audio
 15.2147  1166  ServerWorks
 15.2148 +	0005  CNB20-LE Host Bridge
 15.2149  	0007  CNB20-LE Host Bridge
 15.2150  	0008  CNB20HE Host Bridge
 15.2151  	0009  CNB20LE Host Bridge
 15.2152  	0010  CIOB30
 15.2153  	0011  CMIC-HE
 15.2154 +	0013  CNB20-HE Host Bridge
 15.2155 +	0014  CNB20-HE Host Bridge
 15.2156 +	0015  CMIC-GC Host Bridge
 15.2157 +	0016  CMIC-GC Host Bridge
 15.2158 +	0017  GCNB-LE Host Bridge
 15.2159  	0200  OSB4 South Bridge
 15.2160  	0201  CSB5 South Bridge
 15.2161 +	0203  CSB6 South Bridge
 15.2162  	0211  OSB4 IDE Controller
 15.2163  	0212  CSB5 IDE Controller
 15.2164 +	0213  CSB6 RAID/IDE Controller
 15.2165  	0220  OSB4/CSB5 OHCI USB Controller
 15.2166 +	0221  CSB6 OHCI USB Controller
 15.2167 +	0225  GCLE Host Bridge
 15.2168 +	0227  GCLE-2 Host Bridge
 15.2169  1167  Mutoh Industries Inc
 15.2170  1168  Thine Electronics Inc
 15.2171  1169  Centre for Development of Advanced Computing
 15.2172 @@ -2530,6 +3214,7 @@ 1177  Silicon Engineering
 15.2173  1178  Alfa, Inc.
 15.2174  	afa1  Fast Ethernet Adapter
 15.2175  1179  Toshiba America Info Systems
 15.2176 +	0103  EX-IDE Type-B
 15.2177  	0404  DVD Decoder card
 15.2178  	0406  Tecra Video Capture device
 15.2179  	0407  DVD Decoder card (Version 2)
 15.2180 @@ -2541,6 +3226,8 @@ 1179  Toshiba America Info Systems
 15.2181  	0618  CPU to PCI and PCI to ISA bridge
 15.2182  # Claimed to be Lucent DSP1645 [Mars], but that's apparently incorrect. Does anyone know the correct ID?
 15.2183  	0701  FIR Port
 15.2184 +	0804  TC6371AF SmartMedia Controller
 15.2185 +	0805  SD TypA Controller
 15.2186  	0d01  FIR Port Type-DO
 15.2187  		1179 0001  FIR Port Type-DO
 15.2188  117a  A-Trend Technology
 15.2189 @@ -2554,16 +3241,29 @@ 1180  Ricoh Co Ltd
 15.2190  	0466  RL5c466
 15.2191  	0475  RL5c475
 15.2192  	0476  RL5c476 II
 15.2193 +		104d 80df  Vaio PCG-FX403
 15.2194 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.2195  	0477  RL5c477
 15.2196  	0478  RL5c478
 15.2197 +		1014 0184  ThinkPad A30p (2653-64G)
 15.2198 +	0522  R5C522 IEEE 1394 Controller
 15.2199 +		1014 01cf  ThinkPad A30p (2653-64G)
 15.2200 +	0551  R5C551 IEEE 1394 Controller
 15.2201 +	0552  R5C552 IEEE 1394 Controller
 15.2202  1181  Telmatics International
 15.2203  1183  Fujikura Ltd
 15.2204  1184  Forks Inc
 15.2205  1185  Dataworld International Ltd
 15.2206  1186  D-Link System Inc
 15.2207  	0100  DC21041
 15.2208 -	1002  Sundance Ethernet
 15.2209 +	1002  DL10050 Sundance Ethernet
 15.2210 +		1186 1002  DFE-550TX
 15.2211 +		1186 1012  DFE-580TX
 15.2212  	1300  RTL8139 Ethernet
 15.2213 +		1186 1300  DFE-538TX 10/100 Ethernet Adapter
 15.2214 +		1186 1301  DFE-530TX+ 10/100 Ethernet Adapter
 15.2215 +	1340  DFE-690TXD CardBus PC Card
 15.2216 +	1561  DRP-32TXD Cardbus PC Card
 15.2217  	4000  DL2K Ethernet
 15.2218  1187  Advanced Technology Laboratories, Inc.
 15.2219  1188  Shima Seiki Manufacturing Ltd.
 15.2220 @@ -2601,6 +3301,8 @@ 1191  Artop Electronic Corp
 15.2221  	0005  ATP850UF
 15.2222  	0006  ATP860 NO-BIOS
 15.2223  	0007  ATP860
 15.2224 +	0008  ATP865 NO-ROM
 15.2225 +	0009  ATP865
 15.2226  	8002  AEC6710 SCSI-2 Host Adapter
 15.2227  	8010  AEC6712UW SCSI
 15.2228  	8020  AEC6712U SCSI
 15.2229 @@ -2651,6 +3353,7 @@ 11ad  Lite-On Communications Inc
 15.2230  		11ad ffff  LNE100TX
 15.2231  		1385 f004  FA310TX
 15.2232  	c115  LNE100TX [Linksys EtherFast 10/100]
 15.2233 +		11ad c001  LNE100TX [ver 2.0]
 15.2234  11ae  Aztech System Ltd
 15.2235  11af  Avid Technology Inc.
 15.2236  11b0  V3 Semiconductor Inc.
 15.2237 @@ -2681,6 +3384,7 @@ 11c1  Lucent Microelectronics
 15.2238  	0440  56k WinModem
 15.2239  		0001 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2240  		1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2241 +		1033 8047  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2242  		1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2243  		10cf 102c  LB LT Modem V.90 56k
 15.2244  		10cf 104a  BIBLO LT Modem 56k
 15.2245 @@ -2688,15 +3392,18 @@ 11c1  Lucent Microelectronics
 15.2246  		1179 0001  Internal V.90 Modem
 15.2247  		11c1 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2248  		122d 4101  MDP7800-U Modem
 15.2249 +		122d 4102  MDP7800SP-U Modem
 15.2250  		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2251  		13e0 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2252  		13e0 0441  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2253 +		13e0 0450  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2254  		13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2255  		13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2256  		144d 2101  LT56PV Modem
 15.2257  		149f 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2258  	0441  56k WinModem
 15.2259  		1033 804d  LT WinModem 56k Data+Fax
 15.2260 +		1033 8065  LT WinModem 56k Data+Fax
 15.2261  		1092 0440  Supra 56i
 15.2262  		1179 0001  Internal V.90 Modem
 15.2263  		11c1 0440  LT WinModem 56k Data+Fax
 15.2264 @@ -2706,11 +3413,16 @@ 11c1  Lucent Microelectronics
 15.2265  		13e0 0100  LT WinModem 56k Data+Fax
 15.2266  		13e0 0410  LT WinModem 56k Data+Fax
 15.2267  		13e0 0420  TelePath Internet 56k WinModem
 15.2268 +		13e0 0440  LT WinModem 56k Data+Fax
 15.2269  		13e0 0443  LT WinModem 56k Data+Fax
 15.2270 +		13e0 f102  LT WinModem 56k Data+Fax
 15.2271  		1416 9804  CommWave 56k Modem
 15.2272  		141d 0440  LT WinModem 56k Data+Fax
 15.2273  		144f 0441  Lucent 56k V.90 DF Modem
 15.2274 +		144f 0449  Lucent 56k V.90 DF Modem
 15.2275 +		144f 110d  Lucent Win Modem
 15.2276  		1468 0441  Presario 56k V.90 DF Modem
 15.2277 +		1668 0440  Lucent Win Modem
 15.2278  	0442  56k WinModem
 15.2279  		0001 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2280  		11c1 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2281 @@ -2719,6 +3431,7 @@ 11c1  Lucent Microelectronics
 15.2282  		13e0 0442  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2283  		13fc 2471  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2284  		144d 2104  LT56PT Modem
 15.2285 +		144f 1104  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2286  		149f 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2287  		1668 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2288  	0443  LT WinModem
 15.2289 @@ -2727,14 +3440,23 @@ 11c1  Lucent Microelectronics
 15.2290  	0446  LT WinModem
 15.2291  	0447  LT WinModem
 15.2292  	0448  WinModem 56k
 15.2293 +		1014 0131  Lucent Win Modem
 15.2294 +		1033 8066  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2295 +		13e0 0030  56k Voice Modem
 15.2296  		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd
 15.2297 +# Actiontech eth+modem card as used by Dell &c.
 15.2298 +		1668 2400  LT WinModem 56k (MiniPCI Ethernet+Modem)
 15.2299  	0449  WinModem 56k
 15.2300  		0e11 b14d  56k V.90 Modem
 15.2301  		13e0 0020  LT WinModem 56k Data+Fax
 15.2302  		13e0 0041  TelePath Internet 56k WinModem
 15.2303 +		1436 0440  Lucent Win Modem
 15.2304  		144f 0449  Lucent 56k V.90 DFi Modem
 15.2305 +		1468 0410  IBM ThinkPad T23 (2647-4MG)
 15.2306 +		1468 0440  Lucent Win Modem
 15.2307  		1468 0449  Presario 56k V.90 DFi Modem
 15.2308  	044a  F-1156IV WinModem (V90, 56KFlex)
 15.2309 +		10cf 1072  LB Global LT Modem
 15.2310  		13e0 0012  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2311  		13e0 0042  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2312  		144f 1005  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
 15.2313 @@ -2742,6 +3464,7 @@ 11c1  Lucent Microelectronics
 15.2314  	044c  LT WinModem
 15.2315  	044d  LT WinModem
 15.2316  	044e  LT WinModem
 15.2317 +	044f  V90 WildWire Modem
 15.2318  	0450  LT WinModem
 15.2319  	0451  LT WinModem
 15.2320  	0452  LT WinModem
 15.2321 @@ -2753,7 +3476,13 @@ 11c1  Lucent Microelectronics
 15.2322  	0458  LT WinModem
 15.2323  	0459  LT WinModem
 15.2324  	045a  LT WinModem
 15.2325 +	0461  V90 WildWire Modem
 15.2326 +	0462  V90 WildWire Modem
 15.2327  	0480  Venus Modem (V90, 56KFlex)
 15.2328 +	5801  USB
 15.2329 +	5802  USS-312 USB Controller
 15.2330 +	5811  FW323
 15.2331 +		dead 0800  FireWire Host Bus Adapter
 15.2332  11c2  Sand Microelectronics
 15.2333  11c3  NEC Corp
 15.2334  11c4  Document Technologies, Inc
 15.2335 @@ -2784,6 +3513,7 @@ 11d1  Auravision
 15.2336  11d2  Intercom Inc.
 15.2337  11d3  Trancell Systems Inc
 15.2338  11d4  Analog Devices
 15.2339 +	1805  SM56 PCI modem
 15.2340  	1889  AD1889 sound chip
 15.2341  11d5  Ikon Corporation
 15.2342  	0115  10115
 15.2343 @@ -2839,6 +3569,7 @@ 11f6  Compex
 15.2344  	0113  FreedomLine 100
 15.2345  	1401  ReadyLink 2000
 15.2346  	2011  RL100-ATX 10/100
 15.2347 +		11f6 2011  RL100-ATX
 15.2348  	2201  ReadyLink 100TX (Winbond W89C840)
 15.2349  		11f6 2011  ReadyLink 100TX
 15.2350  	9881  RL100TX
 15.2351 @@ -2857,11 +3588,13 @@ 11fe  Comtrol Corporation
 15.2352  	0004  RocketPort 32 Intf
 15.2353  	0005  RocketPort Octacable
 15.2354  	0006  RocketPort 8J
 15.2355 +	0007  RocketPort 4-port
 15.2356  	0008  RocketPort 8-port
 15.2357  	0009  RocketPort 16-port
 15.2358  	000a  RocketPort Plus Quadcable
 15.2359  	000b  RocketPort Plus Octacable
 15.2360  	000c  RocketPort 8-port Modem
 15.2361 +	8015  RocketPort 4-port UART 16954
 15.2362  11ff  Scion Corporation
 15.2363  1200  CSS Corporation
 15.2364  1201  Vista Controls Corp
 15.2365 @@ -2878,18 +3611,21 @@ 120b  Adaptive Solutions
 15.2366  120c  Technical Corp.
 15.2367  120d  Compression Labs, Inc.
 15.2368  120e  Cyclades Corporation
 15.2369 -	0100  Cyclom_Y below first megabyte
 15.2370 -	0101  Cyclom_Y above first megabyte
 15.2371 -	0102  Cyclom_4Y below first megabyte
 15.2372 -	0103  Cyclom_4Y above first megabyte
 15.2373 -	0104  Cyclom_8Y below first megabyte
 15.2374 -	0105  Cyclom_8Y above first megabyte
 15.2375 -	0200  Cyclom_Z below first megabyte
 15.2376 -	0201  Cyclom_Z above first megabyte
 15.2377 -	0300  PC300 RX 2
 15.2378 -	0301  PC300 RX 1
 15.2379 -	0310  PC300 TE 2
 15.2380 -	0311  PC300 TE 1
 15.2381 +	0100  Cyclom-Y below first megabyte
 15.2382 +	0101  Cyclom-Y above first megabyte
 15.2383 +	0102  Cyclom-4Y below first megabyte
 15.2384 +	0103  Cyclom-4Y above first megabyte
 15.2385 +	0104  Cyclom-8Y below first megabyte
 15.2386 +	0105  Cyclom-8Y above first megabyte
 15.2387 +	0200  Cyclades-Z below first megabyte
 15.2388 +	0201  Cyclades-Z above first megabyte
 15.2389 +	0300  PC300/RSV or /X21 (2 ports)
 15.2390 +	0301  PC300/RSV or /X21 (1 port)
 15.2391 +	0310  PC300/TE (2 ports)
 15.2392 +	0311  PC300/TE (1 port)
 15.2393 +	0320  PC300/TE-M (2 ports)
 15.2394 +	0321  PC300/TE-M (1 port)
 15.2395 +	0400  PC400
 15.2396  120f  Essential Communications
 15.2397  	0001  Roadrunner serial HIPPI
 15.2398  1210  Hyperparallel Technologies
 15.2399 @@ -2900,12 +3636,15 @@ 1214  Performance Technologies, Inc.
 15.2400  1215  Interware Co., Ltd
 15.2401  1216  Purup Prepress A/S
 15.2402  1217  O2 Micro, Inc.
 15.2403 -	6729  6729
 15.2404 -	673a  6730
 15.2405 -	6832  6832
 15.2406 -	6836  6836
 15.2407 +	6729  OZ6729
 15.2408 +	673a  OZ6730
 15.2409 +	6832  OZ6832/6833 Cardbus Controller
 15.2410 +	6836  OZ6836/6860 Cardbus Controller
 15.2411  	6872  OZ6812 Cardbus Controller
 15.2412 +	6925  OZ6922 Cardbus Controller
 15.2413  	6933  OZ6933 Cardbus Controller
 15.2414 +		1025 1016  Travelmate 612 TX
 15.2415 +	6972  OZ6912 Cardbus Controller
 15.2416  1218  Hybricon Corp.
 15.2417  1219  First Virtual Corporation
 15.2418  121a  3Dfx Interactive, Inc.
 15.2419 @@ -2920,7 +3659,7 @@ 121a  3Dfx Interactive, Inc.
 15.2420  		1092 8030  Monster Fusion
 15.2421  		1092 8035  Monster Fusion AGP
 15.2422  		10b0 0001  Dragon 4000
 15.2423 -		1102 1017  CT6760 3D Blaster Banshee
 15.2424 +		1102 1018  3D Blaster Banshee VE
 15.2425  		121a 0001  Voodoo Banshee AGP
 15.2426  		121a 0003  Voodoo Banshee AGP SGRAM
 15.2427  		121a 0004  Voodoo Banshee
 15.2428 @@ -2950,6 +3689,7 @@ 121a  3Dfx Interactive, Inc.
 15.2429  		121a 0062  Voodoo3 3500 TV (SECAM)
 15.2430  	0009  Voodoo 4 / Voodoo 5
 15.2431  		121a 0009  Voodoo5 AGP 5500/6000
 15.2432 +	0057  Voodoo 3/3000 [Avenger]
 15.2433  121b  Advanced Telecommunications Modules
 15.2434  121c  Nippon Texaco., Ltd
 15.2435  121d  Lippert Automationstechnik GmbH
 15.2436 @@ -3018,12 +3758,19 @@ 123f  C-Cube Microsystems
 15.2437  1240  Marathon Technologies Corp.
 15.2438  1241  DSC Communications
 15.2439  1242  Jaycor Networks, Inc.
 15.2440 +	1242  JNI Corporation (former Jaycor Networks, Inc.)
 15.2441  	4643  FCI-1063 Fibre Channel Adapter
 15.2442 +	6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter
 15.2443 +	656a  FCX-6562 PCI-X Fibre Channel Adapter
 15.2444  1243  Delphax
 15.2445  1244  AVM Audiovisuelles MKTG & Computer System GmbH
 15.2446  	0700  B1 ISDN
 15.2447 +	0800  C4 ISDN
 15.2448  	0a00  A1 ISDN [Fritz]
 15.2449  		1244 0a00  FRITZ!Card ISDN Controller
 15.2450 +	0e00  Fritz!PCI v2.0 ISDN
 15.2451 +	1100  C2 ISDN
 15.2452 +	1200  T1 ISDN
 15.2453  1245  A.P.D., S.A.
 15.2454  1246  Dipix Technologies, Inc.
 15.2455  1247  Xylon Research, Inc.
 15.2456 @@ -3031,11 +3778,14 @@ 1248  Central Data Corporation
 15.2457  1249  Samsung Electronics Co., Ltd.
 15.2458  124a  AEG Electrocom GmbH
 15.2459  124b  SBS/Greenspring Modular I/O
 15.2460 +	0040  cPCI-200 Four Slot IndustryPack carrier
 15.2461 +		124b 9080  PCI9080 Bridge
 15.2462  124c  Solitron Technologies, Inc.
 15.2463  124d  Stallion Technologies, Inc.
 15.2464  	0000  EasyConnection 8/32
 15.2465  	0002  EasyConnection 8/64
 15.2466  	0003  EasyIO
 15.2467 +	0004  EasyConnection/RA
 15.2468  124e  Cylink
 15.2469  124f  Infotrend Technology, Inc.
 15.2470  	0041  IFT-2000 Series RAID Controller
 15.2471 @@ -3061,6 +3811,7 @@ 125a  ABB Power Systems
 15.2472  125b  Asix Electronics Corporation
 15.2473  	1400  ALFA GFC2204
 15.2474  125c  Aurora Technologies, Inc.
 15.2475 +	0640  Aries 16000P
 15.2476  125d  ESS Technology
 15.2477  	0000  ES336H Fax Modem (Early Model)
 15.2478  	1948  Solo?
 15.2479 @@ -3082,13 +3833,27 @@ 125d  ESS Technology
 15.2480  	1989  ESS Modem
 15.2481  		125d 1989  ESS Modem
 15.2482  	1998  ES1983S Maestro-3i PCI Audio Accelerator
 15.2483 +		1028 00e6  ES1983S Maestro-3i (Dell Inspiron 8100)
 15.2484  	1999  ES1983S Maestro-3i PCI Modem Accelerator
 15.2485 +	199a  ES1983S Maestro-3i PCI Audio Accelerator
 15.2486 +	199b  ES1983S Maestro-3i PCI Modem Accelerator
 15.2487  	2808  ES336H Fax Modem (Later Model)
 15.2488  	2838  ES2838/2839 SuperLink Modem
 15.2489  	2898  ES2898 Modem
 15.2490 +		125d 0424  ES56-PI Data Fax Modem
 15.2491 +		125d 0425  ES56T-PI Data Fax Modem
 15.2492 +		125d 0426  ES56V-PI Data Fax Modem
 15.2493 +		125d 0427  VW-PI Data Fax Modem
 15.2494 +		125d 0428  ES56ST-PI Data Fax Modem
 15.2495 +		125d 0429  ES56SV-PI Data Fax Modem
 15.2496 +		147a c001  ES56-PI Data Fax Modem
 15.2497 +		14fe 0428  ES56-PI Data Fax Modem
 15.2498 +		14fe 0429  ES56-PI Data Fax Modem
 15.2499  125e  Specialvideo Engineering SRL
 15.2500  125f  Concurrent Technologies, Inc.
 15.2501  1260  Harris Semiconductor
 15.2502 +	3873  Prism 2.5 Wavelan chipset
 15.2503 +		1186 3501  DWL-520 Wireless PCI Adapter
 15.2504  	8130  HMP8130 NTSC/PAL Video Decoder
 15.2505  	8131  HMP8131 NTSC/PAL Video Decoder
 15.2506  1261  Matsushita-Kotobuki Electronics Industries, Ltd.
 15.2507 @@ -3125,6 +3890,7 @@ 1273  Hughes Network Systems
 15.2508  	0002  DirecPC
 15.2509  1274  Ensoniq
 15.2510  	1371  ES1371 [AudioPCI-97]
 15.2511 +		0e11 0024  AudioPCI on Motherboard Compaq Deskpro
 15.2512  		0e11 b1a7  ES1371, ES1373 AudioPCI
 15.2513  		1033 80ac  ES1371, ES1373 AudioPCI
 15.2514  		1042 1854  Tazer
 15.2515 @@ -3181,7 +3947,9 @@ 1274  Ensoniq
 15.2516  		4942 4c4c  Creative Sound Blaster AudioPCI128
 15.2517  	5880  5880 AudioPCI
 15.2518  		1274 2000  Creative Sound Blaster AudioPCI128
 15.2519 +		1274 2003  Creative SoundBlaster AudioPCI 128
 15.2520  		1274 5880  Creative Sound Blaster AudioPCI128
 15.2521 +		1458 a000  5880 AudioPCI On Motherboard 6OXET
 15.2522  		1462 6880  5880 AudioPCI On Motherboard MS-6188 1.00
 15.2523  		270f 2001  5880 AudioPCI On Motherboard 6CTR
 15.2524  		270f 2200  5880 AudioPCI On Motherboard 6WTX
 15.2525 @@ -3190,6 +3958,7 @@ 1275  Network Appliance Corporation
 15.2526  1276  Switched Network Technologies, Inc.
 15.2527  1277  Comstream
 15.2528  1278  Transtech Parallel Systems Ltd.
 15.2529 +	0701  TPE3/TM3 PowerPC Node
 15.2530  1279  Transmeta Corporation
 15.2531  	0295  Northbridge
 15.2532  	0395  LongRun Northbridge
 15.2533 @@ -3197,93 +3966,103 @@ 1279  Transmeta Corporation
 15.2534  	0397  BIOS scratchpad
 15.2535  127a  Rockwell International
 15.2536  	1002  HCF 56k Data/Fax Modem
 15.2537 -		122d 4002  HPG / MDP3858-U # Aztech
 15.2538 -		122d 4005  MDP3858-E # Aztech
 15.2539 -		122d 4007  MDP3858-A/-NZ # Aztech
 15.2540 -		122d 4012  MDP3858-SA # Aztech
 15.2541 -		122d 4017  MDP3858-W # Aztech
 15.2542 -		122d 4018  MDP3858-W # Aztech
 15.2543 +		1092 094c  SupraExpress 56i PRO [Diamond SUP2380]
 15.2544 +		122d 4002  HPG / MDP3858-U
 15.2545 +		122d 4005  MDP3858-E
 15.2546 +		122d 4007  MDP3858-A/-NZ
 15.2547 +		122d 4012  MDP3858-SA
 15.2548 +		122d 4017  MDP3858-W
 15.2549 +		122d 4018  MDP3858-W
 15.2550 +		127a 1002  Rockwell 56K D/F HCF Modem
 15.2551  	1003  HCF 56k Data/Fax Modem
 15.2552 -		0e11 b0bc  229-DF Zephyr # Compaq
 15.2553 -		0e11 b114  229-DF Cheetah # Compaq
 15.2554 -		1033 802b  229-DF # NEC
 15.2555 -		13df 1003  PCI56RX Modem # E-Tech Inc
 15.2556 -		13e0 0117  IBM # GVC
 15.2557 -		13e0 0147  IBM # GVC
 15.2558 -		13e0 0197  IBM # GVC
 15.2559 -		13e0 01c7  IBM # GVC
 15.2560 -		13e0 01f7  IBM # GVC
 15.2561 -		1436 1003  IBM # CIS
 15.2562 -		1436 1103  IBM # CIS
 15.2563 +		0e11 b0bc  229-DF Zephyr
 15.2564 +		0e11 b114  229-DF Cheetah
 15.2565 +		1033 802b  229-DF
 15.2566 +		13df 1003  PCI56RX Modem
 15.2567 +		13e0 0117  IBM
 15.2568 +		13e0 0147  IBM F-1156IV+/R3 Spain V.90 Modem
 15.2569 +		13e0 0197  IBM
 15.2570 +		13e0 01c7  IBM F-1156IV+/R3 WW V.90 Modem
 15.2571 +		13e0 01f7  IBM
 15.2572 +		1436 1003  IBM
 15.2573 +		1436 1103  IBM 5614PM3G V.90 Modem
 15.2574  		1436 1602  Compaq 229-DF Ducati
 15.2575  	1004  HCF 56k Data/Fax/Voice Modem
 15.2576 +		1048 1500  MicroLink 56k Modem
 15.2577  		10cf 1059  Fujitsu 229-DFRT
 15.2578  	1005  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 15.2579 -		1033 8029  229-DFSV # NEC
 15.2580 -		1033 8054  Modem # NEC
 15.2581 +		1033 8029  229-DFSV
 15.2582 +		1033 8054  Modem
 15.2583  		10cf 103c  Fujitsu
 15.2584  		10cf 1055  Fujitsu 229-DFSV
 15.2585  		10cf 1056  Fujitsu 229-DFSV
 15.2586 -		122d 4003  MDP3858SP-U # Aztech
 15.2587 -		122d 4006  Packard Bell MDP3858V-E # Aztech
 15.2588 -		122d 4008  MDP3858SP-A/SP-NZ # Aztech
 15.2589 -		122d 4009  MDP3858SP-E # Aztech
 15.2590 -		122d 4010  MDP3858V-U # Aztech
 15.2591 -		122d 4011  MDP3858SP-SA # Aztech
 15.2592 -		122d 4013  MDP3858V-A/V-NZ # Aztech
 15.2593 -		122d 4015  MDP3858SP-W # Aztech
 15.2594 -		122d 4016  MDP3858V-W # Aztech
 15.2595 -		122d 4019  MDP3858V-SA # Aztech
 15.2596 -		13df 1005  PCI56RVP Modem  # E-Tech Inc
 15.2597 -		13e0 0187  IBM # GVC
 15.2598 -		13e0 01a7  IBM # GVC
 15.2599 -		13e0 01b7  IBM # GVC
 15.2600 -		13e0 01d7  IBM # GVC
 15.2601 -		1436 1005  IBM # CIS
 15.2602 -		1436 1105  IBM # CIS
 15.2603 +		122d 4003  MDP3858SP-U
 15.2604 +		122d 4006  Packard Bell MDP3858V-E
 15.2605 +		122d 4008  MDP3858SP-A/SP-NZ
 15.2606 +		122d 4009  MDP3858SP-E
 15.2607 +		122d 4010  MDP3858V-U
 15.2608 +		122d 4011  MDP3858SP-SA
 15.2609 +		122d 4013  MDP3858V-A/V-NZ
 15.2610 +		122d 4015  MDP3858SP-W
 15.2611 +		122d 4016  MDP3858V-W
 15.2612 +		122d 4019  MDP3858V-SA
 15.2613 +		13df 1005  PCI56RVP Modem
 15.2614 +		13e0 0187  IBM
 15.2615 +		13e0 01a7  IBM
 15.2616 +		13e0 01b7  IBM DF-1156IV+/R3 Spain V.90 Modem
 15.2617 +		13e0 01d7  IBM DF-1156IV+/R3 WW V.90 Modem
 15.2618 +		1436 1005  IBM
 15.2619 +		1436 1105  IBM
 15.2620 +		1437 1105  IBM 5614PS3G V.90 Modem
 15.2621 +	1022  HCF 56k Modem
 15.2622 +		1436 1303  M3-5614PM3G V.90 Modem
 15.2623  	1023  HCF 56k Data/Fax Modem
 15.2624 -		122d 4020  Packard Bell MDP3858-WE # Aztech
 15.2625 -		122d 4023  MDP3858-UE # Aztech
 15.2626 -		13e0 0247  IBM # GVC
 15.2627 -		13e0 0297  IBM # GVC
 15.2628 -		13e0 02c7  IBM # GVC
 15.2629 -		1436 1203  IBM # CIS
 15.2630 -		1436 1303  IBM # CIS
 15.2631 +		122d 4020  Packard Bell MDP3858-WE
 15.2632 +		122d 4023  MDP3858-UE
 15.2633 +		13e0 0247  IBM F-1156IV+/R6 Spain V.90 Modem
 15.2634 +		13e0 0297  IBM
 15.2635 +		13e0 02c7  IBM F-1156IV+/R6 WW V.90 Modem
 15.2636 +		1436 1203  IBM
 15.2637 +		1436 1303  IBM
 15.2638  	1024  HCF 56k Data/Fax/Voice Modem
 15.2639  	1025  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 15.2640  		10cf 106a  Fujitsu 235-DFSV
 15.2641 -		122d 4021  Packard Bell MDP3858V-WE # Aztech
 15.2642 -		122d 4022  MDP3858SP-WE # Aztech
 15.2643 -		122d 4024  MDP3858V-UE # Aztech
 15.2644 -		122d 4025  MDP3858SP-UE # Aztech
 15.2645 +		122d 4021  Packard Bell MDP3858V-WE
 15.2646 +		122d 4022  MDP3858SP-WE
 15.2647 +		122d 4024  MDP3858V-UE
 15.2648 +		122d 4025  MDP3858SP-UE
 15.2649  	1026  HCF 56k PCI Speakerphone Modem
 15.2650 +	1032  HCF 56k Modem
 15.2651 +	1033  HCF 56k Modem
 15.2652 +	1034  HCF 56k Modem
 15.2653  	1035  HCF 56k PCI Speakerphone Modem
 15.2654 +	1036  HCF 56k Modem
 15.2655  	1085  HCF 56k Volcano PCI Modem
 15.2656  	2005  HCF 56k Data/Fax Modem
 15.2657 -		104d 8044  229-DFSV # Sony
 15.2658 -		104d 8045  229-DFSV # Sony
 15.2659 -		104d 8055  PBE/Aztech 235W-DFSV # Sony
 15.2660 -		104d 8056  235-DFSV # Sony
 15.2661 -		104d 805a  Modem # Sony
 15.2662 -		104d 805f  Modem # Sony
 15.2663 -		104d 8074  Modem # Sony
 15.2664 +		104d 8044  229-DFSV
 15.2665 +		104d 8045  229-DFSV
 15.2666 +		104d 8055  PBE/Aztech 235W-DFSV
 15.2667 +		104d 8056  235-DFSV
 15.2668 +		104d 805a  Modem
 15.2669 +		104d 805f  Modem
 15.2670 +		104d 8074  Modem
 15.2671  	2013  HSF 56k Data/Fax Modem
 15.2672 -		1179 0001  Modem # Toshiba
 15.2673 -		1179 ff00  Modem # Toshiba
 15.2674 +		1179 0001  Modem
 15.2675 +		1179 ff00  Modem
 15.2676  	2014  HSF 56k Data/Fax/Voice Modem
 15.2677  		10cf 1057  Fujitsu Citicorp III
 15.2678 -		122d 4050  MSP3880-U # Aztech
 15.2679 -		122d 4055  MSP3880-W # Aztech
 15.2680 +		122d 4050  MSP3880-U
 15.2681 +		122d 4055  MSP3880-W
 15.2682  	2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 15.2683  		10cf 1063  Fujitsu
 15.2684  		10cf 1064  Fujitsu
 15.2685  		1468 2015  Fujitsu
 15.2686  	2016  HSF 56k Data/Fax/Voice/Spkp Modem
 15.2687 -		122d 4051  MSP3880V-W # Aztech
 15.2688 -		122d 4052  MSP3880SP-W # Aztech
 15.2689 -		122d 4054  MSP3880V-U # Aztech
 15.2690 -		122d 4056  MSP3880SP-U # Aztech
 15.2691 -		122d 4057  MSP3880SP-A # Aztech
 15.2692 +		122d 4051  MSP3880V-W
 15.2693 +		122d 4052  MSP3880SP-W
 15.2694 +		122d 4054  MSP3880V-U
 15.2695 +		122d 4056  MSP3880SP-U
 15.2696 +		122d 4057  MSP3880SP-A
 15.2697  	4311  Riptide HSF 56k PCI Modem
 15.2698  		127a 4311  Ring Modular? Riptide HSF RT HP Dom
 15.2699  		13e0 0210  HP-GVC
 15.2700 @@ -3293,10 +4072,11 @@ 127a  Rockwell International
 15.2701  		1235 4321  Hewlett Packard DF
 15.2702  		1235 4324  Hewlett Packard DF
 15.2703  		13e0 0210  Hewlett Packard DF
 15.2704 -		144d 2321  Riptide # Samsung
 15.2705 +		144d 2321  Riptide
 15.2706  	4322  Riptide PCI Game Controller
 15.2707  		1235 4322  Riptide PCI Game Controller
 15.2708  	8234  RapidFire 616X ATM155 Adapter
 15.2709 +		108d 0022  RapidFire 616X ATM155 Adapter
 15.2710  		108d 0027  RapidFire 616X ATM155 Adapter
 15.2711  127b  Pixera Corporation
 15.2712  127c  Crosspoint Solutions, Inc.
 15.2713 @@ -3348,6 +4128,7 @@ 1297  Holco Enterprise Co, Ltd/Shuttle C
 15.2714  1298  Spellcaster Telecommunications Inc.
 15.2715  1299  Knowledge Technology Lab.
 15.2716  129a  VMetro, inc.
 15.2717 +	0615  PBT-615 PCI-X Bus Analyzer
 15.2718  129b  Image Access
 15.2719  129c  Jaycor
 15.2720  129d  Compcore Multimedia, Inc.
 15.2721 @@ -3369,9 +4150,11 @@ 12ab  Yuan Yuan Enterprise Co., Ltd.
 15.2722  12ac  Measurex Corporation
 15.2723  12ad  Multidata GmbH
 15.2724  12ae  Alteon Networks Inc.
 15.2725 -	0001  AceNIC Gigabit Ethernet (Fibre)
 15.2726 -		1410 0104  Gigabit Ethernet-SX PCI Adapter (14100401)
 15.2727 +	0001  AceNIC Gigabit Ethernet
 15.2728 +		12ae 0001  Gigabit Ethernet-SX (Universal)
 15.2729 +		1410 0104  Gigabit Ethernet-SX PCI Adapter
 15.2730  	0002  AceNIC Gigabit Ethernet (Copper)
 15.2731 +		12ae 0002  Gigabit Ethernet-T (3C986-T)
 15.2732  12af  TDK USA Corp
 15.2733  12b0  Jorge Scientific Corp
 15.2734  12b1  GammaLink
 15.2735 @@ -3418,6 +4201,8 @@ 12c3  Holtek Microelectronics Inc
 15.2736  	5598  PCI NE2K Ethernet
 15.2737  12c4  Connect Tech Inc
 15.2738  12c5  Picture Elements Incorporated
 15.2739 +	007e  Imaging/Scanning Subsystem Engine
 15.2740 +	007f  Imaging/Scanning Subsystem Engine
 15.2741  	0081  PCIVST [Grayscale Thresholding Engine]
 15.2742  	0085  Video Simulator/Sender
 15.2743  	0086  THR2 Multi-scale Thresholder
 15.2744 @@ -3437,19 +4222,24 @@ 12d2  NVidia / SGS Thomson (Joint Ventur
 15.2745  	0008  NV1
 15.2746  	0009  DAC64
 15.2747  	0018  Riva128
 15.2748 +		1048 0c10  VICTORY Erazor
 15.2749  		107b 8030  STB Velocity 128
 15.2750  		1092 0350  Viper V330
 15.2751  		1092 1092  Viper V330
 15.2752  		10b4 1b1b  STB Velocity 128
 15.2753 -		10b4 1b20  STB Velocity 128
 15.2754 +		10b4 1b1d  STB Velocity 128
 15.2755 +		10b4 1b1e  STB Velocity 128, PAL TV-Out
 15.2756 +		10b4 1b20  STB Velocity 128 Sapphire
 15.2757  		10b4 1b21  STB Velocity 128
 15.2758  		10b4 1b22  STB Velocity 128 AGP, NTSC TV-Out
 15.2759  		10b4 1b23  STB Velocity 128 AGP, PAL TV-Out
 15.2760  		10b4 1b27  STB Velocity 128 DVD
 15.2761 +		10b4 1b88  MVP Pro 128
 15.2762  		10b4 222a  STB Velocity 128 AGP
 15.2763  		10b4 2230  STB Velocity 128
 15.2764 +		10b4 2232  STB Velocity 128
 15.2765  		10b4 2235  STB Velocity 128 AGP
 15.2766 -		2a15 54a3  3DVision-SAGP
 15.2767 +		2a15 54a3  3DVision-SAGP / 3DexPlorer 3000
 15.2768  	0019  Riva128ZX
 15.2769  	0020  TNT
 15.2770  	0028  TNT2
 15.2771 @@ -3457,7 +4247,7 @@ 12d2  NVidia / SGS Thomson (Joint Ventur
 15.2772  	002c  VTNT2
 15.2773  	00a0  ITNT2
 15.2774  12d3  Vingmed Sound A/S
 15.2775 -12d4  DGM&S
 15.2776 +12d4  Ulticom (Formerly DGM&S)
 15.2777  12d5  Equator Technologies
 15.2778  12d6  Analogic Corp
 15.2779  12d7  Biotronic SRL
 15.2780 @@ -3490,6 +4280,7 @@ 12eb  Aureal Semiconductor
 15.2781  		1092 2100  Sonic Impact A3D
 15.2782  		1092 2110  Sonic Impact A3D
 15.2783  		1092 2200  Sonic Impact A3D
 15.2784 +		122d 1002  AU8820 Vortex Digital Audio Processor
 15.2785  		12eb 0001  AU8820 Vortex Digital Audio Processor
 15.2786  		5053 3355  Montego
 15.2787  	0002  Vortex 2
 15.2788 @@ -3710,6 +4501,7 @@ 1359  Prisa Networks
 15.2789  135a  Brain Boxes
 15.2790  135b  Giganet Inc
 15.2791  135c  Quatech Inc
 15.2792 +	00f0  MPAC-100 Syncronous Serial Card (Zilog 85230)
 15.2793  135d  ABB Network Partner AB
 15.2794  135e  Sealevel Systems Inc
 15.2795  	7101  Single Port RS-232/422/485/530
 15.2796 @@ -3756,6 +4548,7 @@ 1382  Marian - Electronic & Software
 15.2797  1383  Controlnet Inc
 15.2798  1384  Reality Simulation Systems Inc
 15.2799  1385  Netgear
 15.2800 +	4100  802.11b Wireless Adapter (MA301)
 15.2801  	620a  GA620
 15.2802  	622a  GA622
 15.2803  	630a  GA630
 15.2804 @@ -3781,6 +4574,8 @@ 1393  Moxa Technologies Co Ltd
 15.2805  	2180  Intellio C218 Turbo PCI
 15.2806  	3200  Intellio C320 Turbo PCI
 15.2807  1394  Level One Communications
 15.2808 +	0001  LXT1001 Gigabit Ethernet
 15.2809 +		1394 0001  NetCelerator Adapter
 15.2810  1395  Ambicom Inc
 15.2811  1396  Cipher Systems Inc
 15.2812  1397  Cologne Chip Designs GmbH
 15.2813 @@ -3790,6 +4585,9 @@ 1397  Cologne Chip Designs GmbH
 15.2814  1398  Clarion co. Ltd
 15.2815  1399  Rios systems Co Ltd
 15.2816  139a  Alacritech Inc
 15.2817 +	0001  Quad Port 10/100 Server Accelerator
 15.2818 +	0003  Single Port 10/100 Server Accelerator
 15.2819 +	0005  Single Port Gigabit Server Accelerator
 15.2820  139b  Mediasonic Multimedia Systems Ltd
 15.2821  139c  Quantum 3d Inc
 15.2822  139d  EPL limited
 15.2823 @@ -3798,12 +4596,17 @@ 139f  Aethra s.r.l.
 15.2824  13a0  Crystal Group Inc
 15.2825  13a1  Kawasaki Heavy Industries Ltd
 15.2826  13a2  Ositech Communications Inc
 15.2827 -13a3  Hi-Fn
 15.2828 +13a3  Hifn Inc.
 15.2829 +	0005  7751 Security Processor
 15.2830 +	0006  6500 Public Key Processor
 15.2831 +	0007  7811 Security Processor
 15.2832 +	0012  7951 Security Processor
 15.2833  13a4  Rascom Inc
 15.2834  13a5  Audio Digital Imaging Inc
 15.2835  13a6  Videonics Inc
 15.2836  13a7  Teles AG
 15.2837  13a8  Exar Corp.
 15.2838 +	0158  XR17C158 Octal UART
 15.2839  13a9  Siemens Medical Systems, Ultrasound Group
 15.2840  13aa  Broadband Networks Inc
 15.2841  13ab  Arcom Control Systems Ltd
 15.2842 @@ -3832,6 +4635,7 @@ 13c0  Microgate Corporation
 15.2843  13c1  3ware Inc
 15.2844  	1000  3ware ATA-RAID
 15.2845  	1001  3ware 7000-series ATA-RAID
 15.2846 +	1002  3ware ATA-RAID
 15.2847  13c2  Technotrend Systemtechnik GmbH
 15.2848  13c3  Janz Computer AG
 15.2849  13c4  Phase Metrics
 15.2850 @@ -3848,6 +4652,7 @@ 13ce  Cocom A/S
 15.2851  13cf  Studio Audio & Video Ltd
 15.2852  13d0  Techsan Electronics Co Ltd
 15.2853  13d1  Abocom Systems Inc
 15.2854 +	ab06  RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter
 15.2855  13d2  Shark Multimedia Inc
 15.2856  13d3  IMC Networks
 15.2857  13d4  Graphics Microsystems Inc
 15.2858 @@ -3881,11 +4686,12 @@ 13ed  Raytheion E-Systems
 15.2859  13ee  Hayes Microcomputer Products Inc
 15.2860  13ef  Coppercom Inc
 15.2861  13f0  Sundance Technology Inc
 15.2862 -	0201  Sundance Ethernet
 15.2863 +	0201  ST201 Sundance Ethernet
 15.2864  13f1  Oce' - Technologies B.V.
 15.2865  13f2  Ford Microelectronics Inc
 15.2866  13f3  Mcdata Corporation
 15.2867 -13f4  Troika Design Inc
 15.2868 +13f4  Troika Networks, Inc.
 15.2869 +	1401  Zentai Fibre Channel Adapter
 15.2870  13f5  Kansai Electric Co. Ltd
 15.2871  13f6  C-Media Electronics Inc
 15.2872  	0100  CM8338A
 15.2873 @@ -3893,6 +4699,8 @@ 13f6  C-Media Electronics Inc
 15.2874  	0101  CM8338B
 15.2875  		13f6 0101  CMI8338-031 PCI Audio Device
 15.2876  	0111  CM8738
 15.2877 +		1043 8077  CMI8738 6-channel audio controller
 15.2878 +		1043 80e2  CMI8738 6ch-MX
 15.2879  		13f6 0111  CMI8738/C3DX PCI Audio Device
 15.2880  	0211  CM8738
 15.2881  13f7  Wildfire Communications
 15.2882 @@ -3903,6 +4711,7 @@ 13fb  Aydin Corp
 15.2883  13fc  Computer Peripherals International
 15.2884  13fd  Micro Science Inc
 15.2885  13fe  Advantech Co. Ltd
 15.2886 +	1756  PCI-1756
 15.2887  13ff  Silicon Spice Inc
 15.2888  1400  Artx Inc
 15.2889  	1401  9432 TX
 15.2890 @@ -3922,11 +4731,13 @@ 1407  Lava Computer mfg Inc
 15.2891  	0500  Lava Single Serial
 15.2892  	0600  Lava Port 650
 15.2893  	8000  Lava Parallel
 15.2894 +	8001  Dual parallel port controller A
 15.2895  	8002  Lava Dual Parallel port A
 15.2896  	8003  Lava Dual Parallel port B
 15.2897  	8800  BOCA Research IOPPAR
 15.2898  1408  Aloka Co. Ltd
 15.2899  1409  Timedia Technology Co Ltd
 15.2900 +	7168  PCI2S550 (Dual 16550 UART)
 15.2901  140a  DSP Research Inc
 15.2902  140b  Ramix Inc
 15.2903  140c  Elmic Systems Inc
 15.2904 @@ -3940,6 +4751,16 @@ 1412  IC Ensemble Inc
 15.2905  1413  Addonics
 15.2906  1414  Microsoft Corporation
 15.2907  1415  Oxford Semiconductor Ltd
 15.2908 +	8403  VScom 011H-EP1 1 port parallel adaptor
 15.2909 +	9501  OX16PCI954 (Quad 16950 UART) function 0
 15.2910 +		15ed 2000  MCCR Serial p0-3 of 8
 15.2911 +		15ed 2001  MCCR Serial p0-3 of 16
 15.2912 +	950a  EXSYS EX-41092 Dual 16950 Serial adapter
 15.2913 +	950b  OXCB950 Cardbus 16950 UART
 15.2914 +	9511  OX16PCI954 (Quad 16950 UART) function 1
 15.2915 +		15ed 2000  MCCR Serial p4-7 of 8
 15.2916 +		15ed 2001  MCCR Serial p4-15 of 16
 15.2917 +	9521  OX16PCI952 (Dual 16950 UART)
 15.2918  1416  Multiwave Innovation pte Ltd
 15.2919  1417  Convergenet Technologies Inc
 15.2920  1418  Kyushu electronics systems Inc
 15.2921 @@ -4116,6 +4937,10 @@ 14b7  PROXIM Inc
 15.2922  14b8  Techsoft Technology Co Ltd
 15.2923  14b9  AIRONET Wireless Communications
 15.2924  	0001  PC4800
 15.2925 +	0340  PC4800
 15.2926 +	0350  PC4800
 15.2927 +	4500  PC4500
 15.2928 +	4800  PC4800
 15.2929  14ba  INTERNIX Inc.
 15.2930  14bb  SEMTECH Corporation
 15.2931  14bc  Globespan Semiconductor Inc.
 15.2932 @@ -4141,6 +4966,22 @@ 14cf  TEK Microsystems Inc.
 15.2933  14d0  Ericsson Axe R & D
 15.2934  14d1  Computer Hi-Tech Co Ltd
 15.2935  14d2  Titan Electronics Inc
 15.2936 +	8001  VScom 010L 1 port parallel adaptor
 15.2937 +	8002  VScom 020L 2 port parallel adaptor
 15.2938 +	8010  VScom 100L 1 port serial adaptor
 15.2939 +	8011  VScom 110L 1 port serial and 1 port parallel adaptor
 15.2940 +	8020  VScom 200L 1 port serial adaptor
 15.2941 +	8021  VScom 210L 2 port serial and 1 port parallel adaptor
 15.2942 +	8040  VScom 400L 4 port serial adaptor
 15.2943 +	8080  VScom 800L 8 port serial adaptor
 15.2944 +	a000  VScom 010H 1 port parallel adaptor
 15.2945 +	a001  VScom 100H 1 port serial adaptor
 15.2946 +	a003  VScom 400H 4 port serial adaptor
 15.2947 +	a004  VScom 400HF1 4 port serial adaptor
 15.2948 +	a005  VScom 200H 2 port serial adaptor
 15.2949 +	e001  VScom 010HV2 1 port parallel adaptor
 15.2950 +	e010  VScom 100HV2 1 port serial adaptor
 15.2951 +	e020  VScom 200HV2 2 port serial adaptor
 15.2952  14d3  CIRTECH (UK) Ltd
 15.2953  14d4  Panacom Technology Corp
 15.2954  14d5  Nitsuko Corporation
 15.2955 @@ -4162,46 +5003,76 @@ 14dc  Amplicon Liveline Ltd
 15.2956  	0007  PCI224
 15.2957  	0008  PCI234
 15.2958  	0009  PCI236
 15.2959 +	000a  PCI272
 15.2960 +	000b  PCI215
 15.2961  14dd  Boulder Design Labs Inc
 15.2962  14de  Applied Integration Corporation
 15.2963  14df  ASIC Communications Corp
 15.2964  14e1  INVERTEX
 15.2965  14e2  INFOLIBRIA
 15.2966  14e3  AMTELCO
 15.2967 -14e4  BROADCOM Corporation
 15.2968 +14e4  Broadcom Corporation
 15.2969  	1644  NetXtreme BCM5700 Gigabit Ethernet
 15.2970 +		1014 0277  Broadcom Vigil B5700 1000BaseTX
 15.2971 +		1028 00d1  Broadcom BCM5700
 15.2972 +		1028 0106  Broadcom BCM5700
 15.2973 +		1028 0109  Broadcom BCM5700 1000BaseTX
 15.2974 +		1028 010a  Broadcom BCM5700 1000BaseTX
 15.2975  		10b7 1000  3C996-T 1000BaseTX
 15.2976  		10b7 1001  3C996B-T 1000BaseTX
 15.2977  		10b7 1002  3C996C-T 1000BaseTX
 15.2978 -		10b7 1003  3C997-T 1000BaseTX
 15.2979 +		10b7 1003  3C997-T 1000BaseTX Dual Port
 15.2980  		10b7 1004  3C996-SX 1000BaseSX
 15.2981 -		10b7 1005  3C997-SX 1000BaseSX
 15.2982 +		10b7 1005  3C997-SX 1000BaseSX Dual Port
 15.2983 +		10b7 1008  3C942 Gigabit LOM (31X31)
 15.2984  		14e4 0002  NetXtreme 1000BaseSX
 15.2985  		14e4 0003  NetXtreme 1000BaseSX
 15.2986  		14e4 0004  NetXtreme 1000BaseTX
 15.2987 -		14e4 1644  NetXtreme BCM5700 1000BaseTX
 15.2988 +		14e4 1028  NetXtreme 1000BaseTX
 15.2989 +		14e4 1644  BCM5700 1000BaseTX
 15.2990  	1645  NetXtreme BCM5701 Gigabit Ethernet
 15.2991 -		0e11 007c  NC7770 1000BaseTX
 15.2992 -		0e11 007d  NC6770 1000BaseSX
 15.2993 -		0e11 0085  NC7780 1000BaseTX
 15.2994 +		0e11 007c  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
 15.2995 +		0e11 007d  NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)
 15.2996 +		0e11 0085  NC7780 Gigabit Server Adapter (embedded, WOL)
 15.2997 +		0e11 0099  NC7780 Gigabit Server Adapter (embedded, WOL)
 15.2998 +		0e11 009a  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
 15.2999 +		1028 0121  Broadcom BCM5701 1000BaseTX
 15.3000  		10b7 1004  3C996-SX 1000BaseSX
 15.3001  		10b7 1006  3C996B-T 1000BaseTX
 15.3002  		10b7 1007  3C1000-T 1000BaseTX
 15.3003  		10b7 1008  3C940-BR01 1000BaseTX
 15.3004 -		14e4 0001  NetXtreme BCM5701 1000BaseTX
 15.3005 -		14e4 0005  NetXtreme BCM5701 1000BaseTX
 15.3006 -		14e4 0006  NetXtreme BCM5701 1000BaseTX
 15.3007 -		14e4 0007  NetXtreme BCM5701 1000BaseSX
 15.3008 -		14e4 0008  NetXtreme BCM5701 1000BaseTX
 15.3009 -		14e4 8008  NetXtreme BCM5701 1000BaseTX
 15.3010 +		14e4 0001  BCM5701 1000BaseTX
 15.3011 +		14e4 0005  BCM5701 1000BaseTX
 15.3012 +		14e4 0006  BCM5701 1000BaseTX
 15.3013 +		14e4 0007  BCM5701 1000BaseSX
 15.3014 +		14e4 0008  BCM5701 1000BaseTX
 15.3015 +		14e4 8008  BCM5701 1000BaseTX
 15.3016 +	1646  NetXtreme BCM5702 Gigabit Ethernet
 15.3017 +		0e11 00bb  NC7760 1000BaseTX
 15.3018 +		1028 0126  Broadcom BCM5702 1000BaseTX
 15.3019 +		14e4 8009  BCM5702 1000BaseTX
 15.3020  	1647  NetXtreme BCM5703 Gigabit Ethernet
 15.3021 +		0e11 0099  NC7780 1000BaseTX
 15.3022 +		0e11 009a  NC7770 1000BaseTX
 15.3023 +		14e4 0009  BCM5703 1000BaseTX
 15.3024 +		14e4 000a  BCM5703 1000BaseSX
 15.3025 +		14e4 000b  BCM5703 1000BaseTX
 15.3026 +		14e4 8009  BCM5703 1000BaseTX
 15.3027 +		14e4 800a  BCM5703 1000BaseTX
 15.3028 +	1648  NetXtreme BCM5704 Gigabit Ethernet
 15.3029 +	164d  NetXtreme BCM5702FE Gigabit Ethernet
 15.3030 +	16a6  NetXtreme BCM5702X Gigabit Ethernet
 15.3031 +	16a7  NetXtreme BCM5703X Gigabit Ethernet
 15.3032 +	4212  BCM v.90 56k modem
 15.3033  	5820  BCM5820 Crypto Accelerator
 15.3034 +	5821  BCM5821 Crypto Accelerator
 15.3035  14e5  Pixelfusion Ltd
 15.3036  14e6  SHINING Technology Inc
 15.3037  14e7  3CX
 15.3038  14e8  RAYCER Inc
 15.3039  14e9  GARNETS System CO Ltd
 15.3040 -14ea  PLANEX COMMUNICATIONS Inc
 15.3041 +14ea  Planex Communications, Inc
 15.3042 +	ab06  FNW-3603-TX CardBus Fast Ethernet
 15.3043  14eb  SEIKO EPSON Corp
 15.3044  14ec  ACQIRIS
 15.3045  14ed  DATAKINETICS Ltd
 15.3046 @@ -4209,14 +5080,30 @@ 14ee  MASPRO KENKOH Corp
 15.3047  14ef  CARRY Computer ENG. CO Ltd
 15.3048  14f0  CANON RESEACH CENTRE FRANCE
 15.3049  14f1  Conexant
 15.3050 +	1002  HCF 56k Modem
 15.3051 +	1003  HCF 56k Modem
 15.3052 +	1004  HCF 56k Modem
 15.3053 +	1005  HCF 56k Modem
 15.3054 +	1006  HCF 56k Modem
 15.3055 +	1022  HCF 56k Modem
 15.3056 +	1023  HCF 56k Modem
 15.3057 +	1024  HCF 56k Modem
 15.3058 +	1025  HCF 56k Modem
 15.3059 +	1026  HCF 56k Modem
 15.3060 +	1032  HCF 56k Modem
 15.3061  	1033  HCF 56k Data/Fax Modem
 15.3062 +		1033 8077  NEC
 15.3063  		122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem
 15.3064  		122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem
 15.3065  		122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem
 15.3066  		13e0 020d  Dell Copper
 15.3067  		13e0 020e  Dell Silver
 15.3068 +		13e0 0261  IBM
 15.3069  		13e0 0290  Compaq Goldwing
 15.3070 +		13e0 02a0  IBM
 15.3071 +		13e0 02b0  IBM
 15.3072  		13e0 02c0  Compaq Scooter
 15.3073 +		13e0 02d0  IBM
 15.3074  		144f 1500  IBM P85-DF (1)
 15.3075  		144f 1501  IBM P85-DF (2)
 15.3076  		144f 150a  IBM P85-DF (3)
 15.3077 @@ -4226,6 +5113,7 @@ 14f1  Conexant
 15.3078  	1035  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 15.3079  		10cf 1098  Fujitsu P85-DFSV
 15.3080  	1036  HCF 56k Data/Fax/Voice/Spkp Modem
 15.3081 +		104d 8067  HCF 56k Modem
 15.3082  		122d 4029  MDP3880SP-W
 15.3083  		122d 4031  MDP3880SP-U
 15.3084  		13e0 0209  Dell Titanium
 15.3085 @@ -4249,6 +5137,8 @@ 14f1  Conexant
 15.3086  	1435  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 15.3087  	1436  HCF 56k Data/Fax Modem
 15.3088  	1453  HCF 56k Data/Fax Modem
 15.3089 +		13e0 0240  IBM
 15.3090 +		13e0 0250  IBM
 15.3091  		144f 1502  IBM P95-DF (1)
 15.3092  		144f 1503  IBM P95-DF (2)
 15.3093  	1454  HCF 56k Data/Fax/Voice Modem
 15.3094 @@ -4256,6 +5146,8 @@ 14f1  Conexant
 15.3095  	1456  HCF 56k Data/Fax/Voice/Spkp Modem
 15.3096  		122d 4035  Dell Europa - MDP3900V-W
 15.3097  		122d 4302  Dell MP3930V-W(C) MiniPCI
 15.3098 +	1610  ADSL AccessRunner PCI Arbitration Device
 15.3099 +	1611  AccessRunner PCI ADSL Interface Device
 15.3100  	1803  HCF 56k Modem
 15.3101  		0e11 0023  623-LAN Grizzly
 15.3102  		0e11 0043  623-LAN Yogi
 15.3103 @@ -4270,6 +5162,9 @@ 14f1  Conexant
 15.3104  		0e11 b195  Bear
 15.3105  		0e11 b196  Seminole 1
 15.3106  		0e11 b1be  Seminole 2
 15.3107 +		1025 8013  Acer
 15.3108 +		1033 809d  NEC
 15.3109 +		1033 80bc  NEC
 15.3110  		155d 6793  HP
 15.3111  		155d 8850  E Machines
 15.3112  	2014  HSF 56k Data/Fax/Voice Modem
 15.3113 @@ -4302,6 +5197,9 @@ 14f1  Conexant
 15.3114  	2365  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)
 15.3115  	2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)
 15.3116  	2443  HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)
 15.3117 +		104d 8075  Modem
 15.3118 +		104d 8083  Modem
 15.3119 +		104d 8097  Modem
 15.3120  	2444  HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)
 15.3121  	2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)
 15.3122  	2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)
 15.3123 @@ -4312,6 +5210,8 @@ 14f1  Conexant
 15.3124  	2f00  HSF 56k HSFi Modem
 15.3125  		13e0 8d84  IBM HSFi V.90
 15.3126  		13e0 8d85  Compaq Stinger
 15.3127 +		14f1 2004  Dynalink 56PMi
 15.3128 +	8234  RS8234 ATM SAR Controller [ServiceSAR Plus]
 15.3129  14f2  MOBILITY Electronics
 15.3130  14f3  BROADLOGIC
 15.3131  14f4  TOKYO Electronic Industry CO Ltd
 15.3132 @@ -4359,6 +5259,8 @@ 1513  Raychem
 15.3133  1514  TFL LAN Inc
 15.3134  1515  Advent design
 15.3135  1516  MYSON Technology Inc
 15.3136 +	0803  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
 15.3137 +		1320 10bd  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
 15.3138  1517  ECHOTEK Corp
 15.3139  1518  PEP MODULAR Computers GmbH
 15.3140  1519  TELEFON AKTIEBOLAGET LM Ericsson
 15.3141 @@ -4371,9 +5273,16 @@ 151c  DIGITAL AUDIO LABS Inc
 15.3142  151d  Fujitsu Computer Products Of America
 15.3143  151e  MATRIX Corp
 15.3144  151f  TOPIC SEMICONDUCTOR Corp
 15.3145 +	0000  TP560 Data/Fax/Voice 56k modem
 15.3146  1520  CHAPLET System Inc
 15.3147  1521  BELL Corp
 15.3148  1522  MainPine Ltd
 15.3149 +	0100  PCI <-> IOBus Bridge
 15.3150 +		1522 0200  RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem
 15.3151 +		1522 0300  RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem
 15.3152 +		1522 0400  RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem
 15.3153 +		1522 0500  RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem
 15.3154 +		1522 0600  RockForce+ 2 Port V.90 Data/Fax/Voice Modem
 15.3155  1523  MUSIC Semiconductors
 15.3156  1524  ENE Technology Inc
 15.3157  1525  IMPACT Technologies
 15.3158 @@ -4528,6 +5437,7 @@ 159f  Galea Network Security
 15.3159  15a0  Compumaster SRL
 15.3160  15a1  Geocast Network Systems
 15.3161  15a2  Catalyst Enterprises Inc
 15.3162 +	0001  TA700 PCI Bus Analyzer/Exerciser
 15.3163  15a3  Italtel
 15.3164  15a4  X-Net OY
 15.3165  15a5  Toyota Macs Inc
 15.3166 @@ -4544,6 +5454,7 @@ 15b0  Zoltrix International Ltd
 15.3167  15b1  Source Technology Inc
 15.3168  15b2  Mosaid Technologies Inc
 15.3169  15b3  Mellanox Technology
 15.3170 +	5274  MT21108 InfiniBridge
 15.3171  15b4  CCI/TRIAD
 15.3172  15b5  Cimetrics Inc
 15.3173  15b6  Texas Memory Systems Inc
 15.3174 @@ -4553,6 +5464,7 @@ 15b9  Maestro Digital Communications
 15.3175  15ba  Impacct Technology Corp
 15.3176  15bb  Portwell Inc
 15.3177  15bc  Agilent Technologies
 15.3178 +	2929  E2929A PCI/PCI-X Bus Analyzer
 15.3179  15bd  DFI Inc
 15.3180  15be  Sola Electronics
 15.3181  15bf  High Tech Computer Corp (HTC)
 15.3182 @@ -4563,7 +5475,8 @@ 15c3  Taiwan Mycomp Co Ltd
 15.3183  15c4  EVSX Inc
 15.3184  15c5  Procomp Informatics Ltd
 15.3185  15c6  Technical University of Budapest
 15.3186 -15c7  Tateyama Dystem Laboratory Co Ltd
 15.3187 +15c7  Tateyama System Laboratory Co Ltd
 15.3188 +	0349  Tateyama C-PCI PLC/NC card Rev.01A
 15.3189  15c8  Penta Media Co Ltd
 15.3190  15c9  Serome Technology Inc
 15.3191  15ca  Bitboys OY
 15.3192 @@ -4597,6 +5510,7 @@ 15e5  Valley technologies Inc
 15.3193  15e6  Agere Inc
 15.3194  15e7  Get Engineering Corp
 15.3195  15e8  National Datacomm Corp
 15.3196 +	0130  Wireless PCI Card
 15.3197  15e9  Pacific Digital Corp
 15.3198  15ea  Tokyo Denshi Sekei K.K.
 15.3199  15eb  Drsearch GmbH
 15.3200 @@ -4633,7 +5547,35 @@ 1609  Scimetric Instruments Inc
 15.3201  1619  FarSite Communications Ltd
 15.3202  	0400  FarSync T2P (2 port X.21/V.35/V.24)
 15.3203  	0440  FarSync T4P (4 port X.21/V.35/V.24)
 15.3204 +1629  Kongsberg Spacetec AS
 15.3205 +	1003  Format synchronizer v3.0
 15.3206 +	2002  Fast Universal Data Output
 15.3207 +1638  Standard Microsystems Corp [SMC]
 15.3208 +	1100  SMC2602W EZConnect / Addtron AWA-100
 15.3209 +1657  Brocade Communications Systems, Inc.
 15.3210 +165d  Hsing Tech. Enterprise Co., Ltd.
 15.3211 +1661  Worldspace Corp.
 15.3212  1668  Action Tec Electronics Inc
 15.3213 +16ec  U.S. Robotics
 15.3214 +	3685  Wireless Access PCI Adapter Model 022415
 15.3215 +16f6  VideoTele.com, Inc.
 15.3216 +170b  NetOctave Inc
 15.3217 +170c  YottaYotta Inc.
 15.3218 +173b  Altima (nee Broadcom)
 15.3219 +	03e8  AC1000 Gigabit Ethernet
 15.3220 +	03ea  AC9100 Gigabit Ethernet
 15.3221 +1743  Peppercon AG
 15.3222 +	8139  ROL/F-100 Fast Ethernet Adapter with ROL
 15.3223 +174b  PC Partner Limited
 15.3224 +175e  Sanera Systems, Inc.
 15.3225 +# also used by Struck Innovative Systeme for joint developments
 15.3226 +1796  Research Centre Juelich
 15.3227 +	0001  SIS1100 [Gigabit link]
 15.3228 +	0002  HOTlink
 15.3229 +	0003  Counter Timer
 15.3230 +	0004  CAMAC Controller
 15.3231 +	0005  PROFIBUS
 15.3232 +	0006  AMCC HOTlink
 15.3233  1813  Ambient Technologies Inc
 15.3234  1a08  Sierra semiconductor
 15.3235  	0000  SC15064
 15.3236 @@ -4659,11 +5601,12 @@ 2a15  3D Vision(???)
 15.3237  3000  Hansol Electronics Inc.
 15.3238  3142  Post Impression Systems.
 15.3239  3388  Hint Corp
 15.3240 +	0021  HB1-SE33 PCI-PCI Bridge
 15.3241  	8011  VXPro II Chipset
 15.3242  		3388 8011  VXPro II Chipset CPU to PCI Bridge
 15.3243  	8012  VXPro II Chipset
 15.3244  		3388 8012  VXPro II Chipset PCI to ISA Bridge
 15.3245 -	8013  VXPro II Chipset
 15.3246 +	8013  VXPro II IDE
 15.3247  		3388 8013  VXPro II Chipset EIDE Controller
 15.3248  3411  Quantum Designs (H.K.) Inc
 15.3249  3513  ARCOM Control Systems Ltd
 15.3250 @@ -4678,6 +5621,7 @@ 3d3d  3DLabs
 15.3251  	0007  3D Extreme
 15.3252  	0008  GLINT Gamma G1
 15.3253  	0009  Permedia II 2D+3D
 15.3254 +		1040 0011  AccelStar II
 15.3255  		3d3d 0100  AccelStar II 3D Accelerator
 15.3256  		3d3d 0111  Permedia 3:16
 15.3257  		3d3d 0114  Santa Ana
 15.3258 @@ -4707,6 +5651,7 @@ 4005  Avance Logic Inc.
 15.3259  	2501  ALG-2564A/25128A
 15.3260  	4000  ALS4000 Audio Chipset
 15.3261  		4005 4000  ALS4000 Audio Chipset
 15.3262 +	4710  ALC200/200P
 15.3263  4033  Addtron Technology Co, Inc.
 15.3264  	1360  RTL8139 Ethernet
 15.3265  4143  Digital Equipment Corp
 15.3266 @@ -4728,11 +5673,31 @@ 4a14  NetVin
 15.3267  		4a14 5000  RT8029-Based Ethernet Adapter
 15.3268  4b10  Buslogic Inc.
 15.3269  4c48  LUNG HWA Electronics
 15.3270 +4c53  SBS Technologies
 15.3271  4ca1  Seanix Technology Inc
 15.3272  4d51  MediaQ Inc.
 15.3273  	0200  MQ-200
 15.3274  4d54  Microtechnica Co Ltd
 15.3275  4ddc  ILC Data Device Corp
 15.3276 +	0100  DD-42924I5-300 (ARINC 429 Data Bus)
 15.3277 +	0801  BU-65570I1 MIL-STD-1553 Test and Simulation
 15.3278 +	0802  BU-65570I2 MIL-STD-1553 Test and Simulation
 15.3279 +	0811  BU-65572I1 MIL-STD-1553 Test and Simulation
 15.3280 +	0812  BU-65572I2 MIL-STD-1553 Test and Simulation
 15.3281 +	0881  BU-65570T1 MIL-STD-1553 Test and Simulation
 15.3282 +	0882  BU-65570T2 MIL-STD-1553 Test and Simulation
 15.3283 +	0891  BU-65572T1 MIL-STD-1553 Test and Simulation
 15.3284 +	0892  BU-65572T2 MIL-STD-1553 Test and Simulation
 15.3285 +	0901  BU-65565C1 MIL-STD-1553 Data Bus
 15.3286 +	0902  BU-65565C2 MIL-STD-1553 Data Bus
 15.3287 +	0903  BU-65565C3 MIL-STD-1553 Data Bus
 15.3288 +	0904  BU-65565C4 MIL-STD-1553 Data Bus
 15.3289 +	0b01  BU-65569I1 MIL-STD-1553 Data Bus
 15.3290 +	0b02  BU-65569I2 MIL-STD-1553 Data Bus
 15.3291 +	0b03  BU-65569I3 MIL-STD-1553 Data Bus
 15.3292 +	0b04  BU-65569I4 MIL-STD-1553 Data Bus
 15.3293 +5046  GemTek Technology Corporation
 15.3294 +	1001  PCI Radio
 15.3295  5053  Voyetra Technologies
 15.3296  	2010  Daytona Audio Adapter
 15.3297  5136  S S Technologies
 15.3298 @@ -4776,7 +5741,7 @@ 5333  S3 Inc.
 15.3299  	88f3  86c968 [Vision 968 VRAM] rev 3
 15.3300  	8900  86c755 [Trio 64V2/DX]
 15.3301  		5333 8900  86C775 Trio64V2/DX
 15.3302 -	8901  Trio 64V2/DX or /GX
 15.3303 +	8901  86c775/86c785 [Trio 64V2/DX or /GX]
 15.3304  		5333 8901  86C775 Trio64V2/DX, 86C785 Trio64V2/GX
 15.3305  	8902  Plato/PX
 15.3306  	8903  Trio 3D business multimedia
 15.3307 @@ -4805,9 +5770,11 @@ 5333  S3 Inc.
 15.3308  		5333 8a13  Trio3D/2X
 15.3309  	8a20  86c794 [Savage 3D]
 15.3310  		5333 8a20  86C391 Savage3D
 15.3311 -	8a21  86c795 [Savage 3D/MV]
 15.3312 +	8a21  86c390 [Savage 3D/MV]
 15.3313  		5333 8a21  86C390 Savage3D/MV
 15.3314  	8a22  Savage 4
 15.3315 +		1033 8068  Savage 4
 15.3316 +		1033 8069  Savage 4
 15.3317  		105d 0018  SR9 8Mb SDRAM
 15.3318  		105d 002a  SR9 Pro 16Mb SDRAM
 15.3319  		105d 003a  SR9 Pro 32Mb SDRAM
 15.3320 @@ -4839,12 +5806,27 @@ 5333  S3 Inc.
 15.3321  	8a26  ProSavage KM133
 15.3322  	8c00  ViRGE/M3
 15.3323  	8c01  ViRGE/MX
 15.3324 +		1179 0001  ViRGE/MX
 15.3325  	8c02  ViRGE/MX+
 15.3326  	8c03  ViRGE/MX+MV
 15.3327  	8c10  86C270-294 Savage/MX-MV
 15.3328  	8c11  82C270-294 Savage/MX
 15.3329  	8c12  86C270-294 Savage/IX-MV
 15.3330  	8c13  86C270-294 Savage/IX
 15.3331 +	8c22  SuperSavage MX/128
 15.3332 +	8c24  SuperSavage MX/64
 15.3333 +	8c26  SuperSavage MX/64C
 15.3334 +	8c2a  SuperSavage IX/128 SDR
 15.3335 +	8c2b  SuperSavage IX/128 DDR
 15.3336 +	8c2c  SuperSavage IX/64 SDR
 15.3337 +	8c2d  SuperSavage IX/64 DDR
 15.3338 +	8c2e  SuperSavage IX/C SDR
 15.3339 +		1014 01fc  ThinkPad T23 (2647-4MG)
 15.3340 +	8c2f  SuperSavage IX/C DDR
 15.3341 +# Integrated in VIA ProSavage PN133 North Bridge
 15.3342 +	8d01  VT8603 [ProSavage PN133] AGP4X VGA Controller (Twister)
 15.3343 +	8d02  VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)
 15.3344 +	8d04  VT8751 [ProSavageDDR P4M266] VGA Controller
 15.3345  	9102  86C410 Savage 2000
 15.3346  		1092 5932  Viper II Z200
 15.3347  		1092 5934  Viper II Z200
 15.3348 @@ -4879,6 +5861,7 @@ 8008  Quancom Electronic GmbH
 15.3349  	0011  PWDOG2 [PCI-Watchdog 2]
 15.3350  8086  Intel Corp.
 15.3351  	0007  82379AB
 15.3352 +	0008  Extended Express System Support Controller
 15.3353  	0039  21145
 15.3354  	0122  82437FX
 15.3355  	0482  82375EB
 15.3356 @@ -4889,31 +5872,85 @@ 8086  Intel Corp.
 15.3357  	04d0  82437FX [Triton FX]
 15.3358  	0600  RAID Controller
 15.3359  	0960  80960RP [i960 RP Microprocessor/Bridge]
 15.3360 +	0962  80960RM [i960RM Bridge]
 15.3361  	0964  80960RP [i960 RP Microprocessor/Bridge]
 15.3362  	1000  82542 Gigabit Ethernet Controller
 15.3363 -		0e11 b0df  NC1632 Gigabit Ethernet Adapter
 15.3364 -		0e11 b0e0  NC1633 Gigabit Ethernet Adapter
 15.3365 -		0e11 b123  NC1634 Gigabit Ethernet Adapter
 15.3366 +		0e11 b0df  NC1632 Gigabit Ethernet Adapter (1000-SX)
 15.3367 +		0e11 b0e0  NC1633 Gigabit Ethernet Adapter (1000-LX)
 15.3368 +		0e11 b123  NC1634 Gigabit Ethernet Adapter (1000-SX)
 15.3369  		1014 0119  Netfinity Gigabit Ethernet SX Adapter
 15.3370 +		8086 1000  PRO/1000 Gigabit Server Adapter
 15.3371  	1001  82543GC Gigabit Ethernet Controller
 15.3372 +		0e11 004a  NC6136 Gigabit Server Adapter
 15.3373 +		1014 01ea  Netfinity Gigabit Ethernet SX Adapter
 15.3374 +		8086 1003  PRO/1000 F Server Adapter
 15.3375 +	1002  Pro 100 LAN+Modem 56 Cardbus II
 15.3376 +		8086 200e  Pro 100 LAN+Modem 56 Cardbus II
 15.3377 +		8086 2013  Pro 100 SR Mobile Combo Adapter
 15.3378 +		8086 2017  Pro 100 S Combo Mobile Adapter
 15.3379  	1004  82543GC Gigabit Ethernet Controller
 15.3380 +		0e11 0049  NC7132 Gigabit Upgrade Module
 15.3381 +		0e11 b1a4  NC7131 Gigabit Server Adapter
 15.3382 +		1014 10f2  Gigabit Ethernet Server Adapter
 15.3383 +		8086 1004  PRO/1000 T Server Adapter
 15.3384 +		8086 2004  PRO/1000 T Server Adapter
 15.3385  	1008  82544EI Gigabit Ethernet Controller
 15.3386 +		8086 1107  PRO/1000 XT Server Adapter
 15.3387 +		8086 2107  PRO/1000 XT Server Adapter
 15.3388 +		8086 2110  PRO/1000 XT Server Adapter
 15.3389  	1009  82544EI Gigabit Ethernet Controller
 15.3390 +		8086 1109  PRO/1000 XF Server Adapter
 15.3391 +		8086 2109  PRO/1000 XF Server Adapter
 15.3392  	100c  82544GC Gigabit Ethernet Controller
 15.3393 +		8086 1112  PRO/1000 T Desktop Adapter
 15.3394 +		8086 2112  PRO/1000 T Desktop Adapter
 15.3395  	100d  82544GC Gigabit Ethernet Controller
 15.3396 +	100e  82540EM Gigabit Ethernet Controller
 15.3397 +		8086 001e  PRO/1000 MT Desktop Adapter
 15.3398 +		8086 002e  PRO/1000 MT Desktop Adapter
 15.3399 +	100f  82545EM Gigabit Ethernet Controller
 15.3400 +		8086 1001  PRO/1000 MT Server Adapter
 15.3401 +	1010  82546EB Gigabit Ethernet Controller
 15.3402 +		8086 1011  PRO/1000 MT Dual Port Server Adapter
 15.3403 +	1011  82545EM Gigabit Ethernet Controller
 15.3404 +		8086 1002  PRO/1000 MF Server Adapter
 15.3405 +	1012  82546EB Gigabit Ethernet Controller
 15.3406 +		8086 1012  PRO/1000 MF Dual Port Server Adapter
 15.3407  	1029  82559 Ethernet Controller
 15.3408  	1030  82559 InBusiness 10/100
 15.3409 -	1031  82801CAM (ICH3) Chipset Ethernet Controller
 15.3410 -	1032  82801CAM (ICH3) Chipset Ethernet Controller
 15.3411 -	1033  82801CAM (ICH3) Chipset Ethernet Controller
 15.3412 -	1034  82801CAM (ICH3) Chipset Ethernet Controller
 15.3413 -	1035  82801CAM (ICH3) Chipset Ethernet Controller
 15.3414 -	1036  82801CAM (ICH3) Chipset Ethernet Controller
 15.3415 +	1031  82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
 15.3416 +		1014 0209  ThinkPad A30p (2653-64G)
 15.3417 +		104d 80e7  Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3418 +		107b 5350  EtherExpress PRO/100 VE
 15.3419 +		1179 0001  EtherExpress PRO/100 VE
 15.3420 +		144d c000  EtherExpress PRO/100 VE
 15.3421 +		144d c001  EtherExpress PRO/100 VE
 15.3422 +		144d c003  EtherExpress PRO/100 VE
 15.3423 +	1032  82801CAM (ICH3) PRO/100 VE Ethernet Controller
 15.3424 +	1033  82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller
 15.3425 +	1034  82801CAM (ICH3) PRO/100 VM Ethernet Controller
 15.3426 +	1035  82801CAM (ICH3)/82562EH (LOM)  Ethernet Controller
 15.3427 +	1036  82801CAM (ICH3) 82562EH Ethernet Controller
 15.3428  	1037  82801CAM (ICH3) Chipset Ethernet Controller
 15.3429 -	1038  82801CAM (ICH3) Chipset Ethernet Controller
 15.3430 +	1038  82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller
 15.3431 +	1039  82801BD PRO/100 VE (LOM) Ethernet Controller
 15.3432 +	103a  82801BD PRO/100 VE (CNR) Ethernet Controller
 15.3433 +	103b  82801BD PRO/100 VM (LOM) Ethernet Controller
 15.3434 +	103c  82801BD PRO/100 VM (CNR) Ethernet Controller
 15.3435 +	103d  82801BD PRO/100 VE (MOB) Ethernet Controller
 15.3436 +	103e  82801BD PRO/100 VM (MOB) Ethernet Controller
 15.3437 +	1059  82551QM Ethernet Controller
 15.3438  	1130  82815 815 Chipset Host Bridge and Memory Controller Hub
 15.3439 +		1043 8027  TUSL2-C Mainboard
 15.3440 +		104d 80df  Vaio PCG-FX403
 15.3441 +	1131  82815 815 Chipset AGP Bridge
 15.3442  	1132  82815 CGC [Chipset Graphics Controller]
 15.3443 +		1025 1016  Travelmate 612 TX
 15.3444 +		104d 80df  Vaio PCG-FX403
 15.3445  	1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller
 15.3446 +		8086 1161  82806AA PCI64 Hub APIC
 15.3447 +	1200  Intel IXP1200 Network Processor
 15.3448 +		172a 0000  AEP SSL Accelerator
 15.3449  	1209  82559ER
 15.3450  	1221  82092AA_0
 15.3451  	1222  82092AA_1
 15.3452 @@ -4922,31 +5959,69 @@ 8086  Intel Corp.
 15.3453  	1226  82596 PRO/10 PCI
 15.3454  	1227  82865 EtherExpress PRO/100A
 15.3455  	1228  82556 EtherExpress PRO/100 Smart
 15.3456 -	1229  82557 [Ethernet Pro 100]
 15.3457 -		0e11 b01e  NC3120
 15.3458 -		0e11 b01f  NC3122
 15.3459 -		0e11 b02f  NC1120
 15.3460 +# the revision field differentiates between them (1-3 is 82557, 4-5 is 82558, 6-8 is 82559, 9 is 82559ER)
 15.3461 +	1229  82557/8/9 [Ethernet Pro 100]
 15.3462 +		0e11 3001  82559 Fast Ethernet LOM with Alert on LAN*
 15.3463 +		0e11 3002  82559 Fast Ethernet LOM with Alert on LAN*
 15.3464 +		0e11 3003  82559 Fast Ethernet LOM with Alert on LAN*
 15.3465 +		0e11 3004  82559 Fast Ethernet LOM with Alert on LAN*
 15.3466 +		0e11 3005  82559 Fast Ethernet LOM with Alert on LAN*
 15.3467 +		0e11 3006  82559 Fast Ethernet LOM with Alert on LAN*
 15.3468 +		0e11 3007  82559 Fast Ethernet LOM with Alert on LAN*
 15.3469 +		0e11 b01e  NC3120 Fast Ethernet NIC
 15.3470 +		0e11 b01f  NC3122 Fast Ethernet NIC (dual port)
 15.3471 +		0e11 b02f  NC1120 Ethernet NIC
 15.3472  		0e11 b04a  Netelligent 10/100TX NIC with Wake on LAN
 15.3473 -		0e11 b0c6  Embedded NC3120 with Wake on LAN
 15.3474 -		0e11 b0c7  Embedded NC3121
 15.3475 -		0e11 b0d7  NC3121 with Wake on LAN
 15.3476 -		0e11 b0dd  NC3131 (82558B)
 15.3477 -		0e11 b0de  NC3132
 15.3478 -		0e11 b0e1  NC3133
 15.3479 -		0e11 b144  NC3123 (82559)
 15.3480 +		0e11 b0c6  NC3161 Fast Ethernet NIC (embedded, WOL)
 15.3481 +		0e11 b0c7  NC3160 Fast Ethernet NIC (embedded)
 15.3482 +		0e11 b0d7  NC3121 Fast Ethernet NIC (WOL)
 15.3483 +		0e11 b0dd  NC3131 Fast Ethernet NIC (dual port)
 15.3484 +		0e11 b0de  NC3132 Fast Ethernet Module (dual port)
 15.3485 +		0e11 b0e1  NC3133 Fast Ethernet Module (100-FX)
 15.3486 +		0e11 b134  NC3163 Fast Ethernet NIC (embedded, WOL)
 15.3487 +		0e11 b13c  NC3162 Fast Ethernet NIC (embedded)
 15.3488 +		0e11 b144  NC3123 Fast Ethernet NIC (WOL)
 15.3489 +		0e11 b163  NC3134 Fast Ethernet NIC (dual port)
 15.3490 +		0e11 b164  NC3135 Fast Ethernet Upgrade Module (dual port)
 15.3491 +		0e11 b1a4  NC7131 Gigabit Server Adapter
 15.3492  		1014 005c  82558B Ethernet Pro 10/100
 15.3493 +		1014 01bc  82559 Fast Ethernet LAN On Motherboard
 15.3494 +		1014 01f1  10/100 Ethernet Server Adapter
 15.3495 +		1014 01f2  10/100 Ethernet Server Adapter
 15.3496 +		1014 0207  Ethernet Pro/100 S
 15.3497 +		1014 0232  10/100 Dual Port Server Adapter
 15.3498  		1014 105c  Netfinity 10/100
 15.3499 +		1014 305c  10/100 EtherJet Management Adapter
 15.3500 +		1014 405c  10/100 EtherJet Adapter with Alert on LAN
 15.3501 +		1014 505c  10/100 EtherJet Secure Management Adapter
 15.3502 +		1014 605c  10/100 EtherJet Secure Management Adapter
 15.3503 +		1014 705c  10/100 Netfinity 10/100 Ethernet Security Adapter
 15.3504 +		1014 805c  10/100 Netfinity 10/100 Ethernet Security Adapter
 15.3505  		1033 8000  PC-9821X-B06
 15.3506  		1033 8016  PK-UG-X006
 15.3507  		1033 801f  PK-UG-X006
 15.3508 -		103c 10c0  Ethernet Pro 10/100TX
 15.3509 -		103c 10c3  Ethernet Pro 10/100TX
 15.3510 -		103c 1200  Ethernet Pro 10/100TX
 15.3511 +		1033 8026  PK-UG-X006
 15.3512 +		1033 8063  82559-based Fast Ethernet Adapter
 15.3513 +		1033 8064  82559-based Fast Ethernet Adapter
 15.3514 +		103c 10c0  NetServer 10/100TX
 15.3515 +		103c 10c3  NetServer 10/100TX
 15.3516 +		103c 10ca  NetServer 10/100TX
 15.3517 +		103c 10cb  NetServer 10/100TX
 15.3518 +		103c 10e3  NetServer 10/100TX
 15.3519 +		103c 10e4  NetServer 10/100TX
 15.3520 +		103c 1200  NetServer 10/100TX
 15.3521  		10c3 1100  SmartEther100 SC1100
 15.3522 +		10cf 1115  8255x-based Ethernet Adapter (10/100)
 15.3523 +		10cf 1143  8255x-based Ethernet Adapter (10/100)
 15.3524 +		1179 0001  8255x-based Ethernet Adapter (10/100)
 15.3525  		1179 0002  PCI FastEther LAN on Docker
 15.3526 +		1179 0003  8255x-based Fast Ethernet
 15.3527  		1259 2560  AT-2560 100
 15.3528  		1259 2561  AT-2560 100 FX Ethernet Adapter
 15.3529  		1266 0001  NE10/100 Adapter
 15.3530 +		144d 2501  SEM-2000 MiniPCI LAN Adapter
 15.3531 +		144d 2502  SEM-2100IL MiniPCI LAN Adapter
 15.3532 +		1668 1100  EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)
 15.3533  		8086 0001  EtherExpress PRO/100B (TX)
 15.3534  		8086 0002  EtherExpress PRO/100B (T4)
 15.3535  		8086 0003  EtherExpress PRO/10+
 15.3536 @@ -4961,14 +6036,76 @@ 8086  Intel Corp.
 15.3537  		8086 000c  EtherExpress PRO/100+ Management Adapter
 15.3538  		8086 000d  EtherExpress PRO/100+ Alert On LAN II* Adapter
 15.3539  		8086 000e  EtherExpress PRO/100+ Management Adapter with Alert On LAN*
 15.3540 +		8086 000f  EtherExpress PRO/100 Desktop Adapter
 15.3541 +		8086 0010  EtherExpress PRO/100 S Management Adapter
 15.3542 +		8086 0011  EtherExpress PRO/100 S Management Adapter
 15.3543 +		8086 0012  EtherExpress PRO/100 S Advanced Management Adapter (D)
 15.3544 +		8086 0013  EtherExpress PRO/100 S Advanced Management Adapter (E)
 15.3545 +		8086 0030  EtherExpress PRO/100  Management Adapter with Alert On LAN* GC
 15.3546 +		8086 0031  EtherExpress PRO/100 Desktop Adapter
 15.3547 +		8086 0040  EtherExpress PRO/100 S Desktop Adapter
 15.3548 +		8086 0041  EtherExpress PRO/100 S Desktop Adapter
 15.3549 +		8086 0042  EtherExpress PRO/100 Desktop Adapter
 15.3550 +		8086 0050  EtherExpress PRO/100 S Desktop Adapter
 15.3551  		8086 1009  EtherExpress PRO/100+ Server Adapter
 15.3552  		8086 100c  EtherExpress PRO/100+ Server Adapter (PILA8470B)
 15.3553 +		8086 1012  EtherExpress PRO/100 S Server Adapter (D)
 15.3554 +		8086 1013  EtherExpress PRO/100 S Server Adapter (E)
 15.3555 +		8086 1015  EtherExpress PRO/100 S Dual Port Server Adapter
 15.3556 +		8086 1017  EtherExpress PRO/100+ Dual Port Server Adapter
 15.3557 +		8086 1030  EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server
 15.3558 +		8086 1040  EtherExpress PRO/100 S Server Adapter
 15.3559 +		8086 1041  EtherExpress PRO/100 S Server Adapter
 15.3560 +		8086 1042  EtherExpress PRO/100 Server Adapter
 15.3561 +		8086 1050  EtherExpress PRO/100 S Server Adapter
 15.3562 +		8086 1051  EtherExpress PRO/100 Server Adapter
 15.3563 +		8086 1052  EtherExpress PRO/100 Server Adapter
 15.3564  		8086 10f0  EtherExpress PRO/100+ Dual Port Adapter
 15.3565 +		8086 2009  EtherExpress PRO/100 S Mobile Adapter
 15.3566  		8086 200d  EtherExpress PRO/100 Cardbus
 15.3567  		8086 200e  EtherExpress PRO/100 LAN+V90 Cardbus Modem
 15.3568 +		8086 200f  EtherExpress PRO/100 SR Mobile Adapter
 15.3569 +		8086 2010  EtherExpress PRO/100 S Mobile Combo Adapter
 15.3570 +		8086 2013  EtherExpress PRO/100 SR Mobile Combo Adapter
 15.3571 +		8086 2016  EtherExpress PRO/100 S Mobile Adapter
 15.3572 +		8086 2017  EtherExpress PRO/100 S Combo Mobile Adapter
 15.3573 +		8086 2018  EtherExpress PRO/100 SR Mobile Adapter
 15.3574 +		8086 2019  EtherExpress PRO/100 SR Combo Mobile Adapter
 15.3575 +		8086 2101  EtherExpress PRO/100 P Mobile Adapter
 15.3576 +		8086 2102  EtherExpress PRO/100 SP Mobile Adapter
 15.3577 +		8086 2103  EtherExpress PRO/100 SP Mobile Adapter
 15.3578 +		8086 2104  EtherExpress PRO/100 SP Mobile Adapter
 15.3579 +		8086 2105  EtherExpress PRO/100 SP Mobile Adapter
 15.3580 +		8086 2106  EtherExpress PRO/100 P Mobile Adapter
 15.3581 +		8086 2107  EtherExpress PRO/100 Network Connection
 15.3582 +		8086 2108  EtherExpress PRO/100 Network Connection
 15.3583 +		8086 2200  EtherExpress PRO/100 P Mobile Combo Adapter
 15.3584 +		8086 2201  EtherExpress PRO/100 P Mobile Combo Adapter
 15.3585 +		8086 2202  EtherExpress PRO/100 SP Mobile Combo Adapter
 15.3586 +		8086 2203  EtherExpress PRO/100+ MiniPCI
 15.3587 +		8086 2204  EtherExpress PRO/100+ MiniPCI
 15.3588 +		8086 2205  EtherExpress PRO/100 SP Mobile Combo Adapter
 15.3589 +		8086 2206  EtherExpress PRO/100 SP Mobile Combo Adapter
 15.3590 +		8086 2207  EtherExpress PRO/100 SP Mobile Combo Adapter
 15.3591 +		8086 2208  EtherExpress PRO/100 P Mobile Combo Adapter
 15.3592 +		8086 2402  EtherExpress PRO/100+ MiniPCI
 15.3593 +		8086 2407  EtherExpress PRO/100+ MiniPCI
 15.3594 +		8086 2408  EtherExpress PRO/100+ MiniPCI
 15.3595 +		8086 2409  EtherExpress PRO/100+ MiniPCI
 15.3596 +		8086 240f  EtherExpress PRO/100+ MiniPCI
 15.3597 +		8086 2410  EtherExpress PRO/100+ MiniPCI
 15.3598 +		8086 2411  EtherExpress PRO/100+ MiniPCI
 15.3599 +		8086 2412  EtherExpress PRO/100+ MiniPCI
 15.3600 +		8086 2413  EtherExpress PRO/100+ MiniPCI
 15.3601  		8086 3000  82559 Fast Ethernet LAN on Motherboard
 15.3602  		8086 3001  82559 Fast Ethernet LOM with Basic Alert on LAN*
 15.3603  		8086 3002  82559 Fast Ethernet LOM with Alert on LAN II*
 15.3604 +		8086 3006  EtherExpress PRO/100 S Network Connection
 15.3605 +		8086 3007  EtherExpress PRO/100 S Network Connection
 15.3606 +		8086 3008  EtherExpress PRO/100 Network Connection
 15.3607 +		8086 3010  EtherExpress PRO/100 S Network Connection
 15.3608 +		8086 3011  EtherExpress PRO/100 S Network Connection
 15.3609 +		8086 3012  EtherExpress PRO/100 Network Connection
 15.3610  	122d  430FX - 82437FX TSC [Triton I]
 15.3611  	122e  82371FB PIIX ISA [Triton I]
 15.3612  	1230  82371FB PIIX IDE [Triton I]
 15.3613 @@ -4980,24 +6117,40 @@ 8086  Intel Corp.
 15.3614  	123b  82380PB
 15.3615  	123c  82380AB
 15.3616  	123d  683053 Programmable Interrupt Device
 15.3617 +	123f  82466GX Integrated Hot-Plug Controller (IHPC)
 15.3618  	1240  752 AGP
 15.3619  	124b  82380FB
 15.3620  	1250  430HX - 82439HX TXC [Triton II]
 15.3621  	1360  82806AA PCI64 Hub PCI Bridge
 15.3622  	1361  82806AA PCI64 Hub Controller (HRes)
 15.3623 +		8086 1361  82806AA PCI64 Hub Controller (HRes)
 15.3624 +		8086 8000  82806AA PCI64 Hub Controller (HRes)
 15.3625 +	1460  82870P2 P64H2 Hub PCI Bridge
 15.3626 +	1461  82870P2 P64H2 I/OxAPIC
 15.3627 +	1462  82870P2 P64H2 Hot Plug Controller
 15.3628  	1960  80960RP [i960RP Microprocessor]
 15.3629 -		101e 0438  MegaRaid 438
 15.3630 -		101e 0466  MegaRaid 466
 15.3631 -		101e 0467  MegaRaid 467
 15.3632 +		101e 0431  MegaRAID 431 RAID Controller
 15.3633 +		101e 0438  MegaRAID 438 Ultra2 LVD RAID Controller
 15.3634 +		101e 0466  MegaRAID 466 Express Plus RAID Controller
 15.3635 +		101e 0467  MegaRAID 467 Enterprise 1500 RAID Controller
 15.3636 +		101e 0490  MegaRAID 490 Express 300 RAID Controller
 15.3637 +		101e 0762  MegaRAID 762 Express RAID Controller
 15.3638  		101e 09a0  PowerEdge Expandable RAID Controller 2/SC
 15.3639  		1028 0467  PowerEdge Expandable RAID Controller 2/DC
 15.3640  		1028 1111  PowerEdge Expandable RAID Controller 2/SC
 15.3641 -		103c 03a2  MegaRaid
 15.3642 -		103c 10c6  MegaRaid 438
 15.3643 -		103c 10c7  MegaRaid T5
 15.3644 -		103c 10cc  MegaRaid
 15.3645 -		1111 1111  MegaRaid 466
 15.3646 -		113c 03a2  MegaRaid
 15.3647 +		103c 03a2  MegaRAID
 15.3648 +		103c 10c6  MegaRAID 438, HP NetRAID-3Si
 15.3649 +		103c 10c7  MegaRAID T5, Integrated HP NetRAID
 15.3650 +		103c 10cc  MegaRAID, Integrated HP NetRAID
 15.3651 +		103c 10cd  HP NetRAID-1Si
 15.3652 +		105a 0000  SuperTrak
 15.3653 +		105a 2168  SuperTrak Pro
 15.3654 +		105a 5168  SuperTrak66/100
 15.3655 +		1111 1111  MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC
 15.3656 +		1111 1112  PowerEdge Expandable RAID Controller 2/SC
 15.3657 +		113c 03a2  MegaRAID
 15.3658 +	1962  80960RM [i960RM Microprocessor]
 15.3659 +		105a 0000  SuperTrak SX6000 I2O CPU
 15.3660  	1a21  82840 840 (Carmel) Chipset Host Bridge (Hub A)
 15.3661  	1a23  82840 840 (Carmel) Chipset AGP Bridge
 15.3662  	1a24  82840 840 (Carmel) Chipset PCI Bridge (Hub B)
 15.3663 @@ -5008,6 +6161,7 @@ 8086  Intel Corp.
 15.3664  	2412  82801AA USB
 15.3665  	2413  82801AA SMBus
 15.3666  	2415  82801AA AC'97 Audio
 15.3667 +		1028 0095  Precision Workstation 220 Integrated Digital Audio
 15.3668  		11d4 0040  SoundMAX Integrated Digital Audio
 15.3669  		11d4 0048  SoundMAX Integrated Digital Audio
 15.3670  		11d4 5340  SoundMAX Integrated Digital Audio
 15.3671 @@ -5022,32 +6176,134 @@ 8086  Intel Corp.
 15.3672  		11d4 0048  SoundMAX Integrated Digital Audio
 15.3673  	2426  82801AB AC'97 Modem
 15.3674  	2428  82801AB PCI Bridge
 15.3675 -	2440  82820 820 (Camino 2) Chipset ISA Bridge (ICH2)
 15.3676 -	2442  82820 820 (Camino 2) Chipset USB (Hub A)
 15.3677 -	2443  82820 820 (Camino 2) Chipset SMBus
 15.3678 -	2444  82820 820 (Camino 2) Chipset USB (Hub B)
 15.3679 -	2445  82820 820 (Camino 2) Chipset AC'97 Audio Controller
 15.3680 -	2446  82820 820 (Camino 2) Chipset AC'97 Modem Controller
 15.3681 -	2448  82820 820 (Camino 2) Chipset PCI (-M)
 15.3682 -	2449  82820 (ICH2) Chipset Ethernet Controller
 15.3683 -	244a  82820 820 (Camino 2) Chipset IDE U100 (-M)
 15.3684 -	244b  82820 820 (Camino 2) Chipset IDE U100
 15.3685 -	244c  82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M)
 15.3686 -	244e  82820 820 (Camino 2) Chipset PCI
 15.3687 -	2485  AC'97 Audio Controller
 15.3688 +	2440  82801BA ISA Bridge (LPC)
 15.3689 +	2442  82801BA/BAM USB (Hub #1)
 15.3690 +		104d 80df  Vaio PCG-FX403
 15.3691 +		147b 0507  TH7II-RAID
 15.3692 +	2443  82801BA/BAM SMBus
 15.3693 +		1043 8027  TUSL2-C Mainboard
 15.3694 +		104d 80df  Vaio PCG-FX403
 15.3695 +		147b 0507  TH7II-RAID
 15.3696 +	2444  82801BA/BAM USB (Hub #2)
 15.3697 +		104d 80df  Vaio PCG-FX403
 15.3698 +		147b 0507  TH7II-RAID
 15.3699 +	2445  82801BA/BAM AC'97 Audio
 15.3700 +		104d 80df  Vaio PCG-FX403
 15.3701 +		1462 3370  STAC9721 AC
 15.3702 +		147b 0507  TH7II-RAID
 15.3703 +	2446  82801BA/BAM AC'97 Modem
 15.3704 +		104d 80df  Vaio PCG-FX403
 15.3705 +	2448  82801BAM/CAM PCI Bridge
 15.3706 +	2449  82801BA/BAM/CA/CAM Ethernet Controller
 15.3707 +		0e11 0012  EtherExpress PRO/100 VM
 15.3708 +		0e11 0091  EtherExpress PRO/100 VE
 15.3709 +		1014 01ce  EtherExpress PRO/100 VE
 15.3710 +		1014 01dc  EtherExpress PRO/100 VE
 15.3711 +		1014 01eb  EtherExpress PRO/100 VE
 15.3712 +		1014 01ec  EtherExpress PRO/100 VE
 15.3713 +		1014 0202  EtherExpress PRO/100 VE
 15.3714 +		1014 0205  EtherExpress PRO/100 VE
 15.3715 +		1014 0217  EtherExpress PRO/100 VE
 15.3716 +		1014 0234  EtherExpress PRO/100 VE
 15.3717 +		1014 023d  EtherExpress PRO/100 VE
 15.3718 +		1014 0244  EtherExpress PRO/100 VE
 15.3719 +		1014 0245  EtherExpress PRO/100 VE
 15.3720 +		109f 315d  EtherExpress PRO/100 VE
 15.3721 +		109f 3181  EtherExpress PRO/100 VE
 15.3722 +		1186 7801  EtherExpress PRO/100 VE
 15.3723 +		144d 2602  HomePNA 1M CNR
 15.3724 +		8086 3010  EtherExpress PRO/100 VE
 15.3725 +		8086 3011  EtherExpress PRO/100 VM
 15.3726 +		8086 3012  82562EH based Phoneline
 15.3727 +		8086 3013  EtherExpress PRO/100 VE
 15.3728 +		8086 3014  EtherExpress PRO/100 VM
 15.3729 +		8086 3015  82562EH based Phoneline
 15.3730 +		8086 3016  EtherExpress PRO/100 P Mobile Combo
 15.3731 +		8086 3017  EtherExpress PRO/100 P Mobile
 15.3732 +		8086 3018  EtherExpress PRO/100
 15.3733 +	244a  82801BAM IDE U100
 15.3734 +		1025 1016  Travelmate 612TX
 15.3735 +		104d 80df  Vaio PCG-FX403
 15.3736 +	244b  82801BA IDE U100
 15.3737 +		1043 8027  TUSL2-C Mainboard
 15.3738 +		147b 0507  TH7II-RAID
 15.3739 +	244c  82801BAM ISA Bridge (LPC)
 15.3740 +	244e  82801BA/CA/DB PCI Bridge
 15.3741 +	2450  82801E ISA Bridge (LPC)
 15.3742 +	2452  82801E USB
 15.3743 +	2453  82801E SMBus
 15.3744 +	2459  82801E Ethernet Controller 0
 15.3745 +	245b  82801E IDE U100
 15.3746 +	245d  82801E Ethernet Controller 1
 15.3747 +	245e  82801E PCI Bridge
 15.3748 +	2480  82801CA ISA Bridge (LPC)
 15.3749 +	2482  82801CA/CAM USB (Hub #1)
 15.3750 +		1014 0220  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
 15.3751 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3752 +	2483  82801CA/CAM SMBus
 15.3753 +		1014 0220  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
 15.3754 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3755 +	2484  82801CA/CAM USB (Hub #2)
 15.3756 +		1014 0220  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
 15.3757 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3758 +	2485  82801CA/CAM AC'97 Audio
 15.3759 +		1014 0222  ThinkPad T23 (2647-4MG)
 15.3760 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3761 +	2486  82801CA/CAM AC'97 Modem
 15.3762 +		1014 0223  ThinkPad A30p (2653-64G)
 15.3763 +		1014 0503  ThinkPad R31 2656BBG
 15.3764 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3765 +		134d 4c21  Dell Inspiron 2100 internal modem
 15.3766 +	2487  82801CA/CAM USB (Hub #3)
 15.3767 +		1014 0220  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
 15.3768 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3769 +	248a  82801CAM IDE U100
 15.3770 +		1014 0220  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
 15.3771 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3772 +	248b  82801CA IDE U100
 15.3773 +	248c  82801CAM ISA Bridge (LPC)
 15.3774 +	24c0  82801DB ISA Bridge (LPC)
 15.3775 +	24c2  82801DB USB (Hub #1)
 15.3776 +	24c3  82801DB SMBus
 15.3777 +	24c4  82801DB USB (Hub #2)
 15.3778 +	24c5  82801DB AC'97 Audio
 15.3779 +	24c6  82801DB AC'97 Modem
 15.3780 +	24c7  82801DB USB (Hub #3)
 15.3781 +	24cb  82801DB ICH4 IDE
 15.3782 +	24cd  82801DB USB EHCI Controller
 15.3783  	2500  82820 820 (Camino) Chipset Host Bridge (MCH)
 15.3784 +		1028 0095  Precision Workstation 220 Chipset
 15.3785  		1043 801c  P3C-2000 system chipset
 15.3786  	2501  82820 820 (Camino) Chipset Host Bridge (MCH)
 15.3787  		1043 801c  P3C-2000 system chipset
 15.3788  	250b  82820 820 (Camino) Chipset Host Bridge
 15.3789 -	250f  82820 820 (Camino) Chipset PCI to AGP Bridge
 15.3790 +	250f  82820 820 (Camino) Chipset AGP Bridge
 15.3791  	2520  82805AA MTH Memory Translator Hub
 15.3792  	2521  82804AA MRH-S Memory Repeater Hub for SDRAM
 15.3793  	2530  82850 850 (Tehama) Chipset Host Bridge (MCH)
 15.3794 -	2531  82850 860 (Wombat) Chipset Host Bridge (MCH)
 15.3795 +		147b 0507  TH7II-RAID
 15.3796 +	2531  82860 860 (Wombat) Chipset Host Bridge (MCH)
 15.3797  	2532  82850 850 (Tehama) Chipset AGP Bridge
 15.3798  	2533  82860 860 (Wombat) Chipset AGP Bridge
 15.3799 +	2534  82860 860 (Wombat) Chipset PCI Bridge
 15.3800 +	2540  e7500 [Plumas] DRAM Controller
 15.3801 +	2541  e7500 [Plumas] DRAM Controller Error Reporting
 15.3802 +	2543  e7500 [Plumas] HI_B Virtual PCI Bridge (F0)
 15.3803 +	2544  e7500 [Plumas] HI_B Virtual PCI Bridge (F1)
 15.3804 +	2545  e7500 [Plumas] HI_C Virtual PCI Bridge (F0)
 15.3805 +	2546  e7500 [Plumas] HI_C Virtual PCI Bridge (F1)
 15.3806 +	2547  e7500 [Plumas] HI_D Virtual PCI Bridge (F0)
 15.3807 +	2548  e7500 [Plumas] HI_D Virtual PCI Bridge (F1)
 15.3808 +	2560  82845G/GL [Brookdale-G] Chipset Host Bridge
 15.3809 +	2561  82845G/GL [Brookdale-G] Chipset AGP Bridge
 15.3810 +	2562  82845G/GL [Brookdale-G] Chipset Integrated Graphics Device
 15.3811  	3092  Integrated RAID
 15.3812 +	3575  82830 830 Chipset Host Bridge
 15.3813 +		1014 021d  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
 15.3814 +		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 15.3815 +	3576  82830 830 Chipset AGP Bridge
 15.3816 +	3577  82830 CGC [Chipset Graphics Controller]
 15.3817 +	3578  82830 830 Chipset Host Bridge
 15.3818  	5200  EtherExpress PRO/100 Intelligent Server
 15.3819  	5201  EtherExpress PRO/100 Intelligent Server
 15.3820  		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
 15.3821 @@ -5057,42 +6313,51 @@ 8086  Intel Corp.
 15.3822  	7020  82371SB PIIX3 USB [Natoma/Triton II]
 15.3823  	7030  430VX - 82437VX TVX [Triton VX]
 15.3824  	7100  430TX - 82439TX MTXC
 15.3825 -	7110  82371AB PIIX4 ISA
 15.3826 -	7111  82371AB PIIX4 IDE
 15.3827 -	7112  82371AB PIIX4 USB
 15.3828 -	7113  82371AB PIIX4 ACPI
 15.3829 +	7110  82371AB/EB/MB PIIX4 ISA
 15.3830 +	7111  82371AB/EB/MB PIIX4 IDE
 15.3831 +	7112  82371AB/EB/MB PIIX4 USB
 15.3832 +	7113  82371AB/EB/MB PIIX4 ACPI
 15.3833  	7120  82810 GMCH [Graphics Memory Controller Hub]
 15.3834  	7121  82810 CGC [Chipset Graphics Controller]
 15.3835 -	7122  82810-DC100 GMCH [Graphics Memory Controller Hub]
 15.3836 -	7123  82810-DC100 CGC [Chipset Graphics Controller]
 15.3837 -	7124  82810E GMCH [Graphics Memory Controller Hub]
 15.3838 -	7125  82810E CGC [Chipset Graphics Controller]
 15.3839 -	7126  82810 810 Chipset Host Bridge and Memory Controller Hub
 15.3840 +	7122  82810 DC-100 GMCH [Graphics Memory Controller Hub]
 15.3841 +	7123  82810 DC-100 CGC [Chipset Graphics Controller]
 15.3842 +	7124  82810E DC-133 GMCH [Graphics Memory Controller Hub]
 15.3843 +	7125  82810E DC-133 CGC [Chipset Graphics Controller]
 15.3844 +	7126  82810 DC-133 System and Graphics Controller
 15.3845 +	7128  82810-M DC-100 System and Graphics Controller
 15.3846 +	712a  82810-M DC-133 System and Graphics Controller
 15.3847  	7180  440LX/EX - 82443LX/EX Host bridge
 15.3848  	7181  440LX/EX - 82443LX/EX AGP bridge
 15.3849 -	7190  440BX/ZX - 82443BX/ZX Host bridge
 15.3850 +	7190  440BX/ZX/DX - 82443BX/ZX/DX Host bridge
 15.3851  		0e11 0500  Armada 1750 Laptop System Chipset
 15.3852 -	7191  440BX/ZX - 82443BX/ZX AGP bridge
 15.3853 -	7192  440BX/ZX - 82443BX/ZX Host bridge (AGP disabled)
 15.3854 +		1179 0001  Toshiba Tecra 8100 Laptop System Chipset
 15.3855 +	7191  440BX/ZX/DX - 82443BX/ZX/DX AGP bridge
 15.3856 +	7192  440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled)
 15.3857  		0e11 0460  Armada 1700 Laptop System Chipset
 15.3858 -	7194  82440MX I/O Controller
 15.3859 +	7194  82440MX Host Bridge
 15.3860  	7195  82440MX AC'97 Audio Controller
 15.3861  		10cf 1099  QSound_SigmaTel Stac97 PCI Audio
 15.3862  		11d4 0040  SoundMAX Integrated Digital Audio
 15.3863  		11d4 0048  SoundMAX Integrated Digital Audio
 15.3864 -	7198  82440MX PCI to ISA Bridge
 15.3865 +	7196  82440MX AC'97 Modem Controller
 15.3866 +	7198  82440MX ISA Bridge
 15.3867  	7199  82440MX EIDE Controller
 15.3868  	719a  82440MX USB Universal Host Controller
 15.3869  	719b  82440MX Power Management Controller
 15.3870  	71a0  440GX - 82443GX Host bridge
 15.3871  	71a1  440GX - 82443GX AGP bridge
 15.3872  	71a2  440GX - 82443GX Host bridge (AGP disabled)
 15.3873 -	7600  82372FB PCI to ISA Bridge
 15.3874 -	7601  82372FB PIIX4 IDE
 15.3875 -	7602  82372FB [PCI-to-USB UHCI]
 15.3876 -	7603  82372FB System Management Bus Controller
 15.3877 +	7600  82372FB PIIX5 ISA
 15.3878 +	7601  82372FB PIIX5 IDE
 15.3879 +	7602  82372FB PIIX5 USB
 15.3880 +	7603  82372FB PIIX5 SMBus
 15.3881  	7800  i740
 15.3882 +		003d 0008  Starfighter AGP
 15.3883 +		003d 000b  Starfighter AGP
 15.3884  		1092 0100  Stealth II G460
 15.3885 +		10b4 201a  Lightspeed 740
 15.3886 +		10b4 202f  Lightspeed 740
 15.3887 +		8086 0000  Terminator 2x/i
 15.3888  		8086 0100  Intel740 Graphics Accelerator
 15.3889  	84c4  450KX/GX [Orion] - 82454KX/GX PCI bridge
 15.3890  	84c5  450KX/GX [Orion] - 82453KX/GX Memory controller
 15.3891 @@ -5100,13 +6365,20 @@ 8086  Intel Corp.
 15.3892  	84cb  450NX - 82454NX/84460GX PCI Expander Bridge
 15.3893  	84e0  460GX - 84460GX System Address Controller (SAC)
 15.3894  	84e1  460GX - 84460GX System Data Controller (SDC)
 15.3895 -	84e2  460GX - 84460GX AGP Bridge (GXB)
 15.3896 +	84e2  460GX - 84460GX AGP Bridge (GXB function 2)
 15.3897  	84e3  460GX - 84460GX Memory Address Controller (MAC)
 15.3898  	84e4  460GX - 84460GX Memory Data Controller (MDC)
 15.3899 +	84e6  460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)
 15.3900 +	84ea  460GX - 84460GX AGP Bridge (GXB function 1)
 15.3901  	9621  Integrated RAID
 15.3902  	9622  Integrated RAID
 15.3903  	9641  Integrated RAID
 15.3904  	96a1  Integrated RAID
 15.3905 +	b152  21152 PCI-to-PCI Bridge
 15.3906 +# observed, and documented in Intel revision note; new mask of 1011:0026
 15.3907 +	b154  21154 PCI-to-PCI Bridge
 15.3908 +	b555  21555 Non transparent PCI-to-PCI Bridge
 15.3909 +		e4bf 1000  CC8-1-BLUES
 15.3910  	ffff  450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]
 15.3911  8800  Trigem Computer Inc.
 15.3912  	2008  Video assistent component
 15.3913 @@ -5130,12 +6402,13 @@ 9004  Adaptec
 15.3914  	5278  AIC-7852
 15.3915  	5375  AIC-755x
 15.3916  	5378  AIC-7850
 15.3917 -	5475  AIC-2930
 15.3918 +	5475  AIC-755x
 15.3919  	5478  AIC-7850
 15.3920  	5575  AVA-2930
 15.3921  	5578  AIC-7855
 15.3922 +	5647  ANA-7711 TCP Offload Engine
 15.3923  	5675  AIC-755x
 15.3924 -	5678  AIC-7850
 15.3925 +	5678  AIC-7856
 15.3926  	5775  AIC-755x
 15.3927  	5778  AIC-7850
 15.3928  	5800  AIC-5800
 15.3929 @@ -5143,37 +6416,38 @@ 9004  Adaptec
 15.3930  	5905  ANA-5910A/5930A/5940A ATM Adapter
 15.3931  	6038  AIC-3860
 15.3932  	6075  AIC-1480 / APA-1480
 15.3933 +		9004 7560  AIC-1480 / APA-1480 Cardbus
 15.3934  	6078  AIC-7860
 15.3935  	6178  AIC-7861
 15.3936  		9004 7861  AHA-2940AU Single
 15.3937  	6278  AIC-7860
 15.3938  	6378  AIC-7860
 15.3939 -	6478  AIC-786
 15.3940 +	6478  AIC-786x
 15.3941  	6578  AIC-786x
 15.3942 -	6678  AIC-786
 15.3943 +	6678  AIC-786x
 15.3944  	6778  AIC-786x
 15.3945  	6915  ANA620xx/ANA69011A
 15.3946  		9004 0008  ANA69011A/TX 10/100
 15.3947  		9004 0009  ANA69011A/TX 10/100
 15.3948  		9004 0010  ANA62022 2-port 10/100
 15.3949  		9004 0018  ANA62044 4-port 10/100
 15.3950 +		9004 0019  ANA62044 4-port 10/100
 15.3951  		9004 0020  ANA62022 2-port 10/100
 15.3952  		9004 0028  ANA69011A/TX 10/100
 15.3953  		9004 8008  ANA69011A/TX 64 bit 10/100
 15.3954  		9004 8009  ANA69011A/TX 64 bit 10/100
 15.3955  		9004 8010  ANA62022 2-port 64 bit 10/100
 15.3956  		9004 8018  ANA62044 4-port 64 bit 10/100
 15.3957 +		9004 8019  ANA62044 4-port 64 bit 10/100
 15.3958  		9004 8020  ANA62022 2-port 64 bit 10/100
 15.3959  		9004 8028  ANA69011A/TX 64 bit 10/100
 15.3960  	7078  AHA-294x / AIC-7870
 15.3961 -	7178  AHA-294x / AIC-7871
 15.3962 -	7278  AHA-3940 / AIC-7872
 15.3963 +	7178  AHA-2940/2940W / AIC-7871
 15.3964 +	7278  AHA-3940/3940W / AIC-7872
 15.3965  	7378  AHA-3985 / AIC-7873
 15.3966 -	7478  AHA-2944 / AIC-7874
 15.3967 -# DJ: Where did the 3rd number come from?
 15.3968 -	7578  AHA-3944 / AHA-3944W / 7875
 15.3969 -# DJ: Where did the 3rd number come from?
 15.3970 -	7678  AHA-4944W/UW / 7876
 15.3971 +	7478  AHA-2944/2944W / AIC-7874
 15.3972 +	7578  AHA-3944/3944W / AIC-7875
 15.3973 +	7678  AHA-4944W/UW / AIC-7876
 15.3974  	7778  AIC-787x
 15.3975  	7810  AIC-7810
 15.3976  	7815  AIC-7815 RAID+Memory Controller IC
 15.3977 @@ -5194,49 +6468,71 @@ 9004  Adaptec
 15.3978  	7893  AIC-789x
 15.3979  	7894  AIC-789x
 15.3980  	7895  AHA-2940U/UW / AHA-39xx / AIC-7895
 15.3981 +		9004 7890  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
 15.3982 +		9004 7891  AHA-2940U/2940UW Dual
 15.3983 +		9004 7892  AHA-3940AU/AUW/AUWD/UWD
 15.3984 +		9004 7894  AHA-3944AUWD
 15.3985  		9004 7895  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
 15.3986 +		9004 7896  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
 15.3987 +		9004 7897  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
 15.3988  	7896  AIC-789x
 15.3989  	7897  AIC-789x
 15.3990  	8078  AIC-7880U
 15.3991  		9004 7880  AIC-7880P Ultra/Ultra Wide SCSI Chipset
 15.3992 -	8178  AIC-7881U
 15.3993 +	8178  AHA-2940U/UW/D / AIC-7881U
 15.3994  		9004 7881  AHA-2940UW SCSI Host Adapter
 15.3995 -	8278  AHA-3940U/UW / AIC-7882U
 15.3996 +	8278  AHA-3940U/UW/UWD / AIC-7882U
 15.3997  	8378  AHA-3940U/UW / AIC-7883U
 15.3998 -	8478  AHA-294x / AIC-7884U
 15.3999 -	8578  AHA-3944U / AHA-3944UWD / 7885
 15.4000 -	8678  AHA-4944UW / 7886
 15.4001 -	8778  AIC-788x
 15.4002 +	8478  AHA-2944UW / AIC-7884U
 15.4003 +	8578  AHA-3944U/UWD / AIC-7885
 15.4004 +	8678  AHA-4944UW / AIC-7886
 15.4005 +	8778  AHA-2940UW Pro / AIC-788x
 15.4006  		9004 7887  2940UW Pro Ultra-Wide SCSI Controller
 15.4007 -	8878  7888
 15.4008 +	8878  AHA-2930UW / AIC-7888
 15.4009 +		9004 7888  AHA-2930UW SCSI Controller
 15.4010  	8b78  ABA-1030
 15.4011  	ec78  AHA-4944W/UW
 15.4012  9005  Adaptec
 15.4013 -	0010  AHA-2940U2/W
 15.4014 -	0011  2930U2
 15.4015 +	0010  AHA-2940U2/U2W
 15.4016 +		9005 2180  AHA-2940U2 SCSI Controller
 15.4017 +		9005 8100  AHA-2940U2B SCSI Controller
 15.4018 +		9005 a180  AHA-2940U2W SCSI Controller
 15.4019 +		9005 e100  AHA-2950U2B SCSI Controller
 15.4020 +	0011  AHA-2930U2
 15.4021  	0013  78902
 15.4022  		9005 0003  AAA-131U2 Array1000 1 Channel RAID Controller
 15.4023 -	001f  AHA-2940U2/W / 7890
 15.4024 +	001f  AHA-2940U2/U2W / 7890/7891
 15.4025  		9005 000f  2940U2W SCSI Controller
 15.4026  		9005 a180  2940U2W SCSI Controller
 15.4027  	0020  AIC-7890
 15.4028  	002f  AIC-7890
 15.4029  	0030  AIC-7890
 15.4030  	003f  AIC-7890
 15.4031 -	0050  3940U2
 15.4032 -	0051  3950U2D
 15.4033 +	0050  AHA-3940U2x/395U2x
 15.4034 +		9005 f500  AHA-3950U2B
 15.4035 +	0051  AHA-3950U2D
 15.4036 +		9005 b500  AHA-3950U2D
 15.4037  	0053  AIC-7896 SCSI Controller
 15.4038  		9005 ffff  AIC-7896 SCSI Controller mainboard implementation
 15.4039 -	005f  7896
 15.4040 -	0080  7892A
 15.4041 -	0081  7892B
 15.4042 -	0083  7892D
 15.4043 -	008f  7892P
 15.4044 -	00c0  7899A
 15.4045 -	00c1  7899B
 15.4046 -	00c3  7899D
 15.4047 +	005f  AIC-7896U2/7897U2
 15.4048 +	0080  AIC-7892A U160/m
 15.4049 +		0e11 e2a0  Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter
 15.4050 +		9005 62a0  29160N Ultra160 SCSI Controller
 15.4051 +		9005 e220  29160LP Low Profile Ultra160 SCSI Controller
 15.4052 +		9005 e2a0  29160 Ultra160 SCSI Controller
 15.4053 +	0081  AIC-7892B U160/m
 15.4054 +		9005 62a1  19160 Ultra160 SCSI Controller
 15.4055 +	0083  AIC-7892D U160/m
 15.4056 +	008f  AIC-7892P U160/m
 15.4057 +	00c0  AHA-3960D / AIC-7899A U160/m
 15.4058 +		0e11 f620  Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter
 15.4059 +		9005 f620  AHA-3960D U160/m
 15.4060 +	00c1  AIC-7899B U160/m
 15.4061 +	00c3  AIC-7899D U160/m
 15.4062  	00c5  RAID subsystem HBA
 15.4063 -	00cf  7899P
 15.4064 +	00cf  AIC-7899P U160/m
 15.4065 +	0285  AAC-RAID
 15.4066 +		1028 0287  PowerEdge Expandable RAID Controller 320/DC
 15.4067  907f  Atronics
 15.4068  	2015  IDE-2015PL
 15.4069  919a  Gigapixel Corp
 15.4070 @@ -5244,6 +6540,9 @@ 9412  Holtek
 15.4071  	6565  6565
 15.4072  9699  Omni Media Technology Inc
 15.4073  	6565  6565
 15.4074 +9710  NetMos Technology
 15.4075 +	9815  VScom 021H-EP2 2 port parallel adaptor
 15.4076 +	9835  222N-2 I/O Card (2S+1P)
 15.4077  a0a0  AOPEN Inc.
 15.4078  a0f1  UNISYS Corporation
 15.4079  a200  NEC Corporation
 15.4080 @@ -5263,16 +6562,33 @@ cafe  Chrysalis-ITS
 15.4081  cccc  Catapult Communications
 15.4082  d4d4  Dy4 Systems Inc
 15.4083  	0601  PCI Mezzanine Card
 15.4084 +d531  I+ME ACTIA GmbH
 15.4085  d84d  Exsys
 15.4086 +dead  Indigita Corporation
 15.4087  e000  Winbond
 15.4088  	e000  W89C940
 15.4089  e159  Tiger Jet Network Inc.
 15.4090  	0001  Model 300 128k
 15.4091  		0059 0001  128k ISDN-S/T Adapter
 15.4092  		0059 0003  128k ISDN-U Adapter
 15.4093 +	0002  Tiger100APC ISDN chipset
 15.4094  e4bf  EKF Elektronik GmbH
 15.4095  ea01  Eagle Technology
 15.4096  eabb  Aashima Technology B.V.
 15.4097 +eace  Endace Measurement Systems, Ltd
 15.4098 +	3100  DAG 3.10 OC-3/OC-12
 15.4099 +	3200  DAG 3.2x OC-3/OC-12
 15.4100 +	320e  DAG 3.2E Fast Ethernet
 15.4101 +	340e  DAG 3.4E Fast Ethernet
 15.4102 +	341e  DAG 3.41E Fast Ethernet
 15.4103 +	3500  DAG 3.5 OC-3/OC-12
 15.4104 +	351c  DAG 3.5ECM Fast Ethernet
 15.4105 +	4100  DAG 4.10 OC-48
 15.4106 +	4110  DAG 4.11 OC-48
 15.4107 +	4220  DAG 4.2 OC-48
 15.4108 +	422e  DAG 4.2E Dual Gigabit Ethernet
 15.4109 +ec80  Belkin Corporation
 15.4110 +	ec00  F5D6000
 15.4111  ecc0  Echo Corporation
 15.4112  edd8  ARK Logic Inc
 15.4113  	a091  1000PV [Stingray]
 15.4114 @@ -5280,6 +6596,7 @@ edd8  ARK Logic Inc
 15.4115  	a0a1  2000MT
 15.4116  	a0a9  2000MI
 15.4117  fa57  Fast Search & Transfer ASA
 15.4118 +febd  Ultraview Corp.
 15.4119  feda  Epigram Inc
 15.4120  fffe  VMWare Inc
 15.4121  	0710  Virtual SVGA
 15.4122 @@ -5417,6 +6734,7 @@ C 0c  Serial bus controller
 15.4123  	03  USB Controller
 15.4124  		00  UHCI
 15.4125  		10  OHCI
 15.4126 +		20  EHCI
 15.4127  		80  Unspecified
 15.4128  		fe  USB Device
 15.4129  	04  Fibre Channel
    16.1 --- a/xen-2.4.16/drivers/pci/proc.c	Sun Feb 16 15:16:35 2003 +0000
    16.2 +++ b/xen-2.4.16/drivers/pci/proc.c	Sun Feb 16 18:08:23 2003 +0000
    16.3 @@ -369,7 +369,7 @@ static struct seq_operations proc_bus_pc
    16.4  	show:	show_device
    16.5  };
    16.6  
    16.7 -static struct proc_dir_entry *proc_bus_pci_dir;
    16.8 +struct proc_dir_entry *proc_bus_pci_dir;
    16.9  
   16.10  int pci_proc_attach_device(struct pci_dev *dev)
   16.11  {
    17.1 --- a/xen-2.4.16/drivers/pci/quirks.c	Sun Feb 16 15:16:35 2003 +0000
    17.2 +++ b/xen-2.4.16/drivers/pci/quirks.c	Sun Feb 16 18:08:23 2003 +0000
    17.3 @@ -14,7 +14,7 @@
    17.4  
    17.5  #include <linux/config.h>
    17.6  #include <linux/types.h>
    17.7 -//#include <linux/kernel.h>
    17.8 +/*#include <linux/kernel.h>*/
    17.9  #include <linux/pci.h>
   17.10  #include <linux/init.h>
   17.11  #include <linux/delay.h>
   17.12 @@ -90,8 +90,8 @@ static void __init quirk_triton(struct p
   17.13   *	VIA Apollo KT133 needs PCI latency patch
   17.14   *	Made according to a windows driver based patch by George E. Breese
   17.15   *	see PCI Latency Adjust on http://www.viahardware.com/download/viatweak.shtm
   17.16 - *      Also see http://home.tiscalinet.de/au-ja/review-kt133a-1-en.html for
   17.17 - *      the info on which Mr Breese based his work.
   17.18 + *      Also see http://www.au-ja.org/review-kt133a-1-en.phtml for the info on which 
   17.19 + *	Mr Breese based his work.
   17.20   *
   17.21   *	Updated based on further information from the site and also on
   17.22   *	information provided by VIA 
   17.23 @@ -444,13 +444,53 @@ static void __init quirk_amd_ioapic(stru
   17.24  static void __init quirk_amd_ordering(struct pci_dev *dev)
   17.25  {
   17.26  	u32 pcic;
   17.27 -	
   17.28 -	pci_read_config_dword(dev, 0x42, &pcic);
   17.29 -	if((pcic&2)==0)
   17.30 +	pci_read_config_dword(dev, 0x4C, &pcic);
   17.31 +	if((pcic&6)!=6)
   17.32  	{
   17.33 -		pcic |= 2;
   17.34 -		printk(KERN_WARNING "BIOS disabled PCI ordering compliance, so we enabled it again.\n");
   17.35 -		pci_write_config_dword(dev, 0x42, pcic);		
   17.36 +		pcic |= 6;
   17.37 +		printk(KERN_WARNING "BIOS failed to enable PCI standards compliance, fixing this error.\n");
   17.38 +		pci_write_config_dword(dev, 0x4C, pcic);
   17.39 +		pci_read_config_dword(dev, 0x84, &pcic);
   17.40 +		pcic |= (1<<23);	/* Required in this mode */
   17.41 +		pci_write_config_dword(dev, 0x84, pcic);
   17.42 +	}
   17.43 +}
   17.44 +
   17.45 +/*
   17.46 + *	DreamWorks provided workaround for Dunord I-3000 problem
   17.47 + *
   17.48 + *	This card decodes and responds to addresses not apparently
   17.49 + *	assigned to it. We force a larger allocation to ensure that
   17.50 + *	nothing gets put too close to it.
   17.51 + */
   17.52 +
   17.53 +static void __init quirk_dunord ( struct pci_dev * dev )
   17.54 +{
   17.55 +	struct resource * r = & dev -> resource [ 1 ];
   17.56 +	r -> start = 0;
   17.57 +	r -> end = 0xffffff;
   17.58 +}
   17.59 +
   17.60 +static void __init quirk_transparent_bridge(struct pci_dev *dev)
   17.61 +{
   17.62 +	dev->transparent = 1;
   17.63 +}
   17.64 +
   17.65 +/*
   17.66 + * Common misconfiguration of the MediaGX/Geode PCI master that will
   17.67 + * reduce PCI bandwidth from 70MB/s to 25MB/s.  See the GXM/GXLV/GX1
   17.68 + * datasheets found at http://www.national.com/ds/GX for info on what
   17.69 + * these bits do.  <christer@weinigel.se>
   17.70 + */
   17.71 + 
   17.72 +static void __init quirk_mediagx_master(struct pci_dev *dev)
   17.73 +{
   17.74 +	u8 reg;
   17.75 +	pci_read_config_byte(dev, 0x41, &reg);
   17.76 +	if (reg & 2) {
   17.77 +		reg &= ~2;
   17.78 +		printk(KERN_INFO "PCI: Fixup for MediaGX/Geode Slave Disconnect Boundary (0x41=0x%02x)\n", reg);
   17.79 +                pci_write_config_byte(dev, 0x41, reg);
   17.80  	}
   17.81  }
   17.82  
   17.83 @@ -459,6 +499,7 @@ static void __init quirk_amd_ordering(st
   17.84   */
   17.85  
   17.86  static struct pci_fixup pci_fixups[] __initdata = {
   17.87 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_DUNORD,	PCI_DEVICE_ID_DUNORD_I3000,	quirk_dunord },
   17.88  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release },
   17.89  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release },
   17.90  	/*
   17.91 @@ -484,7 +525,7 @@ static struct pci_fixup pci_fixups[] __i
   17.92  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_SI,	PCI_DEVICE_ID_SI_496,		quirk_nopcipci },
   17.93  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8363_0,	quirk_vialatency },
   17.94  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8371_1,	quirk_vialatency },
   17.95 -	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	0x3112	/* Not out yet ? */,	quirk_vialatency },
   17.96 +	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8361,	quirk_vialatency },
   17.97  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C576,	quirk_vsfx },
   17.98  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C597_0,	quirk_viaetbf },
   17.99  	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C597_0,	quirk_vt82c598_id },
  17.100 @@ -507,6 +548,15 @@ static struct pci_fixup pci_fixups[] __i
  17.101  
  17.102  	{ PCI_FIXUP_FINAL, 	PCI_VENDOR_ID_AMD,	PCI_DEVICE_ID_AMD_VIPER_7410,	quirk_amd_ioapic },
  17.103  	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_AMD,	PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering },
  17.104 +	/*
  17.105 +	 * i82380FB mobile docking controller: its PCI-to-PCI bridge
  17.106 +	 * is subtractive decoding (transparent), and does indicate this
  17.107 +	 * in the ProgIf. Unfortunately, the ProgIf value is wrong - 0x80
  17.108 +	 * instead of 0x01.
  17.109 +	 */
  17.110 +	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82380FB,	quirk_transparent_bridge },
  17.111 +
  17.112 +	{ PCI_FIXUP_FINAL,	PCI_VENDOR_ID_CYRIX,	PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master },
  17.113  
  17.114  	{ 0 }
  17.115  };
    18.1 --- a/xen-2.4.16/drivers/pci/setup-bus.c	Sun Feb 16 15:16:35 2003 +0000
    18.2 +++ b/xen-2.4.16/drivers/pci/setup-bus.c	Sun Feb 16 18:08:23 2003 +0000
    18.3 @@ -11,7 +11,10 @@
    18.4  
    18.5  /*
    18.6   * Nov 2000, Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    18.7 - *	     PCI-PCI bridges cleanup, sorted resource allocation
    18.8 + *	     PCI-PCI bridges cleanup, sorted resource allocation.
    18.9 + * Feb 2002, Ivan Kokshaysky <ink@jurassic.park.msu.ru>
   18.10 + *	     Converted to allocation in 3 passes, which gives
   18.11 + *	     tighter packing. Prefetchable range support.
   18.12   */
   18.13  
   18.14  #include <linux/init.h>
   18.15 @@ -23,7 +26,7 @@
   18.16  #include <linux/slab.h>
   18.17  
   18.18  
   18.19 -#define DEBUG_CONFIG 0
   18.20 +#define DEBUG_CONFIG 1
   18.21  #if DEBUG_CONFIG
   18.22  # define DBGC(args)     printk args
   18.23  #else
   18.24 @@ -33,16 +36,14 @@
   18.25  #define ROUND_UP(x, a)		(((x) + (a) - 1) & ~((a) - 1))
   18.26  
   18.27  static int __init
   18.28 -pbus_assign_resources_sorted(struct pci_bus *bus,
   18.29 -			     struct pbus_set_ranges_data *ranges)
   18.30 +pbus_assign_resources_sorted(struct pci_bus *bus)
   18.31  {
   18.32  	struct list_head *ln;
   18.33  	struct resource *res;
   18.34 -	struct resource_list head_io, head_mem, *list, *tmp;
   18.35 -	unsigned long io_reserved = 0, mem_reserved = 0;
   18.36 +	struct resource_list head, *list, *tmp;
   18.37  	int idx, found_vga = 0;
   18.38  
   18.39 -	head_io.next = head_mem.next = NULL;
   18.40 +	head.next = NULL;
   18.41  	for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
   18.42  		struct pci_dev *dev = pci_dev_b(ln);
   18.43  		u16 class = dev->class >> 8;
   18.44 @@ -64,63 +65,26 @@ pbus_assign_resources_sorted(struct pci_
   18.45  			pci_write_config_word(dev, PCI_COMMAND, cmd);
   18.46  		}
   18.47  
   18.48 -		/* Reserve some resources for CardBus.
   18.49 -		   Are these values reasonable? */
   18.50 -		if (class == PCI_CLASS_BRIDGE_CARDBUS) {
   18.51 -			io_reserved += 8*1024;
   18.52 -			mem_reserved += 32*1024*1024;
   18.53 -			continue;
   18.54 -		}
   18.55 -
   18.56 -		pdev_sort_resources(dev, &head_io, IORESOURCE_IO);
   18.57 -		pdev_sort_resources(dev, &head_mem, IORESOURCE_MEM);
   18.58 +		pdev_sort_resources(dev, &head);
   18.59  	}
   18.60  
   18.61 -	for (list = head_io.next; list;) {
   18.62 +	for (list = head.next; list;) {
   18.63  		res = list->res;
   18.64  		idx = res - &list->dev->resource[0];
   18.65 -		if (pci_assign_resource(list->dev, idx) == 0
   18.66 -		    && ranges->io_end < res->end)
   18.67 -			ranges->io_end = res->end;
   18.68 -		tmp = list;
   18.69 -		list = list->next;
   18.70 -		kfree(tmp);
   18.71 -	}
   18.72 -	for (list = head_mem.next; list;) {
   18.73 -		res = list->res;
   18.74 -		idx = res - &list->dev->resource[0];
   18.75 -		if (pci_assign_resource(list->dev, idx) == 0
   18.76 -		    && ranges->mem_end < res->end)
   18.77 -			ranges->mem_end = res->end;
   18.78 +		pci_assign_resource(list->dev, idx);
   18.79  		tmp = list;
   18.80  		list = list->next;
   18.81  		kfree(tmp);
   18.82  	}
   18.83  
   18.84 -	ranges->io_end += io_reserved;
   18.85 -	ranges->mem_end += mem_reserved;
   18.86 -
   18.87 -	/* PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)
   18.88 -	   requires that if there is no I/O ports or memory behind the
   18.89 -	   bridge, corresponding range must be turned off by writing base
   18.90 -	   value greater than limit to the bridge's base/limit registers.  */
   18.91 -#if 1
   18.92 -	/* But assuming that some hardware designed before 1998 might
   18.93 -	   not support this (very unlikely - at least all DEC bridges
   18.94 -	   are ok and I believe that was standard de-facto. -ink), we
   18.95 -	   must allow for at least one unit.  */
   18.96 -	if (ranges->io_end == ranges->io_start)
   18.97 -		ranges->io_end += 1;
   18.98 -	if (ranges->mem_end == ranges->mem_start)
   18.99 -		ranges->mem_end += 1;
  18.100 -#endif
  18.101 -	ranges->io_end = ROUND_UP(ranges->io_end, 4*1024);
  18.102 -	ranges->mem_end = ROUND_UP(ranges->mem_end, 1024*1024);
  18.103 -
  18.104  	return found_vga;
  18.105  }
  18.106  
  18.107 -/* Initialize bridges with base/limit values we have collected */
  18.108 +/* Initialize bridges with base/limit values we have collected.
  18.109 +   PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)
  18.110 +   requires that if there is no I/O ports or memory behind the
  18.111 +   bridge, corresponding range must be turned off by writing base
  18.112 +   value greater than limit to the bridge's base/limit registers.  */
  18.113  static void __init
  18.114  pci_setup_bridge(struct pci_bus *bus)
  18.115  {
  18.116 @@ -130,77 +94,288 @@ pci_setup_bridge(struct pci_bus *bus)
  18.117  
  18.118  	if (!bridge || (bridge->class >> 8) != PCI_CLASS_BRIDGE_PCI)
  18.119  		return;
  18.120 +
  18.121  	ranges.io_start = bus->resource[0]->start;
  18.122  	ranges.io_end = bus->resource[0]->end;
  18.123  	ranges.mem_start = bus->resource[1]->start;
  18.124  	ranges.mem_end = bus->resource[1]->end;
  18.125 +	ranges.prefetch_start = bus->resource[2]->start;
  18.126 +	ranges.prefetch_end = bus->resource[2]->end;
  18.127  	pcibios_fixup_pbus_ranges(bus, &ranges);
  18.128  
  18.129 -	DBGC((KERN_ERR "PCI: Bus %d, bridge: %s\n", bus->number, bridge->name));
  18.130 -	DBGC((KERN_ERR "  IO window: %04lx-%04lx\n", ranges.io_start, ranges.io_end));
  18.131 -	DBGC((KERN_ERR "  MEM window: %08lx-%08lx\n", ranges.mem_start, ranges.mem_end));
  18.132 +	DBGC((KERN_INFO "PCI: Bus %d, bridge: %s\n",
  18.133 +			bus->number, bridge->name));
  18.134  
  18.135  	/* Set up the top and bottom of the PCI I/O segment for this bus. */
  18.136 -	pci_read_config_dword(bridge, PCI_IO_BASE, &l);
  18.137 -	l &= 0xffff0000;
  18.138 -	l |= (ranges.io_start >> 8) & 0x00f0;
  18.139 -	l |= ranges.io_end & 0xf000;
  18.140 +	if (bus->resource[0]->flags & IORESOURCE_IO) {
  18.141 +		pci_read_config_dword(bridge, PCI_IO_BASE, &l);
  18.142 +		l &= 0xffff0000;
  18.143 +		l |= (ranges.io_start >> 8) & 0x00f0;
  18.144 +		l |= ranges.io_end & 0xf000;
  18.145 +		/* Set up upper 16 bits of I/O base/limit. */
  18.146 +		pci_write_config_word(bridge, PCI_IO_BASE_UPPER16,
  18.147 +				      ranges.io_start >> 16);
  18.148 +		pci_write_config_word(bridge, PCI_IO_LIMIT_UPPER16,
  18.149 +				      ranges.io_end >> 16);
  18.150 +		DBGC((KERN_INFO "  IO window: %04lx-%04lx\n",
  18.151 +				ranges.io_start, ranges.io_end));
  18.152 +	}
  18.153 +	else {
  18.154 +		/* Clear upper 16 bits of I/O base/limit. */
  18.155 +		pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0);
  18.156 +		l = 0x00f0;
  18.157 +		DBGC((KERN_INFO "  IO window: disabled.\n"));
  18.158 +	}
  18.159  	pci_write_config_dword(bridge, PCI_IO_BASE, l);
  18.160  
  18.161 -	/* Clear upper 16 bits of I/O base/limit. */
  18.162 -	pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0);
  18.163 +	/* Set up the top and bottom of the PCI Memory segment
  18.164 +	   for this bus. */
  18.165 +	if (bus->resource[1]->flags & IORESOURCE_MEM) {
  18.166 +		l = (ranges.mem_start >> 16) & 0xfff0;
  18.167 +		l |= ranges.mem_end & 0xfff00000;
  18.168 +		DBGC((KERN_INFO "  MEM window: %08lx-%08lx\n",
  18.169 +				ranges.mem_start, ranges.mem_end));
  18.170 +	}
  18.171 +	else {
  18.172 +		l = 0x0000fff0;
  18.173 +		DBGC((KERN_INFO "  MEM window: disabled.\n"));
  18.174 +	}
  18.175 +	pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
  18.176  
  18.177  	/* Clear out the upper 32 bits of PREF base/limit. */
  18.178  	pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0);
  18.179  	pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0);
  18.180  
  18.181 -	/* Set up the top and bottom of the PCI Memory segment
  18.182 -	   for this bus. */
  18.183 -	l = (ranges.mem_start >> 16) & 0xfff0;
  18.184 -	l |= ranges.mem_end & 0xfff00000;
  18.185 -	pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
  18.186 -
  18.187  	/* Set up PREF base/limit. */
  18.188 -	l = (bus->resource[2]->start >> 16) & 0xfff0;
  18.189 -	l |= bus->resource[2]->end & 0xfff00000;
  18.190 +	if (bus->resource[2]->flags & IORESOURCE_PREFETCH) {
  18.191 +		l = (ranges.prefetch_start >> 16) & 0xfff0;
  18.192 +		l |= ranges.prefetch_end & 0xfff00000;
  18.193 +		DBGC((KERN_INFO "  PREFETCH window: %08lx-%08lx\n",
  18.194 +				ranges.prefetch_start, ranges.prefetch_end));
  18.195 +	}
  18.196 +	else {
  18.197 +		l = 0x0000fff0;
  18.198 +		DBGC((KERN_INFO "  PREFETCH window: disabled.\n"));
  18.199 +	}
  18.200  	pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
  18.201  
  18.202  	/* Check if we have VGA behind the bridge.
  18.203 -	   Enable ISA in either case. */
  18.204 +	   Enable ISA in either case (FIXME!). */
  18.205  	l = (bus->resource[0]->flags & IORESOURCE_BUS_HAS_VGA) ? 0x0c : 0x04;
  18.206  	pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, l);
  18.207  }
  18.208  
  18.209 +/* Check whether the bridge supports optional I/O and
  18.210 +   prefetchable memory ranges. If not, the respective
  18.211 +   base/limit registers must be read-only and read as 0. */
  18.212  static void __init
  18.213 -pbus_assign_resources(struct pci_bus *bus, struct pbus_set_ranges_data *ranges)
  18.214 +pci_bridge_check_ranges(struct pci_bus *bus)
  18.215 +{
  18.216 +	u16 io;
  18.217 +	u32 pmem;
  18.218 +	struct pci_dev *bridge = bus->self;
  18.219 +	struct resource *b_res;
  18.220 +
  18.221 +	if (!bridge || (bridge->class >> 8) != PCI_CLASS_BRIDGE_PCI)
  18.222 +		return;
  18.223 +
  18.224 +	b_res = &bridge->resource[PCI_BRIDGE_RESOURCES];
  18.225 +	b_res[1].flags |= IORESOURCE_MEM;
  18.226 +
  18.227 +	pci_read_config_word(bridge, PCI_IO_BASE, &io);
  18.228 +	if (!io) {
  18.229 +		pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
  18.230 +		pci_read_config_word(bridge, PCI_IO_BASE, &io);
  18.231 + 		pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
  18.232 + 	}
  18.233 + 	if (io)
  18.234 +		b_res[0].flags |= IORESOURCE_IO;
  18.235 +	/*  DECchip 21050 pass 2 errata: the bridge may miss an address
  18.236 +	    disconnect boundary by one PCI data phase.
  18.237 +	    Workaround: do not use prefetching on this device. */
  18.238 +	if (bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == 0x0001)
  18.239 +		return;
  18.240 +	pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
  18.241 +	if (!pmem) {
  18.242 +		pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE,
  18.243 +					       0xfff0fff0);
  18.244 +		pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
  18.245 +		pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, 0x0);
  18.246 +	}
  18.247 +	if (pmem)
  18.248 +		b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
  18.249 +}
  18.250 +
  18.251 +/* Sizing the IO windows of the PCI-PCI bridge is trivial,
  18.252 +   since these windows have 4K granularity and the IO ranges
  18.253 +   of non-bridge PCI devices are limited to 256 bytes.
  18.254 +   We must be careful with the ISA aliasing though. */
  18.255 +static void __init
  18.256 +pbus_size_io(struct pci_bus *bus)
  18.257 +{
  18.258 +	struct list_head *ln;
  18.259 +	struct resource *b_res = bus->resource[0];
  18.260 +	unsigned long size = 0, size1 = 0;
  18.261 +
  18.262 +	if (!(b_res->flags & IORESOURCE_IO))
  18.263 +		return;
  18.264 +
  18.265 +	for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
  18.266 +		struct pci_dev *dev = pci_dev_b(ln);
  18.267 +		int i;
  18.268 +		
  18.269 +		for (i = 0; i < PCI_NUM_RESOURCES; i++) {
  18.270 +			struct resource *r = &dev->resource[i];
  18.271 +			unsigned long r_size;
  18.272 +
  18.273 +			if (r->parent || !(r->flags & IORESOURCE_IO))
  18.274 +				continue;
  18.275 +			r_size = r->end - r->start + 1;
  18.276 +
  18.277 +			if (r_size < 0x400)
  18.278 +				/* Might be re-aligned for ISA */
  18.279 +				size += r_size;
  18.280 +			else
  18.281 +				size1 += r_size;
  18.282 +		}
  18.283 +		/* ??? Reserve some resources for CardBus. */
  18.284 +		if ((dev->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS)
  18.285 +			size1 += 4*1024;
  18.286 +	}
  18.287 +/* To be fixed in 2.5: we should have sort of HAVE_ISA
  18.288 +   flag in the struct pci_bus. */
  18.289 +#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
  18.290 +	size = (size & 0xff) + ((size & ~0xffUL) << 2);
  18.291 +#endif
  18.292 +	size = ROUND_UP(size + size1, 4096);
  18.293 +	if (!size) {
  18.294 +		b_res->flags = 0;
  18.295 +		return;
  18.296 +	}
  18.297 +	/* Alignment of the IO window is always 4K */
  18.298 +	b_res->start = 4096;
  18.299 +	b_res->end = b_res->start + size - 1;
  18.300 +}
  18.301 +
  18.302 +/* Calculate the size of the bus and minimal alignment which
  18.303 +   guarantees that all child resources fit in this size. */
  18.304 +static void __init
  18.305 +pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long type)
  18.306  {
  18.307  	struct list_head *ln;
  18.308 -	int found_vga = pbus_assign_resources_sorted(bus, ranges);
  18.309 +	unsigned long min_align, align, size;
  18.310 +	unsigned long aligns[12];	/* Alignments from 1Mb to 2Gb */
  18.311 +	int order, max_order;
  18.312 +	struct resource *b_res = (type & IORESOURCE_PREFETCH) ?
  18.313 +				 bus->resource[2] : bus->resource[1];
  18.314 +
  18.315 +	memset(aligns, 0, sizeof(aligns));
  18.316 +	max_order = 0;
  18.317 +	size = 0;
  18.318 +
  18.319 +	for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
  18.320 +		struct pci_dev *dev = pci_dev_b(ln);
  18.321 +		int i;
  18.322 +		
  18.323 +		for (i = 0; i < PCI_NUM_RESOURCES; i++) {
  18.324 +			struct resource *r = &dev->resource[i];
  18.325 +			unsigned long r_size;
  18.326 +
  18.327 +			if (r->parent || (r->flags & mask) != type)
  18.328 +				continue;
  18.329 +			r_size = r->end - r->start + 1;
  18.330 +			/* For bridges size != alignment */
  18.331 +			align = (i < PCI_BRIDGE_RESOURCES) ? r_size : r->start;
  18.332 +			order = ffz(~align) - 20;
  18.333 +			if (order > 11) {
  18.334 +				printk(KERN_WARNING "PCI: region %s/%d "
  18.335 +				       "too large: %lx-%lx\n",
  18.336 +				       dev->slot_name, i, r->start, r->end);
  18.337 +				r->flags = 0;
  18.338 +				continue;
  18.339 +			}
  18.340 +			size += r_size;
  18.341 +			if (order < 0)
  18.342 +				order = 0;
  18.343 +			/* Exclude ranges with size > align from
  18.344 +			   calculation of the alignment. */
  18.345 +			if (size == align)
  18.346 +				aligns[order] += align;
  18.347 +			if (order > max_order)
  18.348 +				max_order = order;
  18.349 +		}
  18.350 +		/* ??? Reserve some resources for CardBus. */
  18.351 +		if ((dev->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
  18.352 +			size += 1UL << 24;		/* 16 Mb */
  18.353 +			aligns[24 - 20] += 1UL << 24;
  18.354 +		}
  18.355 +	}
  18.356  
  18.357 -	if (!ranges->found_vga && found_vga) {
  18.358 +	align = 0;
  18.359 +	min_align = 0;
  18.360 +	for (order = 0; order <= max_order; order++) {
  18.361 +		unsigned long align1 = 1UL << (order + 20);
  18.362 +
  18.363 +		if (!align)
  18.364 +			min_align = align1;
  18.365 +		else if (ROUND_UP(align + min_align, min_align) < align1)
  18.366 +			min_align = align1 >> 1;
  18.367 +		align += aligns[order];
  18.368 +	}
  18.369 +	size = ROUND_UP(size, min_align);
  18.370 +	if (!size) {
  18.371 +		b_res->flags = 0;
  18.372 +		return;
  18.373 +	}
  18.374 +	b_res->start = min_align;
  18.375 +	b_res->end = size + min_align - 1;
  18.376 +}
  18.377 +
  18.378 +void __init
  18.379 +pbus_size_bridges(struct pci_bus *bus)
  18.380 +{
  18.381 +	struct list_head *ln;
  18.382 +	unsigned long mask, type;
  18.383 +
  18.384 +	for (ln=bus->children.next; ln != &bus->children; ln=ln->next)
  18.385 +		pbus_size_bridges(pci_bus_b(ln));
  18.386 +
  18.387 +	/* The root bus? */
  18.388 +	if (!bus->self)
  18.389 +		return;
  18.390 +
  18.391 +	pci_bridge_check_ranges(bus);
  18.392 +
  18.393 +	pbus_size_io(bus);
  18.394 +
  18.395 +	mask = type = IORESOURCE_MEM;
  18.396 +	/* If the bridge supports prefetchable range, size it separately. */
  18.397 +	if (bus->resource[2] &&
  18.398 +	    bus->resource[2]->flags & IORESOURCE_PREFETCH) {
  18.399 +		pbus_size_mem(bus, IORESOURCE_PREFETCH, IORESOURCE_PREFETCH);
  18.400 +		mask |= IORESOURCE_PREFETCH;	/* Size non-prefetch only. */
  18.401 +	}
  18.402 +	pbus_size_mem(bus, mask, type);
  18.403 +}
  18.404 +
  18.405 +void __init
  18.406 +pbus_assign_resources(struct pci_bus *bus)
  18.407 +{
  18.408 +	struct list_head *ln;
  18.409 +	int found_vga = pbus_assign_resources_sorted(bus);
  18.410 +
  18.411 +	if (found_vga) {
  18.412  		struct pci_bus *b;
  18.413  
  18.414 -		ranges->found_vga = 1;
  18.415 -		/* Propogate presence of the VGA to upstream bridges */
  18.416 +		/* Propagate presence of the VGA to upstream bridges */
  18.417  		for (b = bus; b->parent; b = b->parent) {
  18.418 -#if 0
  18.419 -			/* ? Do we actually need to enable PF memory? */
  18.420 -			b->resource[2]->start = 0;
  18.421 -#endif
  18.422  			b->resource[0]->flags |= IORESOURCE_BUS_HAS_VGA;
  18.423  		}
  18.424  	}
  18.425  	for (ln=bus->children.next; ln != &bus->children; ln=ln->next) {
  18.426  		struct pci_bus *b = pci_bus_b(ln);
  18.427  
  18.428 -		b->resource[0]->start = ranges->io_start = ranges->io_end;
  18.429 -		b->resource[1]->start = ranges->mem_start = ranges->mem_end;
  18.430 -
  18.431 -		pbus_assign_resources(b, ranges);
  18.432 -
  18.433 -		b->resource[0]->end = ranges->io_end - 1;
  18.434 -		b->resource[1]->end = ranges->mem_end - 1;
  18.435 -
  18.436 +		pbus_assign_resources(b);
  18.437  		pci_setup_bridge(b);
  18.438  	}
  18.439  }
  18.440 @@ -208,42 +383,18 @@ pbus_assign_resources(struct pci_bus *bu
  18.441  void __init
  18.442  pci_assign_unassigned_resources(void)
  18.443  {
  18.444 -	struct pbus_set_ranges_data ranges;
  18.445  	struct list_head *ln;
  18.446  	struct pci_dev *dev;
  18.447  
  18.448 -	for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next) {
  18.449 -		struct pci_bus *b = pci_bus_b(ln);
  18.450 +	/* Depth first, calculate sizes and alignments of all
  18.451 +	   subordinate buses. */
  18.452 +	for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next)
  18.453 +		pbus_size_bridges(pci_bus_b(ln));
  18.454 +	/* Depth last, allocate resources and update the hardware. */
  18.455 +	for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next)
  18.456 +		pbus_assign_resources(pci_bus_b(ln));
  18.457  
  18.458 -		ranges.io_start = b->resource[0]->start + PCIBIOS_MIN_IO;
  18.459 -		ranges.mem_start = b->resource[1]->start + PCIBIOS_MIN_MEM;
  18.460 -		ranges.io_end = ranges.io_start;
  18.461 -		ranges.mem_end = ranges.mem_start;
  18.462 -		ranges.found_vga = 0;
  18.463 -		pbus_assign_resources(b, &ranges);
  18.464 -	}
  18.465  	pci_for_each_dev(dev) {
  18.466  		pdev_enable_device(dev);
  18.467  	}
  18.468  }
  18.469 -
  18.470 -/* Check whether the bridge supports I/O forwarding.
  18.471 -   If not, its I/O base/limit register must be
  18.472 -   read-only and read as 0. */
  18.473 -unsigned long __init
  18.474 -pci_bridge_check_io(struct pci_dev *bridge)
  18.475 -{
  18.476 -	u16 io;
  18.477 -
  18.478 -	pci_read_config_word(bridge, PCI_IO_BASE, &io);
  18.479 -	if (!io) {
  18.480 -		pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
  18.481 -		pci_read_config_word(bridge, PCI_IO_BASE, &io);
  18.482 -		pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
  18.483 -	}
  18.484 -	if (io)
  18.485 -		return IORESOURCE_IO;
  18.486 -	printk(KERN_WARNING "PCI: bridge %s does not support I/O forwarding!\n",
  18.487 -				bridge->name);
  18.488 -	return 0;
  18.489 -}
    19.1 --- a/xen-2.4.16/drivers/pci/setup-res.c	Sun Feb 16 15:16:35 2003 +0000
    19.2 +++ b/xen-2.4.16/drivers/pci/setup-res.c	Sun Feb 16 18:08:23 2003 +0000
    19.3 @@ -17,7 +17,7 @@
    19.4   */
    19.5  
    19.6  #include <linux/init.h>
    19.7 -//#include <linux/kernel.h>
    19.8 +/*#include <linux/kernel.h>*/
    19.9  #include <linux/pci.h>
   19.10  #include <linux/errno.h>
   19.11  #include <linux/ioport.h>
   19.12 @@ -69,6 +69,7 @@ static int pci_assign_bus_resource(const
   19.13  	unsigned int type_mask,
   19.14  	int resno)
   19.15  {
   19.16 +	unsigned long align;
   19.17  	int i;
   19.18  
   19.19  	type_mask |= IORESOURCE_IO | IORESOURCE_MEM;
   19.20 @@ -81,12 +82,20 @@ static int pci_assign_bus_resource(const
   19.21  		if ((res->flags ^ r->flags) & type_mask)
   19.22  			continue;
   19.23  
   19.24 -		/* We cannot allocate a non-prefetching resource from a pre-fetching area */
   19.25 -		if ((r->flags & IORESOURCE_PREFETCH) && !(res->flags & IORESOURCE_PREFETCH))
   19.26 +		/* We cannot allocate a non-prefetching resource
   19.27 +		   from a pre-fetching area */
   19.28 +		if ((r->flags & IORESOURCE_PREFETCH) &&
   19.29 +		    !(res->flags & IORESOURCE_PREFETCH))
   19.30  			continue;
   19.31  
   19.32 +		/* The bridge resources are special, as their
   19.33 +		   size != alignment. Sizing routines return
   19.34 +		   required alignment in the "start" field. */
   19.35 +		align = (resno < PCI_BRIDGE_RESOURCES) ? size : res->start;
   19.36 +
   19.37  		/* Ok, try it out.. */
   19.38 -		if (allocate_resource(r, res, size, min, -1, size, pcibios_align_resource, dev) < 0)
   19.39 +		if (allocate_resource(r, res, size, min, -1, align,
   19.40 +				      pcibios_align_resource, dev) < 0)
   19.41  			continue;
   19.42  
   19.43  		/* Update PCI config space.  */
   19.44 @@ -127,47 +136,45 @@ pci_assign_resource(struct pci_dev *dev,
   19.45  	return 0;
   19.46  }
   19.47  
   19.48 -/* Sort resources of a given type by alignment */
   19.49 +/* Sort resources by alignment */
   19.50  void __init
   19.51 -pdev_sort_resources(struct pci_dev *dev,
   19.52 -		    struct resource_list *head, u32 type_mask)
   19.53 +pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
   19.54  {
   19.55  	int i;
   19.56  
   19.57  	for (i = 0; i < PCI_NUM_RESOURCES; i++) {
   19.58  		struct resource *r;
   19.59  		struct resource_list *list, *tmp;
   19.60 -		unsigned long r_size;
   19.61 -
   19.62 -		/* PCI-PCI bridges may have I/O ports or
   19.63 -		   memory on the primary bus */
   19.64 -		if (dev->class >> 8 == PCI_CLASS_BRIDGE_PCI &&
   19.65 -						i >= PCI_BRIDGE_RESOURCES)
   19.66 -			continue;
   19.67 +		unsigned long r_align;
   19.68  
   19.69  		r = &dev->resource[i];
   19.70 -		r_size = r->end - r->start;
   19.71 +		r_align = r->end - r->start;
   19.72  		
   19.73 -		if (!(r->flags & type_mask) || r->parent)
   19.74 +		if (!(r->flags) || r->parent)
   19.75  			continue;
   19.76 -		if (!r_size) {
   19.77 +		if (!r_align) {
   19.78  			printk(KERN_WARNING "PCI: Ignore bogus resource %d "
   19.79 -					 "[%lx:%lx] of %s\n",
   19.80 -					  i, r->start, r->end, dev->name);
   19.81 +					    "[%lx:%lx] of %s\n",
   19.82 +					    i, r->start, r->end, dev->name);
   19.83  			continue;
   19.84  		}
   19.85 +		r_align = (i < PCI_BRIDGE_RESOURCES) ? r_align + 1 : r->start;
   19.86  		for (list = head; ; list = list->next) {
   19.87 -			unsigned long size = 0;
   19.88 +			unsigned long align = 0;
   19.89  			struct resource_list *ln = list->next;
   19.90 +			int idx;
   19.91  
   19.92 -			if (ln)
   19.93 -				size = ln->res->end - ln->res->start;
   19.94 -			if (r_size > size) {
   19.95 +			if (ln) {
   19.96 +				idx = ln->res - &ln->dev->resource[0];
   19.97 +				align = (idx < PCI_BRIDGE_RESOURCES) ?
   19.98 +					ln->res->end - ln->res->start + 1 :
   19.99 +					ln->res->start;
  19.100 +			}
  19.101 +			if (r_align > align) {
  19.102  				tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
  19.103 -				if (!tmp) {
  19.104 -					printk(KERN_ERR "pdev_sort_resources(): kmalloc() failed!\n");
  19.105 -					continue;
  19.106 -				}
  19.107 +				if (!tmp)
  19.108 +					panic("pdev_sort_resources(): "
  19.109 +					      "kmalloc() failed!\n");
  19.110  				tmp->next = ln;
  19.111  				tmp->res = r;
  19.112  				tmp->dev = dev;
    20.1 --- a/xen-2.4.16/include/asm-i386/pci.h	Sun Feb 16 15:16:35 2003 +0000
    20.2 +++ b/xen-2.4.16/include/asm-i386/pci.h	Sun Feb 16 18:08:23 2003 +0000
    20.3 @@ -31,7 +31,7 @@ int pcibios_set_irq_routing(struct pci_d
    20.4  #include <linux/types.h>
    20.5  #include <linux/slab.h>
    20.6  #include <asm/scatterlist.h>
    20.7 -//#include <linux/string.h>
    20.8 +/*#include <linux/string.h>*/
    20.9  #include <asm/io.h>
   20.10  
   20.11  struct pci_dev;
   20.12 @@ -73,9 +73,8 @@ static inline dma_addr_t pci_map_single(
   20.13  					size_t size, int direction)
   20.14  {
   20.15  	if (direction == PCI_DMA_NONE)
   20.16 -		BUG();
   20.17 +		out_of_line_bug();
   20.18  	flush_write_buffers();
   20.19 -
   20.20  	return virt_to_bus(ptr);
   20.21  }
   20.22  
   20.23 @@ -90,38 +89,38 @@ static inline void pci_unmap_single(stru
   20.24  				    size_t size, int direction)
   20.25  {
   20.26  	if (direction == PCI_DMA_NONE)
   20.27 -		BUG();
   20.28 +		out_of_line_bug();
   20.29  	/* Nothing to do */
   20.30  }
   20.31  
   20.32  /*
   20.33   * pci_{map,unmap}_single_page maps a kernel page to a dma_addr_t. identical
   20.34 - * to pci_map_single, but takes a struct page instead of a virtual address
   20.35 + * to pci_map_single, but takes a struct pfn_info instead of a virtual address
   20.36   */
   20.37  static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct pfn_info *page,
   20.38  				      unsigned long offset, size_t size, int direction)
   20.39  {
   20.40  	if (direction == PCI_DMA_NONE)
   20.41 -		BUG();
   20.42 +		out_of_line_bug();
   20.43  
   20.44 -	return (page - frame_table) * PAGE_SIZE + offset;
   20.45 +	return (dma_addr_t)(page - frame_table) * PAGE_SIZE + offset;
   20.46  }
   20.47  
   20.48  static inline void pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
   20.49  				  size_t size, int direction)
   20.50  {
   20.51  	if (direction == PCI_DMA_NONE)
   20.52 -		BUG();
   20.53 +		out_of_line_bug();
   20.54  	/* Nothing to do */
   20.55  }
   20.56  
   20.57  /* pci_unmap_{page,single} is a nop so... */
   20.58  #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
   20.59  #define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
   20.60 -#define pci_unmap_addr(PTR, ADDR_NAME)          (0)
   20.61 -#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
   20.62 -#define pci_unmap_len(PTR, LEN_NAME)            (0)
   20.63 -#define pci_unmap_len_set(PTR, LEN_NAME, VAL)   do { } while (0)
   20.64 +#define pci_unmap_addr(PTR, ADDR_NAME)		(0)
   20.65 +#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)	do { } while (0)
   20.66 +#define pci_unmap_len(PTR, LEN_NAME)		(0)
   20.67 +#define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0)
   20.68  
   20.69  /* Map a set of buffers described by scatterlist in streaming
   20.70   * mode for DMA.  This is the scather-gather version of the
   20.71 @@ -144,16 +143,16 @@ static inline int pci_map_sg(struct pci_
   20.72  	int i;
   20.73  
   20.74  	if (direction == PCI_DMA_NONE)
   20.75 -		BUG();
   20.76 +		out_of_line_bug();
   20.77   
   20.78   	/*
   20.79   	 * temporary 2.4 hack
   20.80   	 */
   20.81   	for (i = 0; i < nents; i++ ) {
   20.82   		if (sg[i].address && sg[i].page)
   20.83 - 			BUG();
   20.84 + 			out_of_line_bug();
   20.85   		else if (!sg[i].address && !sg[i].page)
   20.86 - 			BUG();
   20.87 + 			out_of_line_bug();
   20.88   
   20.89   		if (sg[i].address)
   20.90   			sg[i].dma_address = virt_to_bus(sg[i].address);
   20.91 @@ -173,7 +172,7 @@ static inline void pci_unmap_sg(struct p
   20.92  				int nents, int direction)
   20.93  {
   20.94  	if (direction == PCI_DMA_NONE)
   20.95 -		BUG();
   20.96 +		out_of_line_bug();
   20.97  	/* Nothing to do */
   20.98  }
   20.99  
  20.100 @@ -191,7 +190,7 @@ static inline void pci_dma_sync_single(s
  20.101  				       size_t size, int direction)
  20.102  {
  20.103  	if (direction == PCI_DMA_NONE)
  20.104 -		BUG();
  20.105 +		out_of_line_bug();
  20.106  	flush_write_buffers();
  20.107  }
  20.108  
  20.109 @@ -206,7 +205,7 @@ static inline void pci_dma_sync_sg(struc
  20.110  				   int nelems, int direction)
  20.111  {
  20.112  	if (direction == PCI_DMA_NONE)
  20.113 -		BUG();
  20.114 +		out_of_line_bug();
  20.115  	flush_write_buffers();
  20.116  }
  20.117  
  20.118 @@ -272,6 +271,12 @@ static inline int pci_controller_num(str
  20.119  	return 0;
  20.120  }
  20.121  
  20.122 +#if 0 /* XXX Not in land of Xen XXX */
  20.123 +#define HAVE_PCI_MMAP
  20.124 +extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
  20.125 +			       enum pci_mmap_state mmap_state, int write_combine);
  20.126 +#endif
  20.127 +
  20.128  #endif /* __KERNEL__ */
  20.129  
  20.130  #endif /* __i386_PCI_H */
    21.1 --- a/xen-2.4.16/include/xeno/config.h	Sun Feb 16 15:16:35 2003 +0000
    21.2 +++ b/xen-2.4.16/include/xeno/config.h	Sun Feb 16 18:08:23 2003 +0000
    21.3 @@ -131,6 +131,8 @@
    21.4  #ifndef __ASSEMBLY__
    21.5  extern unsigned long opt_ipbase, opt_nfsserv, opt_gateway, opt_netmask;
    21.6  extern unsigned char opt_nfsroot[];
    21.7 +extern void __out_of_line_bug(int line) __attribute__((noreturn));
    21.8 +#define out_of_line_bug() __out_of_line_bug(__LINE__)
    21.9  #endif
   21.10  
   21.11  #endif /* __XENO_CONFIG_H__ */
    22.1 --- a/xen-2.4.16/include/xeno/ioport.h	Sun Feb 16 15:16:35 2003 +0000
    22.2 +++ b/xen-2.4.16/include/xeno/ioport.h	Sun Feb 16 18:08:23 2003 +0000
    22.3 @@ -92,7 +92,8 @@ extern int allocate_resource(struct reso
    22.4  			     unsigned long size,
    22.5  			     unsigned long min, unsigned long max,
    22.6  			     unsigned long align,
    22.7 -			     void (*alignf)(void *, struct resource *, unsigned long),
    22.8 +			     void (*alignf)(void *, struct resource *,
    22.9 +					    unsigned long, unsigned long),
   22.10  			     void *alignf_data);
   22.11  
   22.12  /* Convenience shorthand with allocation */
    23.1 --- a/xen-2.4.16/include/xeno/pci.h	Sun Feb 16 15:16:35 2003 +0000
    23.2 +++ b/xen-2.4.16/include/xeno/pci.h	Sun Feb 16 18:08:23 2003 +0000
    23.3 @@ -376,12 +376,15 @@ struct pci_dev {
    23.4  	struct resource dma_resource[DEVICE_COUNT_DMA];
    23.5  	struct resource irq_resource[DEVICE_COUNT_IRQ];
    23.6  
    23.7 -	char		name[80];	/* device name */
    23.8 +	char		name[90];	/* device name */
    23.9  	char		slot_name[8];	/* slot name */
   23.10  	int		active;		/* ISAPnP: device is active */
   23.11  	int		ro;		/* ISAPnP: read only */
   23.12  	unsigned short	regs;		/* ISAPnP: supported registers */
   23.13  
   23.14 +	/* These fields are used by common fixups */
   23.15 +	unsigned short	transparent:1;	/* Transparent PCI bridge */
   23.16 +
   23.17  	int (*prepare)(struct pci_dev *dev);	/* ISAPnP hooks */
   23.18  	int (*activate)(struct pci_dev *dev);
   23.19  	int (*deactivate)(struct pci_dev *dev);
   23.20 @@ -436,6 +439,7 @@ struct pci_bus {
   23.21  extern struct list_head pci_root_buses;	/* list of all known PCI buses */
   23.22  extern struct list_head pci_devices;	/* list of all devices */
   23.23  
   23.24 +extern struct proc_dir_entry *proc_bus_pci_dir;
   23.25  /*
   23.26   * Error values that may be returned by PCI functions.
   23.27   */
   23.28 @@ -460,9 +464,9 @@ struct pci_ops {
   23.29  
   23.30  struct pbus_set_ranges_data
   23.31  {
   23.32 -	int found_vga;
   23.33  	unsigned long io_start, io_end;
   23.34  	unsigned long mem_start, mem_end;
   23.35 +	unsigned long prefetch_start, prefetch_end;
   23.36  };
   23.37  
   23.38  struct pci_device_id {
   23.39 @@ -479,7 +483,7 @@ struct pci_driver {
   23.40  	int  (*probe)  (struct pci_dev *dev, const struct pci_device_id *id);	/* New device inserted */
   23.41  	void (*remove) (struct pci_dev *dev);	/* Device removed (NULL if not a hot-plug capable driver) */
   23.42  	int  (*save_state) (struct pci_dev *dev, u32 state);    /* Save Device Context */
   23.43 -	int  (*suspend)(struct pci_dev *dev, u32 state);	/* Device suspended */
   23.44 +	int  (*suspend) (struct pci_dev *dev, u32 state);	/* Device suspended */
   23.45  	int  (*resume) (struct pci_dev *dev);	                /* Device woken up */
   23.46  	int  (*enable_wake) (struct pci_dev *dev, u32 state, int enable);   /* Enable wake event */
   23.47  };
   23.48 @@ -493,11 +497,12 @@ struct pci_driver {
   23.49  
   23.50  void pcibios_init(void);
   23.51  void pcibios_fixup_bus(struct pci_bus *);
   23.52 -int pcibios_enable_device(struct pci_dev *);
   23.53 +int pcibios_enable_device(struct pci_dev *, int mask);
   23.54  char *pcibios_setup (char *str);
   23.55  
   23.56  /* Used only when drivers/pci/setup.c is used */
   23.57 -void pcibios_align_resource(void *, struct resource *, unsigned long);
   23.58 +void pcibios_align_resource(void *, struct resource *,
   23.59 +			    unsigned long, unsigned long);
   23.60  void pcibios_update_resource(struct pci_dev *, struct resource *,
   23.61  			     struct resource *, int);
   23.62  void pcibios_update_irq(struct pci_dev *, int irq);
   23.63 @@ -559,6 +564,7 @@ int pci_write_config_word(struct pci_dev
   23.64  int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
   23.65  
   23.66  int pci_enable_device(struct pci_dev *dev);
   23.67 +int pci_enable_device_bars(struct pci_dev *dev, int mask);
   23.68  void pci_disable_device(struct pci_dev *dev);
   23.69  void pci_set_master(struct pci_dev *dev);
   23.70  #define HAVE_PCI_SET_MWI
   23.71 @@ -580,13 +586,15 @@ int pci_enable_wake(struct pci_dev *dev,
   23.72  int pci_claim_resource(struct pci_dev *, int);
   23.73  void pci_assign_unassigned_resources(void);
   23.74  void pdev_enable_device(struct pci_dev *);
   23.75 -void pdev_sort_resources(struct pci_dev *, struct resource_list *, u32);
   23.76 +void pdev_sort_resources(struct pci_dev *, struct resource_list *);
   23.77  unsigned long pci_bridge_check_io(struct pci_dev *);
   23.78  void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
   23.79  		    int (*)(struct pci_dev *, u8, u8));
   23.80 -#define HAVE_PCI_REQ_REGIONS
   23.81 +#define HAVE_PCI_REQ_REGIONS	2
   23.82  int pci_request_regions(struct pci_dev *, char *);
   23.83  void pci_release_regions(struct pci_dev *);
   23.84 +int pci_request_region(struct pci_dev *, int, char *);
   23.85 +void pci_release_region(struct pci_dev *, int);
   23.86  
   23.87  /* New-style probing supporting hot-pluggable devices */
   23.88  int pci_register_driver(struct pci_driver *);
   23.89 @@ -650,6 +658,7 @@ unsigned int ss_vendor, unsigned int ss_
   23.90  { return NULL; }
   23.91  
   23.92  static inline void pci_set_master(struct pci_dev *dev) { }
   23.93 +static inline int pci_enable_device_bars(struct pci_dev *dev, int mask) { return -EBUSY; }
   23.94  static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
   23.95  static inline void pci_disable_device(struct pci_dev *dev) { }
   23.96  static inline int pci_module_init(struct pci_driver *drv) { return -ENODEV; }