aboutsummaryrefslogtreecommitdiffstats
path: root/xen-2.4.16
diff options
context:
space:
mode:
authorkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-02-16 18:08:23 +0000
committerkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-02-16 18:08:23 +0000
commit2d4c3076b196cf0307976d57b932a3637f0dbd7b (patch)
tree9cd202f091825b4a262734dfca8ba0c107bd967d /xen-2.4.16
parentcc3b379e85bfb78490c628ac10a01745aeaaa2ec (diff)
downloadxen-2d4c3076b196cf0307976d57b932a3637f0dbd7b.tar.gz
xen-2d4c3076b196cf0307976d57b932a3637f0dbd7b.tar.bz2
xen-2d4c3076b196cf0307976d57b932a3637f0dbd7b.zip
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
Diffstat (limited to 'xen-2.4.16')
-rw-r--r--xen-2.4.16/arch/i386/pci-dma.c2
-rw-r--r--xen-2.4.16/arch/i386/pci-i386.c47
-rw-r--r--xen-2.4.16/arch/i386/pci-i386.h2
-rw-r--r--xen-2.4.16/arch/i386/pci-irq.c48
-rw-r--r--xen-2.4.16/arch/i386/pci-pc.c330
-rw-r--r--xen-2.4.16/common/kernel.c7
-rw-r--r--xen-2.4.16/common/resource.c9
-rw-r--r--xen-2.4.16/drivers/ide/ide-disk.c.orig1550
-rw-r--r--xen-2.4.16/drivers/ide/ide-pci.c55
-rw-r--r--xen-2.4.16/drivers/ide/piix.c14
-rw-r--r--xen-2.4.16/drivers/pci/gen-devlist.c9
-rw-r--r--xen-2.4.16/drivers/pci/names.c12
-rw-r--r--xen-2.4.16/drivers/pci/pci.c215
-rw-r--r--xen-2.4.16/drivers/pci/pci.ids2110
-rw-r--r--xen-2.4.16/drivers/pci/proc.c2
-rw-r--r--xen-2.4.16/drivers/pci/quirks.c70
-rw-r--r--xen-2.4.16/drivers/pci/setup-bus.c387
-rw-r--r--xen-2.4.16/drivers/pci/setup-res.c61
-rw-r--r--xen-2.4.16/include/asm-i386/pci.h41
-rw-r--r--xen-2.4.16/include/xeno/config.h2
-rw-r--r--xen-2.4.16/include/xeno/ioport.h3
-rw-r--r--xen-2.4.16/include/xeno/pci.h23
22 files changed, 2695 insertions, 2304 deletions
diff --git a/xen-2.4.16/arch/i386/pci-dma.c b/xen-2.4.16/arch/i386/pci-dma.c
index 7cf3a4ee9d..9d19cea867 100644
--- a/xen-2.4.16/arch/i386/pci-dma.c
+++ b/xen-2.4.16/arch/i386/pci-dma.c
@@ -19,7 +19,7 @@ void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
void *ret;
int gfp = GFP_ATOMIC;
- if (hwdev == NULL || hwdev->dma_mask != 0xffffffff)
+ if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
gfp |= GFP_DMA;
ret = (void *)__get_free_pages(gfp, get_order(size));
diff --git a/xen-2.4.16/arch/i386/pci-i386.c b/xen-2.4.16/arch/i386/pci-i386.c
index f2e9c43e64..7a213d824c 100644
--- a/xen-2.4.16/arch/i386/pci-i386.c
+++ b/xen-2.4.16/arch/i386/pci-i386.c
@@ -86,7 +86,7 @@
*/
#include <linux/types.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/ioport.h>
@@ -136,7 +136,8 @@ pcibios_update_resource(struct pci_dev *dev, struct resource *root,
* which might have be mirrored at 0x0100-0x03ff..
*/
void
-pcibios_align_resource(void *data, struct resource *res, unsigned long size)
+pcibios_align_resource(void *data, struct resource *res,
+ unsigned long size, unsigned long align)
{
if (res->flags & IORESOURCE_IO) {
unsigned long start = res->start;
@@ -303,7 +304,7 @@ void __init pcibios_resource_survey(void)
pcibios_assign_resources();
}
-int pcibios_enable_resources(struct pci_dev *dev)
+int pcibios_enable_resources(struct pci_dev *dev, int mask)
{
u16 cmd, old_cmd;
int idx;
@@ -312,6 +313,10 @@ int pcibios_enable_resources(struct pci_dev *dev)
pci_read_config_word(dev, PCI_COMMAND, &cmd);
old_cmd = cmd;
for(idx=0; idx<6; idx++) {
+ /* Only set up the requested stuff */
+ if (!(mask & (1<<idx)))
+ continue;
+
r = &dev->resource[idx];
if (!r->start && r->end) {
printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", dev->slot_name);
@@ -328,7 +333,6 @@ int pcibios_enable_resources(struct pci_dev *dev)
printk("PCI: Enabling device %s (%04x -> %04x)\n", dev->slot_name, old_cmd, cmd);
pci_write_config_word(dev, PCI_COMMAND, cmd);
}
-
return 0;
}
@@ -348,7 +352,40 @@ void pcibios_set_master(struct pci_dev *dev)
lat = pcibios_max_latency;
else
return;
- printk("PCI: Setting latency timer of device %s to %d\n", dev->slot_name, lat);
+ printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", dev->slot_name, lat);
pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
}
+#if 0
+int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
+ enum pci_mmap_state mmap_state, int write_combine)
+{
+ unsigned long prot;
+
+ /* I/O space cannot be accessed via normal processor loads and
+ * stores on this platform.
+ */
+ if (mmap_state == pci_mmap_io)
+ return -EINVAL;
+
+ /* Leave vm_pgoff as-is, the PCI space address is the physical
+ * address on this platform.
+ */
+ vma->vm_flags |= (VM_SHM | VM_LOCKED | VM_IO);
+
+ prot = pgprot_val(vma->vm_page_prot);
+ if (boot_cpu_data.x86 > 3)
+ prot |= _PAGE_PCD | _PAGE_PWT;
+ vma->vm_page_prot = __pgprot(prot);
+
+ /* Write-combine setting is ignored, it is changed via the mtrr
+ * interfaces on this platform.
+ */
+ if (remap_page_range(vma->vm_start, vma->vm_pgoff << PAGE_SHIFT,
+ vma->vm_end - vma->vm_start,
+ vma->vm_page_prot))
+ return -EAGAIN;
+
+ return 0;
+}
+#endif
diff --git a/xen-2.4.16/arch/i386/pci-i386.h b/xen-2.4.16/arch/i386/pci-i386.h
index 2c821af08f..2d051c51b2 100644
--- a/xen-2.4.16/arch/i386/pci-i386.h
+++ b/xen-2.4.16/arch/i386/pci-i386.h
@@ -29,7 +29,7 @@ extern unsigned int pci_probe;
extern unsigned int pcibios_max_latency;
void pcibios_resource_survey(void);
-int pcibios_enable_resources(struct pci_dev *);
+int pcibios_enable_resources(struct pci_dev *, int);
/* pci-pc.c */
diff --git a/xen-2.4.16/arch/i386/pci-irq.c b/xen-2.4.16/arch/i386/pci-irq.c
index f08f3790bc..b7a212b014 100644
--- a/xen-2.4.16/arch/i386/pci-irq.c
+++ b/xen-2.4.16/arch/i386/pci-irq.c
@@ -6,7 +6,7 @@
#include <linux/config.h>
#include <linux/types.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/slab.h>
@@ -23,6 +23,8 @@
#define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
#define PIRQ_VERSION 0x0100
+int broken_hp_bios_irq9;
+
static struct irq_routing_table *pirq_table;
/*
@@ -207,6 +209,24 @@ static int pirq_via_set(struct pci_dev *router, struct pci_dev *dev, int pirq, i
}
/*
+ * ITE 8330G pirq rules are nibble-based
+ * FIXME: pirqmap may be { 1, 0, 3, 2 },
+ * 2+3 are both mapped to irq 9 on my system
+ */
+static int pirq_ite_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+{
+ static unsigned char pirqmap[4] = { 1, 0, 2, 3 };
+ return read_config_nybble(router,0x43, pirqmap[pirq-1]);
+}
+
+static int pirq_ite_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+{
+ static unsigned char pirqmap[4] = { 1, 0, 2, 3 };
+ write_config_nybble(router, 0x43, pirqmap[pirq-1], irq);
+ return 1;
+}
+
+/*
* OPTI: high four bits are nibble pointer..
* I wonder what the low bits do?
*/
@@ -226,12 +246,12 @@ static int pirq_opti_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
*/
static int pirq_cyrix_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
- return read_config_nybble(router, 0x5C, pirq-1);
+ return read_config_nybble(router, 0x5C, (pirq-1)^1);
}
static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
- write_config_nybble(router, 0x5C, pirq-1, irq);
+ write_config_nybble(router, 0x5C, (pirq-1)^1, irq);
return 1;
}
@@ -444,10 +464,19 @@ static struct irq_router pirq_routers[] = {
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, pirq_piix_get, pirq_piix_set },
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX, pirq_piix_get, pirq_piix_set },
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_0, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, pirq_piix_get, pirq_piix_set },
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_10, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801E_0, pirq_piix_get, pirq_piix_set },
{ "ALI", PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, pirq_ali_get, pirq_ali_set },
+ { "ITE", PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8330G_0, pirq_ite_get, pirq_ite_set },
+
{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, pirq_via_get, pirq_via_set },
{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, pirq_via_get, pirq_via_set },
{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, pirq_via_get, pirq_via_set },
@@ -463,6 +492,10 @@ static struct irq_router pirq_routers[] = {
pirq_serverworks_get, pirq_serverworks_set },
{ "AMD756 VIPER", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_740B,
pirq_amd756_get, pirq_amd756_set },
+ { "AMD766", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7413,
+ pirq_amd756_get, pirq_amd756_set },
+ { "AMD768", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7443,
+ pirq_amd756_get, pirq_amd756_set },
{ "default", 0, 0, NULL, NULL }
};
@@ -566,6 +599,15 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs);
mask &= pcibios_irq_mask;
+ /* Work around broken HP Pavilion Notebooks which assign USB to
+ IRQ 9 even though it is actually wired to IRQ 11 */
+
+ if (broken_hp_bios_irq9 && pirq == 0x59 && dev->irq == 9) {
+ dev->irq = 11;
+ pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 11);
+ r->set(pirq_router_dev, dev, pirq, 11);
+ }
+
/*
* Find the best IRQ to assign: use the one
* reported by the device if possible.
diff --git a/xen-2.4.16/arch/i386/pci-pc.c b/xen-2.4.16/arch/i386/pci-pc.c
index 7b02d3f4d3..d63a54a79c 100644
--- a/xen-2.4.16/arch/i386/pci-pc.c
+++ b/xen-2.4.16/arch/i386/pci-pc.c
@@ -6,17 +6,20 @@
#include <linux/config.h>
#include <linux/types.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/sched.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/ioport.h>
-//#include <asm/segment.h>
+/*#include <asm/segment.h>*/
#include <asm/io.h>
+#include <asm/smp.h>
+#include <asm/smpboot.h>
#include "pci-i386.h"
+extern int numnodes;
#define __KERNEL_CS __HYPERVISOR_CS
#define __KERNEL_DS __HYPERVISOR_DS
@@ -29,11 +32,21 @@ struct pci_ops *pci_root_ops = NULL;
int (*pci_config_read)(int seg, int bus, int dev, int fn, int reg, int len, u32 *value) = NULL;
int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value) = NULL;
+#ifdef CONFIG_MULTIQUAD
+#define BUS2QUAD(global) (mp_bus_id_to_node[global])
+#define BUS2LOCAL(global) (mp_bus_id_to_local[global])
+#define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
+#else
+#define BUS2QUAD(global) (0)
+#define BUS2LOCAL(global) (global)
+#define QUADLOCAL2BUS(quad,local) (local)
+#endif
+
/*
* This interrupt-safe spinlock protects all accesses to PCI
* configuration space.
*/
-spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED;
+static spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED;
/*
@@ -42,14 +55,137 @@ spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED;
#ifdef CONFIG_PCI_DIRECT
+#ifdef CONFIG_MULTIQUAD
+#define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \
+ (0x80000000 | (BUS2LOCAL(bus) << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
+
+static int pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* CONFIG_MULTIQUAD */
+{
+ unsigned long flags;
+
+ if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
+ return -EINVAL;
+
+ spin_lock_irqsave(&pci_config_lock, flags);
+
+ outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
+
+ switch (len) {
+ case 1:
+ *value = inb_quad(0xCFC + (reg & 3), BUS2QUAD(bus));
+ break;
+ case 2:
+ *value = inw_quad(0xCFC + (reg & 2), BUS2QUAD(bus));
+ break;
+ case 4:
+ *value = inl_quad(0xCFC, BUS2QUAD(bus));
+ break;
+ }
+
+ spin_unlock_irqrestore(&pci_config_lock, flags);
+
+ return 0;
+}
+
+static int pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* CONFIG_MULTIQUAD */
+{
+ unsigned long flags;
+
+ if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
+ return -EINVAL;
+
+ spin_lock_irqsave(&pci_config_lock, flags);
+
+ outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
+
+ switch (len) {
+ case 1:
+ outb_quad((u8)value, 0xCFC + (reg & 3), BUS2QUAD(bus));
+ break;
+ case 2:
+ outw_quad((u16)value, 0xCFC + (reg & 2), BUS2QUAD(bus));
+ break;
+ case 4:
+ outl_quad((u32)value, 0xCFC, BUS2QUAD(bus));
+ break;
+ }
+
+ spin_unlock_irqrestore(&pci_config_lock, flags);
+
+ return 0;
+}
+
+static int pci_conf1_read_mq_config_byte(struct pci_dev *dev, int where, u8 *value)
+{
+ int result;
+ u32 data;
+
+ result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn), where, 1, &data);
+
+ *value = (u8)data;
+
+ return result;
+}
+
+static int pci_conf1_read_mq_config_word(struct pci_dev *dev, int where, u16 *value)
+{
+ int result;
+ u32 data;
+
+ result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn), where, 2, &data);
+
+ *value = (u16)data;
+
+ return result;
+}
+
+static int pci_conf1_read_mq_config_dword(struct pci_dev *dev, int where, u32 *value)
+{
+ if (!value)
+ return -EINVAL;
+
+ return pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn), where, 4, value);
+}
+
+static int pci_conf1_write_mq_config_byte(struct pci_dev *dev, int where, u8 value)
+{
+ return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn), where, 1, value);
+}
+
+static int pci_conf1_write_mq_config_word(struct pci_dev *dev, int where, u16 value)
+{
+ return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn), where, 2, value);
+}
+
+static int pci_conf1_write_mq_config_dword(struct pci_dev *dev, int where, u32 value)
+{
+ return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn), where, 4, value);
+}
+
+static struct pci_ops pci_direct_mq_conf1 = {
+ pci_conf1_read_mq_config_byte,
+ pci_conf1_read_mq_config_word,
+ pci_conf1_read_mq_config_dword,
+ pci_conf1_write_mq_config_byte,
+ pci_conf1_write_mq_config_word,
+ pci_conf1_write_mq_config_dword
+};
+
+#endif /* !CONFIG_MULTIQUAD */
#define PCI_CONF1_ADDRESS(bus, dev, fn, reg) \
(0x80000000 | (bus << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
-static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value)
+static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* !CONFIG_MULTIQUAD */
{
unsigned long flags;
- if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+ if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
return -EINVAL;
spin_lock_irqsave(&pci_config_lock, flags);
@@ -73,11 +209,11 @@ static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len,
return 0;
}
-static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value)
+static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* !CONFIG_MULTIQUAD */
{
unsigned long flags;
- if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+ if ((bus > 255 || dev > 31 || fn > 7 || reg > 255))
return -EINVAL;
spin_lock_irqsave(&pci_config_lock, flags);
@@ -108,9 +244,6 @@ static int pci_conf1_read_config_byte(struct pci_dev *dev, int where, u8 *value)
int result;
u32 data;
- if (!value)
- return -EINVAL;
-
result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn), where, 1, &data);
@@ -124,9 +257,6 @@ static int pci_conf1_read_config_word(struct pci_dev *dev, int where, u16 *value
int result;
u32 data;
- if (!value)
- return -EINVAL;
-
result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn), where, 2, &data);
@@ -137,9 +267,6 @@ static int pci_conf1_read_config_word(struct pci_dev *dev, int where, u16 *value
static int pci_conf1_read_config_dword(struct pci_dev *dev, int where, u32 *value)
{
- if (!value)
- return -EINVAL;
-
return pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn), where, 4, value);
}
@@ -182,7 +309,7 @@ static int pci_conf2_read (int seg, int bus, int dev, int fn, int reg, int len,
{
unsigned long flags;
- if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+ if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
return -EINVAL;
if (dev & 0x10)
@@ -216,7 +343,7 @@ static int pci_conf2_write (int seg, int bus, int dev, int fn, int reg, int len,
{
unsigned long flags;
- if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+ if ((bus > 255 || dev > 31 || fn > 7 || reg > 255))
return -EINVAL;
if (dev & 0x10)
@@ -350,8 +477,14 @@ static struct pci_ops * __devinit pci_check_direct(void)
pci_sanity_check(&pci_direct_conf1)) {
outl (tmp, 0xCF8);
__restore_flags(flags);
- printk("PCI: Using configuration type 1\n");
+ printk(KERN_INFO "PCI: Using configuration type 1\n");
request_region(0xCF8, 8, "PCI conf1");
+
+#ifdef CONFIG_MULTIQUAD
+ /* Multi-Quad has an extended PCI Conf1 */
+ if(clustered_apic_mode == CLUSTERED_APIC_NUMAQ)
+ return &pci_direct_mq_conf1;
+#endif
return &pci_direct_conf1;
}
outl (tmp, 0xCF8);
@@ -367,7 +500,7 @@ static struct pci_ops * __devinit pci_check_direct(void)
if (inb (0xCF8) == 0x00 && inb (0xCFA) == 0x00 &&
pci_sanity_check(&pci_direct_conf2)) {
__restore_flags(flags);
- printk("PCI: Using configuration type 2\n");
+ printk(KERN_INFO "PCI: Using configuration type 2\n");
request_region(0xCF8, 4, "PCI conf2");
return &pci_direct_conf2;
}
@@ -475,10 +608,10 @@ static unsigned long bios32_service(unsigned long service)
case 0:
return address + entry;
case 0x80: /* Not present */
- printk("bios32_service(0x%lx): not present\n", service);
+ printk(KERN_WARNING "bios32_service(0x%lx): not present\n", service);
return 0;
default: /* Shouldn't happen */
- printk("bios32_service(0x%lx): returned 0x%x -- BIOS bug!\n",
+ printk(KERN_WARNING "bios32_service(0x%lx): returned 0x%x -- BIOS bug!\n",
service, return_code);
return 0;
}
@@ -528,7 +661,7 @@ static int __devinit check_pcibios(void)
status, signature);
return 0;
}
- printk("PCI: PCI BIOS revision %x.%02x entry at 0x%lx, last bus=%d\n",
+ printk(KERN_INFO "PCI: PCI BIOS revision %x.%02x entry at 0x%lx, last bus=%d\n",
major_ver, minor_ver, pcibios_entry, pcibios_last_bus);
#ifdef CONFIG_PCI_DIRECT
if (!(hw_mech & PCIBIOS_HW_TYPE1))
@@ -569,7 +702,7 @@ static int pci_bios_read (int seg, int bus, int dev, int fn, int reg, int len, u
unsigned long flags;
unsigned long bx = ((bus << 8) | (dev << 3) | fn);
- if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+ if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
return -EINVAL;
spin_lock_irqsave(&pci_config_lock, flags);
@@ -624,7 +757,7 @@ static int pci_bios_write (int seg, int bus, int dev, int fn, int reg, int len,
unsigned long flags;
unsigned long bx = ((bus << 8) | (dev << 3) | fn);
- if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+ if ((bus > 255 || dev > 31 || fn > 7 || reg > 255))
return -EINVAL;
spin_lock_irqsave(&pci_config_lock, flags);
@@ -679,7 +812,7 @@ static int pci_bios_read_config_byte(struct pci_dev *dev, int where, u8 *value)
u32 data;
if (!value)
- return -EINVAL;
+ BUG();
result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn), where, 1, &data);
@@ -695,7 +828,7 @@ static int pci_bios_read_config_word(struct pci_dev *dev, int where, u16 *value)
u32 data;
if (!value)
- return -EINVAL;
+ BUG();
result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn), where, 2, &data);
@@ -708,7 +841,7 @@ static int pci_bios_read_config_word(struct pci_dev *dev, int where, u16 *value)
static int pci_bios_read_config_dword(struct pci_dev *dev, int where, u32 *value)
{
if (!value)
- return -EINVAL;
+ BUG();
return pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
PCI_FUNC(dev->devfn), where, 4, value);
@@ -830,7 +963,7 @@ static void __devinit pcibios_sort(void)
}
}
if (ln == &pci_devices) {
- printk("PCI: BIOS reporting unknown device %02x:%02x\n", bus, devfn);
+ printk(KERN_WARNING "PCI: BIOS reporting unknown device %02x:%02x\n", bus, devfn);
/*
* We must not continue scanning as several buggy BIOSes
* return garbage after the last device. Grr.
@@ -839,7 +972,7 @@ static void __devinit pcibios_sort(void)
}
}
if (!found) {
- printk("PCI: Device %02x:%02x not found by BIOS\n",
+ printk(KERN_WARNING "PCI: Device %02x:%02x not found by BIOS\n",
dev->bus->number, dev->devfn);
list_del(&dev->global_list);
list_add_tail(&dev->global_list, &sorted_devices);
@@ -899,7 +1032,7 @@ struct irq_routing_table * __devinit pcibios_get_irq_routing_table(void)
rt->size = opt.size + sizeof(struct irq_routing_table);
rt->exclusive_irqs = map;
memcpy(rt->slots, (void *) page, opt.size);
- printk("PCI: Using BIOS Interrupt Routing Table\n");
+ printk(KERN_INFO "PCI: Using BIOS Interrupt Routing Table\n");
}
}
free_page(page);
@@ -964,7 +1097,7 @@ static void __devinit pcibios_fixup_ghosts(struct pci_bus *b)
}
if (!seen_host_bridge)
return;
- printk("PCI: Ignoring ghost devices on bus %02x\n", b->number);
+ printk(KERN_WARNING "PCI: Ignoring ghost devices on bus %02x\n", b->number);
ln = &b->devices;
while (ln->next != &b->devices) {
@@ -1002,7 +1135,7 @@ static void __devinit pcibios_fixup_peer_bridges(void)
if (!pci_read_config_word(&dev, PCI_VENDOR_ID, &l) &&
l != 0x0000 && l != 0xffff) {
DBG("Found device at %02x:%02x [%04x]\n", n, dev.devfn, l);
- printk("PCI: Discovered peer bus %02x\n", n);
+ printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
pci_scan_bus(n, pci_root_ops, NULL);
break;
}
@@ -1020,6 +1153,9 @@ static void __devinit pci_fixup_i450nx(struct pci_dev *d)
*/
int pxb, reg;
u8 busno, suba, subb;
+#ifdef CONFIG_MULTIQUAD
+ int quad = BUS2QUAD(d->bus->number);
+#endif
printk("PCI: Searching for i450NX host bridges on %s\n", d->slot_name);
reg = 0xd0;
for(pxb=0; pxb<2; pxb++) {
@@ -1028,9 +1164,9 @@ static void __devinit pci_fixup_i450nx(struct pci_dev *d)
pci_read_config_byte(d, reg++, &subb);
DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb);
if (busno)
- pci_scan_bus(busno, pci_root_ops, NULL); /* Bus A */
+ pci_scan_bus(QUADLOCAL2BUS(quad,busno), pci_root_ops, NULL); /* Bus A */
if (suba < subb)
- pci_scan_bus(suba+1, pci_root_ops, NULL); /* Bus B */
+ pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), pci_root_ops, NULL); /* Bus B */
}
pcibios_last_bus = -1;
}
@@ -1043,7 +1179,7 @@ static void __devinit pci_fixup_i450gx(struct pci_dev *d)
*/
u8 busno;
pci_read_config_byte(d, 0x4a, &busno);
- printk("PCI: i440KX/GX host bridge %s: secondary bus %02x\n", d->slot_name, busno);
+ printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02x\n", d->slot_name, busno);
pci_scan_bus(busno, pci_root_ops, NULL);
pcibios_last_bus = -1;
}
@@ -1056,11 +1192,23 @@ static void __devinit pci_fixup_umc_ide(struct pci_dev *d)
*/
int i;
- printk("PCI: Fixing base address flags for device %s\n", d->slot_name);
+ printk(KERN_WARNING "PCI: Fixing base address flags for device %s\n", d->slot_name);
for(i=0; i<4; i++)
d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO;
}
+static void __devinit pci_fixup_ncr53c810(struct pci_dev *d)
+{
+ /*
+ * NCR 53C810 returns class code 0 (at least on some systems).
+ * Fix class to be PCI_CLASS_STORAGE_SCSI
+ */
+ if (!d->class) {
+ printk("PCI: fixing NCR 53C810 class code for %s\n", d->slot_name);
+ d->class = PCI_CLASS_STORAGE_SCSI << 8;
+ }
+}
+
static void __devinit pci_fixup_ide_bases(struct pci_dev *d)
{
int i;
@@ -1112,25 +1260,74 @@ static void __devinit pci_fixup_piix4_acpi(struct pci_dev *d)
}
/*
- * Nobody seems to know what this does. Damn.
- *
- * But it does seem to fix some unspecified problem
- * with 'movntq' copies on Athlons.
- *
- * VIA 8363 chipset:
- * - bit 7 at offset 0x55: Debug (RW)
+ * Addresses issues with problems in the memory write queue timer in
+ * certain VIA Northbridges. This bugfix is per VIA's specifications,
+ * except for the KL133/KM133: clearing bit 5 on those Northbridges seems
+ * to trigger a bug in its integrated ProSavage video card, which
+ * causes screen corruption. We only clear bits 6 and 7 for that chipset,
+ * until VIA can provide us with definitive information on why screen
+ * corruption occurs, and what exactly those bits do.
+ *
+ * VIA 8363,8622,8361 Northbridges:
+ * - bits 5, 6, 7 at offset 0x55 need to be turned off
+ * VIA 8367 (KT266x) Northbridges:
+ * - bits 5, 6, 7 at offset 0x95 need to be turned off
+ * VIA 8363 rev 0x81/0x84 (KL133/KM133) Northbridges:
+ * - bits 6, 7 at offset 0x55 need to be turned off
*/
-static void __init pci_fixup_via_athlon_bug(struct pci_dev *d)
+
+#define VIA_8363_KL133_REVISION_ID 0x81
+#define VIA_8363_KM133_REVISION_ID 0x84
+
+static void __init pci_fixup_via_northbridge_bug(struct pci_dev *d)
{
u8 v;
- pci_read_config_byte(d, 0x55, &v);
- if (v & 0x80) {
- printk("Trying to stomp on Athlon bug...\n");
- v &= 0x7f; /* clear bit 55.7 */
- pci_write_config_byte(d, 0x55, v);
+ u8 revision;
+ int where = 0x55;
+ int mask = 0x1f; /* clear bits 5, 6, 7 by default */
+
+ pci_read_config_byte(d, PCI_REVISION_ID, &revision);
+
+ if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
+ /* fix pci bus latency issues resulted by NB bios error
+ it appears on bug free^Wreduced kt266x's bios forces
+ NB latency to zero */
+ pci_write_config_byte(d, PCI_LATENCY_TIMER, 0);
+
+ where = 0x95; /* the memory write queue timer register is
+ different for the KT266x's: 0x95 not 0x55 */
+ } else if (d->device == PCI_DEVICE_ID_VIA_8363_0 &&
+ (revision == VIA_8363_KL133_REVISION_ID ||
+ revision == VIA_8363_KM133_REVISION_ID)) {
+ mask = 0x3f; /* clear only bits 6 and 7; clearing bit 5
+ causes screen corruption on the KL133/KM133 */
+ }
+
+ pci_read_config_byte(d, where, &v);
+ if (v & ~mask) {
+ printk("Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02x\n", \
+ d->device, revision, where, v, mask, v & mask);
+ v &= mask;
+ pci_write_config_byte(d, where, v);
}
}
+/*
+ * For some reasons Intel decided that certain parts of their
+ * 815, 845 and some other chipsets must look like PCI-to-PCI bridges
+ * while they are obviously not. The 82801 family (AA, AB, BAM/CAM,
+ * BA/CA/DB and E) PCI bridges are actually HUB-to-PCI ones, according
+ * to Intel terminology. These devices do forward all addresses from
+ * system to PCI bus no matter what are their window settings, so they are
+ * "transparent" (or subtractive decoding) from programmers point of view.
+ */
+static void __init pci_fixup_transparent_bridge(struct pci_dev *dev)
+{
+ if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI &&
+ (dev->device & 0xff00) == 0x2400)
+ dev->transparent = 1;
+}
+
struct pci_fixup pcibios_fixups[] = {
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx },
@@ -1140,7 +1337,12 @@ struct pci_fixup pcibios_fixups[] = {
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, pci_fixup_latency },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5598, pci_fixup_latency },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci_fixup_piix4_acpi },
- { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, pci_fixup_via_athlon_bug },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, pci_fixup_via_northbridge_bug },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8622, pci_fixup_via_northbridge_bug },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, pci_fixup_via_northbridge_bug },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_via_northbridge_bug },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810 },
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge },
{ 0 }
};
@@ -1163,6 +1365,11 @@ void __devinit pcibios_config_init(void)
* both PCI BIOS and direct access, with a preference for direct.
*/
+#ifdef CONFIG_PCI_DIRECT
+ struct pci_ops *tmp = NULL;
+#endif
+
+
#ifdef CONFIG_PCI_BIOS
if ((pci_probe & PCI_PROBE_BIOS)
&& ((pci_root_ops = pci_find_bios()))) {
@@ -1175,7 +1382,8 @@ void __devinit pcibios_config_init(void)
#ifdef CONFIG_PCI_DIRECT
if ((pci_probe & (PCI_PROBE_CONF1 | PCI_PROBE_CONF2))
- && (pci_root_ops = pci_check_direct())) {
+ && (tmp = pci_check_direct())) {
+ pci_root_ops = tmp;
if (pci_root_ops == &pci_direct_conf1) {
pci_config_read = pci_conf1_read;
pci_config_write = pci_conf1_write;
@@ -1192,15 +1400,25 @@ void __devinit pcibios_config_init(void)
void __init pcibios_init(void)
{
+ int quad;
+
if (!pci_root_ops)
pcibios_config_init();
if (!pci_root_ops) {
- printk("PCI: System does not support PCI\n");
+ printk(KERN_WARNING "PCI: System does not support PCI\n");
return;
}
- printk("PCI: Probing PCI hardware\n");
+ printk(KERN_INFO "PCI: Probing PCI hardware\n");
pci_root_bus = pci_scan_bus(0, pci_root_ops, NULL);
+ if (clustered_apic_mode && (numnodes > 1)) {
+ for (quad = 1; quad < numnodes; ++quad) {
+ printk("Scanning PCI bus %d for quad %d\n",
+ QUADLOCAL2BUS(quad,0), quad);
+ pci_scan_bus(QUADLOCAL2BUS(quad,0),
+ pci_root_ops, NULL);
+ }
+ }
pcibios_irq_init();
pcibios_fixup_peer_bridges();
@@ -1265,11 +1483,11 @@ unsigned int pcibios_assign_all_busses(void)
return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
}
-int pcibios_enable_device(struct pci_dev *dev)
+int pcibios_enable_device(struct pci_dev *dev, int mask)
{
int err;
- if ((err = pcibios_enable_resources(dev)) < 0)
+ if ((err = pcibios_enable_resources(dev, mask)) < 0)
return err;
pcibios_enable_irq(dev);
return 0;
diff --git a/xen-2.4.16/common/kernel.c b/xen-2.4.16/common/kernel.c
index 8a8c8ddd51..eaab8e940b 100644
--- a/xen-2.4.16/common/kernel.c
+++ b/xen-2.4.16/common/kernel.c
@@ -506,3 +506,10 @@ long do_console_write(char *str, int count)
return(0);
}
+
+void __out_of_line_bug(int line)
+{
+ printk("kernel BUG in header file at line %d\n", line);
+ BUG();
+ for ( ; ; ) continue;
+}
diff --git a/xen-2.4.16/common/resource.c b/xen-2.4.16/common/resource.c
index 15f29999ff..406fb256a7 100644
--- a/xen-2.4.16/common/resource.c
+++ b/xen-2.4.16/common/resource.c
@@ -154,7 +154,8 @@ static int find_resource(struct resource *root, struct resource *new,
unsigned long size,
unsigned long min, unsigned long max,
unsigned long align,
- void (*alignf)(void *, struct resource *, unsigned long),
+ void (*alignf)(void *, struct resource *,
+ unsigned long, unsigned long),
void *alignf_data)
{
struct resource *this = root->child;
@@ -171,7 +172,7 @@ static int find_resource(struct resource *root, struct resource *new,
new->end = max;
new->start = (new->start + align - 1) & ~(align - 1);
if (alignf)
- alignf(alignf_data, new, size);
+ alignf(alignf_data, new, size, align);
if (new->start < new->end && new->end - new->start + 1 >= size) {
new->end = new->start + size - 1;
return 0;
@@ -191,7 +192,8 @@ int allocate_resource(struct resource *root, struct resource *new,
unsigned long size,
unsigned long min, unsigned long max,
unsigned long align,
- void (*alignf)(void *, struct resource *, unsigned long),
+ void (*alignf)(void *, struct resource *,
+ unsigned long, unsigned long),
void *alignf_data)
{
int err;
@@ -293,6 +295,7 @@ void __release_region(struct resource *parent, unsigned long start, unsigned lon
printk("Trying to free nonexistent resource <%08lx-%08lx>\n", start, end);
}
+
#if 0
/*
* Called from init/main.c to reserve IO ports.
diff --git a/xen-2.4.16/drivers/ide/ide-disk.c.orig b/xen-2.4.16/drivers/ide/ide-disk.c.orig
deleted file mode 100644
index 984e53cd67..0000000000
--- a/xen-2.4.16/drivers/ide/ide-disk.c.orig
+++ /dev/null
@@ -1,1550 +0,0 @@
-/*
- * linux/drivers/ide/ide-disk.c Version 1.10 June 9, 2000
- *
- * Copyright (C) 1994-1998 Linus Torvalds & authors (see below)
- */
-
-/*
- * Mostly written by Mark Lord <mlord@pobox.com>
- * and Gadi Oxman <gadio@netvision.net.il>
- * and Andre Hedrick <andre@linux-ide.org>
- *
- * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c.
- *
- * Version 1.00 move disk only code from ide.c to ide-disk.c
- * support optional byte-swapping of all data
- * Version 1.01 fix previous byte-swapping code
- * Version 1.02 remove ", LBA" from drive identification msgs
- * Version 1.03 fix display of id->buf_size for big-endian
- * Version 1.04 add /proc configurable settings and S.M.A.R.T support
- * Version 1.05 add capacity support for ATA3 >= 8GB
- * Version 1.06 get boot-up messages to show full cyl count
- * Version 1.07 disable door-locking if it fails
- * Version 1.08 fixed CHS/LBA translations for ATA4 > 8GB,
- * process of adding new ATA4 compliance.
- * fixed problems in allowing fdisk to see
- * the entire disk.
- * Version 1.09 added increment of rq->sector in ide_multwrite
- * added UDMA 3/4 reporting
- * Version 1.10 request queue changes, Ultra DMA 100
- * Version 1.11 added 48-bit lba
- * Version 1.12 adding taskfile io access method
- */
-
-#define IDEDISK_VERSION "1.12"
-
-#undef REALLY_SLOW_IO /* most systems can safely undef this */
-
-#include <xeno/config.h>
-#include <xeno/module.h>
-#include <xeno/types.h>
-#include <xeno/lib.h>
-#include <xeno/timer.h>
-#include <xeno/mm.h>
-#include <xeno/interrupt.h>
-#include <xeno/major.h>
-#include <xeno/errno.h>
-#include <xeno/genhd.h>
-#include <xeno/slab.h>
-#include <xeno/delay.h>
-#include <xeno/ide.h>
-
-#include <asm/byteorder.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
-
-#ifdef CONFIG_BLK_DEV_PDC4030
-#define IS_PDC4030_DRIVE (HWIF(drive)->chipset == ide_pdc4030)
-#else
-#define IS_PDC4030_DRIVE (0) /* auto-NULLs out pdc4030 code */
-#endif
-
-#ifdef CONFIG_IDE_TASKFILE_IO
-# undef __TASKFILE__IO /* define __TASKFILE__IO */
-#else /* CONFIG_IDE_TASKFILE_IO */
-# undef __TASKFILE__IO
-#endif /* CONFIG_IDE_TASKFILE_IO */
-
-#ifndef __TASKFILE__IO
-
-static void idedisk_bswap_data (void *buffer, int wcount)
-{
- u16 *p = buffer;
-
- while (wcount--) {
- *p = *p << 8 | *p >> 8; p++;
- *p = *p << 8 | *p >> 8; p++;
- }
-}
-
-static inline void idedisk_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
-{
- ide_input_data(drive, buffer, wcount);
- if (drive->bswap)
- idedisk_bswap_data(buffer, wcount);
-}
-
-static inline void idedisk_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount)
-{
- if (drive->bswap) {
- idedisk_bswap_data(buffer, wcount);
- ide_output_data(drive, buffer, wcount);
- idedisk_bswap_data(buffer, wcount);
- } else
- ide_output_data(drive, buffer, wcount);
-}
-
-#endif /* __TASKFILE__IO */
-
-/*
- * lba_capacity_is_ok() performs a sanity check on the claimed "lba_capacity"
- * value for this drive (from its reported identification information).
- *
- * Returns: 1 if lba_capacity looks sensible
- * 0 otherwise
- *
- * It is called only once for each drive.
- */
-static int lba_capacity_is_ok (struct hd_driveid *id)
-{
- unsigned long lba_sects, chs_sects, head, tail;
-
- if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)) {
- printk("48-bit Drive: %llu \n", id->lba_capacity_2);
- return 1;
- }
-
- /*
- * The ATA spec tells large drives to return
- * C/H/S = 16383/16/63 independent of their size.
- * Some drives can be jumpered to use 15 heads instead of 16.
- * Some drives can be jumpered to use 4092 cyls instead of 16383.
- */
- if ((id->cyls == 16383
- || (id->cyls == 4092 && id->cur_cyls == 16383)) &&
- id->sectors == 63 &&
- (id->heads == 15 || id->heads == 16) &&
- id->lba_capacity >= 16383*63*id->heads)
- return 1;
-
- lba_sects = id->lba_capacity;
- chs_sects = id->cyls * id->heads * id->sectors;
-
- /* perform a rough sanity check on lba_sects: within 10% is OK */
- if ((lba_sects - chs_sects) < chs_sects/10)
- return 1;
-
- /* some drives have the word order reversed */
- head = ((lba_sects >> 16) & 0xffff);
- tail = (lba_sects & 0xffff);
- lba_sects = (head | (tail << 16));
- if ((lba_sects - chs_sects) < chs_sects/10) {
- id->lba_capacity = lba_sects;
- return 1; /* lba_capacity is (now) good */
- }
-
- return 0; /* lba_capacity value may be bad */
-}
-
-#ifndef __TASKFILE__IO
-
-/*
- * read_intr() is the handler for disk read/multread interrupts
- */
-static ide_startstop_t read_intr (ide_drive_t *drive)
-{
- byte stat;
- int i;
- unsigned int msect, nsect;
- struct request *rq;
-
- /* new way for dealing with premature shared PCI interrupts */
- if (!OK_STAT(stat=GET_STAT(),DATA_READY,BAD_R_STAT)) {
- if (stat & (ERR_STAT|DRQ_STAT)) {
- return ide_error(drive, "read_intr", stat);
- }
- /* no data yet, so wait for another interrupt */
- ide_set_handler(drive, &read_intr, WAIT_CMD, NULL);
- return ide_started;
- }
- msect = drive->mult_count;
-
-read_next:
- rq = HWGROUP(drive)->rq;
- if (msect) {
- if ((nsect = rq->current_nr_sectors) > msect)
- nsect = msect;
- msect -= nsect;
- } else
- nsect = 1;
- idedisk_input_data(drive, rq->buffer, nsect * SECTOR_WORDS);
-#ifdef DEBUG
- printk("%s: read: sectors(%ld-%ld), buffer=0x%08lx, remaining=%ld\n",
- drive->name, rq->sector, rq->sector+nsect-1,
- (unsigned long) rq->buffer+(nsect<<9), rq->nr_sectors-nsect);
-#endif
- rq->sector += nsect;
- rq->buffer += nsect<<9;
- rq->errors = 0;
- i = (rq->nr_sectors -= nsect);
- if (((long)(rq->current_nr_sectors -= nsect)) <= 0)
- ide_end_request(1, HWGROUP(drive));
- if (i > 0) {
- if (msect)
- goto read_next;
- ide_set_handler (drive, &read_intr, WAIT_CMD, NULL);
- return ide_started;
- }
- return ide_stopped;
-}
-
-/*
- * write_intr() is the handler for disk write interrupts
- */
-static ide_startstop_t write_intr (ide_drive_t *drive)
-{
- byte stat;
- int i;
- ide_hwgroup_t *hwgroup = HWGROUP(drive);
- struct request *rq = hwgroup->rq;
-
- if (!OK_STAT(stat=GET_STAT(),DRIVE_READY,drive->bad_wstat)) {
- printk("%s: write_intr error1: nr_sectors=%ld, stat=0x%02x\n", drive->name, rq->nr_sectors, stat);
- } else {
-#ifdef DEBUG
- printk("%s: write: sector %ld, buffer=0x%08lx, remaining=%ld\n",
- drive->name, rq->sector, (unsigned long) rq->buffer,
- rq->nr_sectors-1);
-#endif
- if ((rq->nr_sectors == 1) ^ ((stat & DRQ_STAT) != 0)) {
- rq->sector++;
- rq->buffer += 512;
- rq->errors = 0;
- i = --rq->nr_sectors;
- --rq->current_nr_sectors;
- if (((long)rq->current_nr_sectors) <= 0)
- ide_end_request(1, hwgroup);
- if (i > 0) {
- idedisk_output_data (drive, rq->buffer, SECTOR_WORDS);
- ide_set_handler (drive, &write_intr, WAIT_CMD, NULL);
- return ide_started;
- }
- return ide_stopped;
- }
- return ide_stopped; /* the original code did this here (?) */
- }
- return ide_error(drive, "write_intr", stat);
-}
-
-/*
- * ide_multwrite() transfers a block of up to mcount sectors of data
- * to a drive as part of a disk multiple-sector write operation.
- *
- * Returns 0 on success.
- *
- * Note that we may be called from two contexts - the do_rw_disk context
- * and IRQ context. The IRQ can happen any time after we've output the
- * full "mcount" number of sectors, so we must make sure we update the
- * state _before_ we output the final part of the data!
- */
-int ide_multwrite (ide_drive_t *drive, unsigned int mcount)
-{
- ide_hwgroup_t *hwgroup= HWGROUP(drive);
- struct request *rq = &hwgroup->wrq;
-
- do {
- char *buffer;
- int nsect = rq->current_nr_sectors;
-
- if (nsect > mcount)
- nsect = mcount;
- mcount -= nsect;
- buffer = rq->buffer;
-
- rq->sector += nsect;
- rq->buffer += nsect << 9;
- rq->nr_sectors -= nsect;
- rq->current_nr_sectors -= nsect;
-
- /* Do we move to the next bh after this? */
- if (!rq->current_nr_sectors) {
- struct buffer_head *bh = rq->bh->b_reqnext;
-
- /* end early early we ran out of requests */
- if (!bh) {
- mcount = 0;
- } else {
- rq->bh = bh;
- rq->current_nr_sectors = bh->b_size >> 9;
- rq->buffer = bh->b_data;
- }
- }
-
- /*
- * Ok, we're all setup for the interrupt
- * re-entering us on the last transfer.
- */
- idedisk_output_data(drive, buffer, nsect<<7);
- } while (mcount);
-
- return 0;
-}
-
-/*
- * multwrite_intr() is the handler for disk multwrite interrupts
- */
-static ide_startstop_t multwrite_intr (ide_drive_t *drive)
-{
- byte stat;
- int i;
- ide_hwgroup_t *hwgroup = HWGROUP(drive);
- struct request *rq = &hwgroup->wrq;
-
- if (OK_STAT(stat=GET_STAT(),DRIVE_READY,drive->bad_wstat)) {
- if (stat & DRQ_STAT) {
- /*
- * The drive wants data. Remember rq is the copy
- * of the request
- */
- if (rq->nr_sectors) {
- if (ide_multwrite(drive, drive->mult_count))
- return ide_stopped;
- ide_set_handler (drive, &multwrite_intr, WAIT_CMD, NULL);
- return ide_started;
- }
- } else {
- /*
- * If the copy has all the blocks completed then
- * we can end the original request.
- */
- if (!rq->nr_sectors) { /* all done? */
- rq = hwgroup->rq;
- for (i = rq->nr_sectors; i > 0;){
- i -= rq->current_nr_sectors;
- ide_end_request(1, hwgroup);
- }
- return ide_stopped;
- }
- }
- return ide_stopped; /* the original code did this here (?) */
- }
- return ide_error(drive, "multwrite_intr", stat);
-}
-#endif /* __TASKFILE__IO */
-
-#ifdef __TASKFILE__IO
-
-static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block);
-static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block);
-static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block);
-
-/*
- * do_rw_disk() issues READ and WRITE commands to a disk,
- * using LBA if supported, or CHS otherwise, to address sectors.
- * It also takes care of issuing special DRIVE_CMDs.
- */
-static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
-{
- if (rq->cmd == READ)
- goto good_command;
- if (rq->cmd == WRITE)
- goto good_command;
-
- printk(KERN_ERR "%s: bad command: %d\n", drive->name, rq->cmd);
- ide_end_request(0, HWGROUP(drive));
- return ide_stopped;
-
-good_command:
-
-#ifdef CONFIG_BLK_DEV_PDC4030
- if (IS_PDC4030_DRIVE) {
- extern ide_startstop_t promise_rw_disk(ide_drive_t *, struct request *, unsigned long);
- return promise_rw_disk(drive, rq, block);
- }
-#endif /* CONFIG_BLK_DEV_PDC4030 */
-
- if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) /* 48-bit LBA */
- return lba_48_rw_disk(drive, rq, (unsigned long long) block);
- if (drive->select.b.lba) /* 28-bit LBA */
- return lba_28_rw_disk(drive, rq, (unsigned long) block);
-
- /* 28-bit CHS : DIE DIE DIE piece of legacy crap!!! */
- return chs_rw_disk(drive, rq, (unsigned long) block);
-}
-
-static task_ioreg_t get_command (ide_drive_t *drive, int cmd)
-{
- int lba48bit = (drive->id->cfs_enable_2 & 0x0400) ? 1 : 0;
-
-#if 1
- lba48bit = drive->addressing;
-#endif
-
- if ((cmd == READ) && (drive->using_dma))
- return (lba48bit) ? WIN_READDMA_EXT : WIN_READDMA;
- else if ((cmd == READ) && (drive->mult_count))
- return (lba48bit) ? WIN_MULTREAD_EXT : WIN_MULTREAD;
- else if (cmd == READ)
- return (lba48bit) ? WIN_READ_EXT : WIN_READ;
- else if ((cmd == WRITE) && (drive->using_dma))
- return (lba48bit) ? WIN_WRITEDMA_EXT : WIN_WRITEDMA;
- else if ((cmd == WRITE) && (drive->mult_count))
- return (lba48bit) ? WIN_MULTWRITE_EXT : WIN_MULTWRITE;
- else if (cmd == WRITE)
- return (lba48bit) ? WIN_WRITE_EXT : WIN_WRITE;
- else
- return WIN_NOP;
-}
-
-static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- ide_task_t args;
-
- task_ioreg_t command = get_command(drive, rq->cmd);
- unsigned int track = (block / drive->sect);
- unsigned int sect = (block % drive->sect) + 1;
- unsigned int head = (track % drive->head);
- unsigned int cyl = (track / drive->head);
-
- memset(&taskfile, 0, sizeof(task_struct_t));
- memset(&hobfile, 0, sizeof(hob_struct_t));
-
- taskfile.sector_count = (rq->nr_sectors==256)?0x00:rq->nr_sectors;
- taskfile.sector_number = sect;
- taskfile.low_cylinder = cyl;
- taskfile.high_cylinder = (cyl>>8);
- taskfile.device_head = head;
- taskfile.device_head |= drive->select.all;
- taskfile.command = command;
-
-#ifdef DEBUG
- printk("%s: %sing: ", drive->name, (rq->cmd==READ) ? "read" : "writ");
- if (lba) printk("LBAsect=%lld, ", block);
- else printk("CHS=%d/%d/%d, ", cyl, head, sect);
- printk("sectors=%ld, ", rq->nr_sectors);
- printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);
-#endif
-
- memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
- memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
- args.command_type = ide_cmd_type_parser(&args);
- args.prehandler = ide_pre_handler_parser(&taskfile, &hobfile);
- args.handler = ide_handler_parser(&taskfile, &hobfile);
- args.posthandler = NULL;
- args.rq = (struct request *) rq;
- args.block = block;
- rq->special = NULL;
- rq->special = (ide_task_t *)&args;
-
- return do_rw_taskfile(drive, &args);
-}
-
-static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- ide_task_t args;
-
- task_ioreg_t command = get_command(drive, rq->cmd);
-
- memset(&taskfile, 0, sizeof(task_struct_t));
- memset(&hobfile, 0, sizeof(hob_struct_t));
-
- taskfile.sector_count = (rq->nr_sectors==256)?0x00:rq->nr_sectors;
- taskfile.sector_number = block;
- taskfile.low_cylinder = (block>>=8);
- taskfile.high_cylinder = (block>>=8);
- taskfile.device_head = ((block>>8)&0x0f);
- taskfile.device_head |= drive->select.all;
- taskfile.command = command;
-
-
-#ifdef DEBUG
- printk("%s: %sing: ", drive->name, (rq->cmd==READ) ? "read" : "writ");
- if (lba) printk("LBAsect=%lld, ", block);
- else printk("CHS=%d/%d/%d, ", cyl, head, sect);
- printk("sectors=%ld, ", rq->nr_sectors);
- printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);
-#endif
-
- memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
- memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
- args.command_type = ide_cmd_type_parser(&args);
- args.prehandler = ide_pre_handler_parser(&taskfile, &hobfile);
- args.handler = ide_handler_parser(&taskfile, &hobfile);
- args.posthandler = NULL;
- args.rq = (struct request *) rq;
- args.block = block;
- rq->special = NULL;
- rq->special = (ide_task_t *)&args;
-
- return do_rw_taskfile(drive, &args);
-}
-
-/*
- * 268435455 == 137439 MB or 28bit limit
- * 320173056 == 163929 MB or 48bit addressing
- * 1073741822 == 549756 MB or 48bit addressing fake drive
- */
-
-static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- ide_task_t args;
-
- task_ioreg_t command = get_command(drive, rq->cmd);
-
- memset(&taskfile, 0, sizeof(task_struct_t));
- memset(&hobfile, 0, sizeof(hob_struct_t));
-
- taskfile.sector_count = rq->nr_sectors;
- hobfile.sector_count = (rq->nr_sectors>>8);
-
- if (rq->nr_sectors == 65536) {
- taskfile.sector_count = 0x00;
- hobfile.sector_count = 0x00;
- }
-
- taskfile.sector_number = block; /* low lba */
- taskfile.low_cylinder = (block>>=8); /* mid lba */
- taskfile.high_cylinder = (block>>=8); /* hi lba */
- hobfile.sector_number = (block>>=8); /* low lba */
- hobfile.low_cylinder = (block>>=8); /* mid lba */
- hobfile.high_cylinder = (block>>=8); /* hi lba */
- taskfile.device_head = drive->select.all;
- hobfile.device_head = taskfile.device_head;
- hobfile.control = (drive->ctl|0x80);
- taskfile.command = command;
-
-#ifdef DEBUG
- printk("%s: %sing: ", drive->name, (rq->cmd==READ) ? "read" : "writ");
- if (lba) printk("LBAsect=%lld, ", block);
- else printk("CHS=%d/%d/%d, ", cyl, head, sect);
- printk("sectors=%ld, ", rq->nr_sectors);
- printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);
-#endif
-
- memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
- memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
- args.command_type = ide_cmd_type_parser(&args);
- args.prehandler = ide_pre_handler_parser(&taskfile, &hobfile);
- args.handler = ide_handler_parser(&taskfile, &hobfile);
- args.posthandler = NULL;
- args.rq = (struct request *) rq;
- args.block = block;
- rq->special = NULL;
- rq->special = (ide_task_t *)&args;
-
- return do_rw_taskfile(drive, &args);
-}
-
-#else /* !__TASKFILE__IO */
-/*
- * do_rw_disk() issues READ and WRITE commands to a disk,
- * using LBA if supported, or CHS otherwise, to address sectors.
- * It also takes care of issuing special DRIVE_CMDs.
- */
-static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
-{
- if (IDE_CONTROL_REG)
- OUT_BYTE(drive->ctl,IDE_CONTROL_REG);
-
-#ifdef CONFIG_BLK_DEV_PDC4030
- if (drive->select.b.lba || IS_PDC4030_DRIVE) {
-#else /* !CONFIG_BLK_DEV_PDC4030 */
- if (drive->select.b.lba) {
-#endif /* CONFIG_BLK_DEV_PDC4030 */
-
- if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) {
- task_ioreg_t tasklets[10];
-
- tasklets[0] = 0;
- tasklets[1] = 0;
- tasklets[2] = rq->nr_sectors;
- tasklets[3] = (rq->nr_sectors>>8);
- if (rq->nr_sectors == 65536) {
- tasklets[2] = 0x00;
- tasklets[3] = 0x00;
- }
- tasklets[4] = (task_ioreg_t) block;
- tasklets[5] = (task_ioreg_t) (block>>8);
- tasklets[6] = (task_ioreg_t) (block>>16);
- tasklets[7] = (task_ioreg_t) (block>>24);
- tasklets[8] = (task_ioreg_t) 0;
- tasklets[9] = (task_ioreg_t) 0;
-// tasklets[8] = (task_ioreg_t) (block>>32);
-// tasklets[9] = (task_ioreg_t) (block>>40);
-#ifdef DEBUG
- printk("%s: %sing: LBAsect=%lu, sectors=%ld, buffer=0x%08lx, LBAsect=0x%012lx\n",
- drive->name,
- (rq->cmd==READ)?"read":"writ",
- block,
- rq->nr_sectors,
- (unsigned long) rq->buffer,
- block);
- printk("%s: 0x%02x%02x 0x%02x%02x%02x%02x%02x%02x\n",
- drive->name, tasklets[3], tasklets[2],
- tasklets[9], tasklets[8], tasklets[7],
- tasklets[6], tasklets[5], tasklets[4]);
-#endif
- OUT_BYTE(tasklets[1], IDE_FEATURE_REG);
- OUT_BYTE(tasklets[3], IDE_NSECTOR_REG);
- OUT_BYTE(tasklets[7], IDE_SECTOR_REG);
- OUT_BYTE(tasklets[8], IDE_LCYL_REG);
- OUT_BYTE(tasklets[9], IDE_HCYL_REG);
-
- OUT_BYTE(tasklets[0], IDE_FEATURE_REG);
- OUT_BYTE(tasklets[2], IDE_NSECTOR_REG);
- OUT_BYTE(tasklets[4], IDE_SECTOR_REG);
- OUT_BYTE(tasklets[5], IDE_LCYL_REG);
- OUT_BYTE(tasklets[6], IDE_HCYL_REG);
- OUT_BYTE(0x00|drive->select.all,IDE_SELECT_REG);
- } else {
-#ifdef DEBUG
- printk("%s: %sing: LBAsect=%ld, sectors=%ld, buffer=0x%08lx\n",
- drive->name, (rq->cmd==READ)?"read":"writ",
- block, rq->nr_sectors, (unsigned long) rq->buffer);
-#endif
- OUT_BYTE(0x00, IDE_FEATURE_REG);
- OUT_BYTE((rq->nr_sectors==256)?0x00:rq->nr_sectors,IDE_NSECTOR_REG);
- OUT_BYTE(block,IDE_SECTOR_REG);
- OUT_BYTE(block>>=8,IDE_LCYL_REG);
- OUT_BYTE(block>>=8,IDE_HCYL_REG);
- OUT_BYTE(((block>>8)&0x0f)|drive->select.all,IDE_SELECT_REG);
- }
- } else {
- unsigned int sect,head,cyl,track;
- track = block / drive->sect;
- sect = block % drive->sect + 1;
- OUT_BYTE(sect,IDE_SECTOR_REG);
- head = track % drive->head;
- cyl = track / drive->head;
-
- OUT_BYTE(0x00, IDE_FEATURE_REG);
- OUT_BYTE((rq->nr_sectors==256)?0x00:rq->nr_sectors,IDE_NSECTOR_REG);
- OUT_BYTE(cyl,IDE_LCYL_REG);
- OUT_BYTE(cyl>>8,IDE_HCYL_REG);
- OUT_BYTE(head|drive->select.all,IDE_SELECT_REG);
-#ifdef DEBUG
- printk("%s: %sing: CHS=%d/%d/%d, sectors=%ld, buffer=0x%08lx\n",
- drive->name, (rq->cmd==READ)?"read":"writ", cyl,
- head, sect, rq->nr_sectors, (unsigned long) rq->buffer);
-#endif
- }
-#ifdef CONFIG_BLK_DEV_PDC4030
- if (IS_PDC4030_DRIVE) {
- extern ide_startstop_t do_pdc4030_io(ide_drive_t *, struct request *);
- return do_pdc4030_io (drive, rq);
- }
-#endif /* CONFIG_BLK_DEV_PDC4030 */
- if (rq->cmd == READ) {
-#ifdef CONFIG_BLK_DEV_IDEDMA
- if (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_read, drive)))
- return ide_started;
-#endif /* CONFIG_BLK_DEV_IDEDMA */
- ide_set_handler(drive, &read_intr, WAIT_CMD, NULL);
- if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) {
- OUT_BYTE(drive->mult_count ? WIN_MULTREAD_EXT : WIN_READ_EXT, IDE_COMMAND_REG);
- } else {
- OUT_BYTE(drive->mult_count ? WIN_MULTREAD : WIN_READ, IDE_COMMAND_REG);
- }
- return ide_started;
- }
- if (rq->cmd == WRITE) {
- ide_startstop_t startstop;
-#ifdef CONFIG_BLK_DEV_IDEDMA
- if (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_write, drive)))
- return ide_started;
-#endif /* CONFIG_BLK_DEV_IDEDMA */
- if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) {
- OUT_BYTE(drive->mult_count ? WIN_MULTWRITE_EXT : WIN_WRITE_EXT, IDE_COMMAND_REG);
- } else {
- OUT_BYTE(drive->mult_count ? WIN_MULTWRITE : WIN_WRITE, IDE_COMMAND_REG);
- }
- if (ide_wait_stat(&startstop, drive, DATA_READY, drive->bad_wstat, WAIT_DRQ)) {
- printk(KERN_ERR "%s: no DRQ after issuing %s\n", drive->name,
- drive->mult_count ? "MULTWRITE" : "WRITE");
- return startstop;
- }
- if (!drive->unmask)
- __cli(); /* local CPU only */
- if (drive->mult_count) {
- ide_hwgroup_t *hwgroup = HWGROUP(drive);
- /*
- * Ugh.. this part looks ugly because we MUST set up
- * the interrupt handler before outputting the first block
- * of data to be written. If we hit an error (corrupted buffer list)
- * in ide_multwrite(), then we need to remove the handler/timer
- * before returning. Fortunately, this NEVER happens (right?).
- *
- * Except when you get an error it seems...
- */
- hwgroup->wrq = *rq; /* scratchpad */
- ide_set_handler(drive, &multwrite_intr, WAIT_CMD, NULL);
- if (ide_multwrite(drive, drive->mult_count)) {
- unsigned long flags;
- spin_lock_irqsave(&io_request_lock, flags);
- hwgroup->handler = NULL;
- del_timer(&hwgroup->timer);
- spin_unlock_irqrestore(&io_request_lock, flags);
- return ide_stopped;
- }
- } else {
- ide_set_handler (drive, &write_intr, WAIT_CMD, NULL);
- idedisk_output_data(drive, rq->buffer, SECTOR_WORDS);
- }
- return ide_started;
- }
- printk(KERN_ERR "%s: bad command: %d\n", drive->name, rq->cmd);
- ide_end_request(0, HWGROUP(drive));
- return ide_stopped;
-}
-
-#endif /* __TASKFILE__IO */
-
-static int idedisk_open (struct inode *inode, struct file *filp, ide_drive_t *drive)
-{
- MOD_INC_USE_COUNT;
- if (drive->removable && drive->usage == 1) {
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.command = WIN_DOORLOCK;
- check_disk_change(inode->i_rdev);
- /*
- * Ignore the return code from door_lock,
- * since the open() has already succeeded,
- * and the door_lock is irrelevant at this point.
- */
- if (drive->doorlocking && ide_wait_taskfile(drive, &taskfile, &hobfile, NULL))
- drive->doorlocking = 0;
- }
- return 0;
-}
-
-static int do_idedisk_flushcache(ide_drive_t *drive);
-
-static void idedisk_release (struct inode *inode, struct file *filp, ide_drive_t *drive)
-{
- if (drive->removable && !drive->usage) {
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.command = WIN_DOORUNLOCK;
- invalidate_bdev(inode->i_bdev, 0);
- if (drive->doorlocking && ide_wait_taskfile(drive, &taskfile, &hobfile, NULL))
- drive->doorlocking = 0;
- }
- if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
- if (do_idedisk_flushcache(drive))
- printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
- drive->name);
- MOD_DEC_USE_COUNT;
-}
-
-static int idedisk_media_change (ide_drive_t *drive)
-{
- return drive->removable; /* if removable, always assume it was changed */
-}
-
-static void idedisk_revalidate (ide_drive_t *drive)
-{
- grok_partitions(HWIF(drive)->gd, drive->select.b.unit,
- 1<<PARTN_BITS,
- current_capacity(drive));
-}
-
-/*
- * Queries for true maximum capacity of the drive.
- * Returns maximum LBA address (> 0) of the drive, 0 if failed.
- */
-static unsigned long idedisk_read_native_max_address(ide_drive_t *drive)
-{
- ide_task_t args;
- unsigned long addr = 0;
-
- if (!(drive->id->command_set_1 & 0x0400) &&
- !(drive->id->cfs_enable_2 & 0x0100))
- return addr;
-
- /* Create IDE/ATA command request structure */
- memset(&args, 0, sizeof(ide_task_t));
- args.tfRegister[IDE_SELECT_OFFSET] = 0x40;
- args.tfRegister[IDE_COMMAND_OFFSET] = WIN_READ_NATIVE_MAX;
- args.handler = task_no_data_intr;
-
- /* submit command request */
- ide_raw_taskfile(drive, &args, NULL);
-
- /* if OK, compute maximum address value */
- if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
- addr = ((args.tfRegister[IDE_SELECT_OFFSET] & 0x0f) << 24)
- | ((args.tfRegister[ IDE_HCYL_OFFSET] ) << 16)
- | ((args.tfRegister[ IDE_LCYL_OFFSET] ) << 8)
- | ((args.tfRegister[IDE_SECTOR_OFFSET] ));
- }
- addr++; /* since the return value is (maxlba - 1), we add 1 */
- return addr;
-}
-
-static unsigned long long idedisk_read_native_max_address_ext(ide_drive_t *drive)
-{
- ide_task_t args;
- unsigned long long addr = 0;
-
- /* Create IDE/ATA command request structure */
- memset(&args, 0, sizeof(ide_task_t));
-
- args.tfRegister[IDE_SELECT_OFFSET] = 0x40;
- args.tfRegister[IDE_COMMAND_OFFSET] = WIN_READ_NATIVE_MAX_EXT;
- args.handler = task_no_data_intr;
-
- /* submit command request */
- ide_raw_taskfile(drive, &args, NULL);
-
- /* if OK, compute maximum address value */
- if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
- u32 high = ((args.hobRegister[IDE_HCYL_OFFSET_HOB])<<16) |
- ((args.hobRegister[IDE_LCYL_OFFSET_HOB])<<8) |
- (args.hobRegister[IDE_SECTOR_OFFSET_HOB]);
- u32 low = ((args.tfRegister[IDE_HCYL_OFFSET])<<16) |
- ((args.tfRegister[IDE_LCYL_OFFSET])<<8) |
- (args.tfRegister[IDE_SECTOR_OFFSET]);
- addr = ((__u64)high << 24) | low;
- }
- addr++; /* since the return value is (maxlba - 1), we add 1 */
- return addr;
-}
-
-#ifdef CONFIG_IDEDISK_STROKE
-/*
- * Sets maximum virtual LBA address of the drive.
- * Returns new maximum virtual LBA address (> 0) or 0 on failure.
- */
-static unsigned long idedisk_set_max_address(ide_drive_t *drive, unsigned long addr_req)
-{
- ide_task_t args;
- unsigned long addr_set = 0;
-
- addr_req--;
- /* Create IDE/ATA command request structure */
- memset(&args, 0, sizeof(ide_task_t));
- args.tfRegister[IDE_SECTOR_OFFSET] = ((addr_req >> 0) & 0xff);
- args.tfRegister[IDE_LCYL_OFFSET] = ((addr_req >> 8) & 0xff);
- args.tfRegister[IDE_HCYL_OFFSET] = ((addr_req >> 16) & 0xff);
- args.tfRegister[IDE_SELECT_OFFSET] = ((addr_req >> 24) & 0x0f) | 0x40;
- args.tfRegister[IDE_COMMAND_OFFSET] = WIN_SET_MAX;
- args.handler = task_no_data_intr;
- /* submit command request */
- ide_raw_taskfile(drive, &args, NULL);
- /* if OK, read new maximum address value */
- if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
- addr_set = ((args.tfRegister[IDE_SELECT_OFFSET] & 0x0f) << 24)
- | ((args.tfRegister[ IDE_HCYL_OFFSET] ) << 16)
- | ((args.tfRegister[ IDE_LCYL_OFFSET] ) << 8)
- | ((args.tfRegister[IDE_SECTOR_OFFSET] ));
- }
- addr_set++;
- return addr_set;
-}
-
-static unsigned long long idedisk_set_max_address_ext(ide_drive_t *drive, unsigned long long addr_req)
-{
- ide_task_t args;
- unsigned long long addr_set = 0;
-
- addr_req--;
- /* Create IDE/ATA command request structure */
- memset(&args, 0, sizeof(ide_task_t));
- args.tfRegister[IDE_SECTOR_OFFSET] = ((addr_req >> 0) & 0xff);
- args.tfRegister[IDE_LCYL_OFFSET] = ((addr_req >>= 8) & 0xff);
- args.tfRegister[IDE_HCYL_OFFSET] = ((addr_req >>= 8) & 0xff);
- args.tfRegister[IDE_SELECT_OFFSET] = 0x40;
- args.tfRegister[IDE_COMMAND_OFFSET] = WIN_SET_MAX_EXT;
- args.hobRegister[IDE_SECTOR_OFFSET_HOB] = ((addr_req >>= 8) & 0xff);
- args.hobRegister[IDE_LCYL_OFFSET_HOB] = ((addr_req >>= 8) & 0xff);
- args.hobRegister[IDE_HCYL_OFFSET_HOB] = ((addr_req >>= 8) & 0xff);
- args.hobRegister[IDE_SELECT_OFFSET_HOB] = 0x40;
- args.hobRegister[IDE_CONTROL_OFFSET_HOB]= (drive->ctl|0x80);
- args.handler = task_no_data_intr;
- /* submit command request */
- ide_raw_taskfile(drive, &args, NULL);
- /* if OK, compute maximum address value */
- if ((args.tfRegister[IDE_STATUS_OFFSET] & 0x01) == 0) {
- u32 high = ((args.hobRegister[IDE_HCYL_OFFSET_HOB])<<16) |
- ((args.hobRegister[IDE_LCYL_OFFSET_HOB])<<8) |
- (args.hobRegister[IDE_SECTOR_OFFSET_HOB]);
- u32 low = ((args.tfRegister[IDE_HCYL_OFFSET])<<16) |
- ((args.tfRegister[IDE_LCYL_OFFSET])<<8) |
- (args.tfRegister[IDE_SECTOR_OFFSET]);
- addr_set = ((__u64)high << 24) | low;
- }
- return addr_set;
-}
-
-/*
- * Tests if the drive supports Host Protected Area feature.
- * Returns true if supported, false otherwise.
- */
-static inline int idedisk_supports_host_protected_area(ide_drive_t *drive)
-{
- int flag = (drive->id->cfs_enable_1 & 0x0400) ? 1 : 0;
- printk("%s: host protected area => %d\n", drive->name, flag);
- return flag;
-}
-
-#endif /* CONFIG_IDEDISK_STROKE */
-
-/*
- * Compute drive->capacity, the full capacity of the drive
- * Called with drive->id != NULL.
- *
- * To compute capacity, this uses either of
- *
- * 1. CHS value set by user (whatever user sets will be trusted)
- * 2. LBA value from target drive (require new ATA feature)
- * 3. LBA value from system BIOS (new one is OK, old one may break)
- * 4. CHS value from system BIOS (traditional style)
- *
- * in above order (i.e., if value of higher priority is available,
- * reset will be ignored).
- */
-static void init_idedisk_capacity (ide_drive_t *drive)
-{
- struct hd_driveid *id = drive->id;
- unsigned long capacity = drive->cyl * drive->head * drive->sect;
- unsigned long set_max = idedisk_read_native_max_address(drive);
- unsigned long long capacity_2 = capacity;
- unsigned long long set_max_ext;
-
- drive->capacity48 = 0;
- drive->select.b.lba = 0;
-
- if (id->cfs_enable_2 & 0x0400) {
- capacity_2 = id->lba_capacity_2;
- drive->head = drive->bios_head = 255;
- drive->sect = drive->bios_sect = 63;
- drive->cyl = (unsigned int) capacity_2 / (drive->head * drive->sect);
- drive->select.b.lba = 1;
- set_max_ext = idedisk_read_native_max_address_ext(drive);
- if (set_max_ext > capacity_2) {
-#ifdef CONFIG_IDEDISK_STROKE
- set_max_ext = idedisk_read_native_max_address_ext(drive);
- set_max_ext = idedisk_set_max_address_ext(drive, set_max_ext);
- if (set_max_ext) {
- drive->capacity48 = capacity_2 = set_max_ext;
- drive->cyl = (unsigned int) set_max_ext / (drive->head * drive->sect);
- drive->select.b.lba = 1;
- drive->id->lba_capacity_2 = capacity_2;
- }
-#else /* !CONFIG_IDEDISK_STROKE */
- printk("%s: setmax_ext LBA %llu, native %llu\n",
- drive->name, set_max_ext, capacity_2);
-#endif /* CONFIG_IDEDISK_STROKE */
- }
- drive->bios_cyl = drive->cyl;
- drive->capacity48 = capacity_2;
- drive->capacity = (unsigned long) capacity_2;
- return;
- /* Determine capacity, and use LBA if the drive properly supports it */
- } else if ((id->capability & 2) && lba_capacity_is_ok(id)) {
- capacity = id->lba_capacity;
- drive->cyl = capacity / (drive->head * drive->sect);
- drive->select.b.lba = 1;
- }
-
- if (set_max > capacity) {
-#ifdef CONFIG_IDEDISK_STROKE
- set_max = idedisk_read_native_max_address(drive);
- set_max = idedisk_set_max_address(drive, set_max);
- if (set_max) {
- drive->capacity = capacity = set_max;
- drive->cyl = set_max / (drive->head * drive->sect);
- drive->select.b.lba = 1;
- drive->id->lba_capacity = capacity;
- }
-#else /* !CONFIG_IDEDISK_STROKE */
- printk("%s: setmax LBA %lu, native %lu\n",
- drive->name, set_max, capacity);
-#endif /* CONFIG_IDEDISK_STROKE */
- }
-
- drive->capacity = capacity;
-
- if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)) {
- drive->capacity48 = id->lba_capacity_2;
- drive->head = 255;
- drive->sect = 63;
- drive->cyl = (unsigned long)(drive->capacity48) / (drive->head * drive->sect);
- }
-}
-
-static unsigned long idedisk_capacity (ide_drive_t *drive)
-{
- if (drive->id->cfs_enable_2 & 0x0400)
- return (drive->capacity48 - drive->sect0);
- return (drive->capacity - drive->sect0);
-}
-
-static ide_startstop_t idedisk_special (ide_drive_t *drive)
-{
- special_t *s = &drive->special;
-
- if (s->b.set_geometry) {
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- ide_handler_t *handler = NULL;
-
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
-
- s->b.set_geometry = 0;
- taskfile.sector_number = drive->sect;
- taskfile.low_cylinder = drive->cyl;
- taskfile.high_cylinder = drive->cyl>>8;
- taskfile.device_head = ((drive->head-1)|drive->select.all)&0xBF;
- if (!IS_PDC4030_DRIVE) {
- taskfile.sector_count = drive->sect;
- taskfile.command = WIN_SPECIFY;
- handler = ide_handler_parser(&taskfile, &hobfile);
- }
- do_taskfile(drive, &taskfile, &hobfile, handler);
- } else if (s->b.recalibrate) {
- s->b.recalibrate = 0;
- if (!IS_PDC4030_DRIVE) {
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.sector_count = drive->sect;
- taskfile.command = WIN_RESTORE;
- do_taskfile(drive, &taskfile, &hobfile, ide_handler_parser(&taskfile, &hobfile));
- }
- } else if (s->b.set_multmode) {
- s->b.set_multmode = 0;
- if (drive->id && drive->mult_req > drive->id->max_multsect)
- drive->mult_req = drive->id->max_multsect;
- if (!IS_PDC4030_DRIVE) {
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.sector_count = drive->mult_req;
- taskfile.command = WIN_SETMULT;
- do_taskfile(drive, &taskfile, &hobfile, ide_handler_parser(&taskfile, &hobfile));
- }
- } else if (s->all) {
- int special = s->all;
- s->all = 0;
- printk(KERN_ERR "%s: bad special flag: 0x%02x\n", drive->name, special);
- return ide_stopped;
- }
- return IS_PDC4030_DRIVE ? ide_stopped : ide_started;
-}
-
-static void idedisk_pre_reset (ide_drive_t *drive)
-{
- int legacy = (drive->id->cfs_enable_2 & 0x0400) ? 0 : 1;
-
- drive->special.all = 0;
- drive->special.b.set_geometry = legacy;
- drive->special.b.recalibrate = legacy;
- if (OK_TO_RESET_CONTROLLER)
- drive->mult_count = 0;
- if (!drive->keep_settings && !drive->using_dma)
- drive->mult_req = 0;
- if (drive->mult_req != drive->mult_count)
- drive->special.b.set_multmode = 1;
-}
-
-#ifdef CONFIG_PROC_FS
-
-static int smart_enable(ide_drive_t *drive)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.feature = SMART_ENABLE;
- taskfile.low_cylinder = SMART_LCYL_PASS;
- taskfile.high_cylinder = SMART_HCYL_PASS;
- taskfile.command = WIN_SMART;
- return ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
-}
-
-static int get_smart_values(ide_drive_t *drive, byte *buf)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.feature = SMART_READ_VALUES;
- taskfile.sector_count = 0x01;
- taskfile.low_cylinder = SMART_LCYL_PASS;
- taskfile.high_cylinder = SMART_HCYL_PASS;
- taskfile.command = WIN_SMART;
- (void) smart_enable(drive);
- return ide_wait_taskfile(drive, &taskfile, &hobfile, buf);
-}
-
-static int get_smart_thresholds(ide_drive_t *drive, byte *buf)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.feature = SMART_READ_THRESHOLDS;
- taskfile.sector_count = 0x01;
- taskfile.low_cylinder = SMART_LCYL_PASS;
- taskfile.high_cylinder = SMART_HCYL_PASS;
- taskfile.command = WIN_SMART;
- (void) smart_enable(drive);
- return ide_wait_taskfile(drive, &taskfile, &hobfile, buf);
-}
-
-static int proc_idedisk_read_cache
- (char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- ide_drive_t *drive = (ide_drive_t *) data;
- char *out = page;
- int len;
-
- if (drive->id)
- len = sprintf(out,"%i\n", drive->id->buf_size / 2);
- else
- len = sprintf(out,"(none)\n");
- PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
-}
-
-static int proc_idedisk_read_smart_thresholds
- (char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- ide_drive_t *drive = (ide_drive_t *)data;
- int len = 0, i = 0;
-
- if (!get_smart_thresholds(drive, page)) {
- unsigned short *val = (unsigned short *) page;
- char *out = ((char *)val) + (SECTOR_WORDS * 4);
- page = out;
- do {
- out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
- val += 1;
- } while (i < (SECTOR_WORDS * 2));
- len = out - page;
- }
- PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
-}
-
-static int proc_idedisk_read_smart_values
- (char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- ide_drive_t *drive = (ide_drive_t *)data;
- int len = 0, i = 0;
-
- if (!get_smart_values(drive, page)) {
- unsigned short *val = (unsigned short *) page;
- char *out = ((char *)val) + (SECTOR_WORDS * 4);
- page = out;
- do {
- out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
- val += 1;
- } while (i < (SECTOR_WORDS * 2));
- len = out - page;
- }
- PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
-}
-
-static ide_proc_entry_t idedisk_proc[] = {
- { "cache", S_IFREG|S_IRUGO, proc_idedisk_read_cache, NULL },
- { "geometry", S_IFREG|S_IRUGO, proc_ide_read_geometry, NULL },
- { "smart_values", S_IFREG|S_IRUSR, proc_idedisk_read_smart_values, NULL },
- { "smart_thresholds", S_IFREG|S_IRUSR, proc_idedisk_read_smart_thresholds, NULL },
- { NULL, 0, NULL, NULL }
-};
-
-#else
-
-#define idedisk_proc NULL
-
-#endif /* CONFIG_PROC_FS */
-
-static int set_multcount(ide_drive_t *drive, int arg)
-{
-#ifdef __TASKFILE__IO
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
-
- if (drive->special.b.set_multmode)
- return -EBUSY;
-
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.sector_count = drive->mult_req;
- taskfile.command = WIN_SETMULT;
- drive->mult_req = arg;
- drive->special.b.set_multmode = 1;
- ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
-#else /* !__TASKFILE__IO */
- struct request rq;
-
- if (drive->special.b.set_multmode)
- return -EBUSY;
- ide_init_drive_cmd (&rq);
- rq.cmd = IDE_DRIVE_CMD;
- drive->mult_req = arg;
- drive->special.b.set_multmode = 1;
- (void) ide_do_drive_cmd (drive, &rq, ide_wait);
-#endif /* __TASKFILE__IO */
- return (drive->mult_count == arg) ? 0 : -EIO;
-}
-
-static int set_nowerr(ide_drive_t *drive, int arg)
-{
- if (ide_spin_wait_hwgroup(drive))
- return -EBUSY;
- drive->nowerr = arg;
- drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
- spin_unlock_irq(&io_request_lock);
- return 0;
-}
-
-static int write_cache (ide_drive_t *drive, int arg)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.feature = (arg) ? SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE;
- taskfile.command = WIN_SETFEATURES;
-
- if (!(drive->id->cfs_enable_2 & 0x3000))
- return 1;
-
- (void) ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
- drive->wcache = arg;
- return 0;
-}
-
-static int do_idedisk_standby (ide_drive_t *drive)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- taskfile.command = WIN_STANDBYNOW1;
- return ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
-}
-
-static int do_idedisk_flushcache (ide_drive_t *drive)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
- if (drive->id->cfs_enable_2 & 0x2400) {
- taskfile.command = WIN_FLUSH_CACHE_EXT;
- } else {
- taskfile.command = WIN_FLUSH_CACHE;
- }
- return ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
-}
-
-static int set_acoustic (ide_drive_t *drive, int arg)
-{
- struct hd_drive_task_hdr taskfile;
- struct hd_drive_hob_hdr hobfile;
- memset(&taskfile, 0, sizeof(struct hd_drive_task_hdr));
- memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
-
- taskfile.feature = (arg)?SETFEATURES_EN_AAM:SETFEATURES_DIS_AAM;
- taskfile.sector_count = arg;
-
- taskfile.command = WIN_SETFEATURES;
- (void) ide_wait_taskfile(drive, &taskfile, &hobfile, NULL);
- drive->acoustic = arg;
- return 0;
-}
-
-static int probe_lba_addressing (ide_drive_t *drive, int arg)
-{
- drive->addressing = 0;
-
- if (!(drive->id->cfs_enable_2 & 0x0400))
- return -EIO;
-
- drive->addressing = arg;
- return 0;
-}
-
-static int set_lba_addressing (ide_drive_t *drive, int arg)
-{
- return (probe_lba_addressing(drive, arg));
-}
-
-static void idedisk_add_settings(ide_drive_t *drive)
-{
- struct hd_driveid *id = drive->id;
-#if 0
- int major = HWIF(drive)->major;
- int minor = drive->select.b.unit << PARTN_BITS;
-#endif
-
- ide_add_setting(drive, "bios_cyl", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->bios_cyl, NULL);
- ide_add_setting(drive, "bios_head", SETTING_RW, -1, -1, TYPE_BYTE, 0, 255, 1, 1, &drive->bios_head, NULL);
- ide_add_setting(drive, "bios_sect", SETTING_RW, -1, -1, TYPE_BYTE, 0, 63, 1, 1, &drive->bios_sect, NULL);
- ide_add_setting(drive, "address", SETTING_RW, HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, TYPE_INTA, 0, 2, 1, 1, &drive->addressing, set_lba_addressing);
- ide_add_setting(drive, "bswap", SETTING_READ, -1, -1, TYPE_BYTE, 0, 1, 1, 1, &drive->bswap, NULL);
- 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);
- ide_add_setting(drive, "nowerr", SETTING_RW, HDIO_GET_NOWERR, HDIO_SET_NOWERR, TYPE_BYTE, 0, 1, 1, 1, &drive->nowerr, set_nowerr);
-#if 0
- ide_add_setting(drive, "breada_readahead", SETTING_RW, BLKRAGET, BLKRASET, TYPE_INT, 0, 255, 1, 1, &read_ahead[major], NULL);
- ide_add_setting(drive, "file_readahead", SETTING_RW, BLKFRAGET, BLKFRASET, TYPE_INTA, 0, 4096, PAGE_SIZE, 1024, &max_readahead[major][minor], NULL);
- ide_add_setting(drive, "max_kb_per_request", SETTING_RW, BLKSECTGET, BLKSECTSET, TYPE_INTA, 1, 255, 1, 1, &max_sectors[major][minor], NULL);
-#endif
- ide_add_setting(drive, "lun", SETTING_RW, -1, -1, TYPE_INT, 0, 7, 1, 1, &drive->lun, NULL);
- ide_add_setting(drive, "wcache", SETTING_RW, HDIO_GET_WCACHE, HDIO_SET_WCACHE, TYPE_BYTE, 0, 1, 1, 1, &drive->wcache, write_cache);
- ide_add_setting(drive, "acoustic", SETTING_RW, HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, TYPE_BYTE, 0, 254, 1, 1, &drive->acoustic, set_acoustic);
- ide_add_setting(drive, "failures", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->failures, NULL);
- ide_add_setting(drive, "max_failures", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->max_failures, NULL);
-}
-
-static void idedisk_setup (ide_drive_t *drive)
-{
- int i;
-
- struct hd_driveid *id = drive->id;
- unsigned long capacity;
-
- idedisk_add_settings(drive);
-
- if (id == NULL)
- return;
-
- /*
- * CompactFlash cards and their brethern look just like hard drives
- * to us, but they are removable and don't have a doorlock mechanism.
- */
- if (drive->removable && !drive_is_flashcard(drive)) {
- /*
- * Removable disks (eg. SYQUEST); ignore 'WD' drives
- */
- if (id->model[0] != 'W' || id->model[1] != 'D') {
- drive->doorlocking = 1;
- }
- }
- for (i = 0; i < MAX_DRIVES; ++i) {
- ide_hwif_t *hwif = HWIF(drive);
-
- if (drive != &hwif->drives[i]) continue;
-#ifdef DEVFS_MUST_DIE
- hwif->gd->de_arr[i] = drive->de;
-#endif
- if (drive->removable)
- hwif->gd->flags[i] |= GENHD_FL_REMOVABLE;
- break;
- }
-
- /* Extract geometry if we did not already have one for the drive */
- if (!drive->cyl || !drive->head || !drive->sect) {
- drive->cyl = drive->bios_cyl = id->cyls;
- drive->head = drive->bios_head = id->heads;
- drive->sect = drive->bios_sect = id->sectors;
- }
-
- /* Handle logical geometry translation by the drive */
- if ((id->field_valid & 1) && id->cur_cyls &&
- id->cur_heads && (id->cur_heads <= 16) && id->cur_sectors) {
- drive->cyl = id->cur_cyls;
- drive->head = id->cur_heads;
- drive->sect = id->cur_sectors;
- }
-
- /* Use physical geometry if what we have still makes no sense */
- if (drive->head > 16 && id->heads && id->heads <= 16) {
- drive->cyl = id->cyls;
- drive->head = id->heads;
- drive->sect = id->sectors;
- }
-
- /* calculate drive capacity, and select LBA if possible */
- init_idedisk_capacity (drive);
-
- /*
- * if possible, give fdisk access to more of the drive,
- * by correcting bios_cyls:
- */
- capacity = idedisk_capacity (drive);
- if ((capacity >= (drive->bios_cyl * drive->bios_sect * drive->bios_head)) &&
- (!drive->forced_geom) && drive->bios_sect && drive->bios_head)
- drive->bios_cyl = (capacity / drive->bios_sect) / drive->bios_head;
- printk (KERN_INFO "XEN %s: %ld sectors", drive->name, capacity);
-
- /* Give size in megabytes (MB), not mebibytes (MiB). */
- /* We compute the exact rounded value, avoiding overflow. */
- printk (" (%ld MB)", (capacity - capacity/625 + 974)/1950);
-
- /* Only print cache size when it was specified */
- if (id->buf_size)
- printk (" w/%dKiB Cache", id->buf_size/2);
-
- printk(", CHS=%d/%d/%d",
- drive->bios_cyl, drive->bios_head, drive->bios_sect);
-#ifdef CONFIG_BLK_DEV_IDEDMA
- if (drive->using_dma)
- (void) HWIF(drive)->dmaproc(ide_dma_verbose, drive);
-#endif /* CONFIG_BLK_DEV_IDEDMA */
- printk("\n");
-
- drive->mult_count = 0;
- if (id->max_multsect) {
-#ifdef CONFIG_IDEDISK_MULTI_MODE
- id->multsect = ((id->max_multsect/2) > 1) ? id->max_multsect : 0;
- id->multsect_valid = id->multsect ? 1 : 0;
- drive->mult_req = id->multsect_valid ? id->max_multsect : INITIAL_MULT_COUNT;
- drive->special.b.set_multmode = drive->mult_req ? 1 : 0;
-#else /* original, pre IDE-NFG, per request of AC */
- drive->mult_req = INITIAL_MULT_COUNT;
- if (drive->mult_req > id->max_multsect)
- drive->mult_req = id->max_multsect;
- if (drive->mult_req || ((id->multsect_valid & 1) && id->multsect))
- drive->special.b.set_multmode = 1;
-#endif /* CONFIG_IDEDISK_MULTI_MODE */
- }
- drive->no_io_32bit = id->dword_io ? 1 : 0;
- if (drive->id->cfs_enable_2 & 0x3000)
- write_cache(drive, (id->cfs_enable_2 & 0x3000));
- (void) probe_lba_addressing(drive, 1);
-}
-
-static int idedisk_cleanup (ide_drive_t *drive)
-{
- if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
- if (do_idedisk_flushcache(drive))
- printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
- drive->name);
- return ide_unregister_subdriver(drive);
-}
-
-int idedisk_reinit(ide_drive_t *drive);
-
-/*
- * IDE subdriver functions, registered with ide.c
- */
-static ide_driver_t idedisk_driver = {
- name: "ide-disk",
- version: IDEDISK_VERSION,
- media: ide_disk,
- busy: 0,
- supports_dma: 1,
- supports_dsc_overlap: 0,
- cleanup: idedisk_cleanup,
- standby: do_idedisk_standby,
- flushcache: do_idedisk_flushcache,
- do_request: do_rw_disk,
- end_request: NULL,
- ioctl: NULL,
- open: idedisk_open,
- release: idedisk_release,
- media_change: idedisk_media_change,
- revalidate: idedisk_revalidate,
- pre_reset: idedisk_pre_reset,
- capacity: idedisk_capacity,
- special: idedisk_special,
- /*proc: idedisk_proc,*/
- reinit: idedisk_reinit,
- ata_prebuilder: NULL,
- atapi_prebuilder: NULL,
-};
-
-int idedisk_init (void);
-static ide_module_t idedisk_module = {
- IDE_DRIVER_MODULE,
- idedisk_init,
- &idedisk_driver,
- NULL
-};
-
-MODULE_DESCRIPTION("ATA DISK Driver");
-
-int idedisk_reinit (ide_drive_t *drive)
-{
- int failed = 0;
-
- MOD_INC_USE_COUNT;
-
- if (ide_register_subdriver (drive, &idedisk_driver, IDE_SUBDRIVER_VERSION)) {
- printk (KERN_ERR "ide-disk: %s: Failed to register the driver with ide.c\n", drive->name);
- return 1;
- }
- DRIVER(drive)->busy++;
- idedisk_setup(drive);
- if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
- printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", drive->name, drive->head);
- (void) idedisk_cleanup(drive);
- DRIVER(drive)->busy--;
- return 1;
- }
- DRIVER(drive)->busy--;
- failed--;
-
- ide_register_module(&idedisk_module);
- MOD_DEC_USE_COUNT;
- return 0;
-}
-
-static void __exit idedisk_exit (void)
-{
- ide_drive_t *drive;
- int failed = 0;
-
- while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, &idedisk_driver, failed)) != NULL) {
- if (idedisk_cleanup (drive)) {
- printk (KERN_ERR "%s: cleanup_module() called while still busy\n", drive->name);
- failed++;
- }
- /* We must remove proc entries defined in this module.
- Otherwise we oops while accessing these entries */
-#ifdef CONFIG_PROC_FS
- if (drive->proc)
- ide_remove_proc_entries(drive->proc, idedisk_proc);
-#endif
- }
- ide_unregister_module(&idedisk_module);
-}
-
-int idedisk_init (void)
-{
- ide_drive_t *drive;
- int failed = 0;
-
- MOD_INC_USE_COUNT;
- while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, NULL, failed++)) != NULL) {
- if (ide_register_subdriver (drive, &idedisk_driver, IDE_SUBDRIVER_VERSION)) {
- printk (KERN_ERR "ide-disk: %s: Failed to register the driver with ide.c\n", drive->name);
- continue;
- }
- DRIVER(drive)->busy++;
- idedisk_setup(drive);
- if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
- printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", drive->name, drive->head);
- (void) idedisk_cleanup(drive);
- DRIVER(drive)->busy--;
- continue;
- }
- DRIVER(drive)->busy--;
- failed--;
- }
- ide_register_module(&idedisk_module);
- MOD_DEC_USE_COUNT;
- return 0;
-}
-
-module_init(idedisk_init);
-module_exit(idedisk_exit);
-MODULE_LICENSE("GPL");
diff --git a/xen-2.4.16/drivers/ide/ide-pci.c b/xen-2.4.16/drivers/ide/ide-pci.c
index c68ff36847..c8784c6f3d 100644
--- a/xen-2.4.16/drivers/ide/ide-pci.c
+++ b/xen-2.4.16/drivers/ide/ide-pci.c
@@ -12,15 +12,15 @@
* configuration of all PCI IDE interfaces present in a system.
*/
-#include <xeno/config.h>
-#include <xeno/types.h>
-#include <xeno/lib.h>
-#include <xeno/timer.h>
-#include <xeno/mm.h>
-#include <xeno/interrupt.h>
-#include <xeno/pci.h>
-#include <xeno/init.h>
-#include <xeno/ide.h>
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/mm.h>
+#include <linux/interrupt.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+#include <linux/ide.h>
#include <asm/io.h>
#include <asm/irq.h>
@@ -405,7 +405,7 @@ static ide_pci_device_t ide_pci_chipsets[] __initdata = {
#ifndef CONFIG_PDC202XX_FORCE
{DEVID_PDC20246,"PDC20246", PCI_PDC202XX, NULL, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 },
{DEVID_PDC20262,"PDC20262", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 },
- {DEVID_PDC20265,"PDC20265", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 48 },
+ {DEVID_PDC20265,"PDC20265", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 },
{DEVID_PDC20267,"PDC20267", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 },
#else /* !CONFIG_PDC202XX_FORCE */
{DEVID_PDC20246,"PDC20246", PCI_PDC202XX, NULL, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 16 },
@@ -623,8 +623,12 @@ static void __init ide_setup_pci_device (struct pci_dev *dev, ide_pci_device_t *
}
if (pci_enable_device(dev)) {
- printk(KERN_WARNING "%s: (ide_setup_pci_device:) Could not enable device.\n", d->name);
- return;
+ if(pci_enable_device_bars(dev, 1<<4))
+ {
+ printk(KERN_WARNING "%s: (ide_setup_pci_device:) Could not enable device.\n", d->name);
+ return;
+ }
+ printk(KERN_INFO "%s: BIOS setup was incomplete.\n", d->name);
}
check_if_enabled:
@@ -669,18 +673,27 @@ check_if_enabled:
*/
pciirq = dev->irq;
-#ifdef CONFIG_PDC202XX_FORCE
- if (dev->class >> 8 == PCI_CLASS_STORAGE_RAID) {
- /*
- * By rights we want to ignore Promise FastTrak and SuperTrak
- * series here, those use own driver.
+ if (dev->class >> 8 == PCI_CLASS_STORAGE_RAID)
+ {
+ /* By rights we want to ignore these, but the Promise Fastrak
+ * people have some strange ideas about proprietary so we have
+ * to act otherwise on those. The supertrak however we need
+ * to skip
*/
- if (dev->vendor == PCI_VENDOR_ID_PROMISE) {
- printk(KERN_INFO "ide: Skipping Promise RAID controller.\n");
- return;
+ if (IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265))
+ {
+ printk(KERN_INFO "ide: Found promise 20265 in RAID mode.\n");
+ if(dev->bus->self && dev->bus->self->vendor == PCI_VENDOR_ID_INTEL &&
+ dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960)
+ {
+ printk(KERN_INFO "ide: Skipping Promise PDC20265 attached to I2O RAID controller.\n");
+ return;
+ }
}
+ /* Its attached to something else, just a random bridge.
+ Suspect a fastrak and fall through */
}
-#endif /* CONFIG_PDC202XX_FORCE */
+
if ((dev->class & ~(0xfa)) != ((PCI_CLASS_STORAGE_IDE << 8) | 5)) {
printk("%s: not 100%% native mode: will probe irqs later\n", d->name);
/*
diff --git a/xen-2.4.16/drivers/ide/piix.c b/xen-2.4.16/drivers/ide/piix.c
index ca6629e9ef..fe538429f3 100644
--- a/xen-2.4.16/drivers/ide/piix.c
+++ b/xen-2.4.16/drivers/ide/piix.c
@@ -92,6 +92,9 @@ static int piix_get_info (char *buffer, char **addr, off_t offset, int count)
case PCI_DEVICE_ID_INTEL_82801BA_8:
case PCI_DEVICE_ID_INTEL_82801BA_9:
case PCI_DEVICE_ID_INTEL_82801CA_10:
+ case PCI_DEVICE_ID_INTEL_82801CA_11:
+ case PCI_DEVICE_ID_INTEL_82801DB_11:
+ case PCI_DEVICE_ID_INTEL_82801E_11:
p += sprintf(p, "\n Intel PIIX4 Ultra 100 Chipset.\n");
break;
case PCI_DEVICE_ID_INTEL_82372FB_1:
@@ -258,8 +261,8 @@ static void piix_tune_drive (ide_drive_t *drive, byte pio)
master_data = master_data | 0x0070;
pci_read_config_byte(HWIF(drive)->pci_dev, slave_port, &slave_data);
slave_data = slave_data & (HWIF(drive)->index ? 0x0f : 0xf0);
- slave_data = slave_data | ((timings[pio][0] << 2) | (timings[pio][1]
- << (HWIF(drive)->index ? 4 : 0)));
+ slave_data = slave_data | (((timings[pio][0] << 2) | timings[pio][1])
+ << (HWIF(drive)->index ? 4 : 0));
} else {
master_data = master_data & 0xccf8;
if (pio > 1)
@@ -366,7 +369,10 @@ static int piix_config_drive_for_dma (ide_drive_t *drive)
byte udma_66 = eighty_ninty_three(drive);
int ultra100 = ((dev->device == PCI_DEVICE_ID_INTEL_82801BA_8) ||
(dev->device == PCI_DEVICE_ID_INTEL_82801BA_9) ||
- (dev->device == PCI_DEVICE_ID_INTEL_82801CA_10)) ? 1 : 0;
+ (dev->device == PCI_DEVICE_ID_INTEL_82801CA_10) ||
+ (dev->device == PCI_DEVICE_ID_INTEL_82801CA_11) ||
+ (dev->device == PCI_DEVICE_ID_INTEL_82801DB_11) ||
+ (dev->device == PCI_DEVICE_ID_INTEL_82801E_11)) ? 1 : 0;
int ultra66 = ((ultra100) ||
(dev->device == PCI_DEVICE_ID_INTEL_82801AA_1) ||
(dev->device == PCI_DEVICE_ID_INTEL_82372FB_1)) ? 1 : 0;
@@ -425,7 +431,7 @@ static int config_drive_xfer_rate (ide_drive_t *drive)
}
dma_func = ide_dma_off_quietly;
if (id->field_valid & 4) {
- if (id->dma_ultra & 0x002F) {
+ if (id->dma_ultra & 0x003F) {
/* Force if Capable UltraDMA */
dma_func = piix_config_drive_for_dma(drive);
if ((id->field_valid & 2) &&
diff --git a/xen-2.4.16/drivers/pci/gen-devlist.c b/xen-2.4.16/drivers/pci/gen-devlist.c
index 7c718080e2..c0c242010e 100644
--- a/xen-2.4.16/drivers/pci/gen-devlist.c
+++ b/xen-2.4.16/drivers/pci/gen-devlist.c
@@ -1,7 +1,7 @@
/*
* Generate devlist.h and classlist.h from the PCI ID file.
*
- * (c) 1999--2000 Martin Mares <mj@ucw.cz>
+ * (c) 1999--2002 Martin Mares <mj@ucw.cz>
*/
#include <stdio.h>
@@ -15,8 +15,13 @@ pq(FILE *f, const char *c)
while (*c) {
if (*c == '"')
fprintf(f, "\\\"");
- else
+ else {
fputc(*c, f);
+ if (*c == '?' && c[1] == '?') {
+ /* Avoid trigraphs */
+ fprintf(f, "\" \"");
+ }
+ }
c++;
}
}
diff --git a/xen-2.4.16/drivers/pci/names.c b/xen-2.4.16/drivers/pci/names.c
index 90bb37e382..80674543b0 100644
--- a/xen-2.4.16/drivers/pci/names.c
+++ b/xen-2.4.16/drivers/pci/names.c
@@ -7,7 +7,7 @@
#include <linux/config.h>
#include <linux/types.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/pci.h>
#include <linux/init.h>
@@ -32,18 +32,18 @@ struct pci_vendor_info {
* real memory.. Parse the same file multiple times
* to get all the info.
*/
-#define VENDOR( vendor, name ) static char __vendorstr_##vendor[] __initdata = name;
+#define VENDOR( vendor, name ) static char __vendorstr_##vendor[] __devinitdata = name;
#define ENDVENDOR()
-#define DEVICE( vendor, device, name ) static char __devicestr_##vendor##device[] __initdata = name;
+#define DEVICE( vendor, device, name ) static char __devicestr_##vendor##device[] __devinitdata = name;
#include "devlist.h"
-#define VENDOR( vendor, name ) static struct pci_device_info __devices_##vendor[] __initdata = {
+#define VENDOR( vendor, name ) static struct pci_device_info __devices_##vendor[] __devinitdata = {
#define ENDVENDOR() };
#define DEVICE( vendor, device, name ) { 0x##device, 0, __devicestr_##vendor##device },
#include "devlist.h"
-static struct pci_vendor_info __initdata pci_vendor_list[] = {
+static struct pci_vendor_info __devinitdata pci_vendor_list[] = {
#define VENDOR( vendor, name ) { 0x##vendor, sizeof(__devices_##vendor) / sizeof(struct pci_device_info), __vendorstr_##vendor, __devices_##vendor },
#define ENDVENDOR()
#define DEVICE( vendor, device, name )
@@ -121,7 +121,7 @@ pci_class_name(u32 class)
#else
-void __init pci_name_device(struct pci_dev *dev)
+void __devinit pci_name_device(struct pci_dev *dev)
{
}
diff --git a/xen-2.4.16/drivers/pci/pci.c b/xen-2.4.16/drivers/pci/pci.c
index 8f0a972dd7..7f49d463d5 100644
--- a/xen-2.4.16/drivers/pci/pci.c
+++ b/xen-2.4.16/drivers/pci/pci.c
@@ -13,20 +13,21 @@
#include <linux/sched.h>
#include <linux/module.h>
#include <linux/types.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/pci.h>
-//#include <linux/string.h>
+/*#include <linux/string.h>*/
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/ioport.h>
#include <linux/spinlock.h>
-//#include <linux/pm.h>
-//#include <linux/kmod.h> /* for hotplug_path */
-//#include <linux/bitops.h>
+/*#include <linux/pm.h>*/
+/*#include <linux/kmod.h>*/ /* for hotplug_path */
+/*#include <linux/bitops.h>*/
#include <linux/delay.h>
+#include <linux/cache.h>
#include <asm/page.h>
-//#include <asm/dma.h> /* isa_dma_bridge_buggy */
+/*#include <asm/dma.h>*/ /* isa_dma_bridge_buggy */
#undef DEBUG
@@ -358,25 +359,41 @@ pci_restore_state(struct pci_dev *dev, u32 *buffer)
}
/**
- * pci_enable_device - Initialize device before it's used by a driver.
+ * pci_enable_device_bars - Initialize some of a device for use
* @dev: PCI device to be initialized
+ * @bars: bitmask of BAR's that must be configured
*
* Initialize device before it's used by a driver. Ask low-level code
- * to enable I/O and memory. Wake up the device if it was suspended.
- * Beware, this function can fail.
+ * to enable selected I/O and memory resources. Wake up the device if it
+ * was suspended. Beware, this function can fail.
*/
+
int
-pci_enable_device(struct pci_dev *dev)
+pci_enable_device_bars(struct pci_dev *dev, int bars)
{
int err;
pci_set_power_state(dev, 0);
- if ((err = pcibios_enable_device(dev)) < 0)
+ if ((err = pcibios_enable_device(dev, bars)) < 0)
return err;
return 0;
}
/**
+ * pci_enable_device - Initialize device before it's used by a driver.
+ * @dev: PCI device to be initialized
+ *
+ * Initialize device before it's used by a driver. Ask low-level code
+ * to enable I/O and memory. Wake up the device if it was suspended.
+ * Beware, this function can fail.
+ */
+int
+pci_enable_device(struct pci_dev *dev)
+{
+ return pci_enable_device_bars(dev, 0x3F);
+}
+
+/**
* pci_disable_device - Disable PCI device after use
* @dev: PCI device to be disabled
*
@@ -463,6 +480,69 @@ pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
}
/**
+ * pci_release_region - Release a PCI bar
+ * @pdev: PCI device whose resources were previously reserved by pci_request_region
+ * @bar: BAR to release
+ *
+ * Releases the PCI I/O and memory resources previously reserved by a
+ * successful call to pci_request_region. Call this function only
+ * after all use of the PCI regions has ceased.
+ */
+void pci_release_region(struct pci_dev *pdev, int bar)
+{
+ if (pci_resource_len(pdev, bar) == 0)
+ return;
+ if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
+ release_region(pci_resource_start(pdev, bar),
+ pci_resource_len(pdev, bar));
+ else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
+ release_mem_region(pci_resource_start(pdev, bar),
+ pci_resource_len(pdev, bar));
+}
+
+/**
+ * pci_request_region - Reserved PCI I/O and memory resource
+ * @pdev: PCI device whose resources are to be reserved
+ * @bar: BAR to be reserved
+ * @res_name: Name to be associated with resource.
+ *
+ * Mark the PCI region associated with PCI device @pdev BR @bar as
+ * being reserved by owner @res_name. Do not access any
+ * address inside the PCI regions unless this call returns
+ * successfully.
+ *
+ * Returns 0 on success, or %EBUSY on error. A warning
+ * message is also printed on failure.
+ */
+int pci_request_region(struct pci_dev *pdev, int bar, char *res_name)
+{
+ if (pci_resource_len(pdev, bar) == 0)
+ return 0;
+
+ if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
+ if (!request_region(pci_resource_start(pdev, bar),
+ pci_resource_len(pdev, bar), res_name))
+ goto err_out;
+ }
+ else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
+ if (!request_mem_region(pci_resource_start(pdev, bar),
+ pci_resource_len(pdev, bar), res_name))
+ goto err_out;
+ }
+
+ return 0;
+
+err_out:
+ printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %s\n",
+ pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem",
+ bar + 1, /* PCI BAR # */
+ pci_resource_len(pdev, bar), pci_resource_start(pdev, bar),
+ pdev->slot_name);
+ return -EBUSY;
+}
+
+
+/**
* pci_release_regions - Release reserved PCI I/O and memory resources
* @pdev: PCI device whose resources were previously reserved by pci_request_regions
*
@@ -470,22 +550,13 @@ pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
* successful call to pci_request_regions. Call this function only
* after all use of the PCI regions has ceased.
*/
+
void pci_release_regions(struct pci_dev *pdev)
{
int i;
- for (i = 0; i < 6; i++) {
- if (pci_resource_len(pdev, i) == 0)
- continue;
-
- if (pci_resource_flags(pdev, i) & IORESOURCE_IO)
- release_region(pci_resource_start(pdev, i),
- pci_resource_len(pdev, i));
-
- else if (pci_resource_flags(pdev, i) & IORESOURCE_MEM)
- release_mem_region(pci_resource_start(pdev, i),
- pci_resource_len(pdev, i));
- }
+ for (i = 0; i < 6; i++)
+ pci_release_region(pdev, i);
}
/**
@@ -505,23 +576,9 @@ int pci_request_regions(struct pci_dev *pdev, char *res_name)
{
int i;
- for (i = 0; i < 6; i++) {
- if (pci_resource_len(pdev, i) == 0)
- continue;
-
- if (pci_resource_flags(pdev, i) & IORESOURCE_IO) {
- if (!request_region(pci_resource_start(pdev, i),
- pci_resource_len(pdev, i), res_name))
- goto err_out;
- }
-
- else if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) {
- if (!request_mem_region(pci_resource_start(pdev, i),
- pci_resource_len(pdev, i), res_name))
- goto err_out;
- }
- }
-
+ for (i = 0; i < 6; i++)
+ if(pci_request_region(pdev, i, res_name))
+ goto err_out;
return 0;
err_out:
@@ -530,7 +587,9 @@ err_out:
i + 1, /* PCI BAR # */
pci_resource_len(pdev, i), pci_resource_start(pdev, i),
pdev->slot_name);
- pci_release_regions(pdev);
+ while(--i >= 0)
+ pci_release_region(pdev, i);
+
return -EBUSY;
}
@@ -872,13 +931,14 @@ pdev_set_mwi(struct pci_dev *dev)
pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cache_size);
cache_size <<= 2;
if (cache_size != SMP_CACHE_BYTES) {
- printk(KERN_WARNING "PCI: %s PCI cache line size set incorrectly (%i bytes) by BIOS/FW.\n",
+ printk(KERN_WARNING "PCI: %s PCI cache line size set incorrectly "
+ "(%i bytes) by BIOS/FW, ",
dev->slot_name, cache_size);
if (cache_size > SMP_CACHE_BYTES) {
- printk("PCI: %s cache line size too large - expecting %i.\n", dev->slot_name, SMP_CACHE_BYTES);
+ printk("expecting %i\n", SMP_CACHE_BYTES);
rc = -EINVAL;
} else {
- printk("PCI: %s PCI cache line size corrected to %i.\n", dev->slot_name, SMP_CACHE_BYTES);
+ printk("correcting to %i\n", SMP_CACHE_BYTES);
pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE,
SMP_CACHE_BYTES >> 2);
}
@@ -1008,13 +1068,15 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
l = 0;
if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) {
res->start = l & PCI_BASE_ADDRESS_MEM_MASK;
+ res->flags |= l & ~PCI_BASE_ADDRESS_MEM_MASK;
sz = pci_size(sz, PCI_BASE_ADDRESS_MEM_MASK);
} else {
res->start = l & PCI_BASE_ADDRESS_IO_MASK;
+ res->flags |= l & ~PCI_BASE_ADDRESS_IO_MASK;
sz = pci_size(sz, PCI_BASE_ADDRESS_IO_MASK & 0xffff);
}
res->end = res->start + (unsigned long) sz;
- res->flags |= (l & 0xf) | pci_calc_resource_flags(l);
+ res->flags |= pci_calc_resource_flags(l);
if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK))
== (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) {
pci_read_config_dword(dev, reg+4, &l);
@@ -1058,7 +1120,7 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
}
}
-void __devinit pci_read_bridge_bases(struct pci_bus *child)
+void __devinit pci_read_bridge_bases(struct pci_bus *child)
{
struct pci_dev *dev = child->self;
u8 io_base_lo, io_limit_lo;
@@ -1070,6 +1132,13 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
if (!dev) /* It's a host bus, nothing to read */
return;
+ if (dev->transparent) {
+ printk("Transparent bridge - %s\n", dev->name);
+ for(i = 0; i < 4; i++)
+ child->resource[i] = child->parent->resource[i];
+ return;
+ }
+
for(i=0; i<3; i++)
child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
@@ -1091,14 +1160,6 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
res->start = base;
res->end = limit + 0xfff;
- res->name = child->name;
- } else {
- /*
- * Ugh. We don't know enough about this bridge. Just assume
- * that it's entirely transparent.
- */
- printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 0);
- child->resource[0] = child->parent->resource[0];
}
res = child->resource[1];
@@ -1110,11 +1171,6 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
res->start = base;
res->end = limit + 0xfffff;
- res->name = child->name;
- } else {
- /* See comment above. Same thing */
- printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 1);
- child->resource[1] = child->parent->resource[1];
}
res = child->resource[2];
@@ -1141,15 +1197,10 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH;
res->start = base;
res->end = limit + 0xfffff;
- res->name = child->name;
- } else {
- /* See comments above */
- printk(KERN_ERR "Unknown bridge resource %d: assuming transparent\n", 2);
- child->resource[2] = child->parent->resource[2];
}
}
-static struct pci_bus * __devinit pci_alloc_bus(void)
+static struct pci_bus * __devinit pci_alloc_bus(void)
{
struct pci_bus *b;
@@ -1187,9 +1238,11 @@ struct pci_bus * __devinit pci_add_new_bus(struct pci_bus *parent, struct pci_de
child->primary = parent->secondary;
child->subordinate = 0xff;
- /* Set up default resource pointers.. */
- for (i = 0; i < 4; i++)
+ /* Set up default resource pointers and names.. */
+ for (i = 0; i < 4; i++) {
child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
+ child->resource[i]->name = child->name;
+ }
return child;
}
@@ -1331,6 +1384,10 @@ int pci_setup_device(struct pci_dev * dev)
case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
if (class != PCI_CLASS_BRIDGE_PCI)
goto bad;
+ /* The PCI-to-PCI bridge spec requires that subtractive
+ decoding (i.e. transparent) bridge must have programming
+ interface code of 0x01. */
+ dev->transparent = ((dev->class & 0xff) == 1);
pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
break;
@@ -1474,7 +1531,7 @@ unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)
return max;
}
-int __devinit pci_bus_exists(const struct list_head *list, int nr)
+int __devinit pci_bus_exists(const struct list_head *list, int nr)
{
const struct list_head *l;
@@ -1486,7 +1543,7 @@ int __devinit pci_bus_exists(const struct list_head *list, int nr)
return 0;
}
-struct pci_bus * __devinit pci_alloc_primary_bus(int bus)
+struct pci_bus * __devinit pci_alloc_primary_bus(int bus)
{
struct pci_bus *b;
@@ -1505,7 +1562,7 @@ struct pci_bus * __devinit pci_alloc_primary_bus(int bus)
return b;
}
-struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
+struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
{
struct pci_bus *b = pci_alloc_primary_bus(bus);
if (b) {
@@ -1639,7 +1696,7 @@ static int pci_pm_suspend(u32 state)
return 0;
}
-static int pci_pm_resume(void)
+int pci_pm_resume(void)
{
struct list_head *list;
struct pci_bus *bus;
@@ -1659,10 +1716,10 @@ pci_pm_callback(struct pm_dev *pm_device, pm_request_t rqst, void *data)
switch (rqst) {
case PM_SAVE_STATE:
- error = pci_pm_save_state((u32)data);
+ error = pci_pm_save_state((unsigned long)data);
break;
case PM_SUSPEND:
- error = pci_pm_suspend((u32)data);
+ error = pci_pm_suspend((unsigned long)data);
break;
case PM_RESUME:
error = pci_pm_resume();
@@ -2042,7 +2099,7 @@ void __devinit pci_init(void)
#endif
}
-static int __devinit pci_setup(char *str)
+static int __devinit pci_setup(char *str)
{
while (str) {
char *k = strchr(str, ',');
@@ -2067,16 +2124,22 @@ EXPORT_SYMBOL(pci_write_config_word);
EXPORT_SYMBOL(pci_write_config_dword);
EXPORT_SYMBOL(pci_devices);
EXPORT_SYMBOL(pci_root_buses);
+EXPORT_SYMBOL(pci_enable_device_bars);
EXPORT_SYMBOL(pci_enable_device);
EXPORT_SYMBOL(pci_disable_device);
EXPORT_SYMBOL(pci_find_capability);
EXPORT_SYMBOL(pci_release_regions);
EXPORT_SYMBOL(pci_request_regions);
+EXPORT_SYMBOL(pci_release_region);
+EXPORT_SYMBOL(pci_request_region);
EXPORT_SYMBOL(pci_find_class);
EXPORT_SYMBOL(pci_find_device);
EXPORT_SYMBOL(pci_find_slot);
EXPORT_SYMBOL(pci_find_subsys);
EXPORT_SYMBOL(pci_set_master);
+EXPORT_SYMBOL(pci_set_mwi);
+EXPORT_SYMBOL(pci_clear_mwi);
+EXPORT_SYMBOL(pdev_set_mwi);
EXPORT_SYMBOL(pci_set_dma_mask);
EXPORT_SYMBOL(pci_dac_set_dma_mask);
EXPORT_SYMBOL(pci_assign_resource);
@@ -2094,10 +2157,14 @@ EXPORT_SYMBOL(pci_announce_device_to_drivers);
EXPORT_SYMBOL(pci_add_new_bus);
EXPORT_SYMBOL(pci_do_scan_bus);
EXPORT_SYMBOL(pci_scan_slot);
+EXPORT_SYMBOL(pci_scan_bus);
+#ifdef CONFIG_PROC_FS
EXPORT_SYMBOL(pci_proc_attach_device);
EXPORT_SYMBOL(pci_proc_detach_device);
EXPORT_SYMBOL(pci_proc_attach_bus);
EXPORT_SYMBOL(pci_proc_detach_bus);
+EXPORT_SYMBOL(proc_bus_pci_dir);
+#endif
#endif
EXPORT_SYMBOL(pci_set_power_state);
diff --git a/xen-2.4.16/drivers/pci/pci.ids b/xen-2.4.16/drivers/pci/pci.ids
index c73f0bd65b..f45de74936 100644
--- a/xen-2.4.16/drivers/pci/pci.ids
+++ b/xen-2.4.16/drivers/pci/pci.ids
@@ -7,7 +7,7 @@
# so if you have anything to contribute, please visit the home page or
# send a diff -u against the most recent pci.ids to pci-ids@ucw.cz.
#
-# $Id: pci.ids,v 1.24 2001/10/28 21:55:26 mares Exp $
+# $Id: pci.ids,v 1.46 2002/08/14 17:38:51 mares Exp $
#
# Vendors, devices and subsystems. Please keep sorted.
@@ -26,6 +26,10 @@
0675 Dynalink
1700 IS64PH ISDN Adapter
1702 IS64PH ISDN Adapter
+# Wrong ID used in subsystem ID of VIA USB controllers.
+0925 VIA Technologies, Inc. (Wrong ID)
+09c1 Arris
+ 0704 CM 200E Cable Modem
0a89 BREA Technologies Inc
0e11 Compaq Computer Corporation
0001 PCI to EISA Bridge
@@ -47,7 +51,7 @@
a0f7 PCI Hotplug Controller
8086 002a PCI Hotplug Controller A
8086 002b PCI Hotplug Controller B
- a0f8 USB Open Host Controller
+ a0f8 ZFMicro Chipset USB
a0fc Fibre Channel Host Controller
ae10 Smart-2/P RAID Controller
0e11 4030 Smart-2/P Array Controller
@@ -88,11 +92,12 @@
b13c NC3162 Fast Ethernet NIC
b144 NC3123 Fast Ethernet NIC
b163 NC3134 Fast Ethernet NIC
- b164 NC3135 Fast Ethernet Upgrade Module
+ b164 NC3165 Fast Ethernet Upgrade Module
b178 Smart Array 5i/532
b1a4 NC7131 Gigabit Server Adapter
f130 NetFlex-3/P ThunderLAN 1.0
f150 NetFlex-3/P ThunderLAN 2.3
+0e55 HaSoTec GmbH
1000 LSI Logic / Symbios Logic (formerly NCR)
0001 53c810
1000 1000 8100S
@@ -104,15 +109,22 @@
000a 53c1510
000b 53c896
000c 53c895
+ 1de1 3907 DC-390U2W
000d 53c885
000f 53c875
0e11 7004 Embedded Ultra Wide SCSI Controller
1092 8760 FirePort 40 Dual SCSI Controller
1de1 3904 DC390F Ultra Wide SCSI Controller
+ 0010 53c895
+ 0e11 4040 Integrated Array Controller
+ 0e11 4048 Integrated Array Controller
0012 53c895a
+ 0013 53c875a
0020 53c1010 Ultra3 SCSI Adapter
+ 1de1 1020 DC-390U3W
0021 53c1010 66MHz Ultra3 SCSI Adapter
0030 53c1030
+ 1028 1010 LSI U320 SCSI Controller
0040 53c1035
008f 53c875J
1092 8000 FirePort 40 SCSI Controller
@@ -122,12 +134,20 @@
0623 FC929 LAN
0624 FC919
0625 FC919 LAN
- 0701 83C885
+ 0626 FC929X
+ 0627 FC929X LAN
+ 0628 FC919X
+ 0629 FC919X LAN
+ 0701 83C885 NT50 DigitalScape Fast Ethernet
0702 Yellowfin G-NIC gigabit ethernet
1318 0000 PEI100X
0901 61C102
1000 63C815
-1001 Initio
+ 1960 PowerEdge Expandable RAID Controller 4
+ 1028 0518 PowerEdge Expandable RAID Controller 4/DC
+ 1028 0520 PowerEdge Expandable RAID Controller 4/SC
+ 1028 0531 PowerEdge Expandable RAID Controller 4/QC
+1001 Kolter Electronic
0010 PCI 1616 Measurement card with 32 digital I/O lines
0011 OPTO-PCI Opto-Isolated digital I/O board
0012 PCI-AD/DA Analogue I/O board
@@ -139,28 +159,65 @@
9100 INI-9100/9100W SCSI Host
1002 ATI Technologies Inc
4158 68800AX [Mach32]
+ 4242 Radeon 8500 DV
+ 1002 02aa Radeon 8500 AIW DV Edition
4354 215CT [Mach64 CT]
4358 210888CX [Mach64 CX]
4554 210888ET [Mach64 ET]
4654 Mach64 VT
4742 3D Rage Pro AGP 1X/2X
+ 1002 0040 Rage Pro Turbo AGP 2X
+ 1002 0044 Rage Pro Turbo AGP 2X
+ 1002 0061 Rage Pro AIW AGP 2X
+ 1002 0062 Rage Pro AIW AGP 2X
+ 1002 0063 Rage Pro AIW AGP 2X
+ 1002 0080 Rage Pro Turbo AGP 2X
+ 1002 0084 Rage Pro Turbo AGP 2X
+ 1002 4742 Rage Pro Turbo AGP 2X
+ 1002 8001 Rage Pro Turbo AGP 2X
+ 1028 0082 Rage Pro Turbo AGP 2X
1028 4082 Optiplex GX1 Onboard Display Adapter
- 8086 4152 Rage 3D Pro AGP
+ 1028 8082 Rage Pro Turbo AGP 2X
+ 1028 c082 Rage Pro Turbo AGP 2X
+ 8086 4152 Xpert 98D AGP 2X
+ 8086 464a Rage Pro Turbo AGP 2X
4744 3D Rage Pro AGP 1X
+ 1002 4744 Rage Pro Turbo AGP
4747 3D Rage Pro
4749 3D Rage Pro
+ 1002 0061 Rage Pro AIW
+ 1002 0062 Rage Pro AIW
474c Rage XC
- 474d Rage XL AGP
+ 474d Rage XL AGP 2X
+ 1002 0004 Xpert 98 RXL AGP 2X
+ 1002 0008 Xpert 98 RXL AGP 2X
+ 1002 0080 Rage XL AGP 2X
+ 1002 0084 Xpert 98 AGP 2X
+ 1002 474d Rage XL AGP
+ 1033 806a Rage XL AGP
474e Rage XC AGP
+ 1002 474e Rage XC AGP
474f Rage XL
+ 1002 0008 Rage XL
+ 1002 474f Rage XL
4750 3D Rage Pro 215GP
+ 1002 0040 Rage Pro Turbo
+ 1002 0044 Rage Pro Turbo
+ 1002 0080 Rage Pro Turbo
+ 1002 0084 Rage Pro Turbo
+ 1002 4750 Rage Pro Turbo
4751 3D Rage Pro 215GQ
4752 Rage XL
+ 1002 0008 Rage XL
+ 1002 4752 Rage XL
4753 Rage XC
+ 1002 4753 Rage XC
4754 3D Rage I/II 215GT [Mach64 GT]
4755 3D Rage II+ 215GTB [Mach64 GTB]
4756 3D Rage IIC 215IIC [Mach64 GT IIC]
+ 1002 4756 Rage IIC
4757 3D Rage IIC AGP
+ 1002 4757 Rage IIC AGP
1028 0089 Rage 3D IIC
1028 4082 Rage 3D IIC
1028 8082 Rage 3D IIC
@@ -169,77 +226,166 @@
4759 3D Rage IIC
475a 3D Rage IIC AGP
1002 0087 Rage 3D IIC
+ 1002 475a Rage IIC AGP
4c42 3D Rage LT Pro AGP-133
0e11 b0e8 Rage 3D LT Pro
0e11 b10e 3D Rage LT Pro (Compaq Armada 1750)
+ 1002 0040 Rage LT Pro AGP 2X
+ 1002 0044 Rage LT Pro AGP 2X
+ 1002 4c42 Rage LT Pro AGP 2X
+ 1002 8001 Rage LT Pro AGP 2X
1028 0085 Rage 3D LT Pro
4c44 3D Rage LT Pro AGP-66
4c45 Rage Mobility M3 AGP
4c46 Rage Mobility M3 AGP 2x
4c47 3D Rage LT-G 215LG
4c49 3D Rage LT Pro
+ 1002 0004 Rage LT Pro
+ 1002 0040 Rage LT Pro
+ 1002 0044 Rage LT Pro
+ 1002 4c49 Rage LT Pro
4c4d Rage Mobility P/M AGP 2x
+ 1002 0084 Xpert 98 AGP 2X (Mobility)
4c4e Rage Mobility L AGP 2x
4c50 3D Rage LT Pro
+ 1002 4c50 Rage LT Pro
4c51 3D Rage LT Pro
4c52 Rage Mobility P/M
4c53 Rage Mobility L
4c54 264LT [Mach64 LT]
- 4c57 Radeon Mobility M6 LW
+ 4c57 Radeon Mobility M7 LW
+ 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100)
+ 4c58 Radeon Mobility M7 LX [Radeon Mobility FireGL 7800]
4c59 Radeon Mobility M6 LY
+ 1014 0235 ThinkPad A30p (2653-64G)
+ 1014 0239 ThinkPad X22/X23/X24
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
4c5a Radeon Mobility M6 LZ
4d46 Rage Mobility M4 AGP
4d4c Rage Mobility M4 AGP
- 5041 Rage 128 PA
- 5042 Rage 128 PB
- 5043 Rage 128 PC
- 5044 Rage 128 PD
- 5045 Rage 128 PE
- 5046 Rage 128 PF
+ 5041 Rage 128 PA/PRO
+ 5042 Rage 128 PB/PRO AGP 2x
+ 5043 Rage 128 PC/PRO AGP 4x
+ 5044 Rage 128 PD/PRO TMDS
+ 1002 0028 Rage 128 AIW
+ 1002 0029 Rage 128 AIW
+ 5045 Rage 128 PE/PRO AGP 2x TMDS
+ 5046 Rage 128 PF/PRO AGP 4x TMDS
+ 1002 0004 Rage Fury Pro
+ 1002 0008 Rage Fury Pro/Xpert 2000 Pro
+ 1002 0014 Rage Fury Pro
+ 1002 0018 Rage Fury Pro/Xpert 2000 Pro
+ 1002 0028 Rage 128 Pro AIW AGP
+ 1002 002a Rage 128 Pro AIW AGP
+ 1002 0048 Rage Fury Pro
1002 2000 Rage Fury MAXX AGP 4x (TMDS) (VGA device)
1002 2001 Rage Fury MAXX AGP 4x (TMDS) (Extra device?!)
- 5047 Rage 128 PG
- 5048 Rage 128 PH
- 5049 Rage 128 PI
- 504a Rage 128 PJ
- 504b Rage 128 PK
- 504c Rage 128 PL
- 504d Rage 128 PM
- 504e Rage 128 PN
- 504f Rage 128 PO
- 5050 Rage 128 PP
- 5051 Rage 128 PQ
- 5052 Rage 128 PR
- 5053 Rage 128 PS
- 5054 Rage 128 PT
- 5055 Rage 128 PU
- 5056 Rage 128 PV
- 5057 Rage 128 PW
- 5058 Rage 128 PX
+ 5047 Rage 128 PG/PRO
+ 5048 Rage 128 PH/PRO AGP 2x
+ 5049 Rage 128 PI/PRO AGP 4x
+ 504a Rage 128 PJ/PRO TMDS
+ 504b Rage 128 PK/PRO AGP 2x TMDS
+ 504c Rage 128 PL/PRO AGP 4x TMDS
+ 504d Rage 128 PM/PRO
+ 504e Rage 128 PN/PRO AGP 2x
+ 504f Rage 128 PO/PRO AGP 4x
+ 5050 Rage 128 PP/PRO TMDS
+ 1002 0008 Xpert 128
+ 5051 Rage 128 PQ/PRO AGP 2x TMDS
+ 5052 Rage 128 PR/PRO AGP 4x TMDS
+ 5053 Rage 128 PS/PRO
+ 5054 Rage 128 PT/PRO AGP 2x
+ 5055 Rage 128 PU/PRO AGP 4x
+ 5056 Rage 128 PV/PRO TMDS
+ 5057 Rage 128 PW/PRO AGP 2x TMDS
+ 5058 Rage 128 PX/PRO AGP 4x TMDS
5144 Radeon QD
+ 1002 0008 Radeon 7000/Radeon VE
+ 1002 0009 Radeon 7000/Radeon
+ 1002 000a Radeon 7000/Radeon
+ 1002 001a Radeon 7000/Radeon
+ 1002 0029 Radeon AIW
+ 1002 0038 Radeon 7000/Radeon
+ 1002 0039 Radeon 7000/Radeon
+ 1002 008a Radeon 7000/Radeon
+ 1002 00ba Radeon 7000/Radeon
+ 1002 0139 Radeon 7000/Radeon
+ 1002 028a Radeon 7000/Radeon
+ 1002 02aa Radeon AIW
+ 1002 053a Radeon 7000/Radeon
5145 Radeon QE
5146 Radeon QF
5147 Radeon QG
+ 5148 Radeon R200 QH [Radeon 8500]
+ 1002 0152 FireGL 8800
+ 1002 0172 FireGL 8700
+ 5149 Radeon R200 QI
+ 514a Radeon R200 QJ
+ 514b Radeon R200 QK
+ 514c Radeon R200 QL [Radeon 8500 LE]
+ 1002 003a Radeon R200 QL [Radeon 8500 LE]
+ 1002 013a Radeon 8500
+ 5157 Radeon 7500 QW
+ 1002 013a Radeon 7500
+ 174b 7161 Radeon RV200 QW [Radeon 7500 LE]
+ 5158 Radeon 7500 QX
5159 Radeon VE QY
+ 1002 000a Radeon 7000/Radeon VE
+ 1002 0038 Radeon 7000/Radeon VE
+ 1002 003a Radeon 7000/Radeon VE
+ 1002 00ba Radeon 7000/Radeon VE
+ 1002 013a Radeon 7000/Radeon VE
+ 174b 7112 Radeon 7000 64M TVO
515a Radeon VE QZ
- 5245 Rage 128 RE
- 5246 Rage 128 RF
+ 5168 Radeon R200 Qh
+ 5169 Radeon R200 Qi
+ 516a Radeon R200 Qj
+ 516b Radeon R200 Qk
+ 5245 Rage 128 RE/SG
+ 1002 0008 Xpert 128
+ 1002 0028 Rage 128 AIW
+ 1002 0029 Rage 128 AIW
+ 1002 0068 Rage 128 AIW
+ 5246 Rage 128 RF/SG AGP
+ 1002 0004 Magnum/Xpert 128/Xpert 99
+ 1002 0008 Magnum/Xpert128/X99/Xpert2000
+ 1002 0028 Rage 128 AIW AGP
+ 1002 0044 Rage Fury/Xpert 128/Xpert 2000
+ 1002 0068 Rage 128 AIW AGP
+ 1002 0448 Rage Fury
5247 Rage 128 RG
- 524b Rage 128 RK
- 524c Rage 128 RL
- 5345 Rage 128 SE
- 5346 Rage 128 SF
- 5347 Rage 128 SG
- 5348 Rage 128 4x
- 534b Rage 128 SK
- 534c Rage 128 SL
- 534d Rage 128 SM
- 534e Rage 128 SN
+ 524b Rage 128 RK/VR
+ 524c Rage 128 RL/VR AGP
+ 1002 0008 Xpert 99/Xpert 2000
+ 1002 0088 Xpert 99
+ 5345 Rage 128 SE/4x
+ 5346 Rage 128 SF/4x AGP 2x
+ 5347 Rage 128 SG/4x AGP 4x
+ 5348 Rage 128 SH
+ 534b Rage 128 SK/4x
+ 534c Rage 128 SL/4x AGP 2x
+ 534d Rage 128 SM/4x AGP 4x
+ 1002 0008 Xpert 99/Xpert 2000
+ 1002 0018 Xpert 2000
+ 534e Rage 128 4x
5354 Mach 64 VT
1002 5654 Mach 64 reference
- 5446 Rage 128 Pro TF
- 544c Rage 128 Pro TL
- 5452 Rage 128 Pro TR
+ 5446 Rage 128 Pro Ultra TF
+ 1002 0004 Rage Fury Pro
+ 1002 0008 Rage Fury Pro/Xpert 2000 Pro
+ 1002 0018 Rage Fury Pro/Xpert 2000 Pro
+ 1002 0028 Rage 128 AIW Pro AGP
+ 1002 0029 Rage 128 AIW
+ 1002 002a Rage 128 AIW Pro AGP
+ 1002 002b Rage 128 AIW
+ 1002 0048 Xpert 2000 Pro
+ 544c Rage 128 Pro Ultra TL
+ 5452 Rage 128 Pro Ultra TR
+ 1002 001c Rage 128 Pro 4XL
+ 103c 1279 Rage 128 Pro 4XL
+ 5453 Rage 128 Pro Ultra TS
+ 5454 Rage 128 Pro Ultra TT
+ 5455 Rage 128 Pro Ultra TU
5654 264VT [Mach64 VT]
1002 5654 Mach64VT Reference
5655 264VT3 [Mach64 VT3]
@@ -255,7 +401,7 @@
000c 82C541 [Lynx]
000d 82C543 [Lynx]
0101 82C532
- 0102 82C534
+ 0102 82C534 [Eagle]
0103 82C538
0104 82C535
0105 82C147
@@ -290,11 +436,17 @@
0001 DP83810
0002 87415/87560 IDE
000e 87560 Legacy I/O
- 000f OHCI Compliant FireWire Controller
- 0011 National PCI System I/O
+ 000f FireWire Controller
+ 0011 NS87560 National PCI System I/O
0012 USB Controller
0020 DP83815 (MacPhyter) Ethernet Controller
0022 DP83820 10/100/1000 Ethernet Controller
+ 0500 SCx200 Bridge
+ 0501 SCx200 SMI
+ 0502 SCx200 IDE
+ 0503 SCx200 Audio
+ 0504 SCx200 Video
+ 0505 SCx200 XBus
d001 87410 IDE
100c Tseng Labs Inc
3202 ET4000/W32p rev A
@@ -305,9 +457,10 @@
4702 ET6300
100d AST Research Inc
100e Weitek
- 9000 P9000
- 9001 P9000
- 9100 P9100
+ 9000 P9000 Viper
+ 9001 P9000 Viper
+ 9002 P9000 Viper
+ 9100 P9100 Viper Pro/SE
1010 Video Logic, Ltd.
1011 Digital Equipment Corporation
0001 DECchip 21050
@@ -316,6 +469,7 @@
0007 NVRAM [Zephyr NVRAM]
0008 KZPSA [KZPSA]
0009 DECchip 21140 [FasterNet]
+ 1025 0310 21140 Fast Ethernet
10b8 2001 SMC9332BDT EtherPower 10/100
10b8 2002 SMC9332BVT EtherPower T4 10/100
10b8 2003 SMC9334BDT EtherPower 10/100 (1-port)
@@ -328,6 +482,7 @@
1186 1112 DFE-570TX Fast Ethernet
1186 1140 DFE-660 Cardbus Ethernet 10/100
1186 1142 DFE-660 Cardbus Ethernet 10/100
+ 11f6 0503 Freedomline Fast Ethernet
1282 9100 AEF-380TXD Fast Ethernet
1385 1100 FA310TX Fast Ethernet
2646 0001 KNE100TX Fast Ethernet
@@ -338,11 +493,16 @@
1186 0100 DE-530+
0016 DGLPB [OPPO]
0019 DECchip 21142/43
- 1011 500b DE500 Fast Ethernet
+ 1011 500a DE500A Fast Ethernet
+ 1011 500b DE500B Fast Ethernet
1014 0001 10/100 EtherJet Cardbus
1025 0315 ALN315 Fast Ethernet
+ 1033 800c PC-9821-CS01
+ 1033 800d PC-9821NR-B06
108d 0016 Rapidfire 2327 10/100 Ethernet
+ 108d 0017 GoCard 2250 Ethernet 10/100 Cardbus
10b8 2005 SMC8032DT Extreme Ethernet 10/100
+ 10b8 8034 SMC8034 Extreme Ethernet 10/100
10ef 8169 Cardbus Fast Ethernet
1109 2a00 ANA-6911A/TX Fast Ethernet
1109 2b00 ANA-6911A/TXC Fast Ethernet
@@ -355,25 +515,38 @@
1186 1100 DFE-500TX Fast Ethernet
1186 1101 DFE-500TX Fast Ethernet
1186 1102 DFE-500TX Fast Ethernet
+ 1259 2800 AT-2800Tx Fast Ethernet
1266 0004 Eagle Fast EtherMAX
12af 0019 NetFlyer Cardbus Fast Ethernet
1374 0001 Cardbus Ethernet Card 10/100
+ 1374 0002 Cardbus Ethernet Card 10/100
+ 1374 0007 Cardbus Ethernet Card 10/100
+ 1374 0008 Cardbus Ethernet Card 10/100
1395 0001 10/100 Ethernet CardBus PC Card
+ 13d1 ab01 EtherFast 10/100 Cardbus (PCMPC200)
8086 0001 EtherExpress PRO/100 Mobile CardBus 32
+ 001a Farallon PN9000SX
0021 DECchip 21052
0022 DECchip 21150
0023 DECchip 21150
0024 DECchip 21152
0025 DECchip 21153
0026 DECchip 21154
+ 0034 56k Modem Cardbus
+ 1374 0003 56k Modem Cardbus
0045 DECchip 21553
0046 DECchip 21554
+ 0e11 4050 Integrated Smart Array
+ 0e11 4051 Integrated Smart Array
+ 0e11 4058 Integrated Smart Array
103c 10c2 Hewlett-Packard NetRAID-4M
+ 12d9 000a VoIP PCI Gateway
9005 0365 Adaptec 5400S
9005 1364 Dell PowerEdge RAID Controller 2
9005 1365 Dell PowerEdge RAID Controller 2
+ e4bf 1000 CC8-1-BLUES
1065 StrongARM DC21285
- 1069 0020 DAC960P
+ 1069 0020 DAC960P / DAC1164P
1012 Micronics Computers Inc
1013 Cirrus Logic
0038 GD 7548
@@ -391,10 +564,13 @@
00d0 GD 5462
00d2 GD 5462 [Laguna I]
00d4 GD 5464 [Laguna]
+ 00d5 GD 5464 BD [Laguna]
00d6 GD 5465 [Laguna]
+ 13ce 8031 Barco Metheus 2 Megapixel, Dual Head
+ 13cf 8031 Barco Metheus 2 Megapixel, Dual Head
00e8 GD 5436U
1100 CL 6729
- 1110 PD 6832
+ 1110 PD 6832 PCMCIA/CardBus Ctrlr
1112 PD 6834 PCMCIA/CardBus Ctrlr
1113 PD 6833 PCMCIA/CardBus Ctrlr
1200 GD 7542 [Nordic]
@@ -405,6 +581,8 @@
1014 1010 CS4610 SoundFusion Audio Accelerator
6003 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
1013 4280 Crystal SoundFusion PCI Audio Accelerator
+ 1681 0050 Hercules Game Theater XP
+ 6004 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
6005 Crystal CS4281 PCI Audio
1013 4281 Crystal CS4281 PCI Audio
10cf 10a8 Crystal CS4281 PCI Audio
@@ -424,6 +602,7 @@
0017 CPU to PCI Bridge
0018 TR Auto LANstreamer
001b GXT-150P
+ 001c Carrera
001d 82G2675
0020 MCA
0022 IBM27-82351
@@ -464,11 +643,14 @@
00b7 256-bit Graphics Rasterizer [Fire GL1]
1902 00b8 Fire GL1
00be ATM 622MBPS Controller (1410be00)
+ 00fc CPC710 Dual Bridge and Memory Controller (PCI-64)
+ 0105 CPC710 Dual Bridge and Memory Controller (PCI-32)
0142 Yotta Video Compositor Input
1014 0143 Yotta Input Controller (ytin)
0144 Yotta Video Compositor Output
1014 0145 Yotta Output Controller (ytout)
0156 405GP PLB to PCI Bridge
+ 01a7 PCI-X to PCI-X Bridge
01bd Netfinity ServeRAID controller
01be ServeRAID-4M
01bf ServeRAID-4L
@@ -497,20 +679,28 @@
c24a 90C
101e American Megatrends Inc.
1960 MegaRAID
+ 101e 0471 MegaRAID 471 Enterprise 1600 RAID Controller
+ 101e 0475 MegaRAID 475 Express 500 RAID Controller
+ 101e 0493 MegaRAID 493 Elite 1600 RAID Controller
1028 0471 PowerEdge RAID Controller 3/QC
+ 1028 0475 PowerEdge RAID Controller 3/SC
1028 0493 PowerEdge RAID Controller 3/DC
- 9010 MegaRAID
+ 1028 0511 PowerEdge Cost Effective RAID Controller ATA100/4Ch
+ 9010 MegaRAID 428 Ultra RAID Controller
9030 EIDE Controller
9031 EIDE Controller
9032 EIDE & SCSI Controller
9033 SCSI Controller
9040 Multimedia card
- 9060 MegaRAID
+ 9060 MegaRAID 434 Ultra GT RAID Controller
+ 9063 MegaRAC
+ 101e 0767 Dell Remote Assistant Card 2
101f PictureTel
1020 Hitachi Computer Products
1021 OKI Electric Industry Co. Ltd.
1022 Advanced Micro Devices [AMD]
2000 79c970 [PCnet LANCE]
+ 1014 2000 NetFinity 10/100 Fast Ethernet
103c 104c Ethernet with LAN remote power Adapter
103c 1064 Ethernet with LAN remote power Adapter
103c 1065 Ethernet with LAN remote power Adapter
@@ -519,15 +709,21 @@
103c 10ea Ethernet with LAN remote power Adapter
1113 1220 EN1220 10/100 Fast Ethernet
1259 2450 AT-2450 10/100 Fast Ethernet
+ 1259 2454 AT-2450v4 10Mb Ethernet Adapter
1259 2700 AT-2700TX 10/100 Fast Ethernet
1259 2701 AT-2700FX 100Mb Ethernet
2001 79c978 [HomePNA]
+ 1092 0a78 Multimedia Home Network Adapter
+ 1668 0299 ActionLink Home Network Adapter
2020 53c974 [PCscsi]
2040 79c974
+ 3000 ELanSC520 Microcontroller
7006 AMD-751 [Irongate] System Controller
7007 AMD-751 [Irongate] AGP Bridge
- 700e AMD-760 [Irongate] System Controller
- 700f AMD-760 [Irongate] AGP Bridge
+ 700c AMD-760 MP [IGD4-2P] System Controller
+ 700d AMD-760 MP [IGD4-2P] AGP Bridge
+ 700e AMD-760 [IGD4-1P] System Controller
+ 700f AMD-760 [IGD4-1P] AGP Bridge
7400 AMD-755 [Cobra] ISA
7401 AMD-755 [Cobra] IDE
7403 AMD-755 [Cobra] ACPI
@@ -536,15 +732,29 @@
7409 AMD-756 [Viper] IDE
740b AMD-756 [Viper] ACPI
740c AMD-756 [Viper] USB
- 7410 AMD-765 [Viper] ISA
- 7411 AMD-765 [Viper] IDE
- 7413 AMD-765 [Viper] ACPI
- 7414 AMD-765 [Viper] USB
- 7440 AMD-768 [??] ISA
- 7441 AMD-768 [??] IDE
- 7443 AMD-768 [??] ACPI
- 7448 AMD-768 [??] PCI
- 7449 AMD-768 [??] USB
+ 7410 AMD-766 [ViperPlus] ISA
+ 7411 AMD-766 [ViperPlus] IDE
+ 7413 AMD-766 [ViperPlus] ACPI
+ 7414 AMD-766 [ViperPlus] USB
+ 7440 AMD-768 [Opus] ISA
+ 1043 8044 A7M-D Mainboard
+ 7441 AMD-768 [Opus] IDE
+ 7443 AMD-768 [Opus] ACPI
+ 1043 8044 A7M-D Mainboard
+ 7445 AMD-768 [Opus] Audio
+ 7448 AMD-768 [Opus] PCI
+ 7449 AMD-768 [Opus] USB
+ 7454 AMD-8151 System Controller
+ 7455 AMD-8151 AGP Bridge
+ 7460 AMD-8111 PCI
+ 7461 AMD-8111 USB
+ 7462 AMD-8111 Ethernet
+ 7468 AMD-8111 LPC
+ 7469 AMD-8111 IDE
+ 746a AMD-8111 SMBus 2.0
+ 746b AMD-8111 ACPI
+ 746d AMD-8111 AC97 Audio
+ 756b AMD-8111 ACPI
1023 Trident Microsystems
0194 82C194
2000 4DWave DX
@@ -557,6 +767,7 @@
8520 CyberBlade i1
0e11 b16e CyberBlade i1 AGP
1023 8520 CyberBlade i1 AGP
+ 8820 CyberBlade XPAi1
9320 TGUI 9320
9350 GUI Accelerator
9360 Flat panel GUI Accelerator
@@ -574,13 +785,14 @@
9470 TGUI 9470
9520 Cyber 9520
9525 Cyber 9525
+ 10cf 1094 Lifebook C6155
9540 Cyber 9540
- 9660 TGUI 9660/968x/968x
+ 9660 TGUI 9660/938x/968x
9680 TGUI 9680
9682 TGUI 9682
9683 TGUI 9683
9685 ProVIDIA 9685
- 9750 3DIm`age 975
+ 9750 3DImage 9750
1014 9750 3DImage 9750
1023 9750 3DImage 9750
9753 TGUI 9753
@@ -620,6 +832,7 @@
1621 M1621 Northbridge [Aladdin-Pro II]
1631 M1631 Northbridge+3D Graphics [Aladdin TNT2]
1641 M1641 Northbridge [Aladdin-Pro IV]
+ 1647 M1647 [MaGiK1] PCI North Bridge
3141 M3141
3143 M3143
3145 M3145
@@ -629,35 +842,48 @@
3307 M3307 MPEG-I Video Controller
3309 M3309 MPEG-II Video w/ Software Audio Decoder
3321 M3321 MPEG-II Audio/Video Decoder
- 5212 ALI M4803
+ 5212 M4803
5215 ALI PCI EIDE Controller
5217 M5217H
5219 M5219
5225 M5225
5229 M5229
5235 M5235
- 5237 ALI M5237 PCI USB Host Controller
+ 5237 M5237 PCI USB Host Controller
5240 EIDE Controller
5241 PCMCIA Bridge
5242 General Purpose Controller
5243 PCI to PCI Bridge Controller
5244 Floppy Disk Controller
- 5247 ALI M1541 PCI to PCI Bridge
- 5251 M5251 P1394 OHCI Controller
- 5427 ALI PCI to AGP Bridge
- 5451 ALI M5451 PCI AC-Link Controller Audio Device
- 5453 ALI M5453 PCI AC-Link Controller Modem Device
- 7101 ALI M7101 PCI PMU Power Management Controller
- 10b9 7101 ALI M7101 PCI PMU Power Management Controller
+ 5247 M1541 PCI to PCI Bridge
+ 5251 M5251 P1394 Controller
+ 5427 PCI to AGP Bridge
+ 5451 M5451 PCI AC-Link Controller Audio Device
+ 5453 M5453 PCI AC-Link Controller Modem Device
+ 7101 M7101 PCI PMU Power Management Controller
+ 10b9 7101 M7101 PCI PMU Power Management Controller
1028 Dell Computer Corporation
0001 PowerEdge Expandable RAID Controller 2/Si
- 0002 PowerEdge Expandable RAID Controller 3/Di
+ 1028 0001 PowerEdge Expandable RAID Controller 2/Si
+ 0002 PowerEdge Expandable RAID Controller 3
+ 1028 0002 PowerEdge Expandable RAID Controller 3/Di
+ 1028 00d1 PowerEdge Expandable RAID Controller 3/Di
+ 1028 00d9 PowerEdge Expandable RAID Controller 3/Di
0003 PowerEdge Expandable RAID Controller 3/Si
+ 1028 0003 PowerEdge Expandable RAID Controller 3/Si
0004 PowerEdge Expandable RAID Controller 3/Si
+ 1028 00d0 PowerEdge Expandable RAID Controller 3/Si
0005 PowerEdge Expandable RAID Controller 3/Di
0006 PowerEdge Expandable RAID Controller 3/Di
+ 0007 Remote Assistant Card 3
0008 PowerEdge Expandable RAID Controller 3/Di
- 000a PowerEdge Expandable RAID Controller 3/Di
+ 000a PowerEdge Expandable RAID Controller 3
+ 1027 0121 PowerEdge Expandable RAID Controller 3/Di
+ 1028 0106 PowerEdge Expandable RAID Controller 3/Di
+ 1028 011b PowerEdge Expandable RAID Controller 3/Di
+ 000c Embedded Systems Management Device 4
+ 000e PowerEdge Expandable RAID Controller
+ 000f PowerEdge Expandable RAID Controller 4/Di
1029 Siemens Nixdorf IS
102a LSI Logic
0000 HYDRA
@@ -698,9 +924,23 @@
102b ca6c Millennium G250 AGP
102b dbbc Millennium G200 AGP
102b dbc2 Millennium G200 MMS (Dual G200)
+ 102b dbc3 G200 Multi-Monitor
102b dbc8 Millennium G200 MMS (Dual G200)
+ 102b dbd2 G200 Multi-Monitor
+ 102b dbd3 G200 Multi-Monitor
+ 102b dbd4 G200 Multi-Monitor
+ 102b dbd5 G200 Multi-Monitor
+ 102b dbd8 G200 Multi-Monitor
+ 102b dbd9 G200 Multi-Monitor
102b dbe2 Millennium G200 MMS (Quad G200)
+ 102b dbe3 G200 Multi-Monitor
102b dbe8 Millennium G200 MMS (Quad G200)
+ 102b dbf2 G200 Multi-Monitor
+ 102b dbf3 G200 Multi-Monitor
+ 102b dbf4 G200 Multi-Monitor
+ 102b dbf5 G200 Multi-Monitor
+ 102b dbf8 G200 Multi-Monitor
+ 102b dbf9 G200 Multi-Monitor
102b f806 Mystique G200 Video AGP
102b ff00 MGA-G200 AGP
102b ff02 Mystique G200 AGP
@@ -708,16 +948,18 @@
102b ff04 Marvel G200 AGP
110a 0032 MGA-G200 AGP
0525 MGA G400 AGP
- 0e11 b16f Matrox MGA-G400 AGP
+ 0e11 b16f MGA-G400 AGP
102b 0328 Millennium G400 16Mb SDRAM
102b 0338 Millennium G400 16Mb SDRAM
102b 0378 Millennium G400 32Mb SDRAM
102b 0541 Millennium G450 Dual Head
102b 0542 Millennium G450 Dual Head LX
- 102b 0641 Millennium G450 32Mb SDRAM
+ 102b 0543 Millennium G450 Single Head LX
+ 102b 0641 Millennium G450 32Mb SDRAM Dual Head
102b 0642 Millennium G450 32Mb SDRAM Dual Head LX
+ 102b 0643 Millennium G450 32Mb SDRAM Single Head LX
102b 07c0 Millennium G450 Dual Head LE
- 102b 07c1 Millennium G450 SDR Dual Head
+ 102b 07c1 Millennium G450 SDR Dual Head LE
102b 0d41 Millennium G450 Dual Head PCI
102b 0d42 Millennium G450 Dual Head LX PCI
102b 0e00 Marvel G450 eTV
@@ -733,11 +975,26 @@
102b 2159 Millennium G400 Dual Head 16Mb
102b 2179 Millennium G400 MAX/Dual Head 32Mb
102b 217d Millennium G400 Dual Head Max
+ 102b 23c0 Millennium G450
+ 102b 23c1 Millennium G450
+ 102b 23c2 Millennium G450 DVI
+ 102b 23c3 Millennium G450 DVI
102b 2f58 Millennium G400
102b 2f78 Millennium G400
102b 3693 Marvel G400 AGP
- 1705 0001 Millennium G450 32MB SGRAM
- b16f 0e11 Matrox MGA-G400 AGP
+ 102b 5dd0 4Sight II
+ 102b 5f50 4Sight II
+ 102b 5f51 4Sight II
+ 102b 5f52 4Sight II
+ 102b 9010 Millennium G400 Dual Head
+ 1458 0400 GA-G400
+ 1705 0001 Digital First Millennium G450 32MB SGRAM
+ 1705 0002 Digital First Millennium G450 16MB SGRAM
+ 1705 0003 Digital First Millennium G450 32MB
+ 1705 0004 Digital First Millennium G450 16MB
+ b16f 0e11 MGA-G400 AGP
+ 0527 MGA Parhelia AGP
+ 102b 0840 Parhelia 128Mb
0d10 MGA Ultima/Impression
1000 MGA G100 [Productiva]
102b ff01 Productiva G100
@@ -752,12 +1009,15 @@
110a 001e MGA-G100 AGP
2007 MGA Mistral
2527 MGA G550 AGP
+ 102b 0f83 Millennium G550
102b 0f84 Millennium G550 Dual Head DDR 32Mb
+ 102b 1e41 Millennium G550
4536 VIA Framegrabber
6573 Shark 10/100 Multiport SwitchNIC
102c Chips and Technologies
00b8 F64310
00c0 F69000 HiQVideo
+ 102c 00c0 F69000 HiQVideo
00d0 F65545
00d8 F65545
00dc F65548
@@ -768,12 +1028,14 @@
00f0 F68554
00f4 F68554 HiQVision
00f5 F68555
+ 0c30 F69030
102d Wyse Technology Inc.
50dc 3328 Audio
102e Olivetti Advanced Technology
102f Toshiba America
0009 r4x00
0020 ATM Meteor 155
+ 102f 00f8 ATM Meteor 155
1030 TMC Research
1031 Miro Computer Products AG
5601 DC20 ASIC
@@ -796,6 +1058,8 @@
0029 PowerVR PCX1
002a PowerVR 3D
0035 USB
+ 1179 0001 USB
+ 12ee 7000 Root Hub
003e NAPCCARD Cardbus Controller
0046 PowerVR PCX2 [midas]
005a Vrc5074 [Nile 4]
@@ -812,6 +1076,11 @@
0074 56k Voice Modem
1033 8014 RCV56ACF 56k Voice Modem
009b Vrc5476
+ 00a6 VRC5477 AC97
+ 00cd IEEE 1394 [OrangeLink] Host Controller
+ 12ee 8011 Root hub
+ 00e0 USB 2.0
+ 12ee 7001 Root hub
1034 Framatome Connectors USA Inc.
1035 Comp. & Comm. Research Lab
1036 Future Domain Corp.
@@ -825,10 +1094,12 @@
0008 85C503/5513
0009 ACPI
0018 SiS85C503/5513 (LPC Bridge)
- 0200 5597/5598 VGA
+ 0200 5597/5598/6326 VGA
1039 0000 SiS5597 SVGA (Shared RAM)
0204 82C204
0205 SG86C205
+ 0300 300/200
+ 107d 2720 Leadtek WinFast VR300
0406 85C501/2
0496 85C496
0530 530 Host
@@ -837,10 +1108,19 @@
0601 85C601
0620 620 Host
0630 630 Host
+ 0633 633 Host
+ 0635 635 Host
+ 0645 645 Host
+ 0646 645DX Host
+ 0650 650 Host
0730 730 Host
+ 0733 733 Host
0735 735 Host
+ 0740 740 Host
+ 0745 745 Host
0900 SiS900 10/100 Ethernet
1039 0900 SiS900 10/100 Ethernet Adapter
+ 0961 SiS961 [MuTIOL Media IO]
3602 83C602
5107 5107
5300 SiS540 PCI Display Adapter
@@ -862,7 +1142,7 @@
6300 SiS630 GUI Accelerator+3D
6306 6306 3D-AGP
1039 6306 SiS530,620 GUI Accelerator+3D
- 6326 86C326
+ 6326 86C326 5598/6326
1039 6326 SiS6326 GUI Accelerator
1092 0a50 SpeedStar A50
1092 0a70 SpeedStar A70
@@ -870,8 +1150,9 @@
1092 4920 SpeedStar A70
1569 6326 SiS6326 GUI Accelerator
7001 7001
- 7007 OHCI Compliant FireWire Controller
+ 7007 FireWire Controller
7012 SiS7012 PCI Audio Accelerator
+ 7013 56k Winmodem (Smart Link HAMR5600 compatible)
7016 SiS7016 10/100 Ethernet Adapter
1039 7016 SiS7016 10/100 Ethernet Adapter
7018 SiS PCI Audio Accelerator
@@ -901,15 +1182,36 @@
103b Tatung Co. of America
103c Hewlett-Packard Company
1005 A4977A Visualize EG
- 1030 J2585A
- 1031 J2585B
+ 1006 Visualize FX6
+ 1008 Visualize FX4
+ 100a Visualize FX2
+ 1028 Tach TL Fibre Channel Host Adapter
+ 1029 Tach XL2 Fibre Channel Host Adapter
+ 107e 000f Interphase 5560 Fibre Channel Adapter
+ 9004 9210 1Gb/2Gb Family Fibre Channel Controller
+ 9004 9211 1Gb/2Gb Family Fibre Channel Controller
+ 102a Tach TS Fibre Channel Host Adapter
+ 107e 000e Interphase 5540/5541 Fibre Channel Adapter
+ 9004 9110 1Gb/2Gb Family Fibre Channel Controller
+ 9004 9111 1Gb/2Gb Family Fibre Channel Controller
+ 1030 J2585A DeskDirect 10/100VG NIC
+ 1031 J2585B HP 10/100VG PCI LAN Adapter
103c 1040 J2973A DeskDirect 10BaseT NIC
103c 1041 J2585B DeskDirect 10/100VG NIC
103c 1042 J2970A DeskDirect 10BaseT/2 NIC
1040 J2973A DeskDirect 10BaseT NIC
1041 J2585B DeskDirect 10/100 NIC
1042 J2970A DeskDirect 10BaseT/2 NIC
+ 1048 Diva Serial [GSP] Multiport UART
+ 103c 1049 Tosca Console
+ 103c 104a Tosca Secondary
+ 103c 104b Maestro SP2
+ 103c 1223 Halfdome Console
+ 103c 1226 Keystone SP2
+ 103c 1227 Powerbar SP2
+ 103c 1282 Everest SP2
1064 79C970 PCnet Ethernet Controller
+ 108b Visualize FXe
10c1 NetServer Smart IRQ Router
10ed TopTools Remote Control
1200 82557B 10/100 NIC
@@ -917,8 +1219,12 @@
121a NetServer SMIC Controller
121b NetServer Legacy COM Port Decoder
121c NetServer PCI COM Port Decoder
- 2910 E2910A
- 2925 E2925A
+ 1229 zx1 System Bus Adapter
+ 122a zx1 I/O Controller
+ 122e zx1 Local Bus Adapter
+ 1290 Auxiliary Diva Serial Port
+ 2910 E2910A PCIBus Exerciser
+ 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
103e Solliday Engineering
103f Synopsys/Logic Modeling Group
1040 Accelgraphics Inc.
@@ -930,11 +1236,49 @@
3010 Samurai_1
3020 Samurai_IDE
1043 Asustek Computer, Inc.
+ 0675 ISDNLink P-IN100-ST-D
+ 4057 V8200 GeForce 3
1044 Distributed Processing Technology
1012 Domino RAID Engine
a400 SmartCache/Raid I-IV Controller
a500 PCI Bridge
a501 SmartRAID V Controller
+ 1044 c001 PM1554U2 Ultra2 Single Channel
+ 1044 c002 PM1654U2 Ultra2 Single Channel
+ 1044 c003 PM1564U3 Ultra3 Single Channel
+ 1044 c004 PM1564U3 Ultra3 Dual Channel
+ 1044 c005 PM1554U2 Ultra2 Single Channel (NON ACPI)
+ 1044 c00a PM2554U2 Ultra2 Single Channel
+ 1044 c00b PM2654U2 Ultra2 Single Channel
+ 1044 c00c PM2664U3 Ultra3 Single Channel
+ 1044 c00d PM2664U3 Ultra3 Dual Channel
+ 1044 c00e PM2554U2 Ultra2 Single Channel (NON ACPI)
+ 1044 c00f PM2654U2 Ultra2 Single Channel (NON ACPI)
+ 1044 c014 PM3754U2 Ultra2 Single Channel (NON ACPI)
+ 1044 c015 PM3755U2B Ultra2 Single Channel (NON ACPI)
+ 1044 c016 PM3755F Fibre Channel (NON ACPI)
+ 1044 c01e PM3757U2 Ultra2 Single Channel
+ 1044 c01f PM3757U2 Ultra2 Dual Channel
+ 1044 c020 PM3767U3 Ultra3 Dual Channel
+ 1044 c021 PM3767U3 Ultra3 Quad Channel
+ 1044 c028 PM2865U3 Ultra3 Single Channel
+ 1044 c029 PM2865U3 Ultra3 Dual Channel
+ 1044 c02a PM2865F Fibre Channel
+ 1044 c03c 2000S Ultra3 Single Channel
+ 1044 c03d 2000S Ultra3 Dual Channel
+ 1044 c03e 2000F Fibre Channel
+ 1044 c046 3000S Ultra3 Single Channel
+ 1044 c047 3000S Ultra3 Dual Channel
+ 1044 c048 3000F Fibre Channel
+ 1044 c050 5000S Ultra3 Single Channel
+ 1044 c051 5000S Ultra3 Dual Channel
+ 1044 c052 5000F Fibre Channel
+ 1044 c05a 2400A UDMA Four Channel
+ 1044 c05b 2400A UDMA Four Channel DAC
+ 1044 c064 3010S Ultra3 Dual Channel
+ 1044 c065 3010S Ultra3 Four Channel
+ 1044 c066 3010S Fibre Channel
+ a511 SmartRAID V Controller
1045 OPTi Inc.
a0f8 82C750 [Vendetta] USB Controller
c101 92C264
@@ -945,8 +1289,8 @@
c567 82C750 [Vendetta], device 0
c568 82C750 [Vendetta], device 1
c569 82C579 [Viper XPress+ Chipset]
- c621 82C621
- c700 82C700
+ c621 82C621 [Viper-M/N+]
+ c700 82C700 [FireStar]
c701 82C701 [FireStar Plus]
c814 82C814 [Firebridge 1]
c822 82C822
@@ -957,16 +1301,20 @@
c895 82C895
c935 EV1935 ECTIVA MachOne PCI Audio
d568 82C825 [Firebridge 2]
+ d721 IDE [FireStar]
1046 IPC Corporation, Ltd.
1047 Genoa Systems Corp
1048 Elsa AG
+ 0d22 Quadro4 900XGL [ELSA GLoria4 900XGL]
1000 QuickStep 1000
3000 QuickStep 3000
1049 Fountain Technologies, Inc.
104a SGS Thomson Microelectronics
0008 STG 2000X
0009 STG 1764X
+ 0981 DEC-Tulip compatible 10/100 Ethernet
1746 STG 1764X
+ 2774 DEC-Tulip compatible 10/100 Ethernet
3520 MPEG-II decoder card
104b BusLogic
0140 BT-946C (old) [multimaster 01]
@@ -978,6 +1326,13 @@
1000 Eagle i/f AS
3d04 TVP4010 [Permedia]
3d07 TVP4020 [Permedia 2]
+ 1011 4d10 Comet
+ 1040 000f AccelStar II
+ 1040 0011 AccelStar II
+ 1048 0a31 WINNER 2000
+ 1048 0a32 GLoria Synergy
+ 1048 0a35 GLoria Synergy
+ 107d 2633 WinFast 3D L2300
1092 0127 FIRE GL 1000 PRO
1092 0136 FIRE GL 1000 PRO
1092 0141 FIRE GL 1000 PRO
@@ -990,17 +1345,31 @@
1092 0156 FIRE GL 1000 PRO
1092 0157 FIRE GL 1000 PRO
1097 3d01 Jeronimo Pro
+ 1102 100f Graphics Blaster Extreme
3d3d 0100 Reference Permedia 2 3D
8000 PCILynx/PCILynx2 IEEE 1394 Link Layer Controller
e4bf 1010 CF1-1-SNARE
e4bf 1020 CF1-2-SNARE
- 8009 OHCI Compliant FireWire Controller
- 8019 TSB12LV23 OHCI Compliant IEEE-1394 Controller
+ 8009 FireWire Controller
+ 104d 8032 8032 OHCI i.LINK (IEEE 1394) Controller
+ 8017 PCI4410 FireWire Controller
+ 8019 TSB12LV23 IEEE-1394 Controller
11bd 000a Studio DV500-1394
11bd 000e Studio DV
e4bf 1010 CF2-1-CYMBAL
+ 8020 TSB12LV26 IEEE-1394 Controller (Link)
+ 8021 TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated)
+ 104d 80df Vaio PCG-FX403
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 8022 TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link)
+ 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
+ 8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
+ 8026 TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)
+ 8027 PCI4451 IEEE-1394 Controller
+ 1028 00e6 PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)
a001 TDC1570
a100 TDC1561
+ a102 TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f
ac10 PCI1050
ac11 PCI1053
ac12 PCI1130
@@ -1017,14 +1386,24 @@
ac1e PCI1211
ac1f PCI1251B
ac20 TI 2030
+ ac21 PCI2031
+ ac22 PCI2032 PCI Docking Bridge
+ ac23 PCI2250 PCI-to-PCI Bridge
+ ac28 PCI2050 PCI-to-PCI Bridge
ac30 PCI1260 PC card Cardbus Controller
ac40 PCI4450 PC card Cardbus Controller
ac41 PCI4410 PC card Cardbus Controller
ac42 PCI4451 PC card Cardbus Controller
+ 1028 00e6 PCI4451 PC card CardBus Controller (Dell Inspiron 8100)
ac50 PCI1410 PC card Cardbus Controller
ac51 PCI1420
+ 1014 023b ThinkPad T23 (2647-4MG)
+ 10cf 1095 Lifebook C6155
+ e4bf 1000 CP2-2-HIPHOP
ac52 PCI1451 PC card Cardbus Controller
ac53 PCI1421 PC card Cardbus Controller
+ ac55 PCI1250 PC card Cardbus Controller
+ ac60 PCI2040 PCI to DSP Bridge Controller
fe00 FireWire Host Controller
fe03 12C01A FireWire Host Controller
104d Sony Corporation
@@ -1054,20 +1433,22 @@
1052 ?Young Micro Systems
1053 Young Micro Systems
1054 Hitachi, Ltd
-1055 EFAR Microsystems
- 9130 EIDE Controller
- 9460 PCI to ISA Bridge
- 9462 USB Universal Host Controller [OHCI]
- 9463 Power Management Controller [Bridge]
+1055 Efar Microsystems
+ 9130 SLC90E66 [Victory66] IDE
+ 9460 SLC90E66 [Victory66] ISA
+ 9462 SLC90E66 [Victory66] USB
+ 9463 SLC90E66 [Victory66] ACPI
1056 ICL
# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this.
1057 Motorola
0001 MPC105 [Eagle]
0002 MPC106 [Grackle]
+ 0003 MPC8240 [Kahlua]
0100 MC145575 [HFC-PCI]
0431 KTI829c 100VG
1801 Audio I/O Controller (MIDI)
ecc0 0030 Layla
+ 18c0 MPC8265A/MPC8266
4801 Raven
4802 Falcon
4803 Hawk
@@ -1091,17 +1472,34 @@
14c8 0302 SM56 PCI Fax Modem
1668 0300 SM56 PCI Speakerphone Modem
1668 0302 SM56 PCI Fax Modem
+ 6400 MPC190 Security Processor (S1 family, encryption)
1058 Electronics & Telecommunications RSH
1059 Teknor Industrial Computers Inc
105a Promise Technology, Inc.
0d30 20265
+ 105a 4d33 Ultra100
+ 0d38 20263
+ 105a 4d39 Fasttrak66
+ 1275 20275
4d30 20267
+ 105a 4d33 Ultra100
+ 105a 4d39 Fasttrak100
4d33 20246
+ 105a 4d33 20246 IDE Controller
4d38 20262
+ 105a 4d30 Ultra Device on SuperTrak
+ 105a 4d33 Ultra66
+ 105a 4d39 Fasttrak66
4d68 20268
- 6268 20268R
+ 105a 4d68 Ultra100TX2
4d69 20269
+ 5275 PDC20276 IDE
+ 105a 0275 SuperTrak SX6000 IDE
5300 DC5300
+ 6268 20268R
+ 6269 PDC20271
+ 105a 6269 Fasttrack tx2
+ 7275 PDC20277
105b Foxconn International, Inc.
105c Wipro Infotech Limited
105d Number 9 Computer Company
@@ -1119,7 +1517,24 @@
105d 0009 Imagine 128 series 2e 4Mb DRAM
105d 000a Imagine 128 series 2 8Mb VRAM
105d 000b Imagine 128 series 2 8Mb H-VRAM
+ 11a4 000a Barco Metheus 5 Megapixel
+ 13cc 0000 Barco Metheus 5 Megapixel
+ 13cc 0004 Barco Metheus 5 Megapixel
+ 13cc 0005 Barco Metheus 5 Megapixel
+ 13cc 0006 Barco Metheus 5 Megapixel
+ 13cc 0008 Barco Metheus 5 Megapixel
+ 13cc 0009 Barco Metheus 5 Megapixel
+ 13cc 000a Barco Metheus 5 Megapixel
+ 13cc 000c Barco Metheus 5 Megapixel
493d Imagine 128 T2R [Ticket to Ride]
+ 11a4 000a Barco Metheus 5 Megapixel, Dual Head
+ 11a4 000b Barco Metheus 5 Megapixel, Dual Head
+ 13cc 0002 Barco Metheus 4 Megapixel, Dual Head
+ 13cc 0003 Barco Metheus 5 Megapixel, Dual Head
+ 13cc 0007 Barco Metheus 5 Megapixel, Dual Head
+ 13cc 0008 Barco Metheus 5 Megapixel, Dual Head
+ 13cc 0009 Barco Metheus 5 Megapixel, Dual Head
+ 13cc 000a Barco Metheus 5 Megapixel, Dual Head
5348 Revolution 4
105e Vtech Computers Ltd
105f Infotronic America Inc
@@ -1155,10 +1570,12 @@
1065 Texas Microsystems
1066 PicoPower Technology
0000 PT80C826
- 0001 PT86C52x [Vesuvius]
- 0002 PT80C524 [Nile]
+ 0001 PT86C521 [Vesuvius v1] Host Bridge
+ 0002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Master
+ 0003 PT86C524 [Nile] PCI-to-PCI Bridge
+ 0004 PT86C525 [Nile-II] PCI-to-PCI Bridge
0005 National PC87550 System Controller
- 8002 PT80C524 [Nile]
+ 8002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave
1067 Mitsubishi Electric
1002 VG500 [VolumePro Volume Rendering Accelerator]
1068 Diversified Technology
@@ -1166,7 +1583,9 @@
0001 DAC960P
0002 DAC960PD
0010 DAC960PX
- ba55 eXtremeRAID support Device
+ 0050 AcceleRAID 352/170/160 support Device
+ ba55 eXtremeRAID 1100 support Device
+ ba56 eXtremeRAID 2000/3000 support Device
106a Aten Research Inc
106b Apple Computer Inc.
0001 Bandit PowerPC host bridge
@@ -1179,11 +1598,21 @@
0017 Paddington Mac I/O
0018 UniNorth FireWire
0019 KeyLargo USB
- 001e UniNorth PCI
+ 001e UniNorth Internal PCI
001f UniNorth PCI
0020 UniNorth AGP
- 0021 UniNorth GMAC
+ 0021 UniNorth GMAC (Sun GEM)
0022 KeyLargo Mac I/O
+ 0024 UniNorth/Pangea GMAC (Sun GEM)
+ 0025 KeyLargo/Pangea Mac I/O
+ 0026 KeyLargo/Pangea USB
+ 0027 UniNorth/Pangea AGP
+ 0028 UniNorth/Pangea PCI
+ 0029 UniNorth/Pangea Internal PCI
+ 002d UniNorth 1.5 AGP
+ 002e UniNorth 1.5 PCI
+ 002f UniNorth 1.5 Internal PCI
+ 0030 UniNorth/Pangea FireWire
106c Hyundai Electronics America
8801 Dual Pentium ISA/PCI Motherboard
8802 PowerPC ISA/PCI Motherboard
@@ -1227,19 +1656,21 @@
1075 Advanced Integrations Research
1076 Chaintech Computer Co. Ltd
1077 QLogic Corp.
- 1016 QLA10160
- 1020 ISP1020
- 1022 ISP1022
- 1080 QLA1080
- 1216 QLA12160
+ 1016 ISP10160 Single Channel Ultra3 SCSI Processor
+ 1020 ISP1020 Fast-wide SCSI
+ 1022 ISP1022 Fast-wide SCSI
+ 1080 ISP1080 SCSI Host Adapter
+ 1216 ISP12160 Dual Channel Ultra3 SCSI Processor
101e 8471 QLA12160 on AMI MegaRAID
101e 8493 QLA12160 on AMI MegaRAID
- 1240 QLA1240
- 1280 QLA1280
- 2020 ISP2020A
- 2100 QLA2100
+ 1240 ISP1240 SCSI Host Adapter
+ 1280 ISP1280
+ 2020 ISP2020A Fast!SCSI Basic Adapter
+ 2100 QLA2100 64-bit Fibre Channel Adapter
+ 1077 0001 QLA2100 64-bit Fibre Channel Adapter
2200 QLA2200
- 2300 QLA2300
+ 2300 QLA2300 64-bit FC-AL Adapter
+ 2312 QLA2312 Fibre Channel Adapter
1078 Cyrix Corporation
0000 5510 [Grappa]
0001 PCI Master
@@ -1249,6 +1680,10 @@
0102 5530 IDE [Kahlua]
0103 5530 Audio [Kahlua]
0104 5530 Video [Kahlua]
+ 0400 ZFMicro PCI Bridge
+ 0401 ZFMicro Chipset SMI
+ 0402 ZFMicro Chipset IDE
+ 0403 ZFMicro Expansion Bus
1079 I-Bus
107a NetWorth
107b Gateway 2000
@@ -1256,9 +1691,22 @@
107d LeadTek Research Inc.
0000 P86C850
107e Interphase Corporation
- 0001 ATM Interface Card
+ 0001 5515 ATM Adapter [Flipper]
0002 100 VG AnyLan Controller
- 0008 155 Mbit ATM Controller
+ 0004 5526 Fibre Channel Host Adapter
+ 0005 x526 Fibre Channel Host Adapter
+ 0008 5525/5575 ATM Adapter (155 Mbit) [Atlantic]
+ 9003 5535-4P-BRI-ST
+ 9007 5535-4P-BRI-U
+ 9008 5535-1P-SR
+ 900c 5535-1P-SR-ST
+ 900e 5535-1P-SR-U
+ 9011 5535-1P-PRI
+ 9013 5535-2P-PRI
+ 9023 5536-4P-BRI-ST
+ 9027 5536-4P-BRI-U
+ 9031 5536-1P-PRI
+ 9033 5536-2P-PRI
107f Data Technology Corporation
0802 SL82C105
1080 Contaq Microsystems
@@ -1276,9 +1724,10 @@
1087 Cache Computer
1088 Microcomputer Systems (M) Son
1089 Data General Corporation
-108a Bit3 Computer Corp.
+108a SBS Technologies (formerly Bit3 Computer Corp.)
0001 VME Bridge Model 617
0010 VME Bridge Model 618
+ 0040 dataBLIZZARD
3000 VME Bridge Model 2706
108c Oakleigh Systems Inc.
108d Olicom
@@ -1331,6 +1780,7 @@
00a8 Speedstar 64
0550 Viper V550
08d4 Supra 2260 Modem
+ 094c SupraExpress 56i Pro
1092 Viper V330
6120 Maximum DVD
8810 Stealth SE
@@ -1374,8 +1824,12 @@
0647 PCI0647
0648 PCI0648
0649 PCI0649
+ 0e11 005d Integrated Ultra ATA-100 Dual Channel Controller
+ 0e11 007e Integrated Ultra ATA-100 IDE RAID Controller
+ 101e 0649 AMI MegaRAID IDE 100 Controller
0650 PBC0650A
0670 USB0670
+ 1095 0670 USB0670
0673 USB0673
0680 PCI0680
1096 Alacron
@@ -1389,17 +1843,23 @@
109c Megachips Corporation
109d Zida Technologies Ltd.
109e Brooktree Corporation
- 0350 Bt848 TV with DMA push
+ 0350 Bt848 Video Capture
0351 Bt849A Video capture
+ 0369 Bt878 Video Capture
+ 1002 0001 TV-Wonder
+ 1002 0003 TV-Wonder/VE
036c Bt879(??) Video Capture
13e9 0070 Win/TV (Video Section)
- 036e Bt878
+ 036e Bt878 Video Capture
0070 13eb WinTV/GO
+ 0070 ff01 Viewcast Osprey 200
+ 11bd 001c PCTV Sat (DBC receiver)
127a 0001 Bt878 Mediastream Controller NTSC
127a 0002 Bt878 Mediastream Controller PAL BG
127a 0003 Bt878a Mediastream Controller PAL BG
127a 0048 Bt878/832 Mediastream Controller
144f 3000 MagicTView CPH060 - Video
+ 1461 0004 AVerTV WDM Video Capture
14f1 0001 Bt878 Mediastream Controller NTSC
14f1 0002 Bt878 Mediastream Controller PAL BG
14f1 0003 Bt878a Mediastream Controller PAL BG
@@ -1407,7 +1867,7 @@
1851 1850 FlyVideo'98 - Video
1851 1851 FlyVideo II
1852 1852 FlyVideo'98 - Video (with FM Tuner)
- 036f Bt879
+ 036f Bt879 Video Capture
127a 0044 Bt879 Video Capture NTSC
127a 0122 Bt879 Video Capture PAL I
127a 0144 Bt879 Video Capture NTSC
@@ -1441,19 +1901,24 @@
1851 1850 FlyVideo'98
1851 1851 FlyVideo'98 EZ - video
1852 1852 FlyVideo'98 (with FM Tuner)
- 0878 Bt878
+ 0878 Bt878 Audio Capture
0070 13eb WinTV/GO
+ 0070 ff01 Viewcast Osprey 200
+ 1002 0001 TV-Wonder
+ 1002 0003 TV-Wonder/VE
+ 11bd 001c PCTV Sat (DBC receiver)
127a 0001 Bt878 Video Capture (Audio Section)
127a 0002 Bt878 Video Capture (Audio Section)
127a 0003 Bt878 Video Capture (Audio Section)
127a 0048 Bt878 Video Capture (Audio Section)
13e9 0070 Win/TV (Audio Section)
144f 3000 MagicTView CPH060 - Audio
+ 1461 0004 AVerTV WDM Audio Capture
14f1 0001 Bt878 Video Capture (Audio Section)
14f1 0002 Bt878 Video Capture (Audio Section)
14f1 0003 Bt878 Video Capture (Audio Section)
14f1 0048 Bt878 Video Capture (Audio Section)
- 0879 Bt879 Video Capture (Audio Section)
+ 0879 Bt879 Audio Capture
127a 0044 Bt879 Video Capture (Audio Section)
127a 0122 Bt879 Video Capture (Audio Section)
127a 0144 Bt879 Video Capture (Audio Section)
@@ -1480,7 +1945,7 @@
14f1 1522 Bt879 Video Capture (Audio Section)
14f1 1622 Bt879 Video Capture (Audio Section)
14f1 1722 Bt879 Video Capture (Audio Section)
- 0880 Bt880 Video Capture (Audio Section)
+ 0880 Bt880 Audio Capture
2115 BtV 2115 Mediastream controller
2125 BtV 2125 Mediastream controller
2164 BtV 2164
@@ -1550,9 +2015,28 @@
0001 i960 PCI bus interface
1076 VScom 800 8 port serial adaptor
1077 VScom 400 4 port serial adaptor
+ 1078 VScom 210 2 port serial and 1 port parallel adaptor
+ 1103 VScom 200 2 port serial adaptor
+ 1146 VScom 010 1 port parallel adaptor
+ 1147 VScom 020 2 port parallel adaptor
+ 2724 Thales PCSM Security Card
+ 9030 PCI <-> IOBus Bridge Hot Swap
+ 15ed 1002 MCCS 8-port Serial Hot Swap
+ 15ed 1003 MCCS 16-port Serial Hot Swap
9036 9036
9050 PCI <-> IOBus Bridge
10b5 2273 SH-ARC SoHard ARCnet card
+ 1522 0001 RockForce 4 Port V.90 Data/Fax/Voice Modem
+ 1522 0002 RockForce 2 Port V.90 Data/Fax/Voice Modem
+ 1522 0003 RockForce 6 Port V.90 Data/Fax/Voice Modem
+ 1522 0004 RockForce 8 Port V.90 Data/Fax/Voice Modem
+ 1522 0010 RockForce2000 4 Port V.90 Data/Fax/Voice Modem
+ 1522 0020 RockForce2000 2 Port V.90 Data/Fax/Voice Modem
+ 15ed 1000 Macrolink MCCS 8-port Serial
+ 15ed 1001 Macrolink MCCS 16-port Serial
+ 15ed 1002 Macrolink MCCS 8-port Serial Hot Swap
+ 15ed 1003 Macrolink MCCS 16-port Serial Hot Swap
+ d531 c002 PCIntelliCAN 2xSJA1000 CAN bus
d84d 4006 EX-4006 1P
d84d 4008 EX-4008 1P EPP/ECP
d84d 4014 EX-4014 2P
@@ -1570,12 +2054,15 @@
d84d 4065 EX-4065 8S(16C550) RS-232
d84d 4068 EX-4068 8S(16C650) RS-232
d84d 4078 EX-4078 2S(16C552) RS-232+1P
+ 9054 PCI <-> IOBus Bridge
+ 10b5 2455 Wessex Techology PHIL-PCI
9060 9060
906d 9060SD
125c 0640 Aries 16000P
906e 9060ES
9080 9080
10b5 9080 9080 [real subsystem ID not set]
+ 129d 0002 Aculab PCI Prosidy card
a001 GTEK Jetport II 2 port serial adaptor
c001 GTEK Cyclone 16/32 port serial adaptor
10b6 Madge Networks
@@ -1597,14 +2084,20 @@
000a Smart 100/16/4 PCI Ringnode
10b6 000a Smart 100/16/4 PCI Ringnode
000b 16/4 CardBus Adapter Mk2
+ 10b6 0008 16/4 CardBus Adapter Mk2
10b6 000b 16/4 Cardbus Adapter Mk2
- 1000 Collage 25 ATM Adapter
+ 000c RapidFire 3140V2 16/4 TR Adapter
+ 10b6 000c RapidFire 3140V2 16/4 TR Adapter
+ 1000 Collage 25/155 ATM Client Adapter
1001 Collage 155 ATM Server Adapter
10b7 3Com Corporation
- 0001 3c985 1000BaseSX
- 3390 Token Link Velocity
+ 0001 3c985 1000BaseSX (SX/TX)
+ 1006 MINI PCI type 3B Data Fax Modem
+ 1007 Mini PCI 56k Winmodem
+ 10b7 615c Mini PCI 56K Modem
+ 3390 3c339 TokenLink Velocity
3590 3c359 TokenLink Velocity XL
- 10b7 3590 TokenLink Velocity XL Adapter
+ 10b7 3590 TokenLink Velocity XL Adapter (3C359/359B)
4500 3c450 Cyclone/unknown
5055 3c555 Laptop Hurricane
5057 3c575 [Megahertz] 10/100 LAN CardBus
@@ -1612,6 +2105,7 @@
5157 3c575 [Megahertz] 10/100 LAN CardBus
10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card
5257 3CCFE575CT Cyclone CardBus
+ 10b7 5c57 FE575C-3Com 10/100 LAN CardBus-Fast Ethernet
5900 3c590 10BaseT [Vortex]
5920 3c592 EISA 10mbps Demon/Vortex
5950 3c595 100BaseTX [Vortex]
@@ -1622,10 +2116,20 @@
10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card
6055 3c556 Hurricane CardBus
6056 3c556B Hurricane CardBus
+ 10b7 6556 10/100 Mini PCI Ethernet Adapter
6560 3CCFE656 Cyclone CardBus
+ 10b7 656a 3CCFEM656 10/100 LAN+56K Modem CardBus
+ 6561 3CCFEM656 10/100 LAN+56K Modem CardBus
+ 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus
6562 3CCFEM656 [id 6562] Cyclone CardBus
+ 10b7 656b 3CCFEM656B 10/100 LAN+56K Modem CardBus
+ 6563 3CCFEM656B 10/100 LAN+56K Modem CardBus
+ 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus
6564 3CCFEM656 [id 6564] Cyclone CardBus
7646 3cSOHO100-TX Hurricane
+ 7940 3c803 FDDILink UTP Controller
+ 7980 3c804 FDDILink SAS Controller
+ 7990 3c805 FDDILink DAS Controller
8811 Token ring
9000 3c900 10BaseT [Boomerang]
9001 3c900 Combo [Boomerang]
@@ -1636,7 +2140,7 @@
9006 3c900B-TPC [Etherlink XL TPC]
900a 3c900B-FL [Etherlink XL FL]
9050 3c905 100BaseTX [Boomerang]
- 9051 3c905 100BaseT4
+ 9051 3c905 100BaseT4 [Boomerang]
9055 3c905B 100BaseTX [Cyclone]
1028 0080 3C905B Fast Etherlink XL 10/100
1028 0081 3C905B Fast Etherlink XL 10/100
@@ -1659,19 +2163,31 @@
1028 0098 3C905B Fast Etherlink XL 10/100
1028 0099 3C905B Fast Etherlink XL 10/100
10b7 9055 3C905B Fast Etherlink XL 10/100
- 9056 3c905B-T4
+ 9056 3c905B-T4 [Fast EtherLink XL 10/100]
9058 3c905B-Combo [Deluxe Etherlink XL 10/100]
905a 3c905B-FX [Fast Etherlink XL FX 10/100]
- 9200 3c905C-TX [Fast Etherlink]
+ 9200 3c905C-TX/TX-M [Tornado]
+ 1028 0095 Integrated 3C905C-TX Fast Etherlink for PC Management NIC
10b7 1000 3C905C-TX Fast Etherlink for PC Management NIC
+ 10b7 7000 10/100 Mini PCI Ethernet Adapter
9800 3c980-TX [Fast Etherlink XL Server Adapter]
10b7 9800 3c980-TX Fast Etherlink XL Server Adapter
9805 3c980-TX 10/100baseTX NIC [Python-T]
+ 10b7 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra]
+ 10b7 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra]
10b7 9805 3c980 10/100baseTX NIC [Python-T]
+ 9900 3C990-TX Typhoon
+ 9902 3CR990-TX-95 56-bit Typhoon Client
+ 9903 3CR990-TX-97 168-bit Typhoon Client
+ 9904 3C990B-TX-M/3C990BSVR [Typhoon2]
+ 9905 3CR990-FX-95/97/95 [Typhon Fiber]
+ 9908 3CR990SVR95 56-bit Typhoon Server
+ 9909 3CR990SVR97 Typhoon Server
+ 990b 3C990SVR [Typhoon Server]
10b8 Standard Microsystems Corp [SMC]
0005 83C170QF
- 1055 e000 LANEPIC
- 1055 e002 LANEPIC
+ 1055 e000 LANEPIC 10/100 [EVB171Q-PCI]
+ 1055 e002 LANEPIC 10/100 [EVB171G-PCI]
10b8 a011 EtherPower II 10/100
10b8 a014 EtherPower II 10/100
10b8 a015 EtherPower II 10/100
@@ -1713,7 +2229,13 @@
1543 M1543
1621 M1621
1631 ALI M1631 PCI North Bridge Aladdin Pro III
+ 1632 M1632M Northbridge+Trident
1641 ALI M1641 PCI North Bridge Aladdin Pro IV
+ 1644 M1644/M1644T Northbridge+Trident
+ 1646 M1646 Northbridge+Trident
+ 1647 M1647 Northbridge [MAGiK 1 / MobileMAGiK 1]
+ 1651 M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM]
+ 1671 M1671 Northbridge [Aladdin-P4]
3141 M3141
3143 M3143
3145 M3145
@@ -1728,11 +2250,21 @@
5219 M5219
5225 M5225
5229 M5229 IDE
+ 1043 8053 A7A266 Motherboard IDE
5235 M5225
- 5237 M5237 USB
- 5243 M5243
- 5247 M5247
- 5451 M5451 PCI South Bridge Audio
+ 5237 USB 1.1 Controller
+ 5239 USB 2.0 Controller
+ 5243 M1541 PCI to AGP Controller
+ 5247 PCI to AGP Controller
+ 5251 M5251 P1394 OHCI 1.0 Controller
+ 5253 M5253 P1394 OHCI 1.1 Controller
+ 5261 M5261 Ethernet Controller
+ 5451 M5451 PCI AC-Link Controller Audio Device
+ 5453 M5453 PCI AC-Link Controller Modem Device
+ 5455 M5455 PCI AC-Link Controller Audio Device
+ 5457 M5457 AC-Link Modem Interface Controller
+ 5471 M5471 Memory Stick Controller
+ 5473 M5473 SD-MMC Controller
7101 M7101 PMU
10b9 7101 ALI M7101 Power Management Controller
10ba Mitsubishi Electric Corp.
@@ -1794,6 +2326,7 @@
110a 8005 MagicMedia 256AV Audio Device
14c0 0004 MagicMedia 256AV Audio Device
8006 NM2360 [MagicMedia 256ZX Audio]
+ 8016 NM2360 [MagicMedia 256ZX Audio]
10c9 Dataexpert Corporation
10ca Fujitsu Microelectr., Inc.
10cb Omron Corporation
@@ -1820,6 +2353,7 @@
10d9 Macronix, Inc. [MXIC]
0512 MX98713
0531 MX987x5
+ 1186 1200 DFE-540TX ProFAST 10/100 Adapter
8625 MX86250
8888 MX86200
10da Compaq IPG-Austin
@@ -1834,12 +2368,13 @@
10dc ATT2C15-3 FPGA
10dd Evans & Sutherland
10de nVidia Corporation
- 0008 EDGE 3D [NV1]
- 0009 EDGE 3D [NV1]
- 0010 Mutara V08 [NV2]
- 0020 Riva TnT [NV04]
+ 0008 NV1 [EDGE 3D]
+ 0009 NV1 [EDGE 3D]
+ 0010 NV2 [Mutara V08]
+ 0020 NV4 [Riva TnT]
1043 0200 V3400 TNT
1048 0c18 Erazor II SGRAM
+ 1048 0c1b Erazor II
1092 0550 Viper V550
1092 0552 Viper V550
1092 4804 Viper V550
@@ -1852,10 +2387,12 @@
1092 4904 Viper V550
1092 4914 Viper V550
1092 8225 Viper V550
+ 10b4 273d Velocity 4400
+ 10b4 2740 Velocity 4400
10de 0020 Riva TNT
1102 1015 Graphics Blaster CT6710
1102 1016 Graphics Blaster RIVA TNT
- 0028 Riva TnT2 [NV5]
+ 0028 NV5 [Riva TnT2]
1043 0200 AGP-V3800 SGRAM
1043 0201 AGP-V3800 SDRAM
1043 0205 PCI-V3800
@@ -1863,13 +2400,15 @@
1092 4804 Viper V770
1092 4a00 Viper V770
1092 4a02 Viper V770 Ultra
+ 1092 5a00 RIVA TNT2/TNT2 Pro
1092 6a02 Viper V770 Ultra
1092 7a02 Viper V770 Ultra
10de 0005 RIVA TNT2 Pro
+ 10de 000f Compaq NVIDIA TNT2 Pro
1102 1020 3D Blaster RIVA TNT2
1102 1026 3D Blaster RIVA TNT2 Digital
14af 5810 Maxi Gamer Xentor
- 0029 Riva TnT2 Ultra [NV5]
+ 0029 NV5 [Riva TnT2 Ultra]
1043 0200 AGP-V3800 Deluxe
1043 0201 AGP-V3800 Ultra SDRAM
1043 0205 PCI-V3800 Ultra
@@ -1877,54 +2416,97 @@
1102 1029 3D Blaster RIVA TNT2 Ultra
1102 102f 3D Blaster RIVA TNT2 Ultra
14af 5820 Maxi Gamer Xentor 32
- 002a Riva TnT2 [NV5]
- 002b Riva TnT2 [NV5]
- 002c Vanta [NV6]
+ 002a NV5 [Riva TnT2]
+ 002b NV5 [Riva TnT2]
+ 002c NV6 [Vanta]
1043 0200 AGP-V3800 Combat SDRAM
1043 0201 AGP-V3800 Combat
1092 6820 Viper V730
1102 1031 CT6938 VANTA 8MB
1102 1034 CT6894 VANTA 16MB
14af 5008 Maxi Gamer Phoenix 2
- 002d Vanta [NV6]
+ 002d RIVA TNT2 Model 64
1043 0200 AGP-V3800M
1043 0201 AGP-V3800M
1102 1023 CT6892 RIVA TNT2 Value
1102 1024 CT6932 RIVA TNT2 Value 32Mb
- 1102 102c CT6931 RIVA TNT2 Value (Jumper)
+ 1102 102c CT6931 RIVA TNT2 Value [Jumper]
1462 8808 MSI-8808
- 002e Vanta [NV6]
- 002f Vanta [NV6]
- 00a0 Riva TNT2
+ 1554 1041 PixelView RIVA TNT2 M64 32MB
+ 002e NV6 [Vanta]
+ 002f NV6 [Vanta]
+ 00a0 NV5 [Riva TNT2]
14af 5810 Maxi Gamer Xentor
- 0100 GeForce 256
+ 0100 NV10 [GeForce 256 SDR]
1043 0200 AGP-V6600 SGRAM
1043 0201 AGP-V6600 SDRAM
1043 4008 AGP-V6600 SGRAM
1043 4009 AGP-V6600 SDRAM
1102 102d CT6941 GeForce 256
- 0101 GeForce 256 DDR
+ 14af 5022 3D Prophet SE
+ 0101 NV10 [GeForce 256 DDR]
1043 0202 AGP-V6800 DDR
1043 400a AGP-V6800 DDR SGRAM
1043 400b AGP-V6800 DDR SDRAM
1102 102e CT6971 GeForce 256 DDR
14af 5021 3D Prophet DDR-DVI
- 0103 Quadro (GeForce 256 GL)
- 0110 NV11 (GeForce2 MX)
- 0111 NV11 (GeForce2 MX DDR)
- 0112 GeForce2 Go
- 0113 NV11 (GeForce2 MXR)
- 0150 NV15 (GeForce2 Pro)
+ 0103 NV10 [Quadro]
+ 0110 NV11 [GeForce2 MX]
+ 1043 4015 AGP-V7100 Pro
+ 1043 4031 V7100 Pro with TV output
+ 14af 7103 3D Prophet II MX Dual-Display
+ 0111 NV11 [GeForce2 MX DDR]
+ 0112 NV11 [GeForce2 Go]
+ 0113 NV11 [GeForce2 MXR]
+ 0150 NV15 [GeForce2 GTS]
+ 1043 4016 V7700 AGP Video Card
107d 2840 WinFast GeForce2 GTS with TV output
- 0151 NV15 DDR (GeForce2 GTS)
- 0152 NV15 Bladerunner (GeForce2 Ultra)
- 0153 NV15 GL (Quadro2 Pro)
- 0200 NV20 (GeForce3)
- 0203 Quadro DCC
+ 1462 8831 Creative GeForce2 Pro
+ 0151 NV15 [GeForce2 Ti]
+ 0152 NV15 [GeForce2 Ultra, Bladerunner]
+ 1048 0c56 GLADIAC Ultra
+ 0153 NV15 [Quadro2 Pro]
+ 0170 NV17 [GeForce4 MX460]
+ 0171 NV17 [GeForce4 MX440]
+ 0172 NV17 [GeForce4 MX420]
+ 0173 NV1x
+ 0174 NV17 [GeForce4 440 Go]
+ 0175 NV17 [GeForce4 420 Go]
+ 0176 NV17 [GeForce4 420 Go 32M]
+ 0178 Quadro4 500XGL
+ 0179 NV17 [GeForce4 440 Go 64M]
+ 017a Quadro4 200/400NVS
+ 017b Quadro4 550XGL
+ 017c Quadro4 550 GoGL
+ 01a0 NV15 [GeForce2 - nForce GPU]
+ 01a4 nForce CPU bridge
+ 01ab nForce 420 Memory Controller (DDR)
+ 01ac nForce 220/420 Memory Controller
+ 01ad nForce 220/420 Memory Controller
+ 01b1 nForce Audio
+ 01b2 nForce ISA Bridge
+ 01b4 nForce PCI System Management
+ 01b7 nForce AGP to PCI Bridge
+ 01b8 nForce PCI-to-PCI bridge
+ 01bc nForce IDE
+ 0200 NV20 [GeForce3]
+ 1043 402f AGP-V8200 DDR
+ 0201 NV20 [GeForce3 Ti200]
+ 0202 NV20 [GeForce3 Ti500]
+ 1043 405b V8200 T5
+ 0203 NV20 [Quadro DCC]
+ 0250 NV25 [GeForce4 Ti4600]
+ 0251 NV25 [GeForce4 Ti4400]
+ 0253 NV25 [GeForce4 Ti4200]
+ 0258 Quadro4 900XGL
+ 0259 Quadro4 750XGL
+ 025b Quadro4 700XGL
10df Emulex Corporation
10df Light Pulse Fibre Channel Adapter
1ae5 LP6000 Fibre Channel Host Adapter
f700 LP7000 Fibre Channel Host Adapter
+ f800 LP8000 Fibre Channel Host Adapter
+ f900 LP9000 Fibre Channel Host Adapter
10e0 Integrated Micro Solutions Inc.
5026 IMS5026/27/28
5027 IMS5027
@@ -1952,14 +2534,15 @@
8043 LANai4.x [Myrinet LANai interface chip]
8062 S5933_PARASTATION
807d S5933 [Matchmaker]
- 8088 Kingsberg Spacetec Format Synchronizer
- 8089 Kingsberg Spacetec Serial Output Board
+ 8088 Kongsberg Spacetec Format Synchronizer
+ 8089 Kongsberg Spacetec Serial Output Board
809c S5933_HEPC3
80d7 PCI-9112
80d9 PCI-9118
80da PCI-9812
811a PCI-IEEE1355-DS-DE Interface
8170 S5933 [Matchmaker] (Chipset Development Tool)
+ 82db AJA HDNTV HD SDI Framestore
10e9 Alps Electric Co., Ltd.
10ea Intergraphics Systems
1680 IGA-1680
@@ -1974,8 +2557,8 @@
8111 Twist3 Frame Grabber
10ec Realtek Semiconductor Co., Ltd.
8029 RTL-8029(AS)
- 10b8 2011 EZ-Card
- 10ec 8029 RT8029(AS)
+ 10b8 2011 EZ-Card (SMC1208)
+ 10ec 8029 RTL-8029(AS)
1113 1208 EN1208
1186 0300 DE-528
1259 2400 AT-2400
@@ -1983,14 +2566,16 @@
10ec 8129 RT8129 Fast Ethernet Adapter
8138 RT8139 (B/C) Cardbus Fast Ethernet Adapter
10ec 8138 RT8139 (B/C) Fast Ethernet Adapter
- 8139 RTL-8139
+ 8139 RTL-8139/8139C/8139C+
1025 8920 ALN-325
1025 8921 ALN-325
10bd 0320 EP-320X-R
10ec 8139 RT8139
1186 1300 DFE-538TX
1186 1320 SN5200
+ 1186 8139 DRN-32TX
1259 2500 AT-2500TX
+ 1259 2503 AT-2500TX/ACPI
1429 d010 ND010
1432 9130 EN-9130TX
1436 8139 RT8139
@@ -2003,6 +2588,7 @@
8e2e 7000 KF-230TX
8e2e 7100 KF-230TX/2
a0a0 0007 ALN-325C
+ 8169 RTL-8169
10ed Ascii Corporation
7310 V7310
10ee Xilinx, Inc.
@@ -2010,6 +2596,8 @@
3fc1 RME Digi96/8
3fc2 RME Digi96/8 Pro
3fc3 RME Digi96/8 Pad
+ 3fc4 RME Digi9652 (Hammerfall)
+ 3fc5 RME Hammerfall DSP
10ef Racore Computer Products, Inc.
8154 M815x Token Ring Adapter
10f0 Peritek Corporation
@@ -2027,6 +2615,8 @@
000c TARGA 1000
10fb Thesys Gesellschaft für Mikroelektronik mbH
10fc I-O Data Device, Inc.
+# What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives
+ 0003 Cardbus IDE Controller
10fd Soyo Computer, Inc
10fe Fast Multimedia AG
10ff NCube
@@ -2049,26 +2639,45 @@
1102 8025 SBLive! Mainboard Implementation
1102 8026 CT4830 SBLive! Value
1102 8027 CT4832 SBLive! Value
+ 1102 8028 CT4760 SBLive! OEM version
1102 8031 CT4831 SBLive! Value
1102 8040 CT4760 SBLive!
1102 8051 CT4850 SBLive! Value
- 7002 SB Live!
+ 1102 8061 SBLive! Player 5.1
+ 0004 SB Audigy
+ 1102 0051 SB0090 Audigy Player
+ 4001 SB Audigy FireWire Port
+ 7002 SB Live! MIDI/Game Port
1102 0020 Gameport Joystick
+ 7003 SB Audigy MIDI/Game port
+ 1102 0040 SB Audigy MIDI/Gameport
8938 ES1371
1103 Triones Technologies, Inc.
0003 HPT343
- 0004 HPT366 / HPT370
+# Revisions: 01=HPT366, 03=HPT370, 04=HPT370A, 05=HPT372
+ 0004 HPT366/368/370/370A/372
+ 1103 0001 HPT370A
1103 0005 HPT370 UDMA100
+ 0005 HPT372A
+ 0006 HPT302
+ 0007 HPT371
+ 0008 HPT374
1104 RasterOps Corp.
1105 Sigma Designs, Inc.
+ 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder
8300 REALmagic Hollywood Plus DVD Decoder
+ 8400 EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder
1106 VIA Technologies, Inc.
+ 0130 VT6305 1394.A Controller
0305 VT8363/8365 [KT133/KM133]
+ 1043 8033 A7V Mainboard
+ 1043 8042 A7V133/A7V133-C Mainboard
+ 147b a401 KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard
0391 VT8371 [KX133]
0501 VT8501 [Apollo MVP4]
0505 VT82C505
0561 VT82C561
- 0571 Bus Master IDE
+ 0571 VT82C586B PIPC Bus Master IDE
0576 VT82C576 3V [Apollo Master]
0585 VT82C585VP [Apollo VP1/VPX]
0586 VT82C586/A/B PCI-to-ISA [Apollo VP]
@@ -2083,6 +2692,8 @@
0605 VT8605 [ProSavage PM133]
0680 VT82C680 [Apollo P6]
0686 VT82C686 [Apollo Super South]
+ 1043 8033 A7V Mainboard
+ 1043 8042 A7V133/A7V133-C Mainboard
1106 0000 VT82C686/A PCI to ISA Bridge
1106 0686 VT82C686/A PCI to ISA Bridge
0691 VT82C693A/694x [Apollo PRO133x]
@@ -2094,30 +2705,52 @@
1106 VT82C570MV
1571 VT82C416MV
1595 VT82C595/97 [Apollo VP2/97]
- 3038 UHCI USB
+ 3038 USB
+ 0925 1234 USB Controller
1234 0925 MVP3 USB Controller
3040 VT82C586B ACPI
- 3043 VT86C100A [Rhine 10/100]
+ 3043 VT86C100A [Rhine]
10bd 0000 VT86C100A Fast Ethernet Adapter
1106 0100 VT86C100A Fast Ethernet Adapter
- 1186 1400 DFE-530TX
- 3044 OHCI Compliant IEEE 1394 Host Controller
+ 1186 1400 DFE-530TX rev A
+ 3044 IEEE 1394 Host Controller
3050 VT82C596 Power Management
3051 VT82C596 Power Management
3057 VT82C686 [Apollo Super ACPI]
- 3058 AC97 Audio Controller
+ 1043 8033 A7V Mainboard
+ 1043 8042 A7V133/A7V133-C Mainboard
+ 3058 VT82C686 AC97 Audio Controller
+ 0e11 b194 Soundmax integrated digital audio
+ 1106 4511 Onboard Audio on EP7KXA
+ 1458 7600 Onboard Audio
1462 3091 MS-6309 Onboard Audio
- 3059 AC97 Audio Controller
- 3065 Ethernet Controller
+ 15dd 7609 Onboard Audio
+ 3059 VT8233 AC97 Audio Controller
+ 3065 VT6102 [Rhine-II]
+ 1186 1400 DFE-530TX rev A
+ 1186 1401 DFE-530TX rev B
3068 AC97 Modem Controller
3074 VT8233 PCI to ISA Bridge
3091 VT8633 [Apollo Pro266]
3099 VT8367 [KT266]
+ 1043 8064 A7V266-E
+ 1043 807f A7V333
+ 3101 VT8653 Host Bridge
+ 3102 VT8662 Host Bridge
+ 3103 VT8615 Host Bridge
+ 3104 USB 2.0
3109 VT8233C PCI to ISA Bridge
+ 3112 VT8361 [KLE133] Host Bridge
+ 3128 VT8753 [P4X266 AGP]
+ 3133 VT3133 Host Bridge
+ 3147 VT8233A ISA Bridge
+ 3148 P4M266 Host Bridge
+ 3156 P/KN266 Host Bridge
+ 3177 VT8233A ISA Bridge
5030 VT82C596 ACPI [Apollo PRO]
6100 VT85C100A [Rhine II]
8231 VT8231 [PCI-to-ISA Bridge]
- 8235 VT8235 Power Management
+ 8235 VT8235 ACPI
8305 VT8363/8365 [KT133/KM133 AGP]
8391 VT8371 [KX133 AGP]
8501 VT8501 [Apollo MVP4 AGP]
@@ -2127,8 +2760,13 @@
8601 VT8601 [Apollo ProMedia AGP]
8605 VT8605 [PM133 AGP]
8691 VT82C691 [Apollo Pro]
+ 8693 VT82C693 [Apollo Pro Plus] PCI Bridge
b091 VT8633 [Apollo Pro266 AGP]
- b099 VT8367 [KT266 AGP]
+ b099 VT8367 [KT333 AGP]
+ b101 VT8653 AGP Bridge
+ b102 VT8362 AGP Bridge
+ b103 VT8615 AGP Bridge
+ b112 VT8361 [KLE133] AGP Bridge
1107 Stratus Computers
0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!)
1108 Proteon, Inc.
@@ -2150,6 +2788,7 @@
6120 SZB6120
110b Chromatic Research Inc.
0001 Mpact Media Processor
+ 0004 Mpact 2
110c Mini-Max Technology, Inc.
110d Znyx Advanced Systems
110e CPU Technology
@@ -2173,6 +2812,7 @@
5105 10Mbps Network card
9211 EN-1207D Fast Ethernet Adapter
1113 9211 EN-1207D Fast Ethernet Adapter
+ 9511 Fast Ethernet Adapter
1114 Atmel Corporation
1115 3D Labs
1116 Data Translation
@@ -2277,6 +2917,7 @@
0001 Powerbis Bridge
111d Integrated Device Tech
0001 IDT77211 ATM Adapter
+ 0003 IDT77252 ATM network controller
111e Eldec
111f Precision Digital Images
4a47 Precision MX Video engine interface
@@ -2292,9 +2933,10 @@
0200 ForeRunner PCA-200 ATM
0210 PCA-200PC
0250 ATM
- 0300 PCA-200E
+ 0300 ForeRunner PCA-200EPC ATM
0310 ATM
0400 ForeRunnerHE ATM Adapter
+ 1127 0400 ForeRunnerHE ATM
1129 Firmworks
112a Hermes Electronics Company, Ltd.
112b Linotype - Hell AG
@@ -2306,6 +2948,9 @@
0001 MVC IM-PCI Video frame grabber/processor
1130 Computervision
1131 Philips Semiconductors
+ 7130 SAA7130 Video Broadcast Decoder
+# PCI audio and video broadcast decoder (http://www.semiconductors.philips.com/pip/saa7134hl)
+ 7134 SAA7134
7145 SAA7145
7146 SAA7146
114b 2003 DVRaptor Video Edit/Capture Card
@@ -2319,8 +2964,11 @@
7912 EiconCard S91
7941 EiconCard S94
7942 EiconCard S94
+ 7943 EiconCard S94
+ 7944 EiconCard S94
b921 EiconCard P92
b922 EiconCard P92
+ b923 EiconCard P92
e001 DIVA 20PRO
1133 e001 DIVA Pro 2.0 S/T
e002 DIVA 20
@@ -2329,10 +2977,15 @@
1133 e003 DIVA Pro 2.0 U
e004 DIVA 20_U
1133 e004 DIVA 2.0 U
+ e005 DIVA LOW
+ 1133 e005 DIVA 2.01 S/T
e010 DIVA Server BRI-2M
1133 e010 DIVA Server BRI-2M
+ e012 DIVA Server BRI-8M
+ 1133 e012 DIVA Server BRI-8M
e014 DIVA Server PRI-30M
1133 e014 DIVA Server PRI-30M
+ e018 DIVA Server BRI-2M/-2F
1134 Mercury Computer Systems
0001 Raceway Bridge
1135 Fuji Xerox Co Ltd
@@ -2357,8 +3010,8 @@
113f Equinox Systems, Inc.
0808 SST-64P Adapter
1010 SST-128P Adapter
- 80c0 SST-16P Adapter
- 80c4 SST-16P Adapter
+ 80c0 SST-16P DB Adapter
+ 80c4 SST-16P RJ Adapter
80c8 SST-16P Adapter
8888 SST-4P Adapter
9090 SST-8P Adapter
@@ -2403,8 +3056,10 @@
1148 9844 SK-9844 (1000Base-SX dual link)
1148 9861 SK-9861 (1000Base-SX VF45 single link)
1148 9862 SK-9862 (1000Base-SX VF45 dual link)
+ 4400 Gigabit Ethernet
1149 Win System Corporation
114a VMIC
+ 5579 VMIPCI-5579 (Reflective Memory Card)
7587 VMIVME-7587
114b Canopus Co., Ltd
114c Annabooks
@@ -2430,12 +3085,24 @@
001a DataFirePRIme E1 (1-port)
001b AccelePort C/X (IBM)
001d DataFire RAS T1/E1/PRI
+ 114f 0050 DataFire RAS E1 Adapter
+ 114f 0051 DataFire RAS Dual E1 Adapter
+ 114f 0052 DataFire RAS T1 Adapter
+ 114f 0053 DataFire RAS Dual T1 Adapter
0023 AccelePort RAS
0024 DataFire RAS B4 ST/U
+ 114f 0030 DataFire RAS BRI U Adapter
+ 114f 0031 DataFire RAS BRI S/T Adapter
0026 AccelePort 4r 920
0027 AccelePort Xr 920
0034 AccelePort 2r 920
0035 DataFire DSP T1/E1/PRI cPCI
+ 0040 AccelePort Xp
+ 0042 AccelePort 2p PCI
+ 0070 Datafire Micro V IOM2 (Europe)
+ 0071 Datafire Micro V (Europe)
+ 0072 Datafire Micro V IOM2 (North America)
+ 0073 Datafire Micro V (North America)
6001 Avanstar
1150 Thinking Machines Corp
1151 JAE Electronics Inc.
@@ -2458,8 +3125,11 @@
0003 Cardbus Ethernet 10/100
1014 0181 10/100 EtherJet Cardbus Adapter
1014 1181 10/100 EtherJet Cardbus Adapter
+ 1014 8181 10/100 EtherJet Cardbus Adapter
+ 1014 9181 10/100 EtherJet Cardbus Adapter
115d 0181 Cardbus Ethernet 10/100
115d 1181 Cardbus Ethernet 10/100
+ 1179 0181 Cardbus Ethernet 10/100
8086 8181 EtherExpress PRO/100 Mobile CardBus 32 Adapter
8086 9181 EtherExpress PRO/100 Mobile CardBus 32 Adapter
0005 Cardbus Ethernet 10/100
@@ -2475,12 +3145,15 @@
000b Cardbus Ethernet 10/100
1014 0183 10/100 EtherJet Cardbus Adapter
115d 0183 Cardbus Ethernet 10/100
+ 000c Mini-PCI V.90 56k Modem
000f Cardbus Ethernet 10/100
1014 0183 10/100 EtherJet Cardbus Adapter
115d 0183 Cardbus Ethernet 10/100
0101 Cardbus 56k modem
115d 1081 Cardbus 56k Modem
0103 Cardbus Ethernet + 56k Modem
+ 1014 9181 Cardbus 56k Modem
+ 1115 1181 Cardbus Ethernet 100 + 56k Modem
115d 1181 CBEM56G-100 Ethernet + 56k Modem
8086 9181 PRO/100 LAN + Modem56 CardBus
115e Peer Protocols Inc
@@ -2496,16 +3169,27 @@
1165 Imagraph Corporation
0001 Motion TPEG Recorder/Player with audio
1166 ServerWorks
+ 0005 CNB20-LE Host Bridge
0007 CNB20-LE Host Bridge
0008 CNB20HE Host Bridge
0009 CNB20LE Host Bridge
0010 CIOB30
0011 CMIC-HE
+ 0013 CNB20-HE Host Bridge
+ 0014 CNB20-HE Host Bridge
+ 0015 CMIC-GC Host Bridge
+ 0016 CMIC-GC Host Bridge
+ 0017 GCNB-LE Host Bridge
0200 OSB4 South Bridge
0201 CSB5 South Bridge
+ 0203 CSB6 South Bridge
0211 OSB4 IDE Controller
0212 CSB5 IDE Controller
+ 0213 CSB6 RAID/IDE Controller
0220 OSB4/CSB5 OHCI USB Controller
+ 0221 CSB6 OHCI USB Controller
+ 0225 GCLE Host Bridge
+ 0227 GCLE-2 Host Bridge
1167 Mutoh Industries Inc
1168 Thine Electronics Inc
1169 Centre for Development of Advanced Computing
@@ -2530,6 +3214,7 @@
1178 Alfa, Inc.
afa1 Fast Ethernet Adapter
1179 Toshiba America Info Systems
+ 0103 EX-IDE Type-B
0404 DVD Decoder card
0406 Tecra Video Capture device
0407 DVD Decoder card (Version 2)
@@ -2541,6 +3226,8 @@
0618 CPU to PCI and PCI to ISA bridge
# Claimed to be Lucent DSP1645 [Mars], but that's apparently incorrect. Does anyone know the correct ID?
0701 FIR Port
+ 0804 TC6371AF SmartMedia Controller
+ 0805 SD TypA Controller
0d01 FIR Port Type-DO
1179 0001 FIR Port Type-DO
117a A-Trend Technology
@@ -2554,16 +3241,29 @@
0466 RL5c466
0475 RL5c475
0476 RL5c476 II
+ 104d 80df Vaio PCG-FX403
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
0477 RL5c477
0478 RL5c478
+ 1014 0184 ThinkPad A30p (2653-64G)
+ 0522 R5C522 IEEE 1394 Controller
+ 1014 01cf ThinkPad A30p (2653-64G)
+ 0551 R5C551 IEEE 1394 Controller
+ 0552 R5C552 IEEE 1394 Controller
1181 Telmatics International
1183 Fujikura Ltd
1184 Forks Inc
1185 Dataworld International Ltd
1186 D-Link System Inc
0100 DC21041
- 1002 Sundance Ethernet
+ 1002 DL10050 Sundance Ethernet
+ 1186 1002 DFE-550TX
+ 1186 1012 DFE-580TX
1300 RTL8139 Ethernet
+ 1186 1300 DFE-538TX 10/100 Ethernet Adapter
+ 1186 1301 DFE-530TX+ 10/100 Ethernet Adapter
+ 1340 DFE-690TXD CardBus PC Card
+ 1561 DRP-32TXD Cardbus PC Card
4000 DL2K Ethernet
1187 Advanced Technology Laboratories, Inc.
1188 Shima Seiki Manufacturing Ltd.
@@ -2601,6 +3301,8 @@
0005 ATP850UF
0006 ATP860 NO-BIOS
0007 ATP860
+ 0008 ATP865 NO-ROM
+ 0009 ATP865
8002 AEC6710 SCSI-2 Host Adapter
8010 AEC6712UW SCSI
8020 AEC6712U SCSI
@@ -2651,6 +3353,7 @@
11ad ffff LNE100TX
1385 f004 FA310TX
c115 LNE100TX [Linksys EtherFast 10/100]
+ 11ad c001 LNE100TX [ver 2.0]
11ae Aztech System Ltd
11af Avid Technology Inc.
11b0 V3 Semiconductor Inc.
@@ -2681,6 +3384,7 @@
0440 56k WinModem
0001 0440 LT WinModem 56k Data+Fax+Voice+Dsvd
1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd
+ 1033 8047 LT WinModem 56k Data+Fax+Voice+Dsvd
1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd
10cf 102c LB LT Modem V.90 56k
10cf 104a BIBLO LT Modem 56k
@@ -2688,15 +3392,18 @@
1179 0001 Internal V.90 Modem
11c1 0440 LT WinModem 56k Data+Fax+Voice+Dsvd
122d 4101 MDP7800-U Modem
+ 122d 4102 MDP7800SP-U Modem
13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd
13e0 0440 LT WinModem 56k Data+Fax+Voice+Dsvd
13e0 0441 LT WinModem 56k Data+Fax+Voice+Dsvd
+ 13e0 0450 LT WinModem 56k Data+Fax+Voice+Dsvd
13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd
13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd
144d 2101 LT56PV Modem
149f 0440 LT WinModem 56k Data+Fax+Voice+Dsvd
0441 56k WinModem
1033 804d LT WinModem 56k Data+Fax
+ 1033 8065 LT WinModem 56k Data+Fax
1092 0440 Supra 56i
1179 0001 Internal V.90 Modem
11c1 0440 LT WinModem 56k Data+Fax
@@ -2706,11 +3413,16 @@
13e0 0100 LT WinModem 56k Data+Fax
13e0 0410 LT WinModem 56k Data+Fax
13e0 0420 TelePath Internet 56k WinModem
+ 13e0 0440 LT WinModem 56k Data+Fax
13e0 0443 LT WinModem 56k Data+Fax
+ 13e0 f102 LT WinModem 56k Data+Fax
1416 9804 CommWave 56k Modem
141d 0440 LT WinModem 56k Data+Fax
144f 0441 Lucent 56k V.90 DF Modem
+ 144f 0449 Lucent 56k V.90 DF Modem
+ 144f 110d Lucent Win Modem
1468 0441 Presario 56k V.90 DF Modem
+ 1668 0440 Lucent Win Modem
0442 56k WinModem
0001 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
11c1 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
@@ -2719,6 +3431,7 @@
13e0 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
13fc 2471 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
144d 2104 LT56PT Modem
+ 144f 1104 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
149f 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
1668 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
0443 LT WinModem
@@ -2727,14 +3440,23 @@
0446 LT WinModem
0447 LT WinModem
0448 WinModem 56k
+ 1014 0131 Lucent Win Modem
+ 1033 8066 LT WinModem 56k Data+Fax+Voice+Dsvd
+ 13e0 0030 56k Voice Modem
13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd
+# Actiontech eth+modem card as used by Dell &c.
+ 1668 2400 LT WinModem 56k (MiniPCI Ethernet+Modem)
0449 WinModem 56k
0e11 b14d 56k V.90 Modem
13e0 0020 LT WinModem 56k Data+Fax
13e0 0041 TelePath Internet 56k WinModem
+ 1436 0440 Lucent Win Modem
144f 0449 Lucent 56k V.90 DFi Modem
+ 1468 0410 IBM ThinkPad T23 (2647-4MG)
+ 1468 0440 Lucent Win Modem
1468 0449 Presario 56k V.90 DFi Modem
044a F-1156IV WinModem (V90, 56KFlex)
+ 10cf 1072 LB Global LT Modem
13e0 0012 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
13e0 0042 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
144f 1005 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd
@@ -2742,6 +3464,7 @@
044c LT WinModem
044d LT WinModem
044e LT WinModem
+ 044f V90 WildWire Modem
0450 LT WinModem
0451 LT WinModem
0452 LT WinModem
@@ -2753,7 +3476,13 @@
0458 LT WinModem
0459 LT WinModem
045a LT WinModem
+ 0461 V90 WildWire Modem
+ 0462 V90 WildWire Modem
0480 Venus Modem (V90, 56KFlex)
+ 5801 USB
+ 5802 USS-312 USB Controller
+ 5811 FW323
+ dead 0800 FireWire Host Bus Adapter
11c2 Sand Microelectronics
11c3 NEC Corp
11c4 Document Technologies, Inc
@@ -2784,6 +3513,7 @@
11d2 Intercom Inc.
11d3 Trancell Systems Inc
11d4 Analog Devices
+ 1805 SM56 PCI modem
1889 AD1889 sound chip
11d5 Ikon Corporation
0115 10115
@@ -2839,6 +3569,7 @@
0113 FreedomLine 100
1401 ReadyLink 2000
2011 RL100-ATX 10/100
+ 11f6 2011 RL100-ATX
2201 ReadyLink 100TX (Winbond W89C840)
11f6 2011 ReadyLink 100TX
9881 RL100TX
@@ -2857,11 +3588,13 @@
0004 RocketPort 32 Intf
0005 RocketPort Octacable
0006 RocketPort 8J
+ 0007 RocketPort 4-port
0008 RocketPort 8-port
0009 RocketPort 16-port
000a RocketPort Plus Quadcable
000b RocketPort Plus Octacable
000c RocketPort 8-port Modem
+ 8015 RocketPort 4-port UART 16954
11ff Scion Corporation
1200 CSS Corporation
1201 Vista Controls Corp
@@ -2878,18 +3611,21 @@
120c Technical Corp.
120d Compression Labs, Inc.
120e Cyclades Corporation
- 0100 Cyclom_Y below first megabyte
- 0101 Cyclom_Y above first megabyte
- 0102 Cyclom_4Y below first megabyte
- 0103 Cyclom_4Y above first megabyte
- 0104 Cyclom_8Y below first megabyte
- 0105 Cyclom_8Y above first megabyte
- 0200 Cyclom_Z below first megabyte
- 0201 Cyclom_Z above first megabyte
- 0300 PC300 RX 2
- 0301 PC300 RX 1
- 0310 PC300 TE 2
- 0311 PC300 TE 1
+ 0100 Cyclom-Y below first megabyte
+ 0101 Cyclom-Y above first megabyte
+ 0102 Cyclom-4Y below first megabyte
+ 0103 Cyclom-4Y above first megabyte
+ 0104 Cyclom-8Y below first megabyte
+ 0105 Cyclom-8Y above first megabyte
+ 0200 Cyclades-Z below first megabyte
+ 0201 Cyclades-Z above first megabyte
+ 0300 PC300/RSV or /X21 (2 ports)
+ 0301 PC300/RSV or /X21 (1 port)
+ 0310 PC300/TE (2 ports)
+ 0311 PC300/TE (1 port)
+ 0320 PC300/TE-M (2 ports)
+ 0321 PC300/TE-M (1 port)
+ 0400 PC400
120f Essential Communications
0001 Roadrunner serial HIPPI
1210 Hyperparallel Technologies
@@ -2900,12 +3636,15 @@
1215 Interware Co., Ltd
1216 Purup Prepress A/S
1217 O2 Micro, Inc.
- 6729 6729
- 673a 6730
- 6832 6832
- 6836 6836
+ 6729 OZ6729
+ 673a OZ6730
+ 6832 OZ6832/6833 Cardbus Controller
+ 6836 OZ6836/6860 Cardbus Controller
6872 OZ6812 Cardbus Controller
+ 6925 OZ6922 Cardbus Controller
6933 OZ6933 Cardbus Controller
+ 1025 1016 Travelmate 612 TX
+ 6972 OZ6912 Cardbus Controller
1218 Hybricon Corp.
1219 First Virtual Corporation
121a 3Dfx Interactive, Inc.
@@ -2920,7 +3659,7 @@
1092 8030 Monster Fusion
1092 8035 Monster Fusion AGP
10b0 0001 Dragon 4000
- 1102 1017 CT6760 3D Blaster Banshee
+ 1102 1018 3D Blaster Banshee VE
121a 0001 Voodoo Banshee AGP
121a 0003 Voodoo Banshee AGP SGRAM
121a 0004 Voodoo Banshee
@@ -2950,6 +3689,7 @@
121a 0062 Voodoo3 3500 TV (SECAM)
0009 Voodoo 4 / Voodoo 5
121a 0009 Voodoo5 AGP 5500/6000
+ 0057 Voodoo 3/3000 [Avenger]
121b Advanced Telecommunications Modules
121c Nippon Texaco., Ltd
121d Lippert Automationstechnik GmbH
@@ -3018,12 +3758,19 @@
1240 Marathon Technologies Corp.
1241 DSC Communications
1242 Jaycor Networks, Inc.
+ 1242 JNI Corporation (former Jaycor Networks, Inc.)
4643 FCI-1063 Fibre Channel Adapter
+ 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter
+ 656a FCX-6562 PCI-X Fibre Channel Adapter
1243 Delphax
1244 AVM Audiovisuelles MKTG & Computer System GmbH
0700 B1 ISDN
+ 0800 C4 ISDN
0a00 A1 ISDN [Fritz]
1244 0a00 FRITZ!Card ISDN Controller
+ 0e00 Fritz!PCI v2.0 ISDN
+ 1100 C2 ISDN
+ 1200 T1 ISDN
1245 A.P.D., S.A.
1246 Dipix Technologies, Inc.
1247 Xylon Research, Inc.
@@ -3031,11 +3778,14 @@
1249 Samsung Electronics Co., Ltd.
124a AEG Electrocom GmbH
124b SBS/Greenspring Modular I/O
+ 0040 cPCI-200 Four Slot IndustryPack carrier
+ 124b 9080 PCI9080 Bridge
124c Solitron Technologies, Inc.
124d Stallion Technologies, Inc.
0000 EasyConnection 8/32
0002 EasyConnection 8/64
0003 EasyIO
+ 0004 EasyConnection/RA
124e Cylink
124f Infotrend Technology, Inc.
0041 IFT-2000 Series RAID Controller
@@ -3061,6 +3811,7 @@
125b Asix Electronics Corporation
1400 ALFA GFC2204
125c Aurora Technologies, Inc.
+ 0640 Aries 16000P
125d ESS Technology
0000 ES336H Fax Modem (Early Model)
1948 Solo?
@@ -3082,13 +3833,27 @@
1989 ESS Modem
125d 1989 ESS Modem
1998 ES1983S Maestro-3i PCI Audio Accelerator
+ 1028 00e6 ES1983S Maestro-3i (Dell Inspiron 8100)
1999 ES1983S Maestro-3i PCI Modem Accelerator
+ 199a ES1983S Maestro-3i PCI Audio Accelerator
+ 199b ES1983S Maestro-3i PCI Modem Accelerator
2808 ES336H Fax Modem (Later Model)
2838 ES2838/2839 SuperLink Modem
2898 ES2898 Modem
+ 125d 0424 ES56-PI Data Fax Modem
+ 125d 0425 ES56T-PI Data Fax Modem
+ 125d 0426 ES56V-PI Data Fax Modem
+ 125d 0427 VW-PI Data Fax Modem
+ 125d 0428 ES56ST-PI Data Fax Modem
+ 125d 0429 ES56SV-PI Data Fax Modem
+ 147a c001 ES56-PI Data Fax Modem
+ 14fe 0428 ES56-PI Data Fax Modem
+ 14fe 0429 ES56-PI Data Fax Modem
125e Specialvideo Engineering SRL
125f Concurrent Technologies, Inc.
1260 Harris Semiconductor
+ 3873 Prism 2.5 Wavelan chipset
+ 1186 3501 DWL-520 Wireless PCI Adapter
8130 HMP8130 NTSC/PAL Video Decoder
8131 HMP8131 NTSC/PAL Video Decoder
1261 Matsushita-Kotobuki Electronics Industries, Ltd.
@@ -3125,6 +3890,7 @@
0002 DirecPC
1274 Ensoniq
1371 ES1371 [AudioPCI-97]
+ 0e11 0024 AudioPCI on Motherboard Compaq Deskpro
0e11 b1a7 ES1371, ES1373 AudioPCI
1033 80ac ES1371, ES1373 AudioPCI
1042 1854 Tazer
@@ -3181,7 +3947,9 @@
4942 4c4c Creative Sound Blaster AudioPCI128
5880 5880 AudioPCI
1274 2000 Creative Sound Blaster AudioPCI128
+ 1274 2003 Creative SoundBlaster AudioPCI 128
1274 5880 Creative Sound Blaster AudioPCI128
+ 1458 a000 5880 AudioPCI On Motherboard 6OXET
1462 6880 5880 AudioPCI On Motherboard MS-6188 1.00
270f 2001 5880 AudioPCI On Motherboard 6CTR
270f 2200 5880 AudioPCI On Motherboard 6WTX
@@ -3190,6 +3958,7 @@
1276 Switched Network Technologies, Inc.
1277 Comstream
1278 Transtech Parallel Systems Ltd.
+ 0701 TPE3/TM3 PowerPC Node
1279 Transmeta Corporation
0295 Northbridge
0395 LongRun Northbridge
@@ -3197,93 +3966,103 @@
0397 BIOS scratchpad
127a Rockwell International
1002 HCF 56k Data/Fax Modem
- 122d 4002 HPG / MDP3858-U # Aztech
- 122d 4005 MDP3858-E # Aztech
- 122d 4007 MDP3858-A/-NZ # Aztech
- 122d 4012 MDP3858-SA # Aztech
- 122d 4017 MDP3858-W # Aztech
- 122d 4018 MDP3858-W # Aztech
+ 1092 094c SupraExpress 56i PRO [Diamond SUP2380]
+ 122d 4002 HPG / MDP3858-U
+ 122d 4005 MDP3858-E
+ 122d 4007 MDP3858-A/-NZ
+ 122d 4012 MDP3858-SA
+ 122d 4017 MDP3858-W
+ 122d 4018 MDP3858-W
+ 127a 1002 Rockwell 56K D/F HCF Modem
1003 HCF 56k Data/Fax Modem
- 0e11 b0bc 229-DF Zephyr # Compaq
- 0e11 b114 229-DF Cheetah # Compaq
- 1033 802b 229-DF # NEC
- 13df 1003 PCI56RX Modem # E-Tech Inc
- 13e0 0117 IBM # GVC
- 13e0 0147 IBM # GVC
- 13e0 0197 IBM # GVC
- 13e0 01c7 IBM # GVC
- 13e0 01f7 IBM # GVC
- 1436 1003 IBM # CIS
- 1436 1103 IBM # CIS
+ 0e11 b0bc 229-DF Zephyr
+ 0e11 b114 229-DF Cheetah
+ 1033 802b 229-DF
+ 13df 1003 PCI56RX Modem
+ 13e0 0117 IBM
+ 13e0 0147 IBM F-1156IV+/R3 Spain V.90 Modem
+ 13e0 0197 IBM
+ 13e0 01c7 IBM F-1156IV+/R3 WW V.90 Modem
+ 13e0 01f7 IBM
+ 1436 1003 IBM
+ 1436 1103 IBM 5614PM3G V.90 Modem
1436 1602 Compaq 229-DF Ducati
1004 HCF 56k Data/Fax/Voice Modem
+ 1048 1500 MicroLink 56k Modem
10cf 1059 Fujitsu 229-DFRT
1005 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
- 1033 8029 229-DFSV # NEC
- 1033 8054 Modem # NEC
+ 1033 8029 229-DFSV
+ 1033 8054 Modem
10cf 103c Fujitsu
10cf 1055 Fujitsu 229-DFSV
10cf 1056 Fujitsu 229-DFSV
- 122d 4003 MDP3858SP-U # Aztech
- 122d 4006 Packard Bell MDP3858V-E # Aztech
- 122d 4008 MDP3858SP-A/SP-NZ # Aztech
- 122d 4009 MDP3858SP-E # Aztech
- 122d 4010 MDP3858V-U # Aztech
- 122d 4011 MDP3858SP-SA # Aztech
- 122d 4013 MDP3858V-A/V-NZ # Aztech
- 122d 4015 MDP3858SP-W # Aztech
- 122d 4016 MDP3858V-W # Aztech
- 122d 4019 MDP3858V-SA # Aztech
- 13df 1005 PCI56RVP Modem # E-Tech Inc
- 13e0 0187 IBM # GVC
- 13e0 01a7 IBM # GVC
- 13e0 01b7 IBM # GVC
- 13e0 01d7 IBM # GVC
- 1436 1005 IBM # CIS
- 1436 1105 IBM # CIS
+ 122d 4003 MDP3858SP-U
+ 122d 4006 Packard Bell MDP3858V-E
+ 122d 4008 MDP3858SP-A/SP-NZ
+ 122d 4009 MDP3858SP-E
+ 122d 4010 MDP3858V-U
+ 122d 4011 MDP3858SP-SA
+ 122d 4013 MDP3858V-A/V-NZ
+ 122d 4015 MDP3858SP-W
+ 122d 4016 MDP3858V-W
+ 122d 4019 MDP3858V-SA
+ 13df 1005 PCI56RVP Modem
+ 13e0 0187 IBM
+ 13e0 01a7 IBM
+ 13e0 01b7 IBM DF-1156IV+/R3 Spain V.90 Modem
+ 13e0 01d7 IBM DF-1156IV+/R3 WW V.90 Modem
+ 1436 1005 IBM
+ 1436 1105 IBM
+ 1437 1105 IBM 5614PS3G V.90 Modem
+ 1022 HCF 56k Modem
+ 1436 1303 M3-5614PM3G V.90 Modem
1023 HCF 56k Data/Fax Modem
- 122d 4020 Packard Bell MDP3858-WE # Aztech
- 122d 4023 MDP3858-UE # Aztech
- 13e0 0247 IBM # GVC
- 13e0 0297 IBM # GVC
- 13e0 02c7 IBM # GVC
- 1436 1203 IBM # CIS
- 1436 1303 IBM # CIS
+ 122d 4020 Packard Bell MDP3858-WE
+ 122d 4023 MDP3858-UE
+ 13e0 0247 IBM F-1156IV+/R6 Spain V.90 Modem
+ 13e0 0297 IBM
+ 13e0 02c7 IBM F-1156IV+/R6 WW V.90 Modem
+ 1436 1203 IBM
+ 1436 1303 IBM
1024 HCF 56k Data/Fax/Voice Modem
1025 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
10cf 106a Fujitsu 235-DFSV
- 122d 4021 Packard Bell MDP3858V-WE # Aztech
- 122d 4022 MDP3858SP-WE # Aztech
- 122d 4024 MDP3858V-UE # Aztech
- 122d 4025 MDP3858SP-UE # Aztech
+ 122d 4021 Packard Bell MDP3858V-WE
+ 122d 4022 MDP3858SP-WE
+ 122d 4024 MDP3858V-UE
+ 122d 4025 MDP3858SP-UE
1026 HCF 56k PCI Speakerphone Modem
+ 1032 HCF 56k Modem
+ 1033 HCF 56k Modem
+ 1034 HCF 56k Modem
1035 HCF 56k PCI Speakerphone Modem
+ 1036 HCF 56k Modem
1085 HCF 56k Volcano PCI Modem
2005 HCF 56k Data/Fax Modem
- 104d 8044 229-DFSV # Sony
- 104d 8045 229-DFSV # Sony
- 104d 8055 PBE/Aztech 235W-DFSV # Sony
- 104d 8056 235-DFSV # Sony
- 104d 805a Modem # Sony
- 104d 805f Modem # Sony
- 104d 8074 Modem # Sony
+ 104d 8044 229-DFSV
+ 104d 8045 229-DFSV
+ 104d 8055 PBE/Aztech 235W-DFSV
+ 104d 8056 235-DFSV
+ 104d 805a Modem
+ 104d 805f Modem
+ 104d 8074 Modem
2013 HSF 56k Data/Fax Modem
- 1179 0001 Modem # Toshiba
- 1179 ff00 Modem # Toshiba
+ 1179 0001 Modem
+ 1179 ff00 Modem
2014 HSF 56k Data/Fax/Voice Modem
10cf 1057 Fujitsu Citicorp III
- 122d 4050 MSP3880-U # Aztech
- 122d 4055 MSP3880-W # Aztech
+ 122d 4050 MSP3880-U
+ 122d 4055 MSP3880-W
2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
10cf 1063 Fujitsu
10cf 1064 Fujitsu
1468 2015 Fujitsu
2016 HSF 56k Data/Fax/Voice/Spkp Modem
- 122d 4051 MSP3880V-W # Aztech
- 122d 4052 MSP3880SP-W # Aztech
- 122d 4054 MSP3880V-U # Aztech
- 122d 4056 MSP3880SP-U # Aztech
- 122d 4057 MSP3880SP-A # Aztech
+ 122d 4051 MSP3880V-W
+ 122d 4052 MSP3880SP-W
+ 122d 4054 MSP3880V-U
+ 122d 4056 MSP3880SP-U
+ 122d 4057 MSP3880SP-A
4311 Riptide HSF 56k PCI Modem
127a 4311 Ring Modular? Riptide HSF RT HP Dom
13e0 0210 HP-GVC
@@ -3293,10 +4072,11 @@
1235 4321 Hewlett Packard DF
1235 4324 Hewlett Packard DF
13e0 0210 Hewlett Packard DF
- 144d 2321 Riptide # Samsung
+ 144d 2321 Riptide
4322 Riptide PCI Game Controller
1235 4322 Riptide PCI Game Controller
8234 RapidFire 616X ATM155 Adapter
+ 108d 0022 RapidFire 616X ATM155 Adapter
108d 0027 RapidFire 616X ATM155 Adapter
127b Pixera Corporation
127c Crosspoint Solutions, Inc.
@@ -3348,6 +4128,7 @@
1298 Spellcaster Telecommunications Inc.
1299 Knowledge Technology Lab.
129a VMetro, inc.
+ 0615 PBT-615 PCI-X Bus Analyzer
129b Image Access
129c Jaycor
129d Compcore Multimedia, Inc.
@@ -3369,9 +4150,11 @@
12ac Measurex Corporation
12ad Multidata GmbH
12ae Alteon Networks Inc.
- 0001 AceNIC Gigabit Ethernet (Fibre)
- 1410 0104 Gigabit Ethernet-SX PCI Adapter (14100401)
+ 0001 AceNIC Gigabit Ethernet
+ 12ae 0001 Gigabit Ethernet-SX (Universal)
+ 1410 0104 Gigabit Ethernet-SX PCI Adapter
0002 AceNIC Gigabit Ethernet (Copper)
+ 12ae 0002 Gigabit Ethernet-T (3C986-T)
12af TDK USA Corp
12b0 Jorge Scientific Corp
12b1 GammaLink
@@ -3418,6 +4201,8 @@
5598 PCI NE2K Ethernet
12c4 Connect Tech Inc
12c5 Picture Elements Incorporated
+ 007e Imaging/Scanning Subsystem Engine
+ 007f Imaging/Scanning Subsystem Engine
0081 PCIVST [Grayscale Thresholding Engine]
0085 Video Simulator/Sender
0086 THR2 Multi-scale Thresholder
@@ -3437,19 +4222,24 @@
0008 NV1
0009 DAC64
0018 Riva128
+ 1048 0c10 VICTORY Erazor
107b 8030 STB Velocity 128
1092 0350 Viper V330
1092 1092 Viper V330
10b4 1b1b STB Velocity 128
- 10b4 1b20 STB Velocity 128
+ 10b4 1b1d STB Velocity 128
+ 10b4 1b1e STB Velocity 128, PAL TV-Out
+ 10b4 1b20 STB Velocity 128 Sapphire
10b4 1b21 STB Velocity 128
10b4 1b22 STB Velocity 128 AGP, NTSC TV-Out
10b4 1b23 STB Velocity 128 AGP, PAL TV-Out
10b4 1b27 STB Velocity 128 DVD
+ 10b4 1b88 MVP Pro 128
10b4 222a STB Velocity 128 AGP
10b4 2230 STB Velocity 128
+ 10b4 2232 STB Velocity 128
10b4 2235 STB Velocity 128 AGP
- 2a15 54a3 3DVision-SAGP
+ 2a15 54a3 3DVision-SAGP / 3DexPlorer 3000
0019 Riva128ZX
0020 TNT
0028 TNT2
@@ -3457,7 +4247,7 @@
002c VTNT2
00a0 ITNT2
12d3 Vingmed Sound A/S
-12d4 DGM&S
+12d4 Ulticom (Formerly DGM&S)
12d5 Equator Technologies
12d6 Analogic Corp
12d7 Biotronic SRL
@@ -3490,6 +4280,7 @@
1092 2100 Sonic Impact A3D
1092 2110 Sonic Impact A3D
1092 2200 Sonic Impact A3D
+ 122d 1002 AU8820 Vortex Digital Audio Processor
12eb 0001 AU8820 Vortex Digital Audio Processor
5053 3355 Montego
0002 Vortex 2
@@ -3710,6 +4501,7 @@
135a Brain Boxes
135b Giganet Inc
135c Quatech Inc
+ 00f0 MPAC-100 Syncronous Serial Card (Zilog 85230)
135d ABB Network Partner AB
135e Sealevel Systems Inc
7101 Single Port RS-232/422/485/530
@@ -3756,6 +4548,7 @@
1383 Controlnet Inc
1384 Reality Simulation Systems Inc
1385 Netgear
+ 4100 802.11b Wireless Adapter (MA301)
620a GA620
622a GA622
630a GA630
@@ -3781,6 +4574,8 @@
2180 Intellio C218 Turbo PCI
3200 Intellio C320 Turbo PCI
1394 Level One Communications
+ 0001 LXT1001 Gigabit Ethernet
+ 1394 0001 NetCelerator Adapter
1395 Ambicom Inc
1396 Cipher Systems Inc
1397 Cologne Chip Designs GmbH
@@ -3790,6 +4585,9 @@
1398 Clarion co. Ltd
1399 Rios systems Co Ltd
139a Alacritech Inc
+ 0001 Quad Port 10/100 Server Accelerator
+ 0003 Single Port 10/100 Server Accelerator
+ 0005 Single Port Gigabit Server Accelerator
139b Mediasonic Multimedia Systems Ltd
139c Quantum 3d Inc
139d EPL limited
@@ -3798,12 +4596,17 @@
13a0 Crystal Group Inc
13a1 Kawasaki Heavy Industries Ltd
13a2 Ositech Communications Inc
-13a3 Hi-Fn
+13a3 Hifn Inc.
+ 0005 7751 Security Processor
+ 0006 6500 Public Key Processor
+ 0007 7811 Security Processor
+ 0012 7951 Security Processor
13a4 Rascom Inc
13a5 Audio Digital Imaging Inc
13a6 Videonics Inc
13a7 Teles AG
13a8 Exar Corp.
+ 0158 XR17C158 Octal UART
13a9 Siemens Medical Systems, Ultrasound Group
13aa Broadband Networks Inc
13ab Arcom Control Systems Ltd
@@ -3832,6 +4635,7 @@
13c1 3ware Inc
1000 3ware ATA-RAID
1001 3ware 7000-series ATA-RAID
+ 1002 3ware ATA-RAID
13c2 Technotrend Systemtechnik GmbH
13c3 Janz Computer AG
13c4 Phase Metrics
@@ -3848,6 +4652,7 @@
13cf Studio Audio & Video Ltd
13d0 Techsan Electronics Co Ltd
13d1 Abocom Systems Inc
+ ab06 RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter
13d2 Shark Multimedia Inc
13d3 IMC Networks
13d4 Graphics Microsystems Inc
@@ -3881,11 +4686,12 @@
13ee Hayes Microcomputer Products Inc
13ef Coppercom Inc
13f0 Sundance Technology Inc
- 0201 Sundance Ethernet
+ 0201 ST201 Sundance Ethernet
13f1 Oce' - Technologies B.V.
13f2 Ford Microelectronics Inc
13f3 Mcdata Corporation
-13f4 Troika Design Inc
+13f4 Troika Networks, Inc.
+ 1401 Zentai Fibre Channel Adapter
13f5 Kansai Electric Co. Ltd
13f6 C-Media Electronics Inc
0100 CM8338A
@@ -3893,6 +4699,8 @@
0101 CM8338B
13f6 0101 CMI8338-031 PCI Audio Device
0111 CM8738
+ 1043 8077 CMI8738 6-channel audio controller
+ 1043 80e2 CMI8738 6ch-MX
13f6 0111 CMI8738/C3DX PCI Audio Device
0211 CM8738
13f7 Wildfire Communications
@@ -3903,6 +4711,7 @@
13fc Computer Peripherals International
13fd Micro Science Inc
13fe Advantech Co. Ltd
+ 1756 PCI-1756
13ff Silicon Spice Inc
1400 Artx Inc
1401 9432 TX
@@ -3922,11 +4731,13 @@
0500 Lava Single Serial
0600 Lava Port 650
8000 Lava Parallel
+ 8001 Dual parallel port controller A
8002 Lava Dual Parallel port A
8003 Lava Dual Parallel port B
8800 BOCA Research IOPPAR
1408 Aloka Co. Ltd
1409 Timedia Technology Co Ltd
+ 7168 PCI2S550 (Dual 16550 UART)
140a DSP Research Inc
140b Ramix Inc
140c Elmic Systems Inc
@@ -3940,6 +4751,16 @@
1413 Addonics
1414 Microsoft Corporation
1415 Oxford Semiconductor Ltd
+ 8403 VScom 011H-EP1 1 port parallel adaptor
+ 9501 OX16PCI954 (Quad 16950 UART) function 0
+ 15ed 2000 MCCR Serial p0-3 of 8
+ 15ed 2001 MCCR Serial p0-3 of 16
+ 950a EXSYS EX-41092 Dual 16950 Serial adapter
+ 950b OXCB950 Cardbus 16950 UART
+ 9511 OX16PCI954 (Quad 16950 UART) function 1
+ 15ed 2000 MCCR Serial p4-7 of 8
+ 15ed 2001 MCCR Serial p4-15 of 16
+ 9521 OX16PCI952 (Dual 16950 UART)
1416 Multiwave Innovation pte Ltd
1417 Convergenet Technologies Inc
1418 Kyushu electronics systems Inc
@@ -4116,6 +4937,10 @@
14b8 Techsoft Technology Co Ltd
14b9 AIRONET Wireless Communications
0001 PC4800
+ 0340 PC4800
+ 0350 PC4800
+ 4500 PC4500
+ 4800 PC4800
14ba INTERNIX Inc.
14bb SEMTECH Corporation
14bc Globespan Semiconductor Inc.
@@ -4141,6 +4966,22 @@
14d0 Ericsson Axe R & D
14d1 Computer Hi-Tech Co Ltd
14d2 Titan Electronics Inc
+ 8001 VScom 010L 1 port parallel adaptor
+ 8002 VScom 020L 2 port parallel adaptor
+ 8010 VScom 100L 1 port serial adaptor
+ 8011 VScom 110L 1 port serial and 1 port parallel adaptor
+ 8020 VScom 200L 1 port serial adaptor
+ 8021 VScom 210L 2 port serial and 1 port parallel adaptor
+ 8040 VScom 400L 4 port serial adaptor
+ 8080 VScom 800L 8 port serial adaptor
+ a000 VScom 010H 1 port parallel adaptor
+ a001 VScom 100H 1 port serial adaptor
+ a003 VScom 400H 4 port serial adaptor
+ a004 VScom 400HF1 4 port serial adaptor
+ a005 VScom 200H 2 port serial adaptor
+ e001 VScom 010HV2 1 port parallel adaptor
+ e010 VScom 100HV2 1 port serial adaptor
+ e020 VScom 200HV2 2 port serial adaptor
14d3 CIRTECH (UK) Ltd
14d4 Panacom Technology Corp
14d5 Nitsuko Corporation
@@ -4162,46 +5003,76 @@
0007 PCI224
0008 PCI234
0009 PCI236
+ 000a PCI272
+ 000b PCI215
14dd Boulder Design Labs Inc
14de Applied Integration Corporation
14df ASIC Communications Corp
14e1 INVERTEX
14e2 INFOLIBRIA
14e3 AMTELCO
-14e4 BROADCOM Corporation
+14e4 Broadcom Corporation
1644 NetXtreme BCM5700 Gigabit Ethernet
+ 1014 0277 Broadcom Vigil B5700 1000BaseTX
+ 1028 00d1 Broadcom BCM5700
+ 1028 0106 Broadcom BCM5700
+ 1028 0109 Broadcom BCM5700 1000BaseTX
+ 1028 010a Broadcom BCM5700 1000BaseTX
10b7 1000 3C996-T 1000BaseTX
10b7 1001 3C996B-T 1000BaseTX
10b7 1002 3C996C-T 1000BaseTX
- 10b7 1003 3C997-T 1000BaseTX
+ 10b7 1003 3C997-T 1000BaseTX Dual Port
10b7 1004 3C996-SX 1000BaseSX
- 10b7 1005 3C997-SX 1000BaseSX
+ 10b7 1005 3C997-SX 1000BaseSX Dual Port
+ 10b7 1008 3C942 Gigabit LOM (31X31)
14e4 0002 NetXtreme 1000BaseSX
14e4 0003 NetXtreme 1000BaseSX
14e4 0004 NetXtreme 1000BaseTX
- 14e4 1644 NetXtreme BCM5700 1000BaseTX
+ 14e4 1028 NetXtreme 1000BaseTX
+ 14e4 1644 BCM5700 1000BaseTX
1645 NetXtreme BCM5701 Gigabit Ethernet
- 0e11 007c NC7770 1000BaseTX
- 0e11 007d NC6770 1000BaseSX
- 0e11 0085 NC7780 1000BaseTX
+ 0e11 007c NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
+ 0e11 007d NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)
+ 0e11 0085 NC7780 Gigabit Server Adapter (embedded, WOL)
+ 0e11 0099 NC7780 Gigabit Server Adapter (embedded, WOL)
+ 0e11 009a NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
+ 1028 0121 Broadcom BCM5701 1000BaseTX
10b7 1004 3C996-SX 1000BaseSX
10b7 1006 3C996B-T 1000BaseTX
10b7 1007 3C1000-T 1000BaseTX
10b7 1008 3C940-BR01 1000BaseTX
- 14e4 0001 NetXtreme BCM5701 1000BaseTX
- 14e4 0005 NetXtreme BCM5701 1000BaseTX
- 14e4 0006 NetXtreme BCM5701 1000BaseTX
- 14e4 0007 NetXtreme BCM5701 1000BaseSX
- 14e4 0008 NetXtreme BCM5701 1000BaseTX
- 14e4 8008 NetXtreme BCM5701 1000BaseTX
+ 14e4 0001 BCM5701 1000BaseTX
+ 14e4 0005 BCM5701 1000BaseTX
+ 14e4 0006 BCM5701 1000BaseTX
+ 14e4 0007 BCM5701 1000BaseSX
+ 14e4 0008 BCM5701 1000BaseTX
+ 14e4 8008 BCM5701 1000BaseTX
+ 1646 NetXtreme BCM5702 Gigabit Ethernet
+ 0e11 00bb NC7760 1000BaseTX
+ 1028 0126 Broadcom BCM5702 1000BaseTX
+ 14e4 8009 BCM5702 1000BaseTX
1647 NetXtreme BCM5703 Gigabit Ethernet
+ 0e11 0099 NC7780 1000BaseTX
+ 0e11 009a NC7770 1000BaseTX
+ 14e4 0009 BCM5703 1000BaseTX
+ 14e4 000a BCM5703 1000BaseSX
+ 14e4 000b BCM5703 1000BaseTX
+ 14e4 8009 BCM5703 1000BaseTX
+ 14e4 800a BCM5703 1000BaseTX
+ 1648 NetXtreme BCM5704 Gigabit Ethernet
+ 164d NetXtreme BCM5702FE Gigabit Ethernet
+ 16a6 NetXtreme BCM5702X Gigabit Ethernet
+ 16a7 NetXtreme BCM5703X Gigabit Ethernet
+ 4212 BCM v.90 56k modem
5820 BCM5820 Crypto Accelerator
+ 5821 BCM5821 Crypto Accelerator
14e5 Pixelfusion Ltd
14e6 SHINING Technology Inc
14e7 3CX
14e8 RAYCER Inc
14e9 GARNETS System CO Ltd
-14ea PLANEX COMMUNICATIONS Inc
+14ea Planex Communications, Inc
+ ab06 FNW-3603-TX CardBus Fast Ethernet
14eb SEIKO EPSON Corp
14ec ACQIRIS
14ed DATAKINETICS Ltd
@@ -4209,14 +5080,30 @@
14ef CARRY Computer ENG. CO Ltd
14f0 CANON RESEACH CENTRE FRANCE
14f1 Conexant
+ 1002 HCF 56k Modem
+ 1003 HCF 56k Modem
+ 1004 HCF 56k Modem
+ 1005 HCF 56k Modem
+ 1006 HCF 56k Modem
+ 1022 HCF 56k Modem
+ 1023 HCF 56k Modem
+ 1024 HCF 56k Modem
+ 1025 HCF 56k Modem
+ 1026 HCF 56k Modem
+ 1032 HCF 56k Modem
1033 HCF 56k Data/Fax Modem
+ 1033 8077 NEC
122d 4027 Dell Zeus - MDP3880-W(B) Data Fax Modem
122d 4030 Dell Mercury - MDP3880-U(B) Data Fax Modem
122d 4034 Dell Thor - MDP3880-W(U) Data Fax Modem
13e0 020d Dell Copper
13e0 020e Dell Silver
+ 13e0 0261 IBM
13e0 0290 Compaq Goldwing
+ 13e0 02a0 IBM
+ 13e0 02b0 IBM
13e0 02c0 Compaq Scooter
+ 13e0 02d0 IBM
144f 1500 IBM P85-DF (1)
144f 1501 IBM P85-DF (2)
144f 150a IBM P85-DF (3)
@@ -4226,6 +5113,7 @@
1035 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
10cf 1098 Fujitsu P85-DFSV
1036 HCF 56k Data/Fax/Voice/Spkp Modem
+ 104d 8067 HCF 56k Modem
122d 4029 MDP3880SP-W
122d 4031 MDP3880SP-U
13e0 0209 Dell Titanium
@@ -4249,6 +5137,8 @@
1435 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
1436 HCF 56k Data/Fax Modem
1453 HCF 56k Data/Fax Modem
+ 13e0 0240 IBM
+ 13e0 0250 IBM
144f 1502 IBM P95-DF (1)
144f 1503 IBM P95-DF (2)
1454 HCF 56k Data/Fax/Voice Modem
@@ -4256,6 +5146,8 @@
1456 HCF 56k Data/Fax/Voice/Spkp Modem
122d 4035 Dell Europa - MDP3900V-W
122d 4302 Dell MP3930V-W(C) MiniPCI
+ 1610 ADSL AccessRunner PCI Arbitration Device
+ 1611 AccessRunner PCI ADSL Interface Device
1803 HCF 56k Modem
0e11 0023 623-LAN Grizzly
0e11 0043 623-LAN Yogi
@@ -4270,6 +5162,9 @@
0e11 b195 Bear
0e11 b196 Seminole 1
0e11 b1be Seminole 2
+ 1025 8013 Acer
+ 1033 809d NEC
+ 1033 80bc NEC
155d 6793 HP
155d 8850 E Machines
2014 HSF 56k Data/Fax/Voice Modem
@@ -4302,6 +5197,9 @@
2365 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)
2366 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)
2443 HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)
+ 104d 8075 Modem
+ 104d 8083 Modem
+ 104d 8097 Modem
2444 HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)
2445 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)
2446 HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)
@@ -4312,6 +5210,8 @@
2f00 HSF 56k HSFi Modem
13e0 8d84 IBM HSFi V.90
13e0 8d85 Compaq Stinger
+ 14f1 2004 Dynalink 56PMi
+ 8234 RS8234 ATM SAR Controller [ServiceSAR Plus]
14f2 MOBILITY Electronics
14f3 BROADLOGIC
14f4 TOKYO Electronic Industry CO Ltd
@@ -4359,6 +5259,8 @@
1514 TFL LAN Inc
1515 Advent design
1516 MYSON Technology Inc
+ 0803 SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
+ 1320 10bd SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
1517 ECHOTEK Corp
1518 PEP MODULAR Computers GmbH
1519 TELEFON AKTIEBOLAGET LM Ericsson
@@ -4371,9 +5273,16 @@
151d Fujitsu Computer Products Of America
151e MATRIX Corp
151f TOPIC SEMICONDUCTOR Corp
+ 0000 TP560 Data/Fax/Voice 56k modem
1520 CHAPLET System Inc
1521 BELL Corp
1522 MainPine Ltd
+ 0100 PCI <-> IOBus Bridge
+ 1522 0200 RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem
+ 1522 0300 RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem
+ 1522 0400 RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem
+ 1522 0500 RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem
+ 1522 0600 RockForce+ 2 Port V.90 Data/Fax/Voice Modem
1523 MUSIC Semiconductors
1524 ENE Technology Inc
1525 IMPACT Technologies
@@ -4528,6 +5437,7 @@
15a0 Compumaster SRL
15a1 Geocast Network Systems
15a2 Catalyst Enterprises Inc
+ 0001 TA700 PCI Bus Analyzer/Exerciser
15a3 Italtel
15a4 X-Net OY
15a5 Toyota Macs Inc
@@ -4544,6 +5454,7 @@
15b1 Source Technology Inc
15b2 Mosaid Technologies Inc
15b3 Mellanox Technology
+ 5274 MT21108 InfiniBridge
15b4 CCI/TRIAD
15b5 Cimetrics Inc
15b6 Texas Memory Systems Inc
@@ -4553,6 +5464,7 @@
15ba Impacct Technology Corp
15bb Portwell Inc
15bc Agilent Technologies
+ 2929 E2929A PCI/PCI-X Bus Analyzer
15bd DFI Inc
15be Sola Electronics
15bf High Tech Computer Corp (HTC)
@@ -4563,7 +5475,8 @@
15c4 EVSX Inc
15c5 Procomp Informatics Ltd
15c6 Technical University of Budapest
-15c7 Tateyama Dystem Laboratory Co Ltd
+15c7 Tateyama System Laboratory Co Ltd
+ 0349 Tateyama C-PCI PLC/NC card Rev.01A
15c8 Penta Media Co Ltd
15c9 Serome Technology Inc
15ca Bitboys OY
@@ -4597,6 +5510,7 @@
15e6 Agere Inc
15e7 Get Engineering Corp
15e8 National Datacomm Corp
+ 0130 Wireless PCI Card
15e9 Pacific Digital Corp
15ea Tokyo Denshi Sekei K.K.
15eb Drsearch GmbH
@@ -4633,7 +5547,35 @@
1619 FarSite Communications Ltd
0400 FarSync T2P (2 port X.21/V.35/V.24)
0440 FarSync T4P (4 port X.21/V.35/V.24)
+1629 Kongsberg Spacetec AS
+ 1003 Format synchronizer v3.0
+ 2002 Fast Universal Data Output
+1638 Standard Microsystems Corp [SMC]
+ 1100 SMC2602W EZConnect / Addtron AWA-100
+1657 Brocade Communications Systems, Inc.
+165d Hsing Tech. Enterprise Co., Ltd.
+1661 Worldspace Corp.
1668 Action Tec Electronics Inc
+16ec U.S. Robotics
+ 3685 Wireless Access PCI Adapter Model 022415
+16f6 VideoTele.com, Inc.
+170b NetOctave Inc
+170c YottaYotta Inc.
+173b Altima (nee Broadcom)
+ 03e8 AC1000 Gigabit Ethernet
+ 03ea AC9100 Gigabit Ethernet
+1743 Peppercon AG
+ 8139 ROL/F-100 Fast Ethernet Adapter with ROL
+174b PC Partner Limited
+175e Sanera Systems, Inc.
+# also used by Struck Innovative Systeme for joint developments
+1796 Research Centre Juelich
+ 0001 SIS1100 [Gigabit link]
+ 0002 HOTlink
+ 0003 Counter Timer
+ 0004 CAMAC Controller
+ 0005 PROFIBUS
+ 0006 AMCC HOTlink
1813 Ambient Technologies Inc
1a08 Sierra semiconductor
0000 SC15064
@@ -4659,11 +5601,12 @@
3000 Hansol Electronics Inc.
3142 Post Impression Systems.
3388 Hint Corp
+ 0021 HB1-SE33 PCI-PCI Bridge
8011 VXPro II Chipset
3388 8011 VXPro II Chipset CPU to PCI Bridge
8012 VXPro II Chipset
3388 8012 VXPro II Chipset PCI to ISA Bridge
- 8013 VXPro II Chipset
+ 8013 VXPro II IDE
3388 8013 VXPro II Chipset EIDE Controller
3411 Quantum Designs (H.K.) Inc
3513 ARCOM Control Systems Ltd
@@ -4678,6 +5621,7 @@
0007 3D Extreme
0008 GLINT Gamma G1
0009 Permedia II 2D+3D
+ 1040 0011 AccelStar II
3d3d 0100 AccelStar II 3D Accelerator
3d3d 0111 Permedia 3:16
3d3d 0114 Santa Ana
@@ -4707,6 +5651,7 @@
2501 ALG-2564A/25128A
4000 ALS4000 Audio Chipset
4005 4000 ALS4000 Audio Chipset
+ 4710 ALC200/200P
4033 Addtron Technology Co, Inc.
1360 RTL8139 Ethernet
4143 Digital Equipment Corp
@@ -4728,11 +5673,31 @@
4a14 5000 RT8029-Based Ethernet Adapter
4b10 Buslogic Inc.
4c48 LUNG HWA Electronics
+4c53 SBS Technologies
4ca1 Seanix Technology Inc
4d51 MediaQ Inc.
0200 MQ-200
4d54 Microtechnica Co Ltd
4ddc ILC Data Device Corp
+ 0100 DD-42924I5-300 (ARINC 429 Data Bus)
+ 0801 BU-65570I1 MIL-STD-1553 Test and Simulation
+ 0802 BU-65570I2 MIL-STD-1553 Test and Simulation
+ 0811 BU-65572I1 MIL-STD-1553 Test and Simulation
+ 0812 BU-65572I2 MIL-STD-1553 Test and Simulation
+ 0881 BU-65570T1 MIL-STD-1553 Test and Simulation
+ 0882 BU-65570T2 MIL-STD-1553 Test and Simulation
+ 0891 BU-65572T1 MIL-STD-1553 Test and Simulation
+ 0892 BU-65572T2 MIL-STD-1553 Test and Simulation
+ 0901 BU-65565C1 MIL-STD-1553 Data Bus
+ 0902 BU-65565C2 MIL-STD-1553 Data Bus
+ 0903 BU-65565C3 MIL-STD-1553 Data Bus
+ 0904 BU-65565C4 MIL-STD-1553 Data Bus
+ 0b01 BU-65569I1 MIL-STD-1553 Data Bus
+ 0b02 BU-65569I2 MIL-STD-1553 Data Bus
+ 0b03 BU-65569I3 MIL-STD-1553 Data Bus
+ 0b04 BU-65569I4 MIL-STD-1553 Data Bus
+5046 GemTek Technology Corporation
+ 1001 PCI Radio
5053 Voyetra Technologies
2010 Daytona Audio Adapter
5136 S S Technologies
@@ -4776,7 +5741,7 @@
88f3 86c968 [Vision 968 VRAM] rev 3
8900 86c755 [Trio 64V2/DX]
5333 8900 86C775 Trio64V2/DX
- 8901 Trio 64V2/DX or /GX
+ 8901 86c775/86c785 [Trio 64V2/DX or /GX]
5333 8901 86C775 Trio64V2/DX, 86C785 Trio64V2/GX
8902 Plato/PX
8903 Trio 3D business multimedia
@@ -4805,9 +5770,11 @@
5333 8a13 Trio3D/2X
8a20 86c794 [Savage 3D]
5333 8a20 86C391 Savage3D
- 8a21 86c795 [Savage 3D/MV]
+ 8a21 86c390 [Savage 3D/MV]
5333 8a21 86C390 Savage3D/MV
8a22 Savage 4
+ 1033 8068 Savage 4
+ 1033 8069 Savage 4
105d 0018 SR9 8Mb SDRAM
105d 002a SR9 Pro 16Mb SDRAM
105d 003a SR9 Pro 32Mb SDRAM
@@ -4839,12 +5806,27 @@
8a26 ProSavage KM133
8c00 ViRGE/M3
8c01 ViRGE/MX
+ 1179 0001 ViRGE/MX
8c02 ViRGE/MX+
8c03 ViRGE/MX+MV
8c10 86C270-294 Savage/MX-MV
8c11 82C270-294 Savage/MX
8c12 86C270-294 Savage/IX-MV
8c13 86C270-294 Savage/IX
+ 8c22 SuperSavage MX/128
+ 8c24 SuperSavage MX/64
+ 8c26 SuperSavage MX/64C
+ 8c2a SuperSavage IX/128 SDR
+ 8c2b SuperSavage IX/128 DDR
+ 8c2c SuperSavage IX/64 SDR
+ 8c2d SuperSavage IX/64 DDR
+ 8c2e SuperSavage IX/C SDR
+ 1014 01fc ThinkPad T23 (2647-4MG)
+ 8c2f SuperSavage IX/C DDR
+# Integrated in VIA ProSavage PN133 North Bridge
+ 8d01 VT8603 [ProSavage PN133] AGP4X VGA Controller (Twister)
+ 8d02 VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)
+ 8d04 VT8751 [ProSavageDDR P4M266] VGA Controller
9102 86C410 Savage 2000
1092 5932 Viper II Z200
1092 5934 Viper II Z200
@@ -4879,6 +5861,7 @@
0011 PWDOG2 [PCI-Watchdog 2]
8086 Intel Corp.
0007 82379AB
+ 0008 Extended Express System Support Controller
0039 21145
0122 82437FX
0482 82375EB
@@ -4889,31 +5872,85 @@
04d0 82437FX [Triton FX]
0600 RAID Controller
0960 80960RP [i960 RP Microprocessor/Bridge]
+ 0962 80960RM [i960RM Bridge]
0964 80960RP [i960 RP Microprocessor/Bridge]
1000 82542 Gigabit Ethernet Controller
- 0e11 b0df NC1632 Gigabit Ethernet Adapter
- 0e11 b0e0 NC1633 Gigabit Ethernet Adapter
- 0e11 b123 NC1634 Gigabit Ethernet Adapter
+ 0e11 b0df NC1632 Gigabit Ethernet Adapter (1000-SX)
+ 0e11 b0e0 NC1633 Gigabit Ethernet Adapter (1000-LX)
+ 0e11 b123 NC1634 Gigabit Ethernet Adapter (1000-SX)
1014 0119 Netfinity Gigabit Ethernet SX Adapter
+ 8086 1000 PRO/1000 Gigabit Server Adapter
1001 82543GC Gigabit Ethernet Controller
+ 0e11 004a NC6136 Gigabit Server Adapter
+ 1014 01ea Netfinity Gigabit Ethernet SX Adapter
+ 8086 1003 PRO/1000 F Server Adapter
+ 1002 Pro 100 LAN+Modem 56 Cardbus II
+ 8086 200e Pro 100 LAN+Modem 56 Cardbus II
+ 8086 2013 Pro 100 SR Mobile Combo Adapter
+ 8086 2017 Pro 100 S Combo Mobile Adapter
1004 82543GC Gigabit Ethernet Controller
+ 0e11 0049 NC7132 Gigabit Upgrade Module
+ 0e11 b1a4 NC7131 Gigabit Server Adapter
+ 1014 10f2 Gigabit Ethernet Server Adapter
+ 8086 1004 PRO/1000 T Server Adapter
+ 8086 2004 PRO/1000 T Server Adapter
1008 82544EI Gigabit Ethernet Controller
+ 8086 1107 PRO/1000 XT Server Adapter
+ 8086 2107 PRO/1000 XT Server Adapter
+ 8086 2110 PRO/1000 XT Server Adapter
1009 82544EI Gigabit Ethernet Controller
+ 8086 1109 PRO/1000 XF Server Adapter
+ 8086 2109 PRO/1000 XF Server Adapter
100c 82544GC Gigabit Ethernet Controller
+ 8086 1112 PRO/1000 T Desktop Adapter
+ 8086 2112 PRO/1000 T Desktop Adapter
100d 82544GC Gigabit Ethernet Controller
+ 100e 82540EM Gigabit Ethernet Controller
+ 8086 001e PRO/1000 MT Desktop Adapter
+ 8086 002e PRO/1000 MT Desktop Adapter
+ 100f 82545EM Gigabit Ethernet Controller
+ 8086 1001 PRO/1000 MT Server Adapter
+ 1010 82546EB Gigabit Ethernet Controller
+ 8086 1011 PRO/1000 MT Dual Port Server Adapter
+ 1011 82545EM Gigabit Ethernet Controller
+ 8086 1002 PRO/1000 MF Server Adapter
+ 1012 82546EB Gigabit Ethernet Controller
+ 8086 1012 PRO/1000 MF Dual Port Server Adapter
1029 82559 Ethernet Controller
1030 82559 InBusiness 10/100
- 1031 82801CAM (ICH3) Chipset Ethernet Controller
- 1032 82801CAM (ICH3) Chipset Ethernet Controller
- 1033 82801CAM (ICH3) Chipset Ethernet Controller
- 1034 82801CAM (ICH3) Chipset Ethernet Controller
- 1035 82801CAM (ICH3) Chipset Ethernet Controller
- 1036 82801CAM (ICH3) Chipset Ethernet Controller
+ 1031 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
+ 1014 0209 ThinkPad A30p (2653-64G)
+ 104d 80e7 Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 107b 5350 EtherExpress PRO/100 VE
+ 1179 0001 EtherExpress PRO/100 VE
+ 144d c000 EtherExpress PRO/100 VE
+ 144d c001 EtherExpress PRO/100 VE
+ 144d c003 EtherExpress PRO/100 VE
+ 1032 82801CAM (ICH3) PRO/100 VE Ethernet Controller
+ 1033 82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller
+ 1034 82801CAM (ICH3) PRO/100 VM Ethernet Controller
+ 1035 82801CAM (ICH3)/82562EH (LOM) Ethernet Controller
+ 1036 82801CAM (ICH3) 82562EH Ethernet Controller
1037 82801CAM (ICH3) Chipset Ethernet Controller
- 1038 82801CAM (ICH3) Chipset Ethernet Controller
+ 1038 82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller
+ 1039 82801BD PRO/100 VE (LOM) Ethernet Controller
+ 103a 82801BD PRO/100 VE (CNR) Ethernet Controller
+ 103b 82801BD PRO/100 VM (LOM) Ethernet Controller
+ 103c 82801BD PRO/100 VM (CNR) Ethernet Controller
+ 103d 82801BD PRO/100 VE (MOB) Ethernet Controller
+ 103e 82801BD PRO/100 VM (MOB) Ethernet Controller
+ 1059 82551QM Ethernet Controller
1130 82815 815 Chipset Host Bridge and Memory Controller Hub
+ 1043 8027 TUSL2-C Mainboard
+ 104d 80df Vaio PCG-FX403
+ 1131 82815 815 Chipset AGP Bridge
1132 82815 CGC [Chipset Graphics Controller]
+ 1025 1016 Travelmate 612 TX
+ 104d 80df Vaio PCG-FX403
1161 82806AA PCI64 Hub Advanced Programmable Interrupt Controller
+ 8086 1161 82806AA PCI64 Hub APIC
+ 1200 Intel IXP1200 Network Processor
+ 172a 0000 AEP SSL Accelerator
1209 82559ER
1221 82092AA_0
1222 82092AA_1
@@ -4922,31 +5959,69 @@
1226 82596 PRO/10 PCI
1227 82865 EtherExpress PRO/100A
1228 82556 EtherExpress PRO/100 Smart
- 1229 82557 [Ethernet Pro 100]
- 0e11 b01e NC3120
- 0e11 b01f NC3122
- 0e11 b02f NC1120
+# the revision field differentiates between them (1-3 is 82557, 4-5 is 82558, 6-8 is 82559, 9 is 82559ER)
+ 1229 82557/8/9 [Ethernet Pro 100]
+ 0e11 3001 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 3002 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 3003 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 3004 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 3005 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 3006 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 3007 82559 Fast Ethernet LOM with Alert on LAN*
+ 0e11 b01e NC3120 Fast Ethernet NIC
+ 0e11 b01f NC3122 Fast Ethernet NIC (dual port)
+ 0e11 b02f NC1120 Ethernet NIC
0e11 b04a Netelligent 10/100TX NIC with Wake on LAN
- 0e11 b0c6 Embedded NC3120 with Wake on LAN
- 0e11 b0c7 Embedded NC3121
- 0e11 b0d7 NC3121 with Wake on LAN
- 0e11 b0dd NC3131 (82558B)
- 0e11 b0de NC3132
- 0e11 b0e1 NC3133
- 0e11 b144 NC3123 (82559)
+ 0e11 b0c6 NC3161 Fast Ethernet NIC (embedded, WOL)
+ 0e11 b0c7 NC3160 Fast Ethernet NIC (embedded)
+ 0e11 b0d7 NC3121 Fast Ethernet NIC (WOL)
+ 0e11 b0dd NC3131 Fast Ethernet NIC (dual port)
+ 0e11 b0de NC3132 Fast Ethernet Module (dual port)
+ 0e11 b0e1 NC3133 Fast Ethernet Module (100-FX)
+ 0e11 b134 NC3163 Fast Ethernet NIC (embedded, WOL)
+ 0e11 b13c NC3162 Fast Ethernet NIC (embedded)
+ 0e11 b144 NC3123 Fast Ethernet NIC (WOL)
+ 0e11 b163 NC3134 Fast Ethernet NIC (dual port)
+ 0e11 b164 NC3135 Fast Ethernet Upgrade Module (dual port)
+ 0e11 b1a4 NC7131 Gigabit Server Adapter
1014 005c 82558B Ethernet Pro 10/100
+ 1014 01bc 82559 Fast Ethernet LAN On Motherboard
+ 1014 01f1 10/100 Ethernet Server Adapter
+ 1014 01f2 10/100 Ethernet Server Adapter
+ 1014 0207 Ethernet Pro/100 S
+ 1014 0232 10/100 Dual Port Server Adapter
1014 105c Netfinity 10/100
+ 1014 305c 10/100 EtherJet Management Adapter
+ 1014 405c 10/100 EtherJet Adapter with Alert on LAN
+ 1014 505c 10/100 EtherJet Secure Management Adapter
+ 1014 605c 10/100 EtherJet Secure Management Adapter
+ 1014 705c 10/100 Netfinity 10/100 Ethernet Security Adapter
+ 1014 805c 10/100 Netfinity 10/100 Ethernet Security Adapter
1033 8000 PC-9821X-B06
1033 8016 PK-UG-X006
1033 801f PK-UG-X006
- 103c 10c0 Ethernet Pro 10/100TX
- 103c 10c3 Ethernet Pro 10/100TX
- 103c 1200 Ethernet Pro 10/100TX
+ 1033 8026 PK-UG-X006
+ 1033 8063 82559-based Fast Ethernet Adapter
+ 1033 8064 82559-based Fast Ethernet Adapter
+ 103c 10c0 NetServer 10/100TX
+ 103c 10c3 NetServer 10/100TX
+ 103c 10ca NetServer 10/100TX
+ 103c 10cb NetServer 10/100TX
+ 103c 10e3 NetServer 10/100TX
+ 103c 10e4 NetServer 10/100TX
+ 103c 1200 NetServer 10/100TX
10c3 1100 SmartEther100 SC1100
+ 10cf 1115 8255x-based Ethernet Adapter (10/100)
+ 10cf 1143 8255x-based Ethernet Adapter (10/100)
+ 1179 0001 8255x-based Ethernet Adapter (10/100)
1179 0002 PCI FastEther LAN on Docker
+ 1179 0003 8255x-based Fast Ethernet
1259 2560 AT-2560 100
1259 2561 AT-2560 100 FX Ethernet Adapter
1266 0001 NE10/100 Adapter
+ 144d 2501 SEM-2000 MiniPCI LAN Adapter
+ 144d 2502 SEM-2100IL MiniPCI LAN Adapter
+ 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)
8086 0001 EtherExpress PRO/100B (TX)
8086 0002 EtherExpress PRO/100B (T4)
8086 0003 EtherExpress PRO/10+
@@ -4961,14 +6036,76 @@
8086 000c EtherExpress PRO/100+ Management Adapter
8086 000d EtherExpress PRO/100+ Alert On LAN II* Adapter
8086 000e EtherExpress PRO/100+ Management Adapter with Alert On LAN*
+ 8086 000f EtherExpress PRO/100 Desktop Adapter
+ 8086 0010 EtherExpress PRO/100 S Management Adapter
+ 8086 0011 EtherExpress PRO/100 S Management Adapter
+ 8086 0012 EtherExpress PRO/100 S Advanced Management Adapter (D)
+ 8086 0013 EtherExpress PRO/100 S Advanced Management Adapter (E)
+ 8086 0030 EtherExpress PRO/100 Management Adapter with Alert On LAN* GC
+ 8086 0031 EtherExpress PRO/100 Desktop Adapter
+ 8086 0040 EtherExpress PRO/100 S Desktop Adapter
+ 8086 0041 EtherExpress PRO/100 S Desktop Adapter
+ 8086 0042 EtherExpress PRO/100 Desktop Adapter
+ 8086 0050 EtherExpress PRO/100 S Desktop Adapter
8086 1009 EtherExpress PRO/100+ Server Adapter
8086 100c EtherExpress PRO/100+ Server Adapter (PILA8470B)
+ 8086 1012 EtherExpress PRO/100 S Server Adapter (D)
+ 8086 1013 EtherExpress PRO/100 S Server Adapter (E)
+ 8086 1015 EtherExpress PRO/100 S Dual Port Server Adapter
+ 8086 1017 EtherExpress PRO/100+ Dual Port Server Adapter
+ 8086 1030 EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server
+ 8086 1040 EtherExpress PRO/100 S Server Adapter
+ 8086 1041 EtherExpress PRO/100 S Server Adapter
+ 8086 1042 EtherExpress PRO/100 Server Adapter
+ 8086 1050 EtherExpress PRO/100 S Server Adapter
+ 8086 1051 EtherExpress PRO/100 Server Adapter
+ 8086 1052 EtherExpress PRO/100 Server Adapter
8086 10f0 EtherExpress PRO/100+ Dual Port Adapter
+ 8086 2009 EtherExpress PRO/100 S Mobile Adapter
8086 200d EtherExpress PRO/100 Cardbus
8086 200e EtherExpress PRO/100 LAN+V90 Cardbus Modem
+ 8086 200f EtherExpress PRO/100 SR Mobile Adapter
+ 8086 2010 EtherExpress PRO/100 S Mobile Combo Adapter
+ 8086 2013 EtherExpress PRO/100 SR Mobile Combo Adapter
+ 8086 2016 EtherExpress PRO/100 S Mobile Adapter
+ 8086 2017 EtherExpress PRO/100 S Combo Mobile Adapter
+ 8086 2018 EtherExpress PRO/100 SR Mobile Adapter
+ 8086 2019 EtherExpress PRO/100 SR Combo Mobile Adapter
+ 8086 2101 EtherExpress PRO/100 P Mobile Adapter
+ 8086 2102 EtherExpress PRO/100 SP Mobile Adapter
+ 8086 2103 EtherExpress PRO/100 SP Mobile Adapter
+ 8086 2104 EtherExpress PRO/100 SP Mobile Adapter
+ 8086 2105 EtherExpress PRO/100 SP Mobile Adapter
+ 8086 2106 EtherExpress PRO/100 P Mobile Adapter
+ 8086 2107 EtherExpress PRO/100 Network Connection
+ 8086 2108 EtherExpress PRO/100 Network Connection
+ 8086 2200 EtherExpress PRO/100 P Mobile Combo Adapter
+ 8086 2201 EtherExpress PRO/100 P Mobile Combo Adapter
+ 8086 2202 EtherExpress PRO/100 SP Mobile Combo Adapter
+ 8086 2203 EtherExpress PRO/100+ MiniPCI
+ 8086 2204 EtherExpress PRO/100+ MiniPCI
+ 8086 2205 EtherExpress PRO/100 SP Mobile Combo Adapter
+ 8086 2206 EtherExpress PRO/100 SP Mobile Combo Adapter
+ 8086 2207 EtherExpress PRO/100 SP Mobile Combo Adapter
+ 8086 2208 EtherExpress PRO/100 P Mobile Combo Adapter
+ 8086 2402 EtherExpress PRO/100+ MiniPCI
+ 8086 2407 EtherExpress PRO/100+ MiniPCI
+ 8086 2408 EtherExpress PRO/100+ MiniPCI
+ 8086 2409 EtherExpress PRO/100+ MiniPCI
+ 8086 240f EtherExpress PRO/100+ MiniPCI
+ 8086 2410 EtherExpress PRO/100+ MiniPCI
+ 8086 2411 EtherExpress PRO/100+ MiniPCI
+ 8086 2412 EtherExpress PRO/100+ MiniPCI
+ 8086 2413 EtherExpress PRO/100+ MiniPCI
8086 3000 82559 Fast Ethernet LAN on Motherboard
8086 3001 82559 Fast Ethernet LOM with Basic Alert on LAN*
8086 3002 82559 Fast Ethernet LOM with Alert on LAN II*
+ 8086 3006 EtherExpress PRO/100 S Network Connection
+ 8086 3007 EtherExpress PRO/100 S Network Connection
+ 8086 3008 EtherExpress PRO/100 Network Connection
+ 8086 3010 EtherExpress PRO/100 S Network Connection
+ 8086 3011 EtherExpress PRO/100 S Network Connection
+ 8086 3012 EtherExpress PRO/100 Network Connection
122d 430FX - 82437FX TSC [Triton I]
122e 82371FB PIIX ISA [Triton I]
1230 82371FB PIIX IDE [Triton I]
@@ -4980,24 +6117,40 @@
123b 82380PB
123c 82380AB
123d 683053 Programmable Interrupt Device
+ 123f 82466GX Integrated Hot-Plug Controller (IHPC)
1240 752 AGP
124b 82380FB
1250 430HX - 82439HX TXC [Triton II]
1360 82806AA PCI64 Hub PCI Bridge
1361 82806AA PCI64 Hub Controller (HRes)
+ 8086 1361 82806AA PCI64 Hub Controller (HRes)
+ 8086 8000 82806AA PCI64 Hub Controller (HRes)
+ 1460 82870P2 P64H2 Hub PCI Bridge
+ 1461 82870P2 P64H2 I/OxAPIC
+ 1462 82870P2 P64H2 Hot Plug Controller
1960 80960RP [i960RP Microprocessor]
- 101e 0438 MegaRaid 438
- 101e 0466 MegaRaid 466
- 101e 0467 MegaRaid 467
+ 101e 0431 MegaRAID 431 RAID Controller
+ 101e 0438 MegaRAID 438 Ultra2 LVD RAID Controller
+ 101e 0466 MegaRAID 466 Express Plus RAID Controller
+ 101e 0467 MegaRAID 467 Enterprise 1500 RAID Controller
+ 101e 0490 MegaRAID 490 Express 300 RAID Controller
+ 101e 0762 MegaRAID 762 Express RAID Controller
101e 09a0 PowerEdge Expandable RAID Controller 2/SC
1028 0467 PowerEdge Expandable RAID Controller 2/DC
1028 1111 PowerEdge Expandable RAID Controller 2/SC
- 103c 03a2 MegaRaid
- 103c 10c6 MegaRaid 438
- 103c 10c7 MegaRaid T5
- 103c 10cc MegaRaid
- 1111 1111 MegaRaid 466
- 113c 03a2 MegaRaid
+ 103c 03a2 MegaRAID
+ 103c 10c6 MegaRAID 438, HP NetRAID-3Si
+ 103c 10c7 MegaRAID T5, Integrated HP NetRAID
+ 103c 10cc MegaRAID, Integrated HP NetRAID
+ 103c 10cd HP NetRAID-1Si
+ 105a 0000 SuperTrak
+ 105a 2168 SuperTrak Pro
+ 105a 5168 SuperTrak66/100
+ 1111 1111 MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC
+ 1111 1112 PowerEdge Expandable RAID Controller 2/SC
+ 113c 03a2 MegaRAID
+ 1962 80960RM [i960RM Microprocessor]
+ 105a 0000 SuperTrak SX6000 I2O CPU
1a21 82840 840 (Carmel) Chipset Host Bridge (Hub A)
1a23 82840 840 (Carmel) Chipset AGP Bridge
1a24 82840 840 (Carmel) Chipset PCI Bridge (Hub B)
@@ -5008,6 +6161,7 @@
2412 82801AA USB
2413 82801AA SMBus
2415 82801AA AC'97 Audio
+ 1028 0095 Precision Workstation 220 Integrated Digital Audio
11d4 0040 SoundMAX Integrated Digital Audio
11d4 0048 SoundMAX Integrated Digital Audio
11d4 5340 SoundMAX Integrated Digital Audio
@@ -5022,32 +6176,134 @@
11d4 0048 SoundMAX Integrated Digital Audio
2426 82801AB AC'97 Modem
2428 82801AB PCI Bridge
- 2440 82820 820 (Camino 2) Chipset ISA Bridge (ICH2)
- 2442 82820 820 (Camino 2) Chipset USB (Hub A)
- 2443 82820 820 (Camino 2) Chipset SMBus
- 2444 82820 820 (Camino 2) Chipset USB (Hub B)
- 2445 82820 820 (Camino 2) Chipset AC'97 Audio Controller
- 2446 82820 820 (Camino 2) Chipset AC'97 Modem Controller
- 2448 82820 820 (Camino 2) Chipset PCI (-M)
- 2449 82820 (ICH2) Chipset Ethernet Controller
- 244a 82820 820 (Camino 2) Chipset IDE U100 (-M)
- 244b 82820 820 (Camino 2) Chipset IDE U100
- 244c 82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M)
- 244e 82820 820 (Camino 2) Chipset PCI
- 2485 AC'97 Audio Controller
+ 2440 82801BA ISA Bridge (LPC)
+ 2442 82801BA/BAM USB (Hub #1)
+ 104d 80df Vaio PCG-FX403
+ 147b 0507 TH7II-RAID
+ 2443 82801BA/BAM SMBus
+ 1043 8027 TUSL2-C Mainboard
+ 104d 80df Vaio PCG-FX403
+ 147b 0507 TH7II-RAID
+ 2444 82801BA/BAM USB (Hub #2)
+ 104d 80df Vaio PCG-FX403
+ 147b 0507 TH7II-RAID
+ 2445 82801BA/BAM AC'97 Audio
+ 104d 80df Vaio PCG-FX403
+ 1462 3370 STAC9721 AC
+ 147b 0507 TH7II-RAID
+ 2446 82801BA/BAM AC'97 Modem
+ 104d 80df Vaio PCG-FX403
+ 2448 82801BAM/CAM PCI Bridge
+ 2449 82801BA/BAM/CA/CAM Ethernet Controller
+ 0e11 0012 EtherExpress PRO/100 VM
+ 0e11 0091 EtherExpress PRO/100 VE
+ 1014 01ce EtherExpress PRO/100 VE
+ 1014 01dc EtherExpress PRO/100 VE
+ 1014 01eb EtherExpress PRO/100 VE
+ 1014 01ec EtherExpress PRO/100 VE
+ 1014 0202 EtherExpress PRO/100 VE
+ 1014 0205 EtherExpress PRO/100 VE
+ 1014 0217 EtherExpress PRO/100 VE
+ 1014 0234 EtherExpress PRO/100 VE
+ 1014 023d EtherExpress PRO/100 VE
+ 1014 0244 EtherExpress PRO/100 VE
+ 1014 0245 EtherExpress PRO/100 VE
+ 109f 315d EtherExpress PRO/100 VE
+ 109f 3181 EtherExpress PRO/100 VE
+ 1186 7801 EtherExpress PRO/100 VE
+ 144d 2602 HomePNA 1M CNR
+ 8086 3010 EtherExpress PRO/100 VE
+ 8086 3011 EtherExpress PRO/100 VM
+ 8086 3012 82562EH based Phoneline
+ 8086 3013 EtherExpress PRO/100 VE
+ 8086 3014 EtherExpress PRO/100 VM
+ 8086 3015 82562EH based Phoneline
+ 8086 3016 EtherExpress PRO/100 P Mobile Combo
+ 8086 3017 EtherExpress PRO/100 P Mobile
+ 8086 3018 EtherExpress PRO/100
+ 244a 82801BAM IDE U100
+ 1025 1016 Travelmate 612TX
+ 104d 80df Vaio PCG-FX403
+ 244b 82801BA IDE U100
+ 1043 8027 TUSL2-C Mainboard
+ 147b 0507 TH7II-RAID
+ 244c 82801BAM ISA Bridge (LPC)
+ 244e 82801BA/CA/DB PCI Bridge
+ 2450 82801E ISA Bridge (LPC)
+ 2452 82801E USB
+ 2453 82801E SMBus
+ 2459 82801E Ethernet Controller 0
+ 245b 82801E IDE U100
+ 245d 82801E Ethernet Controller 1
+ 245e 82801E PCI Bridge
+ 2480 82801CA ISA Bridge (LPC)
+ 2482 82801CA/CAM USB (Hub #1)
+ 1014 0220 ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 2483 82801CA/CAM SMBus
+ 1014 0220 ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 2484 82801CA/CAM USB (Hub #2)
+ 1014 0220 ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 2485 82801CA/CAM AC'97 Audio
+ 1014 0222 ThinkPad T23 (2647-4MG)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 2486 82801CA/CAM AC'97 Modem
+ 1014 0223 ThinkPad A30p (2653-64G)
+ 1014 0503 ThinkPad R31 2656BBG
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 134d 4c21 Dell Inspiron 2100 internal modem
+ 2487 82801CA/CAM USB (Hub #3)
+ 1014 0220 ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 248a 82801CAM IDE U100
+ 1014 0220 ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 248b 82801CA IDE U100
+ 248c 82801CAM ISA Bridge (LPC)
+ 24c0 82801DB ISA Bridge (LPC)
+ 24c2 82801DB USB (Hub #1)
+ 24c3 82801DB SMBus
+ 24c4 82801DB USB (Hub #2)
+ 24c5 82801DB AC'97 Audio
+ 24c6 82801DB AC'97 Modem
+ 24c7 82801DB USB (Hub #3)
+ 24cb 82801DB ICH4 IDE
+ 24cd 82801DB USB EHCI Controller
2500 82820 820 (Camino) Chipset Host Bridge (MCH)
+ 1028 0095 Precision Workstation 220 Chipset
1043 801c P3C-2000 system chipset
2501 82820 820 (Camino) Chipset Host Bridge (MCH)
1043 801c P3C-2000 system chipset
250b 82820 820 (Camino) Chipset Host Bridge
- 250f 82820 820 (Camino) Chipset PCI to AGP Bridge
+ 250f 82820 820 (Camino) Chipset AGP Bridge
2520 82805AA MTH Memory Translator Hub
2521 82804AA MRH-S Memory Repeater Hub for SDRAM
2530 82850 850 (Tehama) Chipset Host Bridge (MCH)
- 2531 82850 860 (Wombat) Chipset Host Bridge (MCH)
+ 147b 0507 TH7II-RAID
+ 2531 82860 860 (Wombat) Chipset Host Bridge (MCH)
2532 82850 850 (Tehama) Chipset AGP Bridge
2533 82860 860 (Wombat) Chipset AGP Bridge
+ 2534 82860 860 (Wombat) Chipset PCI Bridge
+ 2540 e7500 [Plumas] DRAM Controller
+ 2541 e7500 [Plumas] DRAM Controller Error Reporting
+ 2543 e7500 [Plumas] HI_B Virtual PCI Bridge (F0)
+ 2544 e7500 [Plumas] HI_B Virtual PCI Bridge (F1)
+ 2545 e7500 [Plumas] HI_C Virtual PCI Bridge (F0)
+ 2546 e7500 [Plumas] HI_C Virtual PCI Bridge (F1)
+ 2547 e7500 [Plumas] HI_D Virtual PCI Bridge (F0)
+ 2548 e7500 [Plumas] HI_D Virtual PCI Bridge (F1)
+ 2560 82845G/GL [Brookdale-G] Chipset Host Bridge
+ 2561 82845G/GL [Brookdale-G] Chipset AGP Bridge
+ 2562 82845G/GL [Brookdale-G] Chipset Integrated Graphics Device
3092 Integrated RAID
+ 3575 82830 830 Chipset Host Bridge
+ 1014 021d ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+ 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+ 3576 82830 830 Chipset AGP Bridge
+ 3577 82830 CGC [Chipset Graphics Controller]
+ 3578 82830 830 Chipset Host Bridge
5200 EtherExpress PRO/100 Intelligent Server
5201 EtherExpress PRO/100 Intelligent Server
8086 0001 EtherExpress PRO/100 Server Ethernet Adapter
@@ -5057,42 +6313,51 @@
7020 82371SB PIIX3 USB [Natoma/Triton II]
7030 430VX - 82437VX TVX [Triton VX]
7100 430TX - 82439TX MTXC
- 7110 82371AB PIIX4 ISA
- 7111 82371AB PIIX4 IDE
- 7112 82371AB PIIX4 USB
- 7113 82371AB PIIX4 ACPI
+ 7110 82371AB/EB/MB PIIX4 ISA
+ 7111 82371AB/EB/MB PIIX4 IDE
+ 7112 82371AB/EB/MB PIIX4 USB
+ 7113 82371AB/EB/MB PIIX4 ACPI
7120 82810 GMCH [Graphics Memory Controller Hub]
7121 82810 CGC [Chipset Graphics Controller]
- 7122 82810-DC100 GMCH [Graphics Memory Controller Hub]
- 7123 82810-DC100 CGC [Chipset Graphics Controller]
- 7124 82810E GMCH [Graphics Memory Controller Hub]
- 7125 82810E CGC [Chipset Graphics Controller]
- 7126 82810 810 Chipset Host Bridge and Memory Controller Hub
+ 7122 82810 DC-100 GMCH [Graphics Memory Controller Hub]
+ 7123 82810 DC-100 CGC [Chipset Graphics Controller]
+ 7124 82810E DC-133 GMCH [Graphics Memory Controller Hub]
+ 7125 82810E DC-133 CGC [Chipset Graphics Controller]
+ 7126 82810 DC-133 System and Graphics Controller
+ 7128 82810-M DC-100 System and Graphics Controller
+ 712a 82810-M DC-133 System and Graphics Controller
7180 440LX/EX - 82443LX/EX Host bridge
7181 440LX/EX - 82443LX/EX AGP bridge
- 7190 440BX/ZX - 82443BX/ZX Host bridge
+ 7190 440BX/ZX/DX - 82443BX/ZX/DX Host bridge
0e11 0500 Armada 1750 Laptop System Chipset
- 7191 440BX/ZX - 82443BX/ZX AGP bridge
- 7192 440BX/ZX - 82443BX/ZX Host bridge (AGP disabled)
+ 1179 0001 Toshiba Tecra 8100 Laptop System Chipset
+ 7191 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge
+ 7192 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled)
0e11 0460 Armada 1700 Laptop System Chipset
- 7194 82440MX I/O Controller
+ 7194 82440MX Host Bridge
7195 82440MX AC'97 Audio Controller
10cf 1099 QSound_SigmaTel Stac97 PCI Audio
11d4 0040 SoundMAX Integrated Digital Audio
11d4 0048 SoundMAX Integrated Digital Audio
- 7198 82440MX PCI to ISA Bridge
+ 7196 82440MX AC'97 Modem Controller
+ 7198 82440MX ISA Bridge
7199 82440MX EIDE Controller
719a 82440MX USB Universal Host Controller
719b 82440MX Power Management Controller
71a0 440GX - 82443GX Host bridge
71a1 440GX - 82443GX AGP bridge
71a2 440GX - 82443GX Host bridge (AGP disabled)
- 7600 82372FB PCI to ISA Bridge
- 7601 82372FB PIIX4 IDE
- 7602 82372FB [PCI-to-USB UHCI]
- 7603 82372FB System Management Bus Controller
+ 7600 82372FB PIIX5 ISA
+ 7601 82372FB PIIX5 IDE
+ 7602 82372FB PIIX5 USB
+ 7603 82372FB PIIX5 SMBus
7800 i740
+ 003d 0008 Starfighter AGP
+ 003d 000b Starfighter AGP
1092 0100 Stealth II G460
+ 10b4 201a Lightspeed 740
+ 10b4 202f Lightspeed 740
+ 8086 0000 Terminator 2x/i
8086 0100 Intel740 Graphics Accelerator
84c4 450KX/GX [Orion] - 82454KX/GX PCI bridge
84c5 450KX/GX [Orion] - 82453KX/GX Memory controller
@@ -5100,13 +6365,20 @@
84cb 450NX - 82454NX/84460GX PCI Expander Bridge
84e0 460GX - 84460GX System Address Controller (SAC)
84e1 460GX - 84460GX System Data Controller (SDC)
- 84e2 460GX - 84460GX AGP Bridge (GXB)
+ 84e2 460GX - 84460GX AGP Bridge (GXB function 2)
84e3 460GX - 84460GX Memory Address Controller (MAC)
84e4 460GX - 84460GX Memory Data Controller (MDC)
+ 84e6 460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)
+ 84ea 460GX - 84460GX AGP Bridge (GXB function 1)
9621 Integrated RAID
9622 Integrated RAID
9641 Integrated RAID
96a1 Integrated RAID
+ b152 21152 PCI-to-PCI Bridge
+# observed, and documented in Intel revision note; new mask of 1011:0026
+ b154 21154 PCI-to-PCI Bridge
+ b555 21555 Non transparent PCI-to-PCI Bridge
+ e4bf 1000 CC8-1-BLUES
ffff 450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]
8800 Trigem Computer Inc.
2008 Video assistent component
@@ -5130,12 +6402,13 @@
5278 AIC-7852
5375 AIC-755x
5378 AIC-7850
- 5475 AIC-2930
+ 5475 AIC-755x
5478 AIC-7850
5575 AVA-2930
5578 AIC-7855
+ 5647 ANA-7711 TCP Offload Engine
5675 AIC-755x
- 5678 AIC-7850
+ 5678 AIC-7856
5775 AIC-755x
5778 AIC-7850
5800 AIC-5800
@@ -5143,37 +6416,38 @@
5905 ANA-5910A/5930A/5940A ATM Adapter
6038 AIC-3860
6075 AIC-1480 / APA-1480
+ 9004 7560 AIC-1480 / APA-1480 Cardbus
6078 AIC-7860
6178 AIC-7861
9004 7861 AHA-2940AU Single
6278 AIC-7860
6378 AIC-7860
- 6478 AIC-786
+ 6478 AIC-786x
6578 AIC-786x
- 6678 AIC-786
+ 6678 AIC-786x
6778 AIC-786x
6915 ANA620xx/ANA69011A
9004 0008 ANA69011A/TX 10/100
9004 0009 ANA69011A/TX 10/100
9004 0010 ANA62022 2-port 10/100
9004 0018 ANA62044 4-port 10/100
+ 9004 0019 ANA62044 4-port 10/100
9004 0020 ANA62022 2-port 10/100
9004 0028 ANA69011A/TX 10/100
9004 8008 ANA69011A/TX 64 bit 10/100
9004 8009 ANA69011A/TX 64 bit 10/100
9004 8010 ANA62022 2-port 64 bit 10/100
9004 8018 ANA62044 4-port 64 bit 10/100
+ 9004 8019 ANA62044 4-port 64 bit 10/100
9004 8020 ANA62022 2-port 64 bit 10/100
9004 8028 ANA69011A/TX 64 bit 10/100
7078 AHA-294x / AIC-7870
- 7178 AHA-294x / AIC-7871
- 7278 AHA-3940 / AIC-7872
+ 7178 AHA-2940/2940W / AIC-7871
+ 7278 AHA-3940/3940W / AIC-7872
7378 AHA-3985 / AIC-7873
- 7478 AHA-2944 / AIC-7874
-# DJ: Where did the 3rd number come from?
- 7578 AHA-3944 / AHA-3944W / 7875
-# DJ: Where did the 3rd number come from?
- 7678 AHA-4944W/UW / 7876
+ 7478 AHA-2944/2944W / AIC-7874
+ 7578 AHA-3944/3944W / AIC-7875
+ 7678 AHA-4944W/UW / AIC-7876
7778 AIC-787x
7810 AIC-7810
7815 AIC-7815 RAID+Memory Controller IC
@@ -5194,49 +6468,71 @@
7893 AIC-789x
7894 AIC-789x
7895 AHA-2940U/UW / AHA-39xx / AIC-7895
+ 9004 7890 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
+ 9004 7891 AHA-2940U/2940UW Dual
+ 9004 7892 AHA-3940AU/AUW/AUWD/UWD
+ 9004 7894 AHA-3944AUWD
9004 7895 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
+ 9004 7896 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
+ 9004 7897 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B
7896 AIC-789x
7897 AIC-789x
8078 AIC-7880U
9004 7880 AIC-7880P Ultra/Ultra Wide SCSI Chipset
- 8178 AIC-7881U
+ 8178 AHA-2940U/UW/D / AIC-7881U
9004 7881 AHA-2940UW SCSI Host Adapter
- 8278 AHA-3940U/UW / AIC-7882U
+ 8278 AHA-3940U/UW/UWD / AIC-7882U
8378 AHA-3940U/UW / AIC-7883U
- 8478 AHA-294x / AIC-7884U
- 8578 AHA-3944U / AHA-3944UWD / 7885
- 8678 AHA-4944UW / 7886
- 8778 AIC-788x
+ 8478 AHA-2944UW / AIC-7884U
+ 8578 AHA-3944U/UWD / AIC-7885
+ 8678 AHA-4944UW / AIC-7886
+ 8778 AHA-2940UW Pro / AIC-788x
9004 7887 2940UW Pro Ultra-Wide SCSI Controller
- 8878 7888
+ 8878 AHA-2930UW / AIC-7888
+ 9004 7888 AHA-2930UW SCSI Controller
8b78 ABA-1030
ec78 AHA-4944W/UW
9005 Adaptec
- 0010 AHA-2940U2/W
- 0011 2930U2
+ 0010 AHA-2940U2/U2W
+ 9005 2180 AHA-2940U2 SCSI Controller
+ 9005 8100 AHA-2940U2B SCSI Controller
+ 9005 a180 AHA-2940U2W SCSI Controller
+ 9005 e100 AHA-2950U2B SCSI Controller
+ 0011 AHA-2930U2
0013 78902
9005 0003 AAA-131U2 Array1000 1 Channel RAID Controller
- 001f AHA-2940U2/W / 7890
+ 001f AHA-2940U2/U2W / 7890/7891
9005 000f 2940U2W SCSI Controller
9005 a180 2940U2W SCSI Controller
0020 AIC-7890
002f AIC-7890
0030 AIC-7890
003f AIC-7890
- 0050 3940U2
- 0051 3950U2D
+ 0050 AHA-3940U2x/395U2x
+ 9005 f500 AHA-3950U2B
+ 0051 AHA-3950U2D
+ 9005 b500 AHA-3950U2D
0053 AIC-7896 SCSI Controller
9005 ffff AIC-7896 SCSI Controller mainboard implementation
- 005f 7896
- 0080 7892A
- 0081 7892B
- 0083 7892D
- 008f 7892P
- 00c0 7899A
- 00c1 7899B
- 00c3 7899D
+ 005f AIC-7896U2/7897U2
+ 0080 AIC-7892A U160/m
+ 0e11 e2a0 Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter
+ 9005 62a0 29160N Ultra160 SCSI Controller
+ 9005 e220 29160LP Low Profile Ultra160 SCSI Controller
+ 9005 e2a0 29160 Ultra160 SCSI Controller
+ 0081 AIC-7892B U160/m
+ 9005 62a1 19160 Ultra160 SCSI Controller
+ 0083 AIC-7892D U160/m
+ 008f AIC-7892P U160/m
+ 00c0 AHA-3960D / AIC-7899A U160/m
+ 0e11 f620 Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter
+ 9005 f620 AHA-3960D U160/m
+ 00c1 AIC-7899B U160/m
+ 00c3 AIC-7899D U160/m
00c5 RAID subsystem HBA
- 00cf 7899P
+ 00cf AIC-7899P U160/m
+ 0285 AAC-RAID
+ 1028 0287 PowerEdge Expandable RAID Controller 320/DC
907f Atronics
2015 IDE-2015PL
919a Gigapixel Corp
@@ -5244,6 +6540,9 @@
6565 6565
9699 Omni Media Technology Inc
6565 6565
+9710 NetMos Technology
+ 9815 VScom 021H-EP2 2 port parallel adaptor
+ 9835 222N-2 I/O Card (2S+1P)
a0a0 AOPEN Inc.
a0f1 UNISYS Corporation
a200 NEC Corporation
@@ -5263,16 +6562,33 @@ cafe Chrysalis-ITS
cccc Catapult Communications
d4d4 Dy4 Systems Inc
0601 PCI Mezzanine Card
+d531 I+ME ACTIA GmbH
d84d Exsys
+dead Indigita Corporation
e000 Winbond
e000 W89C940
e159 Tiger Jet Network Inc.
0001 Model 300 128k
0059 0001 128k ISDN-S/T Adapter
0059 0003 128k ISDN-U Adapter
+ 0002 Tiger100APC ISDN chipset
e4bf EKF Elektronik GmbH
ea01 Eagle Technology
eabb Aashima Technology B.V.
+eace Endace Measurement Systems, Ltd
+ 3100 DAG 3.10 OC-3/OC-12
+ 3200 DAG 3.2x OC-3/OC-12
+ 320e DAG 3.2E Fast Ethernet
+ 340e DAG 3.4E Fast Ethernet
+ 341e DAG 3.41E Fast Ethernet
+ 3500 DAG 3.5 OC-3/OC-12
+ 351c DAG 3.5ECM Fast Ethernet
+ 4100 DAG 4.10 OC-48
+ 4110 DAG 4.11 OC-48
+ 4220 DAG 4.2 OC-48
+ 422e DAG 4.2E Dual Gigabit Ethernet
+ec80 Belkin Corporation
+ ec00 F5D6000
ecc0 Echo Corporation
edd8 ARK Logic Inc
a091 1000PV [Stingray]
@@ -5280,6 +6596,7 @@ edd8 ARK Logic Inc
a0a1 2000MT
a0a9 2000MI
fa57 Fast Search & Transfer ASA
+febd Ultraview Corp.
feda Epigram Inc
fffe VMWare Inc
0710 Virtual SVGA
@@ -5417,6 +6734,7 @@ C 0c Serial bus controller
03 USB Controller
00 UHCI
10 OHCI
+ 20 EHCI
80 Unspecified
fe USB Device
04 Fibre Channel
diff --git a/xen-2.4.16/drivers/pci/proc.c b/xen-2.4.16/drivers/pci/proc.c
index 3516d445e3..5e04ad7b33 100644
--- a/xen-2.4.16/drivers/pci/proc.c
+++ b/xen-2.4.16/drivers/pci/proc.c
@@ -369,7 +369,7 @@ static struct seq_operations proc_bus_pci_devices_op = {
show: show_device
};
-static struct proc_dir_entry *proc_bus_pci_dir;
+struct proc_dir_entry *proc_bus_pci_dir;
int pci_proc_attach_device(struct pci_dev *dev)
{
diff --git a/xen-2.4.16/drivers/pci/quirks.c b/xen-2.4.16/drivers/pci/quirks.c
index 5c06bb55a2..83aedecc9e 100644
--- a/xen-2.4.16/drivers/pci/quirks.c
+++ b/xen-2.4.16/drivers/pci/quirks.c
@@ -14,7 +14,7 @@
#include <linux/config.h>
#include <linux/types.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/delay.h>
@@ -90,8 +90,8 @@ static void __init quirk_triton(struct pci_dev *dev)
* VIA Apollo KT133 needs PCI latency patch
* Made according to a windows driver based patch by George E. Breese
* see PCI Latency Adjust on http://www.viahardware.com/download/viatweak.shtm
- * Also see http://home.tiscalinet.de/au-ja/review-kt133a-1-en.html for
- * the info on which Mr Breese based his work.
+ * Also see http://www.au-ja.org/review-kt133a-1-en.phtml for the info on which
+ * Mr Breese based his work.
*
* Updated based on further information from the site and also on
* information provided by VIA
@@ -444,13 +444,53 @@ static void __init quirk_amd_ioapic(struct pci_dev *dev)
static void __init quirk_amd_ordering(struct pci_dev *dev)
{
u32 pcic;
-
- pci_read_config_dword(dev, 0x42, &pcic);
- if((pcic&2)==0)
+ pci_read_config_dword(dev, 0x4C, &pcic);
+ if((pcic&6)!=6)
{
- pcic |= 2;
- printk(KERN_WARNING "BIOS disabled PCI ordering compliance, so we enabled it again.\n");
- pci_write_config_dword(dev, 0x42, pcic);
+ pcic |= 6;
+ printk(KERN_WARNING "BIOS failed to enable PCI standards compliance, fixing this error.\n");
+ pci_write_config_dword(dev, 0x4C, pcic);
+ pci_read_config_dword(dev, 0x84, &pcic);
+ pcic |= (1<<23); /* Required in this mode */
+ pci_write_config_dword(dev, 0x84, pcic);
+ }
+}
+
+/*
+ * DreamWorks provided workaround for Dunord I-3000 problem
+ *
+ * This card decodes and responds to addresses not apparently
+ * assigned to it. We force a larger allocation to ensure that
+ * nothing gets put too close to it.
+ */
+
+static void __init quirk_dunord ( struct pci_dev * dev )
+{
+ struct resource * r = & dev -> resource [ 1 ];
+ r -> start = 0;
+ r -> end = 0xffffff;
+}
+
+static void __init quirk_transparent_bridge(struct pci_dev *dev)
+{
+ dev->transparent = 1;
+}
+
+/*
+ * Common misconfiguration of the MediaGX/Geode PCI master that will
+ * reduce PCI bandwidth from 70MB/s to 25MB/s. See the GXM/GXLV/GX1
+ * datasheets found at http://www.national.com/ds/GX for info on what
+ * these bits do. <christer@weinigel.se>
+ */
+
+static void __init quirk_mediagx_master(struct pci_dev *dev)
+{
+ u8 reg;
+ pci_read_config_byte(dev, 0x41, &reg);
+ if (reg & 2) {
+ reg &= ~2;
+ printk(KERN_INFO "PCI: Fixup for MediaGX/Geode Slave Disconnect Boundary (0x41=0x%02x)\n", reg);
+ pci_write_config_byte(dev, 0x41, reg);
}
}
@@ -459,6 +499,7 @@ static void __init quirk_amd_ordering(struct pci_dev *dev)
*/
static struct pci_fixup pci_fixups[] __initdata = {
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_DUNORD, PCI_DEVICE_ID_DUNORD_I3000, quirk_dunord },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release },
/*
@@ -484,7 +525,7 @@ static struct pci_fixup pci_fixups[] __initdata = {
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, quirk_vialatency },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8371_1, quirk_vialatency },
- { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, 0x3112 /* Not out yet ? */, quirk_vialatency },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361, quirk_vialatency },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576, quirk_vsfx },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_viaetbf },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_vt82c598_id },
@@ -507,6 +548,15 @@ static struct pci_fixup pci_fixups[] __initdata = {
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7410, quirk_amd_ioapic },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering },
+ /*
+ * i82380FB mobile docking controller: its PCI-to-PCI bridge
+ * is subtractive decoding (transparent), and does indicate this
+ * in the ProgIf. Unfortunately, the ProgIf value is wrong - 0x80
+ * instead of 0x01.
+ */
+ { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82380FB, quirk_transparent_bridge },
+
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master },
{ 0 }
};
diff --git a/xen-2.4.16/drivers/pci/setup-bus.c b/xen-2.4.16/drivers/pci/setup-bus.c
index 6a26a4ae8f..22e7075171 100644
--- a/xen-2.4.16/drivers/pci/setup-bus.c
+++ b/xen-2.4.16/drivers/pci/setup-bus.c
@@ -11,7 +11,10 @@
/*
* Nov 2000, Ivan Kokshaysky <ink@jurassic.park.msu.ru>
- * PCI-PCI bridges cleanup, sorted resource allocation
+ * PCI-PCI bridges cleanup, sorted resource allocation.
+ * Feb 2002, Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+ * Converted to allocation in 3 passes, which gives
+ * tighter packing. Prefetchable range support.
*/
#include <linux/init.h>
@@ -23,7 +26,7 @@
#include <linux/slab.h>
-#define DEBUG_CONFIG 0
+#define DEBUG_CONFIG 1
#if DEBUG_CONFIG
# define DBGC(args) printk args
#else
@@ -33,16 +36,14 @@
#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
static int __init
-pbus_assign_resources_sorted(struct pci_bus *bus,
- struct pbus_set_ranges_data *ranges)
+pbus_assign_resources_sorted(struct pci_bus *bus)
{
struct list_head *ln;
struct resource *res;
- struct resource_list head_io, head_mem, *list, *tmp;
- unsigned long io_reserved = 0, mem_reserved = 0;
+ struct resource_list head, *list, *tmp;
int idx, found_vga = 0;
- head_io.next = head_mem.next = NULL;
+ head.next = NULL;
for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
struct pci_dev *dev = pci_dev_b(ln);
u16 class = dev->class >> 8;
@@ -64,63 +65,26 @@ pbus_assign_resources_sorted(struct pci_bus *bus,
pci_write_config_word(dev, PCI_COMMAND, cmd);
}
- /* Reserve some resources for CardBus.
- Are these values reasonable? */
- if (class == PCI_CLASS_BRIDGE_CARDBUS) {
- io_reserved += 8*1024;
- mem_reserved += 32*1024*1024;
- continue;
- }
-
- pdev_sort_resources(dev, &head_io, IORESOURCE_IO);
- pdev_sort_resources(dev, &head_mem, IORESOURCE_MEM);
+ pdev_sort_resources(dev, &head);
}
- for (list = head_io.next; list;) {
+ for (list = head.next; list;) {
res = list->res;
idx = res - &list->dev->resource[0];
- if (pci_assign_resource(list->dev, idx) == 0
- && ranges->io_end < res->end)
- ranges->io_end = res->end;
+ pci_assign_resource(list->dev, idx);
tmp = list;
list = list->next;
kfree(tmp);
}
- for (list = head_mem.next; list;) {
- res = list->res;
- idx = res - &list->dev->resource[0];
- if (pci_assign_resource(list->dev, idx) == 0
- && ranges->mem_end < res->end)
- ranges->mem_end = res->end;
- tmp = list;
- list = list->next;
- kfree(tmp);
- }
-
- ranges->io_end += io_reserved;
- ranges->mem_end += mem_reserved;
-
- /* PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)
- requires that if there is no I/O ports or memory behind the
- bridge, corresponding range must be turned off by writing base
- value greater than limit to the bridge's base/limit registers. */
-#if 1
- /* But assuming that some hardware designed before 1998 might
- not support this (very unlikely - at least all DEC bridges
- are ok and I believe that was standard de-facto. -ink), we
- must allow for at least one unit. */
- if (ranges->io_end == ranges->io_start)
- ranges->io_end += 1;
- if (ranges->mem_end == ranges->mem_start)
- ranges->mem_end += 1;
-#endif
- ranges->io_end = ROUND_UP(ranges->io_end, 4*1024);
- ranges->mem_end = ROUND_UP(ranges->mem_end, 1024*1024);
return found_vga;
}
-/* Initialize bridges with base/limit values we have collected */
+/* Initialize bridges with base/limit values we have collected.
+ PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)
+ requires that if there is no I/O ports or memory behind the
+ bridge, corresponding range must be turned off by writing base
+ value greater than limit to the bridge's base/limit registers. */
static void __init
pci_setup_bridge(struct pci_bus *bus)
{
@@ -130,120 +94,307 @@ pci_setup_bridge(struct pci_bus *bus)
if (!bridge || (bridge->class >> 8) != PCI_CLASS_BRIDGE_PCI)
return;
+
ranges.io_start = bus->resource[0]->start;
ranges.io_end = bus->resource[0]->end;
ranges.mem_start = bus->resource[1]->start;
ranges.mem_end = bus->resource[1]->end;
+ ranges.prefetch_start = bus->resource[2]->start;
+ ranges.prefetch_end = bus->resource[2]->end;
pcibios_fixup_pbus_ranges(bus, &ranges);
- DBGC((KERN_ERR "PCI: Bus %d, bridge: %s\n", bus->number, bridge->name));
- DBGC((KERN_ERR " IO window: %04lx-%04lx\n", ranges.io_start, ranges.io_end));
- DBGC((KERN_ERR " MEM window: %08lx-%08lx\n", ranges.mem_start, ranges.mem_end));
+ DBGC((KERN_INFO "PCI: Bus %d, bridge: %s\n",
+ bus->number, bridge->name));
/* Set up the top and bottom of the PCI I/O segment for this bus. */
- pci_read_config_dword(bridge, PCI_IO_BASE, &l);
- l &= 0xffff0000;
- l |= (ranges.io_start >> 8) & 0x00f0;
- l |= ranges.io_end & 0xf000;
+ if (bus->resource[0]->flags & IORESOURCE_IO) {
+ pci_read_config_dword(bridge, PCI_IO_BASE, &l);
+ l &= 0xffff0000;
+ l |= (ranges.io_start >> 8) & 0x00f0;
+ l |= ranges.io_end & 0xf000;
+ /* Set up upper 16 bits of I/O base/limit. */
+ pci_write_config_word(bridge, PCI_IO_BASE_UPPER16,
+ ranges.io_start >> 16);
+ pci_write_config_word(bridge, PCI_IO_LIMIT_UPPER16,
+ ranges.io_end >> 16);
+ DBGC((KERN_INFO " IO window: %04lx-%04lx\n",
+ ranges.io_start, ranges.io_end));
+ }
+ else {
+ /* Clear upper 16 bits of I/O base/limit. */
+ pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0);
+ l = 0x00f0;
+ DBGC((KERN_INFO " IO window: disabled.\n"));
+ }
pci_write_config_dword(bridge, PCI_IO_BASE, l);
- /* Clear upper 16 bits of I/O base/limit. */
- pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0);
+ /* Set up the top and bottom of the PCI Memory segment
+ for this bus. */
+ if (bus->resource[1]->flags & IORESOURCE_MEM) {
+ l = (ranges.mem_start >> 16) & 0xfff0;
+ l |= ranges.mem_end & 0xfff00000;
+ DBGC((KERN_INFO " MEM window: %08lx-%08lx\n",
+ ranges.mem_start, ranges.mem_end));
+ }
+ else {
+ l = 0x0000fff0;
+ DBGC((KERN_INFO " MEM window: disabled.\n"));
+ }
+ pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
/* Clear out the upper 32 bits of PREF base/limit. */
pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0);
pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0);
- /* Set up the top and bottom of the PCI Memory segment
- for this bus. */
- l = (ranges.mem_start >> 16) & 0xfff0;
- l |= ranges.mem_end & 0xfff00000;
- pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
-
/* Set up PREF base/limit. */
- l = (bus->resource[2]->start >> 16) & 0xfff0;
- l |= bus->resource[2]->end & 0xfff00000;
+ if (bus->resource[2]->flags & IORESOURCE_PREFETCH) {
+ l = (ranges.prefetch_start >> 16) & 0xfff0;
+ l |= ranges.prefetch_end & 0xfff00000;
+ DBGC((KERN_INFO " PREFETCH window: %08lx-%08lx\n",
+ ranges.prefetch_start, ranges.prefetch_end));
+ }
+ else {
+ l = 0x0000fff0;
+ DBGC((KERN_INFO " PREFETCH window: disabled.\n"));
+ }
pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
/* Check if we have VGA behind the bridge.
- Enable ISA in either case. */
+ Enable ISA in either case (FIXME!). */
l = (bus->resource[0]->flags & IORESOURCE_BUS_HAS_VGA) ? 0x0c : 0x04;
pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, l);
}
+/* Check whether the bridge supports optional I/O and
+ prefetchable memory ranges. If not, the respective
+ base/limit registers must be read-only and read as 0. */
static void __init
-pbus_assign_resources(struct pci_bus *bus, struct pbus_set_ranges_data *ranges)
+pci_bridge_check_ranges(struct pci_bus *bus)
+{
+ u16 io;
+ u32 pmem;
+ struct pci_dev *bridge = bus->self;
+ struct resource *b_res;
+
+ if (!bridge || (bridge->class >> 8) != PCI_CLASS_BRIDGE_PCI)
+ return;
+
+ b_res = &bridge->resource[PCI_BRIDGE_RESOURCES];
+ b_res[1].flags |= IORESOURCE_MEM;
+
+ pci_read_config_word(bridge, PCI_IO_BASE, &io);
+ if (!io) {
+ pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
+ pci_read_config_word(bridge, PCI_IO_BASE, &io);
+ pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
+ }
+ if (io)
+ b_res[0].flags |= IORESOURCE_IO;
+ /* DECchip 21050 pass 2 errata: the bridge may miss an address
+ disconnect boundary by one PCI data phase.
+ Workaround: do not use prefetching on this device. */
+ if (bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == 0x0001)
+ return;
+ pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
+ if (!pmem) {
+ pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE,
+ 0xfff0fff0);
+ pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
+ pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, 0x0);
+ }
+ if (pmem)
+ b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
+}
+
+/* Sizing the IO windows of the PCI-PCI bridge is trivial,
+ since these windows have 4K granularity and the IO ranges
+ of non-bridge PCI devices are limited to 256 bytes.
+ We must be careful with the ISA aliasing though. */
+static void __init
+pbus_size_io(struct pci_bus *bus)
{
struct list_head *ln;
- int found_vga = pbus_assign_resources_sorted(bus, ranges);
+ struct resource *b_res = bus->resource[0];
+ unsigned long size = 0, size1 = 0;
- if (!ranges->found_vga && found_vga) {
- struct pci_bus *b;
+ if (!(b_res->flags & IORESOURCE_IO))
+ return;
- ranges->found_vga = 1;
- /* Propogate presence of the VGA to upstream bridges */
- for (b = bus; b->parent; b = b->parent) {
-#if 0
- /* ? Do we actually need to enable PF memory? */
- b->resource[2]->start = 0;
+ for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
+ struct pci_dev *dev = pci_dev_b(ln);
+ int i;
+
+ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+ struct resource *r = &dev->resource[i];
+ unsigned long r_size;
+
+ if (r->parent || !(r->flags & IORESOURCE_IO))
+ continue;
+ r_size = r->end - r->start + 1;
+
+ if (r_size < 0x400)
+ /* Might be re-aligned for ISA */
+ size += r_size;
+ else
+ size1 += r_size;
+ }
+ /* ??? Reserve some resources for CardBus. */
+ if ((dev->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS)
+ size1 += 4*1024;
+ }
+/* To be fixed in 2.5: we should have sort of HAVE_ISA
+ flag in the struct pci_bus. */
+#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
+ size = (size & 0xff) + ((size & ~0xffUL) << 2);
#endif
- b->resource[0]->flags |= IORESOURCE_BUS_HAS_VGA;
+ size = ROUND_UP(size + size1, 4096);
+ if (!size) {
+ b_res->flags = 0;
+ return;
+ }
+ /* Alignment of the IO window is always 4K */
+ b_res->start = 4096;
+ b_res->end = b_res->start + size - 1;
+}
+
+/* Calculate the size of the bus and minimal alignment which
+ guarantees that all child resources fit in this size. */
+static void __init
+pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long type)
+{
+ struct list_head *ln;
+ unsigned long min_align, align, size;
+ unsigned long aligns[12]; /* Alignments from 1Mb to 2Gb */
+ int order, max_order;
+ struct resource *b_res = (type & IORESOURCE_PREFETCH) ?
+ bus->resource[2] : bus->resource[1];
+
+ memset(aligns, 0, sizeof(aligns));
+ max_order = 0;
+ size = 0;
+
+ for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
+ struct pci_dev *dev = pci_dev_b(ln);
+ int i;
+
+ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+ struct resource *r = &dev->resource[i];
+ unsigned long r_size;
+
+ if (r->parent || (r->flags & mask) != type)
+ continue;
+ r_size = r->end - r->start + 1;
+ /* For bridges size != alignment */
+ align = (i < PCI_BRIDGE_RESOURCES) ? r_size : r->start;
+ order = ffz(~align) - 20;
+ if (order > 11) {
+ printk(KERN_WARNING "PCI: region %s/%d "
+ "too large: %lx-%lx\n",
+ dev->slot_name, i, r->start, r->end);
+ r->flags = 0;
+ continue;
+ }
+ size += r_size;
+ if (order < 0)
+ order = 0;
+ /* Exclude ranges with size > align from
+ calculation of the alignment. */
+ if (size == align)
+ aligns[order] += align;
+ if (order > max_order)
+ max_order = order;
+ }
+ /* ??? Reserve some resources for CardBus. */
+ if ((dev->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
+ size += 1UL << 24; /* 16 Mb */
+ aligns[24 - 20] += 1UL << 24;
}
}
- for (ln=bus->children.next; ln != &bus->children; ln=ln->next) {
- struct pci_bus *b = pci_bus_b(ln);
- b->resource[0]->start = ranges->io_start = ranges->io_end;
- b->resource[1]->start = ranges->mem_start = ranges->mem_end;
+ align = 0;
+ min_align = 0;
+ for (order = 0; order <= max_order; order++) {
+ unsigned long align1 = 1UL << (order + 20);
+
+ if (!align)
+ min_align = align1;
+ else if (ROUND_UP(align + min_align, min_align) < align1)
+ min_align = align1 >> 1;
+ align += aligns[order];
+ }
+ size = ROUND_UP(size, min_align);
+ if (!size) {
+ b_res->flags = 0;
+ return;
+ }
+ b_res->start = min_align;
+ b_res->end = size + min_align - 1;
+}
- pbus_assign_resources(b, ranges);
+void __init
+pbus_size_bridges(struct pci_bus *bus)
+{
+ struct list_head *ln;
+ unsigned long mask, type;
- b->resource[0]->end = ranges->io_end - 1;
- b->resource[1]->end = ranges->mem_end - 1;
+ for (ln=bus->children.next; ln != &bus->children; ln=ln->next)
+ pbus_size_bridges(pci_bus_b(ln));
- pci_setup_bridge(b);
+ /* The root bus? */
+ if (!bus->self)
+ return;
+
+ pci_bridge_check_ranges(bus);
+
+ pbus_size_io(bus);
+
+ mask = type = IORESOURCE_MEM;
+ /* If the bridge supports prefetchable range, size it separately. */
+ if (bus->resource[2] &&
+ bus->resource[2]->flags & IORESOURCE_PREFETCH) {
+ pbus_size_mem(bus, IORESOURCE_PREFETCH, IORESOURCE_PREFETCH);
+ mask |= IORESOURCE_PREFETCH; /* Size non-prefetch only. */
}
+ pbus_size_mem(bus, mask, type);
}
void __init
-pci_assign_unassigned_resources(void)
+pbus_assign_resources(struct pci_bus *bus)
{
- struct pbus_set_ranges_data ranges;
struct list_head *ln;
- struct pci_dev *dev;
+ int found_vga = pbus_assign_resources_sorted(bus);
- for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next) {
- struct pci_bus *b = pci_bus_b(ln);
+ if (found_vga) {
+ struct pci_bus *b;
- ranges.io_start = b->resource[0]->start + PCIBIOS_MIN_IO;
- ranges.mem_start = b->resource[1]->start + PCIBIOS_MIN_MEM;
- ranges.io_end = ranges.io_start;
- ranges.mem_end = ranges.mem_start;
- ranges.found_vga = 0;
- pbus_assign_resources(b, &ranges);
+ /* Propagate presence of the VGA to upstream bridges */
+ for (b = bus; b->parent; b = b->parent) {
+ b->resource[0]->flags |= IORESOURCE_BUS_HAS_VGA;
+ }
}
- pci_for_each_dev(dev) {
- pdev_enable_device(dev);
+ for (ln=bus->children.next; ln != &bus->children; ln=ln->next) {
+ struct pci_bus *b = pci_bus_b(ln);
+
+ pbus_assign_resources(b);
+ pci_setup_bridge(b);
}
}
-/* Check whether the bridge supports I/O forwarding.
- If not, its I/O base/limit register must be
- read-only and read as 0. */
-unsigned long __init
-pci_bridge_check_io(struct pci_dev *bridge)
+void __init
+pci_assign_unassigned_resources(void)
{
- u16 io;
+ struct list_head *ln;
+ struct pci_dev *dev;
- pci_read_config_word(bridge, PCI_IO_BASE, &io);
- if (!io) {
- pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
- pci_read_config_word(bridge, PCI_IO_BASE, &io);
- pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
+ /* Depth first, calculate sizes and alignments of all
+ subordinate buses. */
+ for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next)
+ pbus_size_bridges(pci_bus_b(ln));
+ /* Depth last, allocate resources and update the hardware. */
+ for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next)
+ pbus_assign_resources(pci_bus_b(ln));
+
+ pci_for_each_dev(dev) {
+ pdev_enable_device(dev);
}
- if (io)
- return IORESOURCE_IO;
- printk(KERN_WARNING "PCI: bridge %s does not support I/O forwarding!\n",
- bridge->name);
- return 0;
}
diff --git a/xen-2.4.16/drivers/pci/setup-res.c b/xen-2.4.16/drivers/pci/setup-res.c
index 57932fbf11..1053ad5489 100644
--- a/xen-2.4.16/drivers/pci/setup-res.c
+++ b/xen-2.4.16/drivers/pci/setup-res.c
@@ -17,7 +17,7 @@
*/
#include <linux/init.h>
-//#include <linux/kernel.h>
+/*#include <linux/kernel.h>*/
#include <linux/pci.h>
#include <linux/errno.h>
#include <linux/ioport.h>
@@ -69,6 +69,7 @@ static int pci_assign_bus_resource(const struct pci_bus *bus,
unsigned int type_mask,
int resno)
{
+ unsigned long align;
int i;
type_mask |= IORESOURCE_IO | IORESOURCE_MEM;
@@ -81,12 +82,20 @@ static int pci_assign_bus_resource(const struct pci_bus *bus,
if ((res->flags ^ r->flags) & type_mask)
continue;
- /* We cannot allocate a non-prefetching resource from a pre-fetching area */
- if ((r->flags & IORESOURCE_PREFETCH) && !(res->flags & IORESOURCE_PREFETCH))
+ /* We cannot allocate a non-prefetching resource
+ from a pre-fetching area */
+ if ((r->flags & IORESOURCE_PREFETCH) &&
+ !(res->flags & IORESOURCE_PREFETCH))
continue;
+ /* The bridge resources are special, as their
+ size != alignment. Sizing routines return
+ required alignment in the "start" field. */
+ align = (resno < PCI_BRIDGE_RESOURCES) ? size : res->start;
+
/* Ok, try it out.. */
- if (allocate_resource(r, res, size, min, -1, size, pcibios_align_resource, dev) < 0)
+ if (allocate_resource(r, res, size, min, -1, align,
+ pcibios_align_resource, dev) < 0)
continue;
/* Update PCI config space. */
@@ -127,47 +136,45 @@ pci_assign_resource(struct pci_dev *dev, int i)
return 0;
}
-/* Sort resources of a given type by alignment */
+/* Sort resources by alignment */
void __init
-pdev_sort_resources(struct pci_dev *dev,
- struct resource_list *head, u32 type_mask)
+pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
{
int i;
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
struct resource *r;
struct resource_list *list, *tmp;
- unsigned long r_size;
-
- /* PCI-PCI bridges may have I/O ports or
- memory on the primary bus */
- if (dev->class >> 8 == PCI_CLASS_BRIDGE_PCI &&
- i >= PCI_BRIDGE_RESOURCES)
- continue;
+ unsigned long r_align;
r = &dev->resource[i];
- r_size = r->end - r->start;
+ r_align = r->end - r->start;
- if (!(r->flags & type_mask) || r->parent)
+ if (!(r->flags) || r->parent)
continue;
- if (!r_size) {
+ if (!r_align) {
printk(KERN_WARNING "PCI: Ignore bogus resource %d "
- "[%lx:%lx] of %s\n",
- i, r->start, r->end, dev->name);
+ "[%lx:%lx] of %s\n",
+ i, r->start, r->end, dev->name);
continue;
}
+ r_align = (i < PCI_BRIDGE_RESOURCES) ? r_align + 1 : r->start;
for (list = head; ; list = list->next) {
- unsigned long size = 0;
+ unsigned long align = 0;
struct resource_list *ln = list->next;
+ int idx;
- if (ln)
- size = ln->res->end - ln->res->start;
- if (r_size > size) {
+ if (ln) {
+ idx = ln->res - &ln->dev->resource[0];
+ align = (idx < PCI_BRIDGE_RESOURCES) ?
+ ln->res->end - ln->res->start + 1 :
+ ln->res->start;
+ }
+ if (r_align > align) {
tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
- if (!tmp) {
- printk(KERN_ERR "pdev_sort_resources(): kmalloc() failed!\n");
- continue;
- }
+ if (!tmp)
+ panic("pdev_sort_resources(): "
+ "kmalloc() failed!\n");
tmp->next = ln;
tmp->res = r;
tmp->dev = dev;
diff --git a/xen-2.4.16/include/asm-i386/pci.h b/xen-2.4.16/include/asm-i386/pci.h
index b5007e38a1..474cc9591a 100644
--- a/xen-2.4.16/include/asm-i386/pci.h
+++ b/xen-2.4.16/include/asm-i386/pci.h
@@ -31,7 +31,7 @@ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
#include <linux/types.h>
#include <linux/slab.h>
#include <asm/scatterlist.h>
-//#include <linux/string.h>
+/*#include <linux/string.h>*/
#include <asm/io.h>
struct pci_dev;
@@ -73,9 +73,8 @@ static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
flush_write_buffers();
-
return virt_to_bus(ptr);
}
@@ -90,38 +89,38 @@ static inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
/* Nothing to do */
}
/*
* pci_{map,unmap}_single_page maps a kernel page to a dma_addr_t. identical
- * to pci_map_single, but takes a struct page instead of a virtual address
+ * to pci_map_single, but takes a struct pfn_info instead of a virtual address
*/
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct pfn_info *page,
unsigned long offset, size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
- return (page - frame_table) * PAGE_SIZE + offset;
+ return (dma_addr_t)(page - frame_table) * PAGE_SIZE + offset;
}
static inline void pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
/* Nothing to do */
}
/* pci_unmap_{page,single} is a nop so... */
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
-#define pci_unmap_addr(PTR, ADDR_NAME) (0)
-#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
-#define pci_unmap_len(PTR, LEN_NAME) (0)
-#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
+#define pci_unmap_addr(PTR, ADDR_NAME) (0)
+#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
+#define pci_unmap_len(PTR, LEN_NAME) (0)
+#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
/* Map a set of buffers described by scatterlist in streaming
* mode for DMA. This is the scather-gather version of the
@@ -144,16 +143,16 @@ static inline int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int i;
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
/*
* temporary 2.4 hack
*/
for (i = 0; i < nents; i++ ) {
if (sg[i].address && sg[i].page)
- BUG();
+ out_of_line_bug();
else if (!sg[i].address && !sg[i].page)
- BUG();
+ out_of_line_bug();
if (sg[i].address)
sg[i].dma_address = virt_to_bus(sg[i].address);
@@ -173,7 +172,7 @@ static inline void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int nents, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
/* Nothing to do */
}
@@ -191,7 +190,7 @@ static inline void pci_dma_sync_single(struct pci_dev *hwdev,
size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
flush_write_buffers();
}
@@ -206,7 +205,7 @@ static inline void pci_dma_sync_sg(struct pci_dev *hwdev,
int nelems, int direction)
{
if (direction == PCI_DMA_NONE)
- BUG();
+ out_of_line_bug();
flush_write_buffers();
}
@@ -272,6 +271,12 @@ static inline int pci_controller_num(struct pci_dev *dev)
return 0;
}
+#if 0 /* XXX Not in land of Xen XXX */
+#define HAVE_PCI_MMAP
+extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
+ enum pci_mmap_state mmap_state, int write_combine);
+#endif
+
#endif /* __KERNEL__ */
#endif /* __i386_PCI_H */
diff --git a/xen-2.4.16/include/xeno/config.h b/xen-2.4.16/include/xeno/config.h
index d9ffb1d95d..07b031e71f 100644
--- a/xen-2.4.16/include/xeno/config.h
+++ b/xen-2.4.16/include/xeno/config.h
@@ -131,6 +131,8 @@
#ifndef __ASSEMBLY__
extern unsigned long opt_ipbase, opt_nfsserv, opt_gateway, opt_netmask;
extern unsigned char opt_nfsroot[];
+extern void __out_of_line_bug(int line) __attribute__((noreturn));
+#define out_of_line_bug() __out_of_line_bug(__LINE__)
#endif
#endif /* __XENO_CONFIG_H__ */
diff --git a/xen-2.4.16/include/xeno/ioport.h b/xen-2.4.16/include/xeno/ioport.h
index 7c35699496..0416edc71e 100644
--- a/xen-2.4.16/include/xeno/ioport.h
+++ b/xen-2.4.16/include/xeno/ioport.h
@@ -92,7 +92,8 @@ extern int allocate_resource(struct resource *root, struct resource *new,
unsigned long size,
unsigned long min, unsigned long max,
unsigned long align,
- void (*alignf)(void *, struct resource *, unsigned long),
+ void (*alignf)(void *, struct resource *,
+ unsigned long, unsigned long),
void *alignf_data);
/* Convenience shorthand with allocation */
diff --git a/xen-2.4.16/include/xeno/pci.h b/xen-2.4.16/include/xeno/pci.h
index d477afeb4b..8902b27fff 100644
--- a/xen-2.4.16/include/xeno/pci.h
+++ b/xen-2.4.16/include/xeno/pci.h
@@ -376,12 +376,15 @@ struct pci_dev {
struct resource dma_resource[DEVICE_COUNT_DMA];
struct resource irq_resource[DEVICE_COUNT_IRQ];
- char name[80]; /* device name */
+ char name[90]; /* device name */
char slot_name[8]; /* slot name */
int active; /* ISAPnP: device is active */
int ro; /* ISAPnP: read only */
unsigned short regs; /* ISAPnP: supported registers */
+ /* These fields are used by common fixups */
+ unsigned short transparent:1; /* Transparent PCI bridge */
+
int (*prepare)(struct pci_dev *dev); /* ISAPnP hooks */
int (*activate)(struct pci_dev *dev);
int (*deactivate)(struct pci_dev *dev);
@@ -436,6 +439,7 @@ struct pci_bus {
extern struct list_head pci_root_buses; /* list of all known PCI buses */
extern struct list_head pci_devices; /* list of all devices */
+extern struct proc_dir_entry *proc_bus_pci_dir;
/*
* Error values that may be returned by PCI functions.
*/
@@ -460,9 +464,9 @@ struct pci_ops {
struct pbus_set_ranges_data
{
- int found_vga;
unsigned long io_start, io_end;
unsigned long mem_start, mem_end;
+ unsigned long prefetch_start, prefetch_end;
};
struct pci_device_id {
@@ -479,7 +483,7 @@ struct pci_driver {
int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
int (*save_state) (struct pci_dev *dev, u32 state); /* Save Device Context */
- int (*suspend)(struct pci_dev *dev, u32 state); /* Device suspended */
+ int (*suspend) (struct pci_dev *dev, u32 state); /* Device suspended */
int (*resume) (struct pci_dev *dev); /* Device woken up */
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); /* Enable wake event */
};
@@ -493,11 +497,12 @@ struct pci_driver {
void pcibios_init(void);
void pcibios_fixup_bus(struct pci_bus *);
-int pcibios_enable_device(struct pci_dev *);
+int pcibios_enable_device(struct pci_dev *, int mask);
char *pcibios_setup (char *str);
/* Used only when drivers/pci/setup.c is used */
-void pcibios_align_resource(void *, struct resource *, unsigned long);
+void pcibios_align_resource(void *, struct resource *,
+ unsigned long, unsigned long);
void pcibios_update_resource(struct pci_dev *, struct resource *,
struct resource *, int);
void pcibios_update_irq(struct pci_dev *, int irq);
@@ -559,6 +564,7 @@ int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
int pci_enable_device(struct pci_dev *dev);
+int pci_enable_device_bars(struct pci_dev *dev, int mask);
void pci_disable_device(struct pci_dev *dev);
void pci_set_master(struct pci_dev *dev);
#define HAVE_PCI_SET_MWI
@@ -580,13 +586,15 @@ int pci_enable_wake(struct pci_dev *dev, u32 state, int enable);
int pci_claim_resource(struct pci_dev *, int);
void pci_assign_unassigned_resources(void);
void pdev_enable_device(struct pci_dev *);
-void pdev_sort_resources(struct pci_dev *, struct resource_list *, u32);
+void pdev_sort_resources(struct pci_dev *, struct resource_list *);
unsigned long pci_bridge_check_io(struct pci_dev *);
void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
int (*)(struct pci_dev *, u8, u8));
-#define HAVE_PCI_REQ_REGIONS
+#define HAVE_PCI_REQ_REGIONS 2
int pci_request_regions(struct pci_dev *, char *);
void pci_release_regions(struct pci_dev *);
+int pci_request_region(struct pci_dev *, int, char *);
+void pci_release_region(struct pci_dev *, int);
/* New-style probing supporting hot-pluggable devices */
int pci_register_driver(struct pci_driver *);
@@ -650,6 +658,7 @@ unsigned int ss_vendor, unsigned int ss_device, const struct pci_dev *from)
{ return NULL; }
static inline void pci_set_master(struct pci_dev *dev) { }
+static inline int pci_enable_device_bars(struct pci_dev *dev, int mask) { return -EBUSY; }
static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
static inline void pci_disable_device(struct pci_dev *dev) { }
static inline int pci_module_init(struct pci_driver *drv) { return -ENODEV; }