[PATCH v1-very-draft 1/5] barebox draft pci support
Sascha Hauer
s.hauer at pengutronix.de
Fri Jul 15 04:42:18 EDT 2011
Hi Antony,
I finally found some time to look at this. Having pci support for
barebox would be great.
It seems what missing in this patch is the integration into the
barebox device infrastructure. barebox already has an idea about
bus_type which is used for USB. a bus can have its own match
function to implement id based driver<->device matching. You would
need a struct device_d member in struct pci_device.
As for the resource part Jean Christophe already started to convert
barebox from struct device_d->base to use real resources like
the Linux Kernel.
Other than that it seems there is not much missing to turn your
patch into something useful and mergable.
Sascha
On Tue, Jul 05, 2011 at 02:19:20PM +0400, Antony Pavlov wrote:
> used shorten version of linux-2.6.39 pci_ids.h
>
> Signed-off-by: Antony Pavlov <antonynpavlov at gmail.com>
> ---
> drivers/Makefile | 1 +
> drivers/pci/Kconfig | 12 +
> drivers/pci/Makefile | 8 +
> drivers/pci/pci.c | 298 +++++++++++++++++
> include/ioports.h | 98 ++++++
> include/linux/mod_devicetable.h | 24 ++
> include/linux/pci.h | 201 +++++++++++
> include/linux/pci_ids.h | 695 ++++++++++++++++++++++++++++++++++++++
> include/linux/pci_regs.h | 698 +++++++++++++++++++++++++++++++++++++++
> 9 files changed, 2035 insertions(+), 0 deletions(-)
> create mode 100644 drivers/pci/Kconfig
> create mode 100644 drivers/pci/Makefile
> create mode 100644 drivers/pci/pci.c
> create mode 100644 include/linux/mod_devicetable.h
> create mode 100644 include/linux/pci.h
> create mode 100644 include/linux/pci_ids.h
> create mode 100644 include/linux/pci_regs.h
>
> diff --git a/drivers/Makefile b/drivers/Makefile
> index 92b22bd..1be9d13 100644
> --- a/drivers/Makefile
> +++ b/drivers/Makefile
> @@ -12,3 +12,4 @@ obj-y += clk/
> obj-y += mfd/
> obj-$(CONFIG_LED) += led/
> obj-y += eeprom/
> +obj-$(CONFIG_PCI) += pci/
> diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
> new file mode 100644
> index 0000000..88b8dfb
> --- /dev/null
> +++ b/drivers/pci/Kconfig
> @@ -0,0 +1,12 @@
> +#
> +# PCI configuration
> +#
> +config PCI_DEBUG
> + bool "PCI Debugging"
> + depends on PCI
> + help
> + Say Y here if you want the PCI core to produce a bunch of debug
> + messages to the system log. Select this if you are having a
> + problem with PCI support and want to see more of what is going on.
> +
> + When in doubt, say N.
> diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
> new file mode 100644
> index 0000000..69aba36
> --- /dev/null
> +++ b/drivers/pci/Makefile
> @@ -0,0 +1,8 @@
> +#
> +# Makefile for the PCI bus specific drivers.
> +#
> +obj-y += pci.o
> +
> +ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
> +
> +CPPFLAGS += $(ccflags-y)
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> new file mode 100644
> index 0000000..d028330
> --- /dev/null
> +++ b/drivers/pci/pci.c
> @@ -0,0 +1,298 @@
> +#include <common.h>
> +#include <init.h>
> +#include <linux/pci.h>
> +
> +#include <command.h>
> +#include <debug_ll.h>
> +
> +#ifdef DEBUG
> +#define DBG(x...) printk(x)
> +#else
> +#define DBG(x...)
> +#endif
> +
> +unsigned int pci_scan_bus(struct pci_bus *bus);
> +
> +static struct pci_controller *hose_head, **hose_tail = &hose_head;
> +
> +struct pci_bus *pci_root;
> +struct pci_dev *pci_devices = NULL;
> +static struct pci_dev **pci_last_dev_p = &pci_devices;
> +
> +struct pci_ops *pci_ops;
> +
> +int pcibios_present;
> +
> +static struct pci_bus * pci_alloc_bus(void)
> +{
> + struct pci_bus *b;
> +
> + b = kzalloc(sizeof(*b), GFP_KERNEL);
> + if (b) {
> + INIT_LIST_HEAD(&b->node);
> + INIT_LIST_HEAD(&b->children);
> + INIT_LIST_HEAD(&b->devices);
> + INIT_LIST_HEAD(&b->slots);
> + INIT_LIST_HEAD(&b->resources);
> + //b->max_bus_speed = PCI_SPEED_UNKNOWN;
> + //b->cur_bus_speed = PCI_SPEED_UNKNOWN;
> + }
> + return b;
> +}
> +
> +void register_pci_controller(struct pci_controller *hose)
> +{
> + *hose_tail = hose;
> + hose_tail = &hose->next;
> +
> + printf("PCI: register_pci_controller() \n");
> +
> + hose->bus = pci_alloc_bus();
> + pci_ops = hose->pci_ops;
> + hose->bus->ops = hose->pci_ops;
> + pci_scan_bus(hose->bus);
> +
> + pci_root = hose->bus;
> +
> + return;
> +}
> +
> +int
> +pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn, u8 where, u8 *val)
> +{
> + u32 data;
> + int status;
> +
> + status = pci_ops->read(bus, devfn, where & 0xfc, 4, &data);
> + *val = (u8) (data >> ((where & 3) << 3));
> + return status;
> +}
> +
> +int
> +pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn, u8 where, u16 *val)
> +{
> + u32 data;
> + int status;
> +
> + status = pci_ops->read(bus, devfn, where & 0xfc, 4, &data);
> + *val = (u16) (data >> ((where & 3) << 3));
> + return status;
> +}
> +
> +int
> +pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn, u8 where, u32 *val)
> +{
> + return pci_ops->read(bus, devfn, where, 4, val);
> +}
> +
> +int
> +pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn, u8 where, u8 val)
> +{
> + u32 data;
> + int status;
> +
> + pci_ops->read(bus, devfn, where & 0xfc, 4, &data);
> + data = (data & ~(0xff << ((where & 3) << 3))) | (val << ((where & 3) << 3));
> + status = pci_ops->write(bus, devfn, where & 0xfc, 4, data);
> +
> + return status;
> +}
> +
> +int
> +pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn, u8 where, u16 val)
> +{
> + u32 data;
> + int status;
> +
> + pci_ops->read(bus, devfn, where & 0xfc, 4, &data);
> + data = (data & ~(0xffff << ((where & 3) << 3))) | (val << ((where & 3) << 3));
> + status = pci_ops->write(bus, devfn, where & 0xfc, 4, data);
> +
> + return status;
> +}
> +
> +int
> +pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn, u8 where, u32 val)
> +{
> + return pci_ops->write(bus, devfn, where, 4, val);
> +}
> +
> +int
> +pci_read_config_byte(struct pci_dev *dev, u8 where, u8 *val)
> +{
> + return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val);
> +}
> +
> +int
> +pci_read_config_word(struct pci_dev *dev, u8 where, u16 *val)
> +{
> + return pci_bus_read_config_word(dev->bus, dev->devfn, where, val);
> +}
> +
> +int
> +pci_read_config_dword(struct pci_dev *dev, u8 where, u32 *val)
> +{
> + return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val);
> +}
> +
> +int
> +pci_write_config_byte(struct pci_dev *dev, u8 where, u8 val)
> +{
> + return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val);
> +}
> +
> +int
> +pci_write_config_word(struct pci_dev *dev, u8 where, u16 val)
> +{
> + return pci_bus_write_config_word(dev->bus, dev->devfn, where, val);
> +}
> +
> +int
> +pci_write_config_dword(struct pci_dev *dev, u8 where, u32 val)
> +{
> + return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
> +}
> +
> +struct pci_dev *alloc_pci_dev(void)
> +{
> + struct pci_dev *dev;
> +
> + dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
> + if (!dev)
> + return NULL;
> +
> + INIT_LIST_HEAD(&dev->bus_list);
> +
> + return dev;
> +}
> +
> +unsigned int pci_scan_bus(struct pci_bus *bus)
> +{
> + unsigned int devfn, l, max, class;
> + unsigned char cmd, irq, tmp, hdr_type, is_multi = 0;
> + struct pci_dev *dev, **bus_last;
> + struct pci_bus *child;
> +
> + DBG("pci_scan_bus for bus %d\n", bus->number);
> + bus_last = &bus->devices;
> + max = bus->secondary;
> +
> + for (devfn = 0; devfn < 0xff; ++devfn) {
> + if (PCI_FUNC(devfn) && !is_multi) {
> + /* not a multi-function device */
> + continue;
> + }
> + if (pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type))
> + continue;
> + if (!PCI_FUNC(devfn))
> + is_multi = hdr_type & 0x80;
> +
> + if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, &l) ||
> + /* some broken boards return 0 if a slot is empty: */
> + l == 0xffffffff || l == 0x00000000 || l == 0x0000ffff || l == 0xffff0000)
> + continue;
> +
> + dev = alloc_pci_dev();
> + if (!dev)
> + return 0;
> +
> + dev->bus = bus;
> + dev->devfn = devfn;
> + dev->vendor = l & 0xffff;
> + dev->device = (l >> 16) & 0xffff;
> +
> + /* non-destructively determine if device can be a master: */
> + pci_read_config_byte(dev, PCI_COMMAND, &cmd);
> + pci_write_config_byte(dev, PCI_COMMAND, cmd | PCI_COMMAND_MASTER);
> + pci_read_config_byte(dev, PCI_COMMAND, &tmp);
> + //dev->master = ((tmp & PCI_COMMAND_MASTER) != 0);
> + pci_write_config_byte(dev, PCI_COMMAND, cmd);
> +
> + pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
> + dev->revision = class & 0xff;
> + class >>= 8; /* upper 3 bytes */
> + dev->class = class;
> + class >>= 8;
> + dev->hdr_type = hdr_type;
> +
> + switch (hdr_type & 0x7f) { /* header type */
> + case PCI_HEADER_TYPE_NORMAL: /* standard header */
> + if (class == PCI_CLASS_BRIDGE_PCI)
> + goto bad;
> + /*
> + * If the card generates interrupts, read IRQ number
> + * (some architectures change it during pcibios_fixup())
> + */
> + pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
> + if (irq)
> + pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
> + dev->irq = irq;
> + /*
> + * read base address registers, again pcibios_fixup() can
> + * tweak these
> + */
> + // pci_read_bases(dev, 6);
> + pci_read_config_dword(dev, PCI_ROM_ADDRESS, &l);
> + dev->rom_address = (l == 0xffffffff) ? 0 : l;
> + break;
> + #if 0
> + case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
> + if (class != PCI_CLASS_BRIDGE_PCI)
> + goto bad;
> + pci_read_bases(dev, 2);
> + pcibios_read_config_dword(bus->number, devfn, PCI_ROM_ADDRESS1, &l);
> + dev->rom_address = (l == 0xffffffff) ? 0 : l;
> + break;
> + case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
> + if (class != PCI_CLASS_BRIDGE_CARDBUS)
> + goto bad;
> + pci_read_bases(dev, 1);
> + break;
> +#endif
> + default: /* unknown header */
> + bad:
> + printk(KERN_ERR "PCI: %02x:%02x [%04x/%04x/%06x] has unknown header type %02x, ignoring.\n",
> + bus->number, dev->devfn, dev->vendor, dev->device, class, hdr_type);
> + continue;
> + }
> +
> + DBG("PCI: %02x:%02x [%04x/%04x]\n", bus->number, dev->devfn, dev->vendor, dev->device);
> + list_add_tail(&dev->bus_list, &bus->devices);
> +
> + }
> +
> + /*
> + * After performing arch-dependent fixup of the bus, look behind
> + * all PCI-to-PCI bridges on this bus.
> + */
> + //pcibios_fixup_bus(bus);
> +
> + /*
> + * We've scanned the bus and so we know all about what's on
> + * the other side of any bridges that may be on this bus plus
> + * any devices.
> + *
> + * Return how far we've got finding sub-buses.
> + */
> + DBG("PCI: pci_scan_bus returning with max=%02x\n", max);
> + return max;
> +}
> +
> +static int pci_init(void)
> +{
> + pcibios_present = 0;
> + pci_ops = NULL;
> +
> + pcibios_init();
> +
> + if (!pci_present()) {
> + printf("PCI: No PCI bus detected\n");
> + return 0;
> + }
> +
> + /* give BIOS a chance to apply platform specific fixes: */
> + //pcibios_fixup();
> +
> + return 0;
> +}
> +postcore_initcall(pci_init);
> diff --git a/include/ioports.h b/include/ioports.h
> index cfba667..56c5f31 100644
> --- a/include/ioports.h
> +++ b/include/ioports.h
> @@ -7,6 +7,104 @@
> */
>
> /*
> + * Resources are tree-like, allowing
> + * nesting etc..
> + */
> +struct resource {
> + resource_size_t start;
> + resource_size_t end;
> + const char *name;
> + unsigned long flags;
> + struct resource *parent, *sibling, *child;
> +};
> +
> +struct resource_list {
> + struct resource_list *next;
> + struct resource *res;
> + struct pci_dev *dev;
> +};
> +
> +/*
> + * IO resources have these defined flags.
> + */
> +#define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */
> +
> +#define IORESOURCE_TYPE_BITS 0x00001f00 /* Resource type */
> +#define IORESOURCE_IO 0x00000100
> +#define IORESOURCE_MEM 0x00000200
> +#define IORESOURCE_IRQ 0x00000400
> +#define IORESOURCE_DMA 0x00000800
> +#define IORESOURCE_BUS 0x00001000
> +
> +#define IORESOURCE_PREFETCH 0x00002000 /* No side effects */
> +#define IORESOURCE_READONLY 0x00004000
> +#define IORESOURCE_CACHEABLE 0x00008000
> +#define IORESOURCE_RANGELENGTH 0x00010000
> +#define IORESOURCE_SHADOWABLE 0x00020000
> +
> +#define IORESOURCE_SIZEALIGN 0x00040000 /* size indicates alignment */
> +#define IORESOURCE_STARTALIGN 0x00080000 /* start field is alignment */
> +
> +#define IORESOURCE_MEM_64 0x00100000
> +#define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */
> +#define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */
> +
> +#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
> +#define IORESOURCE_DISABLED 0x10000000
> +#define IORESOURCE_UNSET 0x20000000
> +#define IORESOURCE_AUTO 0x40000000
> +#define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */
> +
> +/* PnP IRQ specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_IRQ_HIGHEDGE (1<<0)
> +#define IORESOURCE_IRQ_LOWEDGE (1<<1)
> +#define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
> +#define IORESOURCE_IRQ_LOWLEVEL (1<<3)
> +#define IORESOURCE_IRQ_SHAREABLE (1<<4)
> +#define IORESOURCE_IRQ_OPTIONAL (1<<5)
> +
> +/* PnP DMA specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_DMA_TYPE_MASK (3<<0)
> +#define IORESOURCE_DMA_8BIT (0<<0)
> +#define IORESOURCE_DMA_8AND16BIT (1<<0)
> +#define IORESOURCE_DMA_16BIT (2<<0)
> +
> +#define IORESOURCE_DMA_MASTER (1<<2)
> +#define IORESOURCE_DMA_BYTE (1<<3)
> +#define IORESOURCE_DMA_WORD (1<<4)
> +
> +#define IORESOURCE_DMA_SPEED_MASK (3<<6)
> +#define IORESOURCE_DMA_COMPATIBLE (0<<6)
> +#define IORESOURCE_DMA_TYPEA (1<<6)
> +#define IORESOURCE_DMA_TYPEB (2<<6)
> +#define IORESOURCE_DMA_TYPEF (3<<6)
> +
> +/* PnP memory I/O specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_MEM_WRITEABLE (1<<0) /* dup: IORESOURCE_READONLY */
> +#define IORESOURCE_MEM_CACHEABLE (1<<1) /* dup: IORESOURCE_CACHEABLE */
> +#define IORESOURCE_MEM_RANGELENGTH (1<<2) /* dup: IORESOURCE_RANGELENGTH */
> +#define IORESOURCE_MEM_TYPE_MASK (3<<3)
> +#define IORESOURCE_MEM_8BIT (0<<3)
> +#define IORESOURCE_MEM_16BIT (1<<3)
> +#define IORESOURCE_MEM_8AND16BIT (2<<3)
> +#define IORESOURCE_MEM_32BIT (3<<3)
> +#define IORESOURCE_MEM_SHADOWABLE (1<<5) /* dup: IORESOURCE_SHADOWABLE */
> +#define IORESOURCE_MEM_EXPANSIONROM (1<<6)
> +
> +/* PnP I/O specific bits (IORESOURCE_BITS) */
> +#define IORESOURCE_IO_16BIT_ADDR (1<<0)
> +#define IORESOURCE_IO_FIXED (1<<1)
> +
> +/* PCI ROM control bits (IORESOURCE_BITS) */
> +#define IORESOURCE_ROM_ENABLE (1<<0) /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
> +#define IORESOURCE_ROM_SHADOW (1<<1) /* ROM is copy at C000:0 */
> +#define IORESOURCE_ROM_COPY (1<<2) /* ROM is alloc'd copy, resource field overlaid */
> +#define IORESOURCE_ROM_BIOS_COPY (1<<3) /* ROM is BIOS copy, resource field overlaid */
> +
> +/* PCI control bits. Shares IORESOURCE_BITS with above PCI ROM. */
> +#define IORESOURCE_PCI_FIXED (1<<4) /* Do not move resource */
> +
> +/*
> * this structure mirrors the layout of the five port registers in
> * the internal memory map - see iop8260_t in <asm/immap_8260.h>
> */
> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> new file mode 100644
> index 0000000..911e461
> --- /dev/null
> +++ b/include/linux/mod_devicetable.h
> @@ -0,0 +1,24 @@
> +/*
> + * Device tables which are exported to userspace via
> + * scripts/mod/file2alias.c. You must keep that file in sync with this
> + * header.
> + */
> +
> +#ifndef LINUX_MOD_DEVICETABLE_H
> +#define LINUX_MOD_DEVICETABLE_H
> +
> +#ifdef __KERNEL__
> +#include <linux/types.h>
> +typedef unsigned long kernel_ulong_t;
> +#endif
> +
> +#define PCI_ANY_ID (~0)
> +
> +struct pci_device_id {
> + __u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/
> + __u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */
> + __u32 class, class_mask; /* (class,subclass,prog-if) triplet */
> + kernel_ulong_t driver_data; /* Data private to the driver */
> +};
> +
> +#endif /* LINUX_MOD_DEVICETABLE_H */
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> new file mode 100644
> index 0000000..1f35771
> --- /dev/null
> +++ b/include/linux/pci.h
> @@ -0,0 +1,201 @@
> +/*
> + * pci.h
> + *
> + * PCI defines and function prototypes
> + * Copyright 1994, Drew Eckhardt
> + * Copyright 1997--1999 Martin Mares <mj at ucw.cz>
> + *
> + * For more information, please consult the following manuals (look at
> + * http://www.pcisig.com/ for how to get them):
> + *
> + * PCI BIOS Specification
> + * PCI Local Bus Specification
> + * PCI to PCI Bridge Specification
> + * PCI System Design Guide
> + */
> +
> +#ifndef LINUX_PCI_H
> +#define LINUX_PCI_H
> +
> +#include <linux/pci_regs.h> /* The pci register defines */
> +
> +/*
> + * The PCI interface treats multi-function devices as independent
> + * devices. The slot/function address of each device is encoded
> + * in a single byte as follows:
> + *
> + * 7:3 = slot
> + * 2:0 = function
> + */
> +#define PCI_DEVFN(slot, func) ((((slot) & 0x1f) << 3) | ((func) & 0x07))
> +#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f)
> +#define PCI_FUNC(devfn) ((devfn) & 0x07)
> +
> +/* Ioctls for /proc/bus/pci/X/Y nodes. */
> +#define PCIIOC_BASE ('P' << 24 | 'C' << 16 | 'I' << 8)
> +#define PCIIOC_CONTROLLER (PCIIOC_BASE | 0x00) /* Get controller for PCI device. */
> +#define PCIIOC_MMAP_IS_IO (PCIIOC_BASE | 0x01) /* Set mmap state to I/O space. */
> +#define PCIIOC_MMAP_IS_MEM (PCIIOC_BASE | 0x02) /* Set mmap state to MEM space. */
> +#define PCIIOC_WRITE_COMBINE (PCIIOC_BASE | 0x03) /* Enable/disable write-combining. */
> +
> +#ifdef __KERNEL__
> +
> +#include <linux/mod_devicetable.h>
> +
> +#include <linux/types.h>
> +#include <init.h>
> +#include <ioports.h>
> +#include <linux/list.h>
> +#include <linux/compiler.h>
> +#include <errno.h>
> +//#include <linux/kobject.h>
> +//#include <asm/atomic.h>
> +//#include <linux/device.h>
> +#include <asm/io.h>
> +//#include <linux/irqreturn.h>
> +
> +/* Include the ID list */
> +#include <linux/pci_ids.h>
> +
> +/* Include architecture-dependent settings and functions */
> +
> +//#include <asm/pci.h>
> +
> +/*
> + * Error values that may be returned by PCI functions.
> + */
> +#define PCIBIOS_SUCCESSFUL 0x00
> +#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
> +#define PCIBIOS_BAD_VENDOR_ID 0x83
> +#define PCIBIOS_DEVICE_NOT_FOUND 0x86
> +#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
> +#define PCIBIOS_SET_FAILED 0x88
> +#define PCIBIOS_BUFFER_TOO_SMALL 0x89
> +
> +#define DEVICE_COUNT_RESOURCE 12
> +#define PCI_BRIDGE_RESOURCE_NUM 2
> +/*
> + * There is one pci_dev structure for each slot-number/function-number
> + * combination:
> + */
> +struct pci_dev {
> + struct list_head bus_list; /* node in per-bus list */
> + struct pci_bus *bus; /* bus this device is on */
> + struct pci_bus *subordinate; /* bus this device bridges to */
> +
> + void *sysdata; /* hook for sys-specific extension */
> + struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */
> + struct pci_slot *slot; /* Physical slot this device is in */
> +
> + unsigned int devfn; /* encoded device & function index */
> + unsigned short vendor;
> + unsigned short device;
> + unsigned short subsystem_vendor;
> + unsigned short subsystem_device;
> + unsigned int class; /* 3 bytes: (base,sub,prog-if) */
> + u8 revision; /* PCI revision, low byte of class word */
> + u8 hdr_type; /* PCI header type (`multi' flag masked out) */
> + u8 pcie_cap; /* PCI-E capability offset */
> + u8 pcie_type; /* PCI-E device/port type */
> + u8 rom_base_reg; /* which config register controls the ROM */
> + u8 pin; /* which interrupt pin this device uses */
> +
> + /*
> + * In theory, the irq level can be read from configuration
> + * space and all would be fine. However, old PCI chips don't
> + * support these registers and return 0 instead. For example,
> + * the Vision864-P rev 0 chip can uses INTA, but returns 0 in
> + * the interrupt line and pin registers. pci_init()
> + * initializes this field with the value at PCI_INTERRUPT_LINE
> + * and it is the job of pcibios_fixup() to change it if
> + * necessary. The field must not be 0 unless the device
> + * cannot generate interrupts at all.
> + */
> + unsigned int irq; /* irq generated by this device */
> + struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
> +
> + /* Base registers for this device, can be adjusted by
> + * pcibios_fixup() as necessary.
> + */
> + unsigned long base_address[6];
> + unsigned long rom_address;
> +};
> +
> +struct pci_bus {
> + struct list_head node; /* node in list of buses */
> + struct pci_bus *parent; /* parent bus this bridge is on */
> + struct list_head children; /* list of child buses */
> + struct list_head devices; /* list of devices on this bus */
> + struct pci_dev *self; /* bridge device as seen by parent */
> + struct list_head slots; /* list of slots on this bus */
> + struct resource *resource[PCI_BRIDGE_RESOURCE_NUM];
> + struct list_head resources; /* address space routed to this bus */
> +
> + struct pci_ops *ops; /* configuration access functions */
> + void *sysdata; /* hook for sys-specific extension */
> + struct proc_dir_entry *procdir; /* directory entry in /proc/bus/pci */
> +
> + unsigned char number; /* bus number */
> + unsigned char primary; /* number of primary bridge */
> + unsigned char secondary; /* number of secondary bridge */
> + unsigned char subordinate; /* max number of subordinate buses */
> + unsigned char max_bus_speed; /* enum pci_bus_speed */
> + unsigned char cur_bus_speed; /* enum pci_bus_speed */
> +
> + char name[48];
> +};
> +
> +/* Low-level architecture-dependent routines */
> +
> +struct pci_ops {
> + int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
> + int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
> +};
> +
> +extern struct pci_ops * pci_ops;
> +extern int pcibios_present;
> +
> +static inline int pci_present()
> +{
> + return pcibios_present;
> +}
> +
> +extern struct pci_ops *pci_ops;
> +
> +#ifndef PCIBIOS_MAX_MEM_32
> +#define PCIBIOS_MAX_MEM_32 (-1)
> +#endif
> +
> +/*
> + * Each pci channel is a top-level PCI bus seem by CPU. A machine with
> + * multiple PCI channels may have multiple PCI host controllers or a
> + * single controller supporting multiple channels.
> + */
> +struct pci_controller {
> + struct pci_controller *next;
> + struct pci_bus *bus;
> +
> + struct pci_ops *pci_ops;
> + struct resource *mem_resource;
> + unsigned long mem_offset;
> + struct resource *io_resource;
> + unsigned long io_offset;
> + unsigned long io_map_base;
> +
> + unsigned int index;
> + /* For compatibility with current (as of July 2003) pciutils
> + and XFree86. Eventually will be removed. */
> + unsigned int need_domain_info;
> +
> + int iommu;
> +
> + /* Optional access methods for reading/writing the bus number
> + of the PCI controller */
> + int (*get_busno)(void);
> + void (*set_busno)(int busno);
> +};
> +
> +extern void register_pci_controller(struct pci_controller *hose);
> +
> +#endif /* __KERNEL__ */
> +#endif /* LINUX_PCI_H */
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> new file mode 100644
> index 0000000..fc2d865
> --- /dev/null
> +++ b/include/linux/pci_ids.h
> @@ -0,0 +1,695 @@
> +/*
> + * PCI Class, Vendor and Device IDs
> + *
> + * Please keep sorted.
> + *
> + * Do not add new entries to this file unless the definitions
> + * are shared between multiple drivers.
> + */
> +
> +/* Device classes and subclasses */
> +
> +#define PCI_CLASS_NOT_DEFINED 0x0000
> +#define PCI_CLASS_NOT_DEFINED_VGA 0x0001
> +
> +#define PCI_BASE_CLASS_STORAGE 0x01
> +#define PCI_CLASS_STORAGE_SCSI 0x0100
> +#define PCI_CLASS_STORAGE_IDE 0x0101
> +#define PCI_CLASS_STORAGE_FLOPPY 0x0102
> +#define PCI_CLASS_STORAGE_IPI 0x0103
> +#define PCI_CLASS_STORAGE_RAID 0x0104
> +#define PCI_CLASS_STORAGE_SATA 0x0106
> +#define PCI_CLASS_STORAGE_SATA_AHCI 0x010601
> +#define PCI_CLASS_STORAGE_SAS 0x0107
> +#define PCI_CLASS_STORAGE_OTHER 0x0180
> +
> +#define PCI_BASE_CLASS_NETWORK 0x02
> +#define PCI_CLASS_NETWORK_ETHERNET 0x0200
> +#define PCI_CLASS_NETWORK_TOKEN_RING 0x0201
> +#define PCI_CLASS_NETWORK_FDDI 0x0202
> +#define PCI_CLASS_NETWORK_ATM 0x0203
> +#define PCI_CLASS_NETWORK_OTHER 0x0280
> +
> +#define PCI_BASE_CLASS_DISPLAY 0x03
> +#define PCI_CLASS_DISPLAY_VGA 0x0300
> +#define PCI_CLASS_DISPLAY_XGA 0x0301
> +#define PCI_CLASS_DISPLAY_3D 0x0302
> +#define PCI_CLASS_DISPLAY_OTHER 0x0380
> +
> +#define PCI_BASE_CLASS_MULTIMEDIA 0x04
> +#define PCI_CLASS_MULTIMEDIA_VIDEO 0x0400
> +#define PCI_CLASS_MULTIMEDIA_AUDIO 0x0401
> +#define PCI_CLASS_MULTIMEDIA_PHONE 0x0402
> +#define PCI_CLASS_MULTIMEDIA_OTHER 0x0480
> +
> +#define PCI_BASE_CLASS_MEMORY 0x05
> +#define PCI_CLASS_MEMORY_RAM 0x0500
> +#define PCI_CLASS_MEMORY_FLASH 0x0501
> +#define PCI_CLASS_MEMORY_OTHER 0x0580
> +
> +#define PCI_BASE_CLASS_BRIDGE 0x06
> +#define PCI_CLASS_BRIDGE_HOST 0x0600
> +#define PCI_CLASS_BRIDGE_ISA 0x0601
> +#define PCI_CLASS_BRIDGE_EISA 0x0602
> +#define PCI_CLASS_BRIDGE_MC 0x0603
> +#define PCI_CLASS_BRIDGE_PCI 0x0604
> +#define PCI_CLASS_BRIDGE_PCMCIA 0x0605
> +#define PCI_CLASS_BRIDGE_NUBUS 0x0606
> +#define PCI_CLASS_BRIDGE_CARDBUS 0x0607
> +#define PCI_CLASS_BRIDGE_RACEWAY 0x0608
> +#define PCI_CLASS_BRIDGE_OTHER 0x0680
> +
> +#define PCI_BASE_CLASS_COMMUNICATION 0x07
> +#define PCI_CLASS_COMMUNICATION_SERIAL 0x0700
> +#define PCI_CLASS_COMMUNICATION_PARALLEL 0x0701
> +#define PCI_CLASS_COMMUNICATION_MULTISERIAL 0x0702
> +#define PCI_CLASS_COMMUNICATION_MODEM 0x0703
> +#define PCI_CLASS_COMMUNICATION_OTHER 0x0780
> +
> +#define PCI_BASE_CLASS_SYSTEM 0x08
> +#define PCI_CLASS_SYSTEM_PIC 0x0800
> +#define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010
> +#define PCI_CLASS_SYSTEM_PIC_IOXAPIC 0x080020
> +#define PCI_CLASS_SYSTEM_DMA 0x0801
> +#define PCI_CLASS_SYSTEM_TIMER 0x0802
> +#define PCI_CLASS_SYSTEM_RTC 0x0803
> +#define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804
> +#define PCI_CLASS_SYSTEM_SDHCI 0x0805
> +#define PCI_CLASS_SYSTEM_OTHER 0x0880
> +
> +#define PCI_BASE_CLASS_INPUT 0x09
> +#define PCI_CLASS_INPUT_KEYBOARD 0x0900
> +#define PCI_CLASS_INPUT_PEN 0x0901
> +#define PCI_CLASS_INPUT_MOUSE 0x0902
> +#define PCI_CLASS_INPUT_SCANNER 0x0903
> +#define PCI_CLASS_INPUT_GAMEPORT 0x0904
> +#define PCI_CLASS_INPUT_OTHER 0x0980
> +
> +#define PCI_BASE_CLASS_DOCKING 0x0a
> +#define PCI_CLASS_DOCKING_GENERIC 0x0a00
> +#define PCI_CLASS_DOCKING_OTHER 0x0a80
> +
> +#define PCI_BASE_CLASS_PROCESSOR 0x0b
> +#define PCI_CLASS_PROCESSOR_386 0x0b00
> +#define PCI_CLASS_PROCESSOR_486 0x0b01
> +#define PCI_CLASS_PROCESSOR_PENTIUM 0x0b02
> +#define PCI_CLASS_PROCESSOR_ALPHA 0x0b10
> +#define PCI_CLASS_PROCESSOR_POWERPC 0x0b20
> +#define PCI_CLASS_PROCESSOR_MIPS 0x0b30
> +#define PCI_CLASS_PROCESSOR_CO 0x0b40
> +
> +#define PCI_BASE_CLASS_SERIAL 0x0c
> +#define PCI_CLASS_SERIAL_FIREWIRE 0x0c00
> +#define PCI_CLASS_SERIAL_FIREWIRE_OHCI 0x0c0010
> +#define PCI_CLASS_SERIAL_ACCESS 0x0c01
> +#define PCI_CLASS_SERIAL_SSA 0x0c02
> +#define PCI_CLASS_SERIAL_USB 0x0c03
> +#define PCI_CLASS_SERIAL_USB_UHCI 0x0c0300
> +#define PCI_CLASS_SERIAL_USB_OHCI 0x0c0310
> +#define PCI_CLASS_SERIAL_USB_EHCI 0x0c0320
> +#define PCI_CLASS_SERIAL_USB_XHCI 0x0c0330
> +#define PCI_CLASS_SERIAL_FIBER 0x0c04
> +#define PCI_CLASS_SERIAL_SMBUS 0x0c05
> +
> +#define PCI_BASE_CLASS_WIRELESS 0x0d
> +#define PCI_CLASS_WIRELESS_RF_CONTROLLER 0x0d10
> +#define PCI_CLASS_WIRELESS_WHCI 0x0d1010
> +
> +#define PCI_BASE_CLASS_INTELLIGENT 0x0e
> +#define PCI_CLASS_INTELLIGENT_I2O 0x0e00
> +
> +#define PCI_BASE_CLASS_SATELLITE 0x0f
> +#define PCI_CLASS_SATELLITE_TV 0x0f00
> +#define PCI_CLASS_SATELLITE_AUDIO 0x0f01
> +#define PCI_CLASS_SATELLITE_VOICE 0x0f03
> +#define PCI_CLASS_SATELLITE_DATA 0x0f04
> +
> +#define PCI_BASE_CLASS_CRYPT 0x10
> +#define PCI_CLASS_CRYPT_NETWORK 0x1000
> +#define PCI_CLASS_CRYPT_ENTERTAINMENT 0x1001
> +#define PCI_CLASS_CRYPT_OTHER 0x1080
> +
> +#define PCI_BASE_CLASS_SIGNAL_PROCESSING 0x11
> +#define PCI_CLASS_SP_DPIO 0x1100
> +#define PCI_CLASS_SP_OTHER 0x1180
> +
> +#define PCI_CLASS_OTHERS 0xff
> +
> +/* Vendors and devices. Sort key: vendor first, device next. */
> +
> +#define PCI_VENDOR_ID_NCR 0x1000
> +#define PCI_VENDOR_ID_LSI_LOGIC 0x1000
> +#define PCI_DEVICE_ID_NCR_53C810 0x0001
> +#define PCI_DEVICE_ID_NCR_53C820 0x0002
> +#define PCI_DEVICE_ID_NCR_53C825 0x0003
> +#define PCI_DEVICE_ID_NCR_53C815 0x0004
> +#define PCI_DEVICE_ID_LSI_53C810AP 0x0005
> +#define PCI_DEVICE_ID_NCR_53C860 0x0006
> +#define PCI_DEVICE_ID_LSI_53C1510 0x000a
> +#define PCI_DEVICE_ID_NCR_53C896 0x000b
> +#define PCI_DEVICE_ID_NCR_53C895 0x000c
> +#define PCI_DEVICE_ID_NCR_53C885 0x000d
> +#define PCI_DEVICE_ID_NCR_53C875 0x000f
> +#define PCI_DEVICE_ID_NCR_53C1510 0x0010
> +#define PCI_DEVICE_ID_LSI_53C895A 0x0012
> +#define PCI_DEVICE_ID_LSI_53C875A 0x0013
> +#define PCI_DEVICE_ID_LSI_53C1010_33 0x0020
> +#define PCI_DEVICE_ID_LSI_53C1010_66 0x0021
> +#define PCI_DEVICE_ID_LSI_53C1030 0x0030
> +#define PCI_DEVICE_ID_LSI_1030_53C1035 0x0032
> +#define PCI_DEVICE_ID_LSI_53C1035 0x0040
> +#define PCI_DEVICE_ID_NCR_53C875J 0x008f
> +#define PCI_DEVICE_ID_LSI_FC909 0x0621
> +#define PCI_DEVICE_ID_LSI_FC929 0x0622
> +#define PCI_DEVICE_ID_LSI_FC929_LAN 0x0623
> +#define PCI_DEVICE_ID_LSI_FC919 0x0624
> +#define PCI_DEVICE_ID_LSI_FC919_LAN 0x0625
> +#define PCI_DEVICE_ID_LSI_FC929X 0x0626
> +#define PCI_DEVICE_ID_LSI_FC939X 0x0642
> +#define PCI_DEVICE_ID_LSI_FC949X 0x0640
> +#define PCI_DEVICE_ID_LSI_FC949ES 0x0646
> +#define PCI_DEVICE_ID_LSI_FC919X 0x0628
> +#define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701
> +#define PCI_DEVICE_ID_LSI_61C102 0x0901
> +#define PCI_DEVICE_ID_LSI_63C815 0x1000
> +#define PCI_DEVICE_ID_LSI_SAS1064 0x0050
> +#define PCI_DEVICE_ID_LSI_SAS1064R 0x0411
> +#define PCI_DEVICE_ID_LSI_SAS1066 0x005E
> +#define PCI_DEVICE_ID_LSI_SAS1068 0x0054
> +#define PCI_DEVICE_ID_LSI_SAS1064A 0x005C
> +#define PCI_DEVICE_ID_LSI_SAS1064E 0x0056
> +#define PCI_DEVICE_ID_LSI_SAS1066E 0x005A
> +#define PCI_DEVICE_ID_LSI_SAS1068E 0x0058
> +#define PCI_DEVICE_ID_LSI_SAS1078 0x0060
> +
> +#define PCI_VENDOR_ID_CIRRUS 0x1013
> +#define PCI_DEVICE_ID_CIRRUS_7548 0x0038
> +#define PCI_DEVICE_ID_CIRRUS_5430 0x00a0
> +#define PCI_DEVICE_ID_CIRRUS_5434_4 0x00a4
> +#define PCI_DEVICE_ID_CIRRUS_5434_8 0x00a8
> +#define PCI_DEVICE_ID_CIRRUS_5436 0x00ac
> +#define PCI_DEVICE_ID_CIRRUS_5446 0x00b8
> +#define PCI_DEVICE_ID_CIRRUS_5480 0x00bc
> +#define PCI_DEVICE_ID_CIRRUS_5462 0x00d0
> +#define PCI_DEVICE_ID_CIRRUS_5464 0x00d4
> +#define PCI_DEVICE_ID_CIRRUS_5465 0x00d6
> +#define PCI_DEVICE_ID_CIRRUS_6729 0x1100
> +#define PCI_DEVICE_ID_CIRRUS_6832 0x1110
> +#define PCI_DEVICE_ID_CIRRUS_7543 0x1202
> +#define PCI_DEVICE_ID_CIRRUS_4610 0x6001
> +#define PCI_DEVICE_ID_CIRRUS_4612 0x6003
> +#define PCI_DEVICE_ID_CIRRUS_4615 0x6004
> +
> +#define PCI_VENDOR_ID_AMD 0x1022
> +#define PCI_DEVICE_ID_AMD_K8_NB 0x1100
> +#define PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP 0x1101
> +#define PCI_DEVICE_ID_AMD_K8_NB_MEMCTL 0x1102
> +#define PCI_DEVICE_ID_AMD_K8_NB_MISC 0x1103
> +#define PCI_DEVICE_ID_AMD_10H_NB_HT 0x1200
> +#define PCI_DEVICE_ID_AMD_10H_NB_MAP 0x1201
> +#define PCI_DEVICE_ID_AMD_10H_NB_DRAM 0x1202
> +#define PCI_DEVICE_ID_AMD_10H_NB_MISC 0x1203
> +#define PCI_DEVICE_ID_AMD_10H_NB_LINK 0x1204
> +#define PCI_DEVICE_ID_AMD_11H_NB_HT 0x1300
> +#define PCI_DEVICE_ID_AMD_11H_NB_MAP 0x1301
> +#define PCI_DEVICE_ID_AMD_11H_NB_DRAM 0x1302
> +#define PCI_DEVICE_ID_AMD_11H_NB_MISC 0x1303
> +#define PCI_DEVICE_ID_AMD_11H_NB_LINK 0x1304
> +#define PCI_DEVICE_ID_AMD_15H_NB_F3 0x1603
> +#define PCI_DEVICE_ID_AMD_15H_NB_F4 0x1604
> +#define PCI_DEVICE_ID_AMD_CNB17H_F3 0x1703
> +#define PCI_DEVICE_ID_AMD_LANCE 0x2000
> +#define PCI_DEVICE_ID_AMD_LANCE_HOME 0x2001
> +#define PCI_DEVICE_ID_AMD_SCSI 0x2020
> +#define PCI_DEVICE_ID_AMD_SERENADE 0x36c0
> +#define PCI_DEVICE_ID_AMD_FE_GATE_7006 0x7006
> +#define PCI_DEVICE_ID_AMD_FE_GATE_7007 0x7007
> +#define PCI_DEVICE_ID_AMD_FE_GATE_700C 0x700C
> +#define PCI_DEVICE_ID_AMD_FE_GATE_700E 0x700E
> +#define PCI_DEVICE_ID_AMD_COBRA_7401 0x7401
> +#define PCI_DEVICE_ID_AMD_VIPER_7409 0x7409
> +#define PCI_DEVICE_ID_AMD_VIPER_740B 0x740B
> +#define PCI_DEVICE_ID_AMD_VIPER_7410 0x7410
> +#define PCI_DEVICE_ID_AMD_VIPER_7411 0x7411
> +#define PCI_DEVICE_ID_AMD_VIPER_7413 0x7413
> +#define PCI_DEVICE_ID_AMD_VIPER_7440 0x7440
> +#define PCI_DEVICE_ID_AMD_OPUS_7441 0x7441
> +#define PCI_DEVICE_ID_AMD_OPUS_7443 0x7443
> +#define PCI_DEVICE_ID_AMD_VIPER_7443 0x7443
> +#define PCI_DEVICE_ID_AMD_OPUS_7445 0x7445
> +#define PCI_DEVICE_ID_AMD_8111_PCI 0x7460
> +#define PCI_DEVICE_ID_AMD_8111_LPC 0x7468
> +#define PCI_DEVICE_ID_AMD_8111_IDE 0x7469
> +#define PCI_DEVICE_ID_AMD_8111_SMBUS2 0x746a
> +#define PCI_DEVICE_ID_AMD_8111_SMBUS 0x746b
> +#define PCI_DEVICE_ID_AMD_8111_AUDIO 0x746d
> +#define PCI_DEVICE_ID_AMD_8151_0 0x7454
> +#define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450
> +#define PCI_DEVICE_ID_AMD_8131_APIC 0x7451
> +#define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458
> +#define PCI_DEVICE_ID_AMD_HUDSON2_SMBUS 0x780b
> +#define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F
> +#define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090
> +#define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091
> +#define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093
> +#define PCI_DEVICE_ID_AMD_CS5536_OHC 0x2094
> +#define PCI_DEVICE_ID_AMD_CS5536_EHC 0x2095
> +#define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096
> +#define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097
> +#define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A
> +#define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081
> +#define PCI_DEVICE_ID_AMD_LX_AES 0x2082
> +#define PCI_DEVICE_ID_AMD_HUDSON2_IDE 0x780c
> +#define PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE 0x7800
> +
> +#define PCI_VENDOR_ID_PROMISE 0x105a
> +#define PCI_DEVICE_ID_PROMISE_20265 0x0d30
> +#define PCI_DEVICE_ID_PROMISE_20267 0x4d30
> +#define PCI_DEVICE_ID_PROMISE_20246 0x4d33
> +#define PCI_DEVICE_ID_PROMISE_20262 0x4d38
> +#define PCI_DEVICE_ID_PROMISE_20263 0x0D38
> +#define PCI_DEVICE_ID_PROMISE_20268 0x4d68
> +#define PCI_DEVICE_ID_PROMISE_20269 0x4d69
> +#define PCI_DEVICE_ID_PROMISE_20270 0x6268
> +#define PCI_DEVICE_ID_PROMISE_20271 0x6269
> +#define PCI_DEVICE_ID_PROMISE_20275 0x1275
> +#define PCI_DEVICE_ID_PROMISE_20276 0x5275
> +#define PCI_DEVICE_ID_PROMISE_20277 0x7275
> +
> +#define PCI_VENDOR_ID_SUN 0x108e
> +#define PCI_DEVICE_ID_SUN_EBUS 0x1000
> +#define PCI_DEVICE_ID_SUN_HAPPYMEAL 0x1001
> +#define PCI_DEVICE_ID_SUN_RIO_EBUS 0x1100
> +#define PCI_DEVICE_ID_SUN_RIO_GEM 0x1101
> +#define PCI_DEVICE_ID_SUN_RIO_1394 0x1102
> +#define PCI_DEVICE_ID_SUN_RIO_USB 0x1103
> +#define PCI_DEVICE_ID_SUN_GEM 0x2bad
> +#define PCI_DEVICE_ID_SUN_SIMBA 0x5000
> +#define PCI_DEVICE_ID_SUN_PBM 0x8000
> +#define PCI_DEVICE_ID_SUN_SCHIZO 0x8001
> +#define PCI_DEVICE_ID_SUN_SABRE 0xa000
> +#define PCI_DEVICE_ID_SUN_HUMMINGBIRD 0xa001
> +#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801
> +#define PCI_DEVICE_ID_SUN_CASSINI 0xabba
> +
> +#define PCI_VENDOR_ID_SGI 0x10a9
> +#define PCI_DEVICE_ID_SGI_IOC3 0x0003
> +#define PCI_DEVICE_ID_SGI_LITHIUM 0x1002
> +#define PCI_DEVICE_ID_SGI_IOC4 0x100a
> +
> +#define PCI_VENDOR_ID_REALTEK 0x10ec
> +#define PCI_DEVICE_ID_REALTEK_8139 0x8139
> +
> +#define PCI_VENDOR_ID_XILINX 0x10ee
> +#define PCI_DEVICE_ID_RME_DIGI96 0x3fc0
> +#define PCI_DEVICE_ID_RME_DIGI96_8 0x3fc1
> +#define PCI_DEVICE_ID_RME_DIGI96_8_PRO 0x3fc2
> +#define PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST 0x3fc3
> +#define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP 0x3fc5
> +#define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI 0x3fc6
> +
> +#define PCI_VENDOR_ID_MARVELL 0x11ab
> +#define PCI_DEVICE_ID_MARVELL_GT64111 0x4146
> +#define PCI_DEVICE_ID_MARVELL_GT64260 0x6430
> +#define PCI_DEVICE_ID_MARVELL_MV64360 0x6460
> +#define PCI_DEVICE_ID_MARVELL_MV64460 0x6480
> +#define PCI_DEVICE_ID_MARVELL_88ALP01_NAND 0x4100
> +#define PCI_DEVICE_ID_MARVELL_88ALP01_SD 0x4101
> +#define PCI_DEVICE_ID_MARVELL_88ALP01_CCIC 0x4102
> +
> +#define PCI_VENDOR_ID_V3 0x11b0
> +#define PCI_DEVICE_ID_V3_V960 0x0001
> +#define PCI_DEVICE_ID_V3_V351 0x0002
> +
> +#define PCI_VENDOR_ID_SPECIALIX 0x11cb
> +#define PCI_DEVICE_ID_SPECIALIX_IO8 0x2000
> +#define PCI_DEVICE_ID_SPECIALIX_RIO 0x8000
> +#define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004
> +
> +#define PCI_VENDOR_ID_ANALOG_DEVICES 0x11d4
> +#define PCI_DEVICE_ID_AD1889JS 0x1889
> +
> +#define PCI_VENDOR_ID_TEKRAM 0x1de1
> +#define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29
> +
> +#define PCI_VENDOR_ID_INTEL 0x8086
> +#define PCI_DEVICE_ID_INTEL_EESSC 0x0008
> +#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
> +#define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
> +#define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
> +#define PCI_DEVICE_ID_INTEL_PXH_1 0x032A
> +#define PCI_DEVICE_ID_INTEL_PXHV 0x032C
> +#define PCI_DEVICE_ID_INTEL_80332_0 0x0330
> +#define PCI_DEVICE_ID_INTEL_80332_1 0x0332
> +#define PCI_DEVICE_ID_INTEL_80333_0 0x0370
> +#define PCI_DEVICE_ID_INTEL_80333_1 0x0372
> +#define PCI_DEVICE_ID_INTEL_82375 0x0482
> +#define PCI_DEVICE_ID_INTEL_82424 0x0483
> +#define PCI_DEVICE_ID_INTEL_82378 0x0484
> +#define PCI_DEVICE_ID_INTEL_MRST_SD0 0x0807
> +#define PCI_DEVICE_ID_INTEL_MRST_SD1 0x0808
> +#define PCI_DEVICE_ID_INTEL_MFD_SD 0x0820
> +#define PCI_DEVICE_ID_INTEL_MFD_SDIO1 0x0821
> +#define PCI_DEVICE_ID_INTEL_MFD_SDIO2 0x0822
> +#define PCI_DEVICE_ID_INTEL_MFD_EMMC0 0x0823
> +#define PCI_DEVICE_ID_INTEL_MFD_EMMC1 0x0824
> +#define PCI_DEVICE_ID_INTEL_MRST_SD2 0x084F
> +#define PCI_DEVICE_ID_INTEL_I960 0x0960
> +#define PCI_DEVICE_ID_INTEL_I960RM 0x0962
> +#define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062
> +#define PCI_DEVICE_ID_INTEL_82573E_SOL 0x1085
> +#define PCI_DEVICE_ID_INTEL_82573L_SOL 0x108F
> +#define PCI_DEVICE_ID_INTEL_82815_MC 0x1130
> +#define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132
> +#define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221
> +#define PCI_DEVICE_ID_INTEL_7505_0 0x2550
> +#define PCI_DEVICE_ID_INTEL_7205_0 0x255d
> +#define PCI_DEVICE_ID_INTEL_82437 0x122d
> +#define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e
> +#define PCI_DEVICE_ID_INTEL_82371FB_1 0x1230
> +#define PCI_DEVICE_ID_INTEL_82371MX 0x1234
> +#define PCI_DEVICE_ID_INTEL_82441 0x1237
> +#define PCI_DEVICE_ID_INTEL_82380FB 0x124b
> +#define PCI_DEVICE_ID_INTEL_82439 0x1250
> +#define PCI_DEVICE_ID_INTEL_80960_RP 0x1960
> +#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21
> +#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30
> +#define PCI_DEVICE_ID_INTEL_IOAT 0x1a38
> +#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41
> +#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f
> +#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40
> +#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41
> +#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310
> +#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f
> +#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
> +#define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411
> +#define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413
> +#define PCI_DEVICE_ID_INTEL_82801AA_5 0x2415
> +#define PCI_DEVICE_ID_INTEL_82801AA_6 0x2416
> +#define PCI_DEVICE_ID_INTEL_82801AA_8 0x2418
> +#define PCI_DEVICE_ID_INTEL_82801AB_0 0x2420
> +#define PCI_DEVICE_ID_INTEL_82801AB_1 0x2421
> +#define PCI_DEVICE_ID_INTEL_82801AB_3 0x2423
> +#define PCI_DEVICE_ID_INTEL_82801AB_5 0x2425
> +#define PCI_DEVICE_ID_INTEL_82801AB_6 0x2426
> +#define PCI_DEVICE_ID_INTEL_82801AB_8 0x2428
> +#define PCI_DEVICE_ID_INTEL_82801BA_0 0x2440
> +#define PCI_DEVICE_ID_INTEL_82801BA_2 0x2443
> +#define PCI_DEVICE_ID_INTEL_82801BA_4 0x2445
> +#define PCI_DEVICE_ID_INTEL_82801BA_6 0x2448
> +#define PCI_DEVICE_ID_INTEL_82801BA_8 0x244a
> +#define PCI_DEVICE_ID_INTEL_82801BA_9 0x244b
> +#define PCI_DEVICE_ID_INTEL_82801BA_10 0x244c
> +#define PCI_DEVICE_ID_INTEL_82801BA_11 0x244e
> +#define PCI_DEVICE_ID_INTEL_82801E_0 0x2450
> +#define PCI_DEVICE_ID_INTEL_82801E_11 0x245b
> +#define PCI_DEVICE_ID_INTEL_82801CA_0 0x2480
> +#define PCI_DEVICE_ID_INTEL_82801CA_3 0x2483
> +#define PCI_DEVICE_ID_INTEL_82801CA_5 0x2485
> +#define PCI_DEVICE_ID_INTEL_82801CA_6 0x2486
> +#define PCI_DEVICE_ID_INTEL_82801CA_10 0x248a
> +#define PCI_DEVICE_ID_INTEL_82801CA_11 0x248b
> +#define PCI_DEVICE_ID_INTEL_82801CA_12 0x248c
> +#define PCI_DEVICE_ID_INTEL_82801DB_0 0x24c0
> +#define PCI_DEVICE_ID_INTEL_82801DB_1 0x24c1
> +#define PCI_DEVICE_ID_INTEL_82801DB_2 0x24c2
> +#define PCI_DEVICE_ID_INTEL_82801DB_3 0x24c3
> +#define PCI_DEVICE_ID_INTEL_82801DB_5 0x24c5
> +#define PCI_DEVICE_ID_INTEL_82801DB_6 0x24c6
> +#define PCI_DEVICE_ID_INTEL_82801DB_9 0x24c9
> +#define PCI_DEVICE_ID_INTEL_82801DB_10 0x24ca
> +#define PCI_DEVICE_ID_INTEL_82801DB_11 0x24cb
> +#define PCI_DEVICE_ID_INTEL_82801DB_12 0x24cc
> +#define PCI_DEVICE_ID_INTEL_82801EB_0 0x24d0
> +#define PCI_DEVICE_ID_INTEL_82801EB_1 0x24d1
> +#define PCI_DEVICE_ID_INTEL_82801EB_3 0x24d3
> +#define PCI_DEVICE_ID_INTEL_82801EB_5 0x24d5
> +#define PCI_DEVICE_ID_INTEL_82801EB_6 0x24d6
> +#define PCI_DEVICE_ID_INTEL_82801EB_11 0x24db
> +#define PCI_DEVICE_ID_INTEL_82801EB_12 0x24dc
> +#define PCI_DEVICE_ID_INTEL_82801EB_13 0x24dd
> +#define PCI_DEVICE_ID_INTEL_ESB_1 0x25a1
> +#define PCI_DEVICE_ID_INTEL_ESB_2 0x25a2
> +#define PCI_DEVICE_ID_INTEL_ESB_4 0x25a4
> +#define PCI_DEVICE_ID_INTEL_ESB_5 0x25a6
> +#define PCI_DEVICE_ID_INTEL_ESB_9 0x25ab
> +#define PCI_DEVICE_ID_INTEL_ESB_10 0x25ac
> +#define PCI_DEVICE_ID_INTEL_82820_HB 0x2500
> +#define PCI_DEVICE_ID_INTEL_82820_UP_HB 0x2501
> +#define PCI_DEVICE_ID_INTEL_82850_HB 0x2530
> +#define PCI_DEVICE_ID_INTEL_82860_HB 0x2531
> +#define PCI_DEVICE_ID_INTEL_E7501_MCH 0x254c
> +#define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560
> +#define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562
> +#define PCI_DEVICE_ID_INTEL_82865_HB 0x2570
> +#define PCI_DEVICE_ID_INTEL_82865_IG 0x2572
> +#define PCI_DEVICE_ID_INTEL_82875_HB 0x2578
> +#define PCI_DEVICE_ID_INTEL_82915G_HB 0x2580
> +#define PCI_DEVICE_ID_INTEL_82915G_IG 0x2582
> +#define PCI_DEVICE_ID_INTEL_82915GM_HB 0x2590
> +#define PCI_DEVICE_ID_INTEL_82915GM_IG 0x2592
> +#define PCI_DEVICE_ID_INTEL_5000_ERR 0x25F0
> +#define PCI_DEVICE_ID_INTEL_5000_FBD0 0x25F5
> +#define PCI_DEVICE_ID_INTEL_5000_FBD1 0x25F6
> +#define PCI_DEVICE_ID_INTEL_82945G_HB 0x2770
> +#define PCI_DEVICE_ID_INTEL_82945G_IG 0x2772
> +#define PCI_DEVICE_ID_INTEL_3000_HB 0x2778
> +#define PCI_DEVICE_ID_INTEL_82945GM_HB 0x27A0
> +#define PCI_DEVICE_ID_INTEL_82945GM_IG 0x27A2
> +#define PCI_DEVICE_ID_INTEL_ICH6_0 0x2640
> +#define PCI_DEVICE_ID_INTEL_ICH6_1 0x2641
> +#define PCI_DEVICE_ID_INTEL_ICH6_2 0x2642
> +#define PCI_DEVICE_ID_INTEL_ICH6_16 0x266a
> +#define PCI_DEVICE_ID_INTEL_ICH6_17 0x266d
> +#define PCI_DEVICE_ID_INTEL_ICH6_18 0x266e
> +#define PCI_DEVICE_ID_INTEL_ICH6_19 0x266f
> +#define PCI_DEVICE_ID_INTEL_ESB2_0 0x2670
> +#define PCI_DEVICE_ID_INTEL_ESB2_14 0x2698
> +#define PCI_DEVICE_ID_INTEL_ESB2_17 0x269b
> +#define PCI_DEVICE_ID_INTEL_ESB2_18 0x269e
> +#define PCI_DEVICE_ID_INTEL_ICH7_0 0x27b8
> +#define PCI_DEVICE_ID_INTEL_ICH7_1 0x27b9
> +#define PCI_DEVICE_ID_INTEL_ICH7_30 0x27b0
> +#define PCI_DEVICE_ID_INTEL_TGP_LPC 0x27bc
> +#define PCI_DEVICE_ID_INTEL_ICH7_31 0x27bd
> +#define PCI_DEVICE_ID_INTEL_ICH7_17 0x27da
> +#define PCI_DEVICE_ID_INTEL_ICH7_19 0x27dd
> +#define PCI_DEVICE_ID_INTEL_ICH7_20 0x27de
> +#define PCI_DEVICE_ID_INTEL_ICH7_21 0x27df
> +#define PCI_DEVICE_ID_INTEL_ICH8_0 0x2810
> +#define PCI_DEVICE_ID_INTEL_ICH8_1 0x2811
> +#define PCI_DEVICE_ID_INTEL_ICH8_2 0x2812
> +#define PCI_DEVICE_ID_INTEL_ICH8_3 0x2814
> +#define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815
> +#define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e
> +#define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850
> +#define PCI_DEVICE_ID_INTEL_ICH9_0 0x2910
> +#define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917
> +#define PCI_DEVICE_ID_INTEL_ICH9_2 0x2912
> +#define PCI_DEVICE_ID_INTEL_ICH9_3 0x2913
> +#define PCI_DEVICE_ID_INTEL_ICH9_4 0x2914
> +#define PCI_DEVICE_ID_INTEL_ICH9_5 0x2919
> +#define PCI_DEVICE_ID_INTEL_ICH9_6 0x2930
> +#define PCI_DEVICE_ID_INTEL_ICH9_7 0x2916
> +#define PCI_DEVICE_ID_INTEL_ICH9_8 0x2918
> +#define PCI_DEVICE_ID_INTEL_I7_MCR 0x2c18
> +#define PCI_DEVICE_ID_INTEL_I7_MC_TAD 0x2c19
> +#define PCI_DEVICE_ID_INTEL_I7_MC_RAS 0x2c1a
> +#define PCI_DEVICE_ID_INTEL_I7_MC_TEST 0x2c1c
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_CTRL 0x2c20
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_ADDR 0x2c21
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_RANK 0x2c22
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_TC 0x2c23
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_CTRL 0x2c28
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_ADDR 0x2c29
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_RANK 0x2c2a
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_TC 0x2c2b
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_CTRL 0x2c30
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR 0x2c31
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32
> +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33
> +#define PCI_DEVICE_ID_INTEL_I7_NONCORE 0x2c41
> +#define PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT 0x2c40
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE 0x2c50
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT 0x2c51
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_REV2 0x2c70
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_SAD 0x2c81
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_LINK0 0x2c90
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_PHY0 0x2c91
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR 0x2c98
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD 0x2c99
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST 0x2c9C
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL 0x2ca0
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR 0x2ca1
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK 0x2ca2
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC 0x2ca3
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL 0x2ca8
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR 0x2ca9
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK 0x2caa
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC 0x2cab
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR_REV2 0x2d98
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD_REV2 0x2d99
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_RAS_REV2 0x2d9a
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST_REV2 0x2d9c
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL_REV2 0x2da0
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR_REV2 0x2da1
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK_REV2 0x2da2
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC_REV2 0x2da3
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL_REV2 0x2da8
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR_REV2 0x2da9
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK_REV2 0x2daa
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC_REV2 0x2dab
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_CTRL_REV2 0x2db0
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_ADDR_REV2 0x2db1
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_RANK_REV2 0x2db2
> +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_TC_REV2 0x2db3
> +#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG6 0x342b
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG7 0x342c
> +#define PCI_DEVICE_ID_INTEL_X58_HUB_MGMT 0x342e
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG0 0x3430
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432
> +#define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433
> +#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575
> +#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
> +#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c
> +#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e
> +#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580
> +#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582
> +#define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590
> +#define PCI_DEVICE_ID_INTEL_E7320_MCH 0x3592
> +#define PCI_DEVICE_ID_INTEL_MCH_PA 0x3595
> +#define PCI_DEVICE_ID_INTEL_MCH_PA1 0x3596
> +#define PCI_DEVICE_ID_INTEL_MCH_PB 0x3597
> +#define PCI_DEVICE_ID_INTEL_MCH_PB1 0x3598
> +#define PCI_DEVICE_ID_INTEL_MCH_PC 0x3599
> +#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a
> +#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
> +#define PCI_DEVICE_ID_INTEL_I7300_MCH_ERR 0x360c
> +#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB0 0x360f
> +#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB1 0x3610
> +#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b
> +#define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF1 0x3711
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF2 0x3712
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF3 0x3713
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF4 0x3714
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF5 0x3715
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF6 0x3716
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF7 0x3717
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF8 0x3718
> +#define PCI_DEVICE_ID_INTEL_IOAT_JSF9 0x3719
> +#define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14
> +#define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16
> +#define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18
> +#define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a
> +#define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30
> +#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
> +#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00
> +#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f
> +#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
> +#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0
> +#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5
> +#define PCI_DEVICE_ID_INTEL_5100_22 0x65f6
> +#define PCI_DEVICE_ID_INTEL_5400_ERR 0x4030
> +#define PCI_DEVICE_ID_INTEL_5400_FBD0 0x4035
> +#define PCI_DEVICE_ID_INTEL_5400_FBD1 0x4036
> +#define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff
> +#define PCI_DEVICE_ID_INTEL_EP80579_0 0x5031
> +#define PCI_DEVICE_ID_INTEL_EP80579_1 0x5032
> +#define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000
> +#define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010
> +#define PCI_DEVICE_ID_INTEL_82371SB_2 0x7020
> +#define PCI_DEVICE_ID_INTEL_82437VX 0x7030
> +#define PCI_DEVICE_ID_INTEL_82439TX 0x7100
> +#define PCI_DEVICE_ID_INTEL_82371AB_0 0x7110
> +#define PCI_DEVICE_ID_INTEL_82371AB 0x7111
> +#define PCI_DEVICE_ID_INTEL_82371AB_2 0x7112
> +#define PCI_DEVICE_ID_INTEL_82371AB_3 0x7113
> +#define PCI_DEVICE_ID_INTEL_82810_MC1 0x7120
> +#define PCI_DEVICE_ID_INTEL_82810_IG1 0x7121
> +#define PCI_DEVICE_ID_INTEL_82810_MC3 0x7122
> +#define PCI_DEVICE_ID_INTEL_82810_IG3 0x7123
> +#define PCI_DEVICE_ID_INTEL_82810E_MC 0x7124
> +#define PCI_DEVICE_ID_INTEL_82810E_IG 0x7125
> +#define PCI_DEVICE_ID_INTEL_82443LX_0 0x7180
> +#define PCI_DEVICE_ID_INTEL_82443LX_1 0x7181
> +#define PCI_DEVICE_ID_INTEL_82443BX_0 0x7190
> +#define PCI_DEVICE_ID_INTEL_82443BX_1 0x7191
> +#define PCI_DEVICE_ID_INTEL_82443BX_2 0x7192
> +#define PCI_DEVICE_ID_INTEL_440MX 0x7195
> +#define PCI_DEVICE_ID_INTEL_440MX_6 0x7196
> +#define PCI_DEVICE_ID_INTEL_82443MX_0 0x7198
> +#define PCI_DEVICE_ID_INTEL_82443MX_1 0x7199
> +#define PCI_DEVICE_ID_INTEL_82443MX_3 0x719b
> +#define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0
> +#define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2
> +#define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601
> +#define PCI_DEVICE_ID_INTEL_SCH_LPC 0x8119
> +#define PCI_DEVICE_ID_INTEL_SCH_IDE 0x811a
> +#define PCI_DEVICE_ID_INTEL_ITC_LPC 0x8186
> +#define PCI_DEVICE_ID_INTEL_82454GX 0x84c4
> +#define PCI_DEVICE_ID_INTEL_82450GX 0x84c5
> +#define PCI_DEVICE_ID_INTEL_82451NX 0x84ca
> +#define PCI_DEVICE_ID_INTEL_82454NX 0x84cb
> +#define PCI_DEVICE_ID_INTEL_84460GX 0x84ea
> +#define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500
> +#define PCI_DEVICE_ID_INTEL_IXP2800 0x9004
> +#define PCI_DEVICE_ID_INTEL_S21152BB 0xb152
> +
> +#define PCI_VENDOR_ID_SCALEMP 0x8686
> +#define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010
> +
> +#define PCI_VENDOR_ID_ADAPTEC 0x9004
> +#define PCI_DEVICE_ID_ADAPTEC_7810 0x1078
> +#define PCI_DEVICE_ID_ADAPTEC_7821 0x2178
> +#define PCI_DEVICE_ID_ADAPTEC_38602 0x3860
> +#define PCI_DEVICE_ID_ADAPTEC_7850 0x5078
> +#define PCI_DEVICE_ID_ADAPTEC_7855 0x5578
> +#define PCI_DEVICE_ID_ADAPTEC_3860 0x6038
> +#define PCI_DEVICE_ID_ADAPTEC_1480A 0x6075
> +#define PCI_DEVICE_ID_ADAPTEC_7860 0x6078
> +#define PCI_DEVICE_ID_ADAPTEC_7861 0x6178
> +#define PCI_DEVICE_ID_ADAPTEC_7870 0x7078
> +#define PCI_DEVICE_ID_ADAPTEC_7871 0x7178
> +#define PCI_DEVICE_ID_ADAPTEC_7872 0x7278
> +#define PCI_DEVICE_ID_ADAPTEC_7873 0x7378
> +#define PCI_DEVICE_ID_ADAPTEC_7874 0x7478
> +#define PCI_DEVICE_ID_ADAPTEC_7895 0x7895
> +#define PCI_DEVICE_ID_ADAPTEC_7880 0x8078
> +#define PCI_DEVICE_ID_ADAPTEC_7881 0x8178
> +#define PCI_DEVICE_ID_ADAPTEC_7882 0x8278
> +#define PCI_DEVICE_ID_ADAPTEC_7883 0x8378
> +#define PCI_DEVICE_ID_ADAPTEC_7884 0x8478
> +#define PCI_DEVICE_ID_ADAPTEC_7885 0x8578
> +#define PCI_DEVICE_ID_ADAPTEC_7886 0x8678
> +#define PCI_DEVICE_ID_ADAPTEC_7887 0x8778
> +#define PCI_DEVICE_ID_ADAPTEC_7888 0x8878
> +
> +#define PCI_VENDOR_ID_ADAPTEC2 0x9005
> +#define PCI_DEVICE_ID_ADAPTEC2_2940U2 0x0010
> +#define PCI_DEVICE_ID_ADAPTEC2_2930U2 0x0011
> +#define PCI_DEVICE_ID_ADAPTEC2_7890B 0x0013
> +#define PCI_DEVICE_ID_ADAPTEC2_7890 0x001f
> +#define PCI_DEVICE_ID_ADAPTEC2_3940U2 0x0050
> +#define PCI_DEVICE_ID_ADAPTEC2_3950U2D 0x0051
> +#define PCI_DEVICE_ID_ADAPTEC2_7896 0x005f
> +#define PCI_DEVICE_ID_ADAPTEC2_7892A 0x0080
> +#define PCI_DEVICE_ID_ADAPTEC2_7892B 0x0081
> +#define PCI_DEVICE_ID_ADAPTEC2_7892D 0x0083
> +#define PCI_DEVICE_ID_ADAPTEC2_7892P 0x008f
> +#define PCI_DEVICE_ID_ADAPTEC2_7899A 0x00c0
> +#define PCI_DEVICE_ID_ADAPTEC2_7899B 0x00c1
> +#define PCI_DEVICE_ID_ADAPTEC2_7899D 0x00c3
> +#define PCI_DEVICE_ID_ADAPTEC2_7899P 0x00cf
> +#define PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN 0x0500
> +#define PCI_DEVICE_ID_ADAPTEC2_SCAMP 0x0503
> +
> +#define PCI_VENDOR_ID_XILINX_RME 0xea60
> +#define PCI_DEVICE_ID_RME_DIGI32 0x9896
> +#define PCI_DEVICE_ID_RME_DIGI32_PRO 0x9897
> +#define PCI_DEVICE_ID_RME_DIGI32_8 0x9898
> diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h
> new file mode 100644
> index 0000000..be01380
> --- /dev/null
> +++ b/include/linux/pci_regs.h
> @@ -0,0 +1,698 @@
> +/*
> + * pci_regs.h
> + *
> + * PCI standard defines
> + * Copyright 1994, Drew Eckhardt
> + * Copyright 1997--1999 Martin Mares <mj at ucw.cz>
> + *
> + * For more information, please consult the following manuals (look at
> + * http://www.pcisig.com/ for how to get them):
> + *
> + * PCI BIOS Specification
> + * PCI Local Bus Specification
> + * PCI to PCI Bridge Specification
> + * PCI System Design Guide
> + *
> + * For hypertransport information, please consult the following manuals
> + * from http://www.hypertransport.org
> + *
> + * The Hypertransport I/O Link Specification
> + */
> +
> +#ifndef LINUX_PCI_REGS_H
> +#define LINUX_PCI_REGS_H
> +
> +/*
> + * Under PCI, each device has 256 bytes of configuration address space,
> + * of which the first 64 bytes are standardized as follows:
> + */
> +#define PCI_VENDOR_ID 0x00 /* 16 bits */
> +#define PCI_DEVICE_ID 0x02 /* 16 bits */
> +#define PCI_COMMAND 0x04 /* 16 bits */
> +#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */
> +#define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */
> +#define PCI_COMMAND_MASTER 0x4 /* Enable bus mastering */
> +#define PCI_COMMAND_SPECIAL 0x8 /* Enable response to special cycles */
> +#define PCI_COMMAND_INVALIDATE 0x10 /* Use memory write and invalidate */
> +#define PCI_COMMAND_VGA_PALETTE 0x20 /* Enable palette snooping */
> +#define PCI_COMMAND_PARITY 0x40 /* Enable parity checking */
> +#define PCI_COMMAND_WAIT 0x80 /* Enable address/data stepping */
> +#define PCI_COMMAND_SERR 0x100 /* Enable SERR */
> +#define PCI_COMMAND_FAST_BACK 0x200 /* Enable back-to-back writes */
> +#define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
> +
> +#define PCI_STATUS 0x06 /* 16 bits */
> +#define PCI_STATUS_INTERRUPT 0x08 /* Interrupt status */
> +#define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */
> +#define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */
> +#define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */
> +#define PCI_STATUS_FAST_BACK 0x80 /* Accept fast-back to back */
> +#define PCI_STATUS_PARITY 0x100 /* Detected parity error */
> +#define PCI_STATUS_DEVSEL_MASK 0x600 /* DEVSEL timing */
> +#define PCI_STATUS_DEVSEL_FAST 0x000
> +#define PCI_STATUS_DEVSEL_MEDIUM 0x200
> +#define PCI_STATUS_DEVSEL_SLOW 0x400
> +#define PCI_STATUS_SIG_TARGET_ABORT 0x800 /* Set on target abort */
> +#define PCI_STATUS_REC_TARGET_ABORT 0x1000 /* Master ack of " */
> +#define PCI_STATUS_REC_MASTER_ABORT 0x2000 /* Set on master abort */
> +#define PCI_STATUS_SIG_SYSTEM_ERROR 0x4000 /* Set when we drive SERR */
> +#define PCI_STATUS_DETECTED_PARITY 0x8000 /* Set on parity error */
> +
> +#define PCI_CLASS_REVISION 0x08 /* High 24 bits are class, low 8 revision */
> +#define PCI_REVISION_ID 0x08 /* Revision ID */
> +#define PCI_CLASS_PROG 0x09 /* Reg. Level Programming Interface */
> +#define PCI_CLASS_DEVICE 0x0a /* Device class */
> +
> +#define PCI_CACHE_LINE_SIZE 0x0c /* 8 bits */
> +#define PCI_LATENCY_TIMER 0x0d /* 8 bits */
> +#define PCI_HEADER_TYPE 0x0e /* 8 bits */
> +#define PCI_HEADER_TYPE_NORMAL 0
> +#define PCI_HEADER_TYPE_BRIDGE 1
> +#define PCI_HEADER_TYPE_CARDBUS 2
> +
> +#define PCI_BIST 0x0f /* 8 bits */
> +#define PCI_BIST_CODE_MASK 0x0f /* Return result */
> +#define PCI_BIST_START 0x40 /* 1 to start BIST, 2 secs or less */
> +#define PCI_BIST_CAPABLE 0x80 /* 1 if BIST capable */
> +
> +/*
> + * Base addresses specify locations in memory or I/O space.
> + * Decoded size can be determined by writing a value of
> + * 0xffffffff to the register, and reading it back. Only
> + * 1 bits are decoded.
> + */
> +#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */
> +#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */
> +#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */
> +#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */
> +#define PCI_BASE_ADDRESS_4 0x20 /* 32 bits */
> +#define PCI_BASE_ADDRESS_5 0x24 /* 32 bits */
> +#define PCI_BASE_ADDRESS_SPACE 0x01 /* 0 = memory, 1 = I/O */
> +#define PCI_BASE_ADDRESS_SPACE_IO 0x01
> +#define PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
> +#define PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
> +#define PCI_BASE_ADDRESS_MEM_TYPE_32 0x00 /* 32 bit address */
> +#define PCI_BASE_ADDRESS_MEM_TYPE_1M 0x02 /* Below 1M [obsolete] */
> +#define PCI_BASE_ADDRESS_MEM_TYPE_64 0x04 /* 64 bit address */
> +#define PCI_BASE_ADDRESS_MEM_PREFETCH 0x08 /* prefetchable? */
> +#define PCI_BASE_ADDRESS_MEM_MASK (~0x0fUL)
> +#define PCI_BASE_ADDRESS_IO_MASK (~0x03UL)
> +/* bit 1 is reserved if address_space = 1 */
> +
> +/* Header type 0 (normal devices) */
> +#define PCI_CARDBUS_CIS 0x28
> +#define PCI_SUBSYSTEM_VENDOR_ID 0x2c
> +#define PCI_SUBSYSTEM_ID 0x2e
> +#define PCI_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */
> +#define PCI_ROM_ADDRESS_ENABLE 0x01
> +#define PCI_ROM_ADDRESS_MASK (~0x7ffUL)
> +
> +#define PCI_CAPABILITY_LIST 0x34 /* Offset of first capability list entry */
> +
> +/* 0x35-0x3b are reserved */
> +#define PCI_INTERRUPT_LINE 0x3c /* 8 bits */
> +#define PCI_INTERRUPT_PIN 0x3d /* 8 bits */
> +#define PCI_MIN_GNT 0x3e /* 8 bits */
> +#define PCI_MAX_LAT 0x3f /* 8 bits */
> +
> +/* Header type 1 (PCI-to-PCI bridges) */
> +#define PCI_PRIMARY_BUS 0x18 /* Primary bus number */
> +#define PCI_SECONDARY_BUS 0x19 /* Secondary bus number */
> +#define PCI_SUBORDINATE_BUS 0x1a /* Highest bus number behind the bridge */
> +#define PCI_SEC_LATENCY_TIMER 0x1b /* Latency timer for secondary interface */
> +#define PCI_IO_BASE 0x1c /* I/O range behind the bridge */
> +#define PCI_IO_LIMIT 0x1d
> +#define PCI_IO_RANGE_TYPE_MASK 0x0fUL /* I/O bridging type */
> +#define PCI_IO_RANGE_TYPE_16 0x00
> +#define PCI_IO_RANGE_TYPE_32 0x01
> +#define PCI_IO_RANGE_MASK (~0x0fUL)
> +#define PCI_SEC_STATUS 0x1e /* Secondary status register, only bit 14 used */
> +#define PCI_MEMORY_BASE 0x20 /* Memory range behind */
> +#define PCI_MEMORY_LIMIT 0x22
> +#define PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
> +#define PCI_MEMORY_RANGE_MASK (~0x0fUL)
> +#define PCI_PREF_MEMORY_BASE 0x24 /* Prefetchable memory range behind */
> +#define PCI_PREF_MEMORY_LIMIT 0x26
> +#define PCI_PREF_RANGE_TYPE_MASK 0x0fUL
> +#define PCI_PREF_RANGE_TYPE_32 0x00
> +#define PCI_PREF_RANGE_TYPE_64 0x01
> +#define PCI_PREF_RANGE_MASK (~0x0fUL)
> +#define PCI_PREF_BASE_UPPER32 0x28 /* Upper half of prefetchable memory range */
> +#define PCI_PREF_LIMIT_UPPER32 0x2c
> +#define PCI_IO_BASE_UPPER16 0x30 /* Upper half of I/O addresses */
> +#define PCI_IO_LIMIT_UPPER16 0x32
> +/* 0x34 same as for htype 0 */
> +/* 0x35-0x3b is reserved */
> +#define PCI_ROM_ADDRESS1 0x38 /* Same as PCI_ROM_ADDRESS, but for htype 1 */
> +/* 0x3c-0x3d are same as for htype 0 */
> +#define PCI_BRIDGE_CONTROL 0x3e
> +#define PCI_BRIDGE_CTL_PARITY 0x01 /* Enable parity detection on secondary interface */
> +#define PCI_BRIDGE_CTL_SERR 0x02 /* The same for SERR forwarding */
> +#define PCI_BRIDGE_CTL_ISA 0x04 /* Enable ISA mode */
> +#define PCI_BRIDGE_CTL_VGA 0x08 /* Forward VGA addresses */
> +#define PCI_BRIDGE_CTL_MASTER_ABORT 0x20 /* Report master aborts */
> +#define PCI_BRIDGE_CTL_BUS_RESET 0x40 /* Secondary bus reset */
> +#define PCI_BRIDGE_CTL_FAST_BACK 0x80 /* Fast Back2Back enabled on secondary interface */
> +
> +/* Header type 2 (CardBus bridges) */
> +#define PCI_CB_CAPABILITY_LIST 0x14
> +/* 0x15 reserved */
> +#define PCI_CB_SEC_STATUS 0x16 /* Secondary status */
> +#define PCI_CB_PRIMARY_BUS 0x18 /* PCI bus number */
> +#define PCI_CB_CARD_BUS 0x19 /* CardBus bus number */
> +#define PCI_CB_SUBORDINATE_BUS 0x1a /* Subordinate bus number */
> +#define PCI_CB_LATENCY_TIMER 0x1b /* CardBus latency timer */
> +#define PCI_CB_MEMORY_BASE_0 0x1c
> +#define PCI_CB_MEMORY_LIMIT_0 0x20
> +#define PCI_CB_MEMORY_BASE_1 0x24
> +#define PCI_CB_MEMORY_LIMIT_1 0x28
> +#define PCI_CB_IO_BASE_0 0x2c
> +#define PCI_CB_IO_BASE_0_HI 0x2e
> +#define PCI_CB_IO_LIMIT_0 0x30
> +#define PCI_CB_IO_LIMIT_0_HI 0x32
> +#define PCI_CB_IO_BASE_1 0x34
> +#define PCI_CB_IO_BASE_1_HI 0x36
> +#define PCI_CB_IO_LIMIT_1 0x38
> +#define PCI_CB_IO_LIMIT_1_HI 0x3a
> +#define PCI_CB_IO_RANGE_MASK (~0x03UL)
> +/* 0x3c-0x3d are same as for htype 0 */
> +#define PCI_CB_BRIDGE_CONTROL 0x3e
> +#define PCI_CB_BRIDGE_CTL_PARITY 0x01 /* Similar to standard bridge control register */
> +#define PCI_CB_BRIDGE_CTL_SERR 0x02
> +#define PCI_CB_BRIDGE_CTL_ISA 0x04
> +#define PCI_CB_BRIDGE_CTL_VGA 0x08
> +#define PCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20
> +#define PCI_CB_BRIDGE_CTL_CB_RESET 0x40 /* CardBus reset */
> +#define PCI_CB_BRIDGE_CTL_16BIT_INT 0x80 /* Enable interrupt for 16-bit cards */
> +#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */
> +#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
> +#define PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
> +#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
> +#define PCI_CB_SUBSYSTEM_ID 0x42
> +#define PCI_CB_LEGACY_MODE_BASE 0x44 /* 16-bit PC Card legacy mode base address (ExCa) */
> +/* 0x48-0x7f reserved */
> +
> +/* Capability lists */
> +
> +#define PCI_CAP_LIST_ID 0 /* Capability ID */
> +#define PCI_CAP_ID_PM 0x01 /* Power Management */
> +#define PCI_CAP_ID_AGP 0x02 /* Accelerated Graphics Port */
> +#define PCI_CAP_ID_VPD 0x03 /* Vital Product Data */
> +#define PCI_CAP_ID_SLOTID 0x04 /* Slot Identification */
> +#define PCI_CAP_ID_MSI 0x05 /* Message Signalled Interrupts */
> +#define PCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */
> +#define PCI_CAP_ID_PCIX 0x07 /* PCI-X */
> +#define PCI_CAP_ID_HT 0x08 /* HyperTransport */
> +#define PCI_CAP_ID_VNDR 0x09 /* Vendor specific */
> +#define PCI_CAP_ID_DBG 0x0A /* Debug port */
> +#define PCI_CAP_ID_CCRC 0x0B /* CompactPCI Central Resource Control */
> +#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */
> +#define PCI_CAP_ID_SSVID 0x0D /* Bridge subsystem vendor/device ID */
> +#define PCI_CAP_ID_AGP3 0x0E /* AGP Target PCI-PCI bridge */
> +#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
> +#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */
> +#define PCI_CAP_ID_AF 0x13 /* PCI Advanced Features */
> +#define PCI_CAP_LIST_NEXT 1 /* Next capability in the list */
> +#define PCI_CAP_FLAGS 2 /* Capability defined flags (16 bits) */
> +#define PCI_CAP_SIZEOF 4
> +
> +/* Power Management Registers */
> +
> +#define PCI_PM_PMC 2 /* PM Capabilities Register */
> +#define PCI_PM_CAP_VER_MASK 0x0007 /* Version */
> +#define PCI_PM_CAP_PME_CLOCK 0x0008 /* PME clock required */
> +#define PCI_PM_CAP_RESERVED 0x0010 /* Reserved field */
> +#define PCI_PM_CAP_DSI 0x0020 /* Device specific initialization */
> +#define PCI_PM_CAP_AUX_POWER 0x01C0 /* Auxiliary power support mask */
> +#define PCI_PM_CAP_D1 0x0200 /* D1 power state support */
> +#define PCI_PM_CAP_D2 0x0400 /* D2 power state support */
> +#define PCI_PM_CAP_PME 0x0800 /* PME pin supported */
> +#define PCI_PM_CAP_PME_MASK 0xF800 /* PME Mask of all supported states */
> +#define PCI_PM_CAP_PME_D0 0x0800 /* PME# from D0 */
> +#define PCI_PM_CAP_PME_D1 0x1000 /* PME# from D1 */
> +#define PCI_PM_CAP_PME_D2 0x2000 /* PME# from D2 */
> +#define PCI_PM_CAP_PME_D3 0x4000 /* PME# from D3 (hot) */
> +#define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */
> +#define PCI_PM_CAP_PME_SHIFT 11 /* Start of the PME Mask in PMC */
> +#define PCI_PM_CTRL 4 /* PM control and status register */
> +#define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */
> +#define PCI_PM_CTRL_NO_SOFT_RESET 0x0008 /* No reset for D3hot->D0 */
> +#define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */
> +#define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */
> +#define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */
> +#define PCI_PM_CTRL_PME_STATUS 0x8000 /* PME pin status */
> +#define PCI_PM_PPB_EXTENSIONS 6 /* PPB support extensions (??) */
> +#define PCI_PM_PPB_B2_B3 0x40 /* Stop clock when in D3hot (??) */
> +#define PCI_PM_BPCC_ENABLE 0x80 /* Bus power/clock control enable (??) */
> +#define PCI_PM_DATA_REGISTER 7 /* (??) */
> +#define PCI_PM_SIZEOF 8
> +
> +/* AGP registers */
> +
> +#define PCI_AGP_VERSION 2 /* BCD version number */
> +#define PCI_AGP_RFU 3 /* Rest of capability flags */
> +#define PCI_AGP_STATUS 4 /* Status register */
> +#define PCI_AGP_STATUS_RQ_MASK 0xff000000 /* Maximum number of requests - 1 */
> +#define PCI_AGP_STATUS_SBA 0x0200 /* Sideband addressing supported */
> +#define PCI_AGP_STATUS_64BIT 0x0020 /* 64-bit addressing supported */
> +#define PCI_AGP_STATUS_FW 0x0010 /* FW transfers supported */
> +#define PCI_AGP_STATUS_RATE4 0x0004 /* 4x transfer rate supported */
> +#define PCI_AGP_STATUS_RATE2 0x0002 /* 2x transfer rate supported */
> +#define PCI_AGP_STATUS_RATE1 0x0001 /* 1x transfer rate supported */
> +#define PCI_AGP_COMMAND 8 /* Control register */
> +#define PCI_AGP_COMMAND_RQ_MASK 0xff000000 /* Master: Maximum number of requests */
> +#define PCI_AGP_COMMAND_SBA 0x0200 /* Sideband addressing enabled */
> +#define PCI_AGP_COMMAND_AGP 0x0100 /* Allow processing of AGP transactions */
> +#define PCI_AGP_COMMAND_64BIT 0x0020 /* Allow processing of 64-bit addresses */
> +#define PCI_AGP_COMMAND_FW 0x0010 /* Force FW transfers */
> +#define PCI_AGP_COMMAND_RATE4 0x0004 /* Use 4x rate */
> +#define PCI_AGP_COMMAND_RATE2 0x0002 /* Use 2x rate */
> +#define PCI_AGP_COMMAND_RATE1 0x0001 /* Use 1x rate */
> +#define PCI_AGP_SIZEOF 12
> +
> +/* Vital Product Data */
> +
> +#define PCI_VPD_ADDR 2 /* Address to access (15 bits!) */
> +#define PCI_VPD_ADDR_MASK 0x7fff /* Address mask */
> +#define PCI_VPD_ADDR_F 0x8000 /* Write 0, 1 indicates completion */
> +#define PCI_VPD_DATA 4 /* 32-bits of data returned here */
> +
> +/* Slot Identification */
> +
> +#define PCI_SID_ESR 2 /* Expansion Slot Register */
> +#define PCI_SID_ESR_NSLOTS 0x1f /* Number of expansion slots available */
> +#define PCI_SID_ESR_FIC 0x20 /* First In Chassis Flag */
> +#define PCI_SID_CHASSIS_NR 3 /* Chassis Number */
> +
> +/* Message Signalled Interrupts registers */
> +
> +#define PCI_MSI_FLAGS 2 /* Various flags */
> +#define PCI_MSI_FLAGS_64BIT 0x80 /* 64-bit addresses allowed */
> +#define PCI_MSI_FLAGS_QSIZE 0x70 /* Message queue size configured */
> +#define PCI_MSI_FLAGS_QMASK 0x0e /* Maximum queue size available */
> +#define PCI_MSI_FLAGS_ENABLE 0x01 /* MSI feature enabled */
> +#define PCI_MSI_FLAGS_MASKBIT 0x100 /* 64-bit mask bits allowed */
> +#define PCI_MSI_RFU 3 /* Rest of capability flags */
> +#define PCI_MSI_ADDRESS_LO 4 /* Lower 32 bits */
> +#define PCI_MSI_ADDRESS_HI 8 /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
> +#define PCI_MSI_DATA_32 8 /* 16 bits of data for 32-bit devices */
> +#define PCI_MSI_MASK_32 12 /* Mask bits register for 32-bit devices */
> +#define PCI_MSI_DATA_64 12 /* 16 bits of data for 64-bit devices */
> +#define PCI_MSI_MASK_64 16 /* Mask bits register for 64-bit devices */
> +
> +/* MSI-X registers */
> +#define PCI_MSIX_FLAGS 2
> +#define PCI_MSIX_FLAGS_QSIZE 0x7FF
> +#define PCI_MSIX_FLAGS_ENABLE (1 << 15)
> +#define PCI_MSIX_FLAGS_MASKALL (1 << 14)
> +#define PCI_MSIX_TABLE 4
> +#define PCI_MSIX_PBA 8
> +#define PCI_MSIX_FLAGS_BIRMASK (7 << 0)
> +
> +/* MSI-X entry's format */
> +#define PCI_MSIX_ENTRY_SIZE 16
> +#define PCI_MSIX_ENTRY_LOWER_ADDR 0
> +#define PCI_MSIX_ENTRY_UPPER_ADDR 4
> +#define PCI_MSIX_ENTRY_DATA 8
> +#define PCI_MSIX_ENTRY_VECTOR_CTRL 12
> +#define PCI_MSIX_ENTRY_CTRL_MASKBIT 1
> +
> +/* CompactPCI Hotswap Register */
> +
> +#define PCI_CHSWP_CSR 2 /* Control and Status Register */
> +#define PCI_CHSWP_DHA 0x01 /* Device Hiding Arm */
> +#define PCI_CHSWP_EIM 0x02 /* ENUM# Signal Mask */
> +#define PCI_CHSWP_PIE 0x04 /* Pending Insert or Extract */
> +#define PCI_CHSWP_LOO 0x08 /* LED On / Off */
> +#define PCI_CHSWP_PI 0x30 /* Programming Interface */
> +#define PCI_CHSWP_EXT 0x40 /* ENUM# status - extraction */
> +#define PCI_CHSWP_INS 0x80 /* ENUM# status - insertion */
> +
> +/* PCI Advanced Feature registers */
> +
> +#define PCI_AF_LENGTH 2
> +#define PCI_AF_CAP 3
> +#define PCI_AF_CAP_TP 0x01
> +#define PCI_AF_CAP_FLR 0x02
> +#define PCI_AF_CTRL 4
> +#define PCI_AF_CTRL_FLR 0x01
> +#define PCI_AF_STATUS 5
> +#define PCI_AF_STATUS_TP 0x01
> +
> +/* PCI-X registers */
> +
> +#define PCI_X_CMD 2 /* Modes & Features */
> +#define PCI_X_CMD_DPERR_E 0x0001 /* Data Parity Error Recovery Enable */
> +#define PCI_X_CMD_ERO 0x0002 /* Enable Relaxed Ordering */
> +#define PCI_X_CMD_READ_512 0x0000 /* 512 byte maximum read byte count */
> +#define PCI_X_CMD_READ_1K 0x0004 /* 1Kbyte maximum read byte count */
> +#define PCI_X_CMD_READ_2K 0x0008 /* 2Kbyte maximum read byte count */
> +#define PCI_X_CMD_READ_4K 0x000c /* 4Kbyte maximum read byte count */
> +#define PCI_X_CMD_MAX_READ 0x000c /* Max Memory Read Byte Count */
> + /* Max # of outstanding split transactions */
> +#define PCI_X_CMD_SPLIT_1 0x0000 /* Max 1 */
> +#define PCI_X_CMD_SPLIT_2 0x0010 /* Max 2 */
> +#define PCI_X_CMD_SPLIT_3 0x0020 /* Max 3 */
> +#define PCI_X_CMD_SPLIT_4 0x0030 /* Max 4 */
> +#define PCI_X_CMD_SPLIT_8 0x0040 /* Max 8 */
> +#define PCI_X_CMD_SPLIT_12 0x0050 /* Max 12 */
> +#define PCI_X_CMD_SPLIT_16 0x0060 /* Max 16 */
> +#define PCI_X_CMD_SPLIT_32 0x0070 /* Max 32 */
> +#define PCI_X_CMD_MAX_SPLIT 0x0070 /* Max Outstanding Split Transactions */
> +#define PCI_X_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
> +#define PCI_X_STATUS 4 /* PCI-X capabilities */
> +#define PCI_X_STATUS_DEVFN 0x000000ff /* A copy of devfn */
> +#define PCI_X_STATUS_BUS 0x0000ff00 /* A copy of bus nr */
> +#define PCI_X_STATUS_64BIT 0x00010000 /* 64-bit device */
> +#define PCI_X_STATUS_133MHZ 0x00020000 /* 133 MHz capable */
> +#define PCI_X_STATUS_SPL_DISC 0x00040000 /* Split Completion Discarded */
> +#define PCI_X_STATUS_UNX_SPL 0x00080000 /* Unexpected Split Completion */
> +#define PCI_X_STATUS_COMPLEX 0x00100000 /* Device Complexity */
> +#define PCI_X_STATUS_MAX_READ 0x00600000 /* Designed Max Memory Read Count */
> +#define PCI_X_STATUS_MAX_SPLIT 0x03800000 /* Designed Max Outstanding Split Transactions */
> +#define PCI_X_STATUS_MAX_CUM 0x1c000000 /* Designed Max Cumulative Read Size */
> +#define PCI_X_STATUS_SPL_ERR 0x20000000 /* Rcvd Split Completion Error Msg */
> +#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */
> +#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */
> +
> +/* PCI Bridge Subsystem ID registers */
> +
> +#define PCI_SSVID_VENDOR_ID 4 /* PCI-Bridge subsystem vendor id register */
> +#define PCI_SSVID_DEVICE_ID 6 /* PCI-Bridge subsystem device id register */
> +
> +/* PCI Express capability registers */
> +
> +#define PCI_EXP_FLAGS 2 /* Capabilities register */
> +#define PCI_EXP_FLAGS_VERS 0x000f /* Capability version */
> +#define PCI_EXP_FLAGS_TYPE 0x00f0 /* Device/Port type */
> +#define PCI_EXP_TYPE_ENDPOINT 0x0 /* Express Endpoint */
> +#define PCI_EXP_TYPE_LEG_END 0x1 /* Legacy Endpoint */
> +#define PCI_EXP_TYPE_ROOT_PORT 0x4 /* Root Port */
> +#define PCI_EXP_TYPE_UPSTREAM 0x5 /* Upstream Port */
> +#define PCI_EXP_TYPE_DOWNSTREAM 0x6 /* Downstream Port */
> +#define PCI_EXP_TYPE_PCI_BRIDGE 0x7 /* PCI/PCI-X Bridge */
> +#define PCI_EXP_TYPE_RC_END 0x9 /* Root Complex Integrated Endpoint */
> +#define PCI_EXP_TYPE_RC_EC 0x10 /* Root Complex Event Collector */
> +#define PCI_EXP_FLAGS_SLOT 0x0100 /* Slot implemented */
> +#define PCI_EXP_FLAGS_IRQ 0x3e00 /* Interrupt message number */
> +#define PCI_EXP_DEVCAP 4 /* Device capabilities */
> +#define PCI_EXP_DEVCAP_PAYLOAD 0x07 /* Max_Payload_Size */
> +#define PCI_EXP_DEVCAP_PHANTOM 0x18 /* Phantom functions */
> +#define PCI_EXP_DEVCAP_EXT_TAG 0x20 /* Extended tags */
> +#define PCI_EXP_DEVCAP_L0S 0x1c0 /* L0s Acceptable Latency */
> +#define PCI_EXP_DEVCAP_L1 0xe00 /* L1 Acceptable Latency */
> +#define PCI_EXP_DEVCAP_ATN_BUT 0x1000 /* Attention Button Present */
> +#define PCI_EXP_DEVCAP_ATN_IND 0x2000 /* Attention Indicator Present */
> +#define PCI_EXP_DEVCAP_PWR_IND 0x4000 /* Power Indicator Present */
> +#define PCI_EXP_DEVCAP_RBER 0x8000 /* Role-Based Error Reporting */
> +#define PCI_EXP_DEVCAP_PWR_VAL 0x3fc0000 /* Slot Power Limit Value */
> +#define PCI_EXP_DEVCAP_PWR_SCL 0xc000000 /* Slot Power Limit Scale */
> +#define PCI_EXP_DEVCAP_FLR 0x10000000 /* Function Level Reset */
> +#define PCI_EXP_DEVCTL 8 /* Device Control */
> +#define PCI_EXP_DEVCTL_CERE 0x0001 /* Correctable Error Reporting En. */
> +#define PCI_EXP_DEVCTL_NFERE 0x0002 /* Non-Fatal Error Reporting Enable */
> +#define PCI_EXP_DEVCTL_FERE 0x0004 /* Fatal Error Reporting Enable */
> +#define PCI_EXP_DEVCTL_URRE 0x0008 /* Unsupported Request Reporting En. */
> +#define PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
> +#define PCI_EXP_DEVCTL_PAYLOAD 0x00e0 /* Max_Payload_Size */
> +#define PCI_EXP_DEVCTL_EXT_TAG 0x0100 /* Extended Tag Field Enable */
> +#define PCI_EXP_DEVCTL_PHANTOM 0x0200 /* Phantom Functions Enable */
> +#define PCI_EXP_DEVCTL_AUX_PME 0x0400 /* Auxiliary Power PM Enable */
> +#define PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800 /* Enable No Snoop */
> +#define PCI_EXP_DEVCTL_READRQ 0x7000 /* Max_Read_Request_Size */
> +#define PCI_EXP_DEVCTL_BCR_FLR 0x8000 /* Bridge Configuration Retry / FLR */
> +#define PCI_EXP_DEVSTA 10 /* Device Status */
> +#define PCI_EXP_DEVSTA_CED 0x01 /* Correctable Error Detected */
> +#define PCI_EXP_DEVSTA_NFED 0x02 /* Non-Fatal Error Detected */
> +#define PCI_EXP_DEVSTA_FED 0x04 /* Fatal Error Detected */
> +#define PCI_EXP_DEVSTA_URD 0x08 /* Unsupported Request Detected */
> +#define PCI_EXP_DEVSTA_AUXPD 0x10 /* AUX Power Detected */
> +#define PCI_EXP_DEVSTA_TRPND 0x20 /* Transactions Pending */
> +#define PCI_EXP_LNKCAP 12 /* Link Capabilities */
> +#define PCI_EXP_LNKCAP_SLS 0x0000000f /* Supported Link Speeds */
> +#define PCI_EXP_LNKCAP_MLW 0x000003f0 /* Maximum Link Width */
> +#define PCI_EXP_LNKCAP_ASPMS 0x00000c00 /* ASPM Support */
> +#define PCI_EXP_LNKCAP_L0SEL 0x00007000 /* L0s Exit Latency */
> +#define PCI_EXP_LNKCAP_L1EL 0x00038000 /* L1 Exit Latency */
> +#define PCI_EXP_LNKCAP_CLKPM 0x00040000 /* L1 Clock Power Management */
> +#define PCI_EXP_LNKCAP_SDERC 0x00080000 /* Surprise Down Error Reporting Capable */
> +#define PCI_EXP_LNKCAP_DLLLARC 0x00100000 /* Data Link Layer Link Active Reporting Capable */
> +#define PCI_EXP_LNKCAP_LBNC 0x00200000 /* Link Bandwidth Notification Capability */
> +#define PCI_EXP_LNKCAP_PN 0xff000000 /* Port Number */
> +#define PCI_EXP_LNKCTL 16 /* Link Control */
> +#define PCI_EXP_LNKCTL_ASPMC 0x0003 /* ASPM Control */
> +#define PCI_EXP_LNKCTL_RCB 0x0008 /* Read Completion Boundary */
> +#define PCI_EXP_LNKCTL_LD 0x0010 /* Link Disable */
> +#define PCI_EXP_LNKCTL_RL 0x0020 /* Retrain Link */
> +#define PCI_EXP_LNKCTL_CCC 0x0040 /* Common Clock Configuration */
> +#define PCI_EXP_LNKCTL_ES 0x0080 /* Extended Synch */
> +#define PCI_EXP_LNKCTL_CLKREQ_EN 0x100 /* Enable clkreq */
> +#define PCI_EXP_LNKCTL_HAWD 0x0200 /* Hardware Autonomous Width Disable */
> +#define PCI_EXP_LNKCTL_LBMIE 0x0400 /* Link Bandwidth Management Interrupt Enable */
> +#define PCI_EXP_LNKCTL_LABIE 0x0800 /* Lnk Autonomous Bandwidth Interrupt Enable */
> +#define PCI_EXP_LNKSTA 18 /* Link Status */
> +#define PCI_EXP_LNKSTA_CLS 0x000f /* Current Link Speed */
> +#define PCI_EXP_LNKSTA_CLS_2_5GB 0x01 /* Current Link Speed 2.5GT/s */
> +#define PCI_EXP_LNKSTA_CLS_5_0GB 0x02 /* Current Link Speed 5.0GT/s */
> +#define PCI_EXP_LNKSTA_NLW 0x03f0 /* Nogotiated Link Width */
> +#define PCI_EXP_LNKSTA_NLW_SHIFT 4 /* start of NLW mask in link status */
> +#define PCI_EXP_LNKSTA_LT 0x0800 /* Link Training */
> +#define PCI_EXP_LNKSTA_SLC 0x1000 /* Slot Clock Configuration */
> +#define PCI_EXP_LNKSTA_DLLLA 0x2000 /* Data Link Layer Link Active */
> +#define PCI_EXP_LNKSTA_LBMS 0x4000 /* Link Bandwidth Management Status */
> +#define PCI_EXP_LNKSTA_LABS 0x8000 /* Link Autonomous Bandwidth Status */
> +#define PCI_EXP_SLTCAP 20 /* Slot Capabilities */
> +#define PCI_EXP_SLTCAP_ABP 0x00000001 /* Attention Button Present */
> +#define PCI_EXP_SLTCAP_PCP 0x00000002 /* Power Controller Present */
> +#define PCI_EXP_SLTCAP_MRLSP 0x00000004 /* MRL Sensor Present */
> +#define PCI_EXP_SLTCAP_AIP 0x00000008 /* Attention Indicator Present */
> +#define PCI_EXP_SLTCAP_PIP 0x00000010 /* Power Indicator Present */
> +#define PCI_EXP_SLTCAP_HPS 0x00000020 /* Hot-Plug Surprise */
> +#define PCI_EXP_SLTCAP_HPC 0x00000040 /* Hot-Plug Capable */
> +#define PCI_EXP_SLTCAP_SPLV 0x00007f80 /* Slot Power Limit Value */
> +#define PCI_EXP_SLTCAP_SPLS 0x00018000 /* Slot Power Limit Scale */
> +#define PCI_EXP_SLTCAP_EIP 0x00020000 /* Electromechanical Interlock Present */
> +#define PCI_EXP_SLTCAP_NCCS 0x00040000 /* No Command Completed Support */
> +#define PCI_EXP_SLTCAP_PSN 0xfff80000 /* Physical Slot Number */
> +#define PCI_EXP_SLTCTL 24 /* Slot Control */
> +#define PCI_EXP_SLTCTL_ABPE 0x0001 /* Attention Button Pressed Enable */
> +#define PCI_EXP_SLTCTL_PFDE 0x0002 /* Power Fault Detected Enable */
> +#define PCI_EXP_SLTCTL_MRLSCE 0x0004 /* MRL Sensor Changed Enable */
> +#define PCI_EXP_SLTCTL_PDCE 0x0008 /* Presence Detect Changed Enable */
> +#define PCI_EXP_SLTCTL_CCIE 0x0010 /* Command Completed Interrupt Enable */
> +#define PCI_EXP_SLTCTL_HPIE 0x0020 /* Hot-Plug Interrupt Enable */
> +#define PCI_EXP_SLTCTL_AIC 0x00c0 /* Attention Indicator Control */
> +#define PCI_EXP_SLTCTL_PIC 0x0300 /* Power Indicator Control */
> +#define PCI_EXP_SLTCTL_PCC 0x0400 /* Power Controller Control */
> +#define PCI_EXP_SLTCTL_EIC 0x0800 /* Electromechanical Interlock Control */
> +#define PCI_EXP_SLTCTL_DLLSCE 0x1000 /* Data Link Layer State Changed Enable */
> +#define PCI_EXP_SLTSTA 26 /* Slot Status */
> +#define PCI_EXP_SLTSTA_ABP 0x0001 /* Attention Button Pressed */
> +#define PCI_EXP_SLTSTA_PFD 0x0002 /* Power Fault Detected */
> +#define PCI_EXP_SLTSTA_MRLSC 0x0004 /* MRL Sensor Changed */
> +#define PCI_EXP_SLTSTA_PDC 0x0008 /* Presence Detect Changed */
> +#define PCI_EXP_SLTSTA_CC 0x0010 /* Command Completed */
> +#define PCI_EXP_SLTSTA_MRLSS 0x0020 /* MRL Sensor State */
> +#define PCI_EXP_SLTSTA_PDS 0x0040 /* Presence Detect State */
> +#define PCI_EXP_SLTSTA_EIS 0x0080 /* Electromechanical Interlock Status */
> +#define PCI_EXP_SLTSTA_DLLSC 0x0100 /* Data Link Layer State Changed */
> +#define PCI_EXP_RTCTL 28 /* Root Control */
> +#define PCI_EXP_RTCTL_SECEE 0x01 /* System Error on Correctable Error */
> +#define PCI_EXP_RTCTL_SENFEE 0x02 /* System Error on Non-Fatal Error */
> +#define PCI_EXP_RTCTL_SEFEE 0x04 /* System Error on Fatal Error */
> +#define PCI_EXP_RTCTL_PMEIE 0x08 /* PME Interrupt Enable */
> +#define PCI_EXP_RTCTL_CRSSVE 0x10 /* CRS Software Visibility Enable */
> +#define PCI_EXP_RTCAP 30 /* Root Capabilities */
> +#define PCI_EXP_RTSTA 32 /* Root Status */
> +#define PCI_EXP_RTSTA_PME 0x10000 /* PME status */
> +#define PCI_EXP_RTSTA_PENDING 0x20000 /* PME pending */
> +#define PCI_EXP_DEVCAP2 36 /* Device Capabilities 2 */
> +#define PCI_EXP_DEVCAP2_ARI 0x20 /* Alternative Routing-ID */
> +#define PCI_EXP_DEVCTL2 40 /* Device Control 2 */
> +#define PCI_EXP_DEVCTL2_ARI 0x20 /* Alternative Routing-ID */
> +#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */
> +#define PCI_EXP_SLTCTL2 56 /* Slot Control 2 */
> +
> +/* Extended Capabilities (PCI-X 2.0 and Express) */
> +#define PCI_EXT_CAP_ID(header) (header & 0x0000ffff)
> +#define PCI_EXT_CAP_VER(header) ((header >> 16) & 0xf)
> +#define PCI_EXT_CAP_NEXT(header) ((header >> 20) & 0xffc)
> +
> +#define PCI_EXT_CAP_ID_ERR 1
> +#define PCI_EXT_CAP_ID_VC 2
> +#define PCI_EXT_CAP_ID_DSN 3
> +#define PCI_EXT_CAP_ID_PWR 4
> +#define PCI_EXT_CAP_ID_VNDR 11
> +#define PCI_EXT_CAP_ID_ACS 13
> +#define PCI_EXT_CAP_ID_ARI 14
> +#define PCI_EXT_CAP_ID_ATS 15
> +#define PCI_EXT_CAP_ID_SRIOV 16
> +
> +/* Advanced Error Reporting */
> +#define PCI_ERR_UNCOR_STATUS 4 /* Uncorrectable Error Status */
> +#define PCI_ERR_UNC_TRAIN 0x00000001 /* Training */
> +#define PCI_ERR_UNC_DLP 0x00000010 /* Data Link Protocol */
> +#define PCI_ERR_UNC_POISON_TLP 0x00001000 /* Poisoned TLP */
> +#define PCI_ERR_UNC_FCP 0x00002000 /* Flow Control Protocol */
> +#define PCI_ERR_UNC_COMP_TIME 0x00004000 /* Completion Timeout */
> +#define PCI_ERR_UNC_COMP_ABORT 0x00008000 /* Completer Abort */
> +#define PCI_ERR_UNC_UNX_COMP 0x00010000 /* Unexpected Completion */
> +#define PCI_ERR_UNC_RX_OVER 0x00020000 /* Receiver Overflow */
> +#define PCI_ERR_UNC_MALF_TLP 0x00040000 /* Malformed TLP */
> +#define PCI_ERR_UNC_ECRC 0x00080000 /* ECRC Error Status */
> +#define PCI_ERR_UNC_UNSUP 0x00100000 /* Unsupported Request */
> +#define PCI_ERR_UNCOR_MASK 8 /* Uncorrectable Error Mask */
> + /* Same bits as above */
> +#define PCI_ERR_UNCOR_SEVER 12 /* Uncorrectable Error Severity */
> + /* Same bits as above */
> +#define PCI_ERR_COR_STATUS 16 /* Correctable Error Status */
> +#define PCI_ERR_COR_RCVR 0x00000001 /* Receiver Error Status */
> +#define PCI_ERR_COR_BAD_TLP 0x00000040 /* Bad TLP Status */
> +#define PCI_ERR_COR_BAD_DLLP 0x00000080 /* Bad DLLP Status */
> +#define PCI_ERR_COR_REP_ROLL 0x00000100 /* REPLAY_NUM Rollover */
> +#define PCI_ERR_COR_REP_TIMER 0x00001000 /* Replay Timer Timeout */
> +#define PCI_ERR_COR_MASK 20 /* Correctable Error Mask */
> + /* Same bits as above */
> +#define PCI_ERR_CAP 24 /* Advanced Error Capabilities */
> +#define PCI_ERR_CAP_FEP(x) ((x) & 31) /* First Error Pointer */
> +#define PCI_ERR_CAP_ECRC_GENC 0x00000020 /* ECRC Generation Capable */
> +#define PCI_ERR_CAP_ECRC_GENE 0x00000040 /* ECRC Generation Enable */
> +#define PCI_ERR_CAP_ECRC_CHKC 0x00000080 /* ECRC Check Capable */
> +#define PCI_ERR_CAP_ECRC_CHKE 0x00000100 /* ECRC Check Enable */
> +#define PCI_ERR_HEADER_LOG 28 /* Header Log Register (16 bytes) */
> +#define PCI_ERR_ROOT_COMMAND 44 /* Root Error Command */
> +/* Correctable Err Reporting Enable */
> +#define PCI_ERR_ROOT_CMD_COR_EN 0x00000001
> +/* Non-fatal Err Reporting Enable */
> +#define PCI_ERR_ROOT_CMD_NONFATAL_EN 0x00000002
> +/* Fatal Err Reporting Enable */
> +#define PCI_ERR_ROOT_CMD_FATAL_EN 0x00000004
> +#define PCI_ERR_ROOT_STATUS 48
> +#define PCI_ERR_ROOT_COR_RCV 0x00000001 /* ERR_COR Received */
> +/* Multi ERR_COR Received */
> +#define PCI_ERR_ROOT_MULTI_COR_RCV 0x00000002
> +/* ERR_FATAL/NONFATAL Recevied */
> +#define PCI_ERR_ROOT_UNCOR_RCV 0x00000004
> +/* Multi ERR_FATAL/NONFATAL Recevied */
> +#define PCI_ERR_ROOT_MULTI_UNCOR_RCV 0x00000008
> +#define PCI_ERR_ROOT_FIRST_FATAL 0x00000010 /* First Fatal */
> +#define PCI_ERR_ROOT_NONFATAL_RCV 0x00000020 /* Non-Fatal Received */
> +#define PCI_ERR_ROOT_FATAL_RCV 0x00000040 /* Fatal Received */
> +#define PCI_ERR_ROOT_ERR_SRC 52 /* Error Source Identification */
> +
> +/* Virtual Channel */
> +#define PCI_VC_PORT_REG1 4
> +#define PCI_VC_PORT_REG2 8
> +#define PCI_VC_PORT_CTRL 12
> +#define PCI_VC_PORT_STATUS 14
> +#define PCI_VC_RES_CAP 16
> +#define PCI_VC_RES_CTRL 20
> +#define PCI_VC_RES_STATUS 26
> +
> +/* Power Budgeting */
> +#define PCI_PWR_DSR 4 /* Data Select Register */
> +#define PCI_PWR_DATA 8 /* Data Register */
> +#define PCI_PWR_DATA_BASE(x) ((x) & 0xff) /* Base Power */
> +#define PCI_PWR_DATA_SCALE(x) (((x) >> 8) & 3) /* Data Scale */
> +#define PCI_PWR_DATA_PM_SUB(x) (((x) >> 10) & 7) /* PM Sub State */
> +#define PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
> +#define PCI_PWR_DATA_TYPE(x) (((x) >> 15) & 7) /* Type */
> +#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */
> +#define PCI_PWR_CAP 12 /* Capability */
> +#define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */
> +
> +/*
> + * Hypertransport sub capability types
> + *
> + * Unfortunately there are both 3 bit and 5 bit capability types defined
> + * in the HT spec, catering for that is a little messy. You probably don't
> + * want to use these directly, just use pci_find_ht_capability() and it
> + * will do the right thing for you.
> + */
> +#define HT_3BIT_CAP_MASK 0xE0
> +#define HT_CAPTYPE_SLAVE 0x00 /* Slave/Primary link configuration */
> +#define HT_CAPTYPE_HOST 0x20 /* Host/Secondary link configuration */
> +
> +#define HT_5BIT_CAP_MASK 0xF8
> +#define HT_CAPTYPE_IRQ 0x80 /* IRQ Configuration */
> +#define HT_CAPTYPE_REMAPPING_40 0xA0 /* 40 bit address remapping */
> +#define HT_CAPTYPE_REMAPPING_64 0xA2 /* 64 bit address remapping */
> +#define HT_CAPTYPE_UNITID_CLUMP 0x90 /* Unit ID clumping */
> +#define HT_CAPTYPE_EXTCONF 0x98 /* Extended Configuration Space Access */
> +#define HT_CAPTYPE_MSI_MAPPING 0xA8 /* MSI Mapping Capability */
> +#define HT_MSI_FLAGS 0x02 /* Offset to flags */
> +#define HT_MSI_FLAGS_ENABLE 0x1 /* Mapping enable */
> +#define HT_MSI_FLAGS_FIXED 0x2 /* Fixed mapping only */
> +#define HT_MSI_FIXED_ADDR 0x00000000FEE00000ULL /* Fixed addr */
> +#define HT_MSI_ADDR_LO 0x04 /* Offset to low addr bits */
> +#define HT_MSI_ADDR_LO_MASK 0xFFF00000 /* Low address bit mask */
> +#define HT_MSI_ADDR_HI 0x08 /* Offset to high addr bits */
> +#define HT_CAPTYPE_DIRECT_ROUTE 0xB0 /* Direct routing configuration */
> +#define HT_CAPTYPE_VCSET 0xB8 /* Virtual Channel configuration */
> +#define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */
> +#define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 hypertransport configuration */
> +#define HT_CAPTYPE_PM 0xE0 /* Hypertransport powermanagement configuration */
> +
> +/* Alternative Routing-ID Interpretation */
> +#define PCI_ARI_CAP 0x04 /* ARI Capability Register */
> +#define PCI_ARI_CAP_MFVC 0x0001 /* MFVC Function Groups Capability */
> +#define PCI_ARI_CAP_ACS 0x0002 /* ACS Function Groups Capability */
> +#define PCI_ARI_CAP_NFN(x) (((x) >> 8) & 0xff) /* Next Function Number */
> +#define PCI_ARI_CTRL 0x06 /* ARI Control Register */
> +#define PCI_ARI_CTRL_MFVC 0x0001 /* MFVC Function Groups Enable */
> +#define PCI_ARI_CTRL_ACS 0x0002 /* ACS Function Groups Enable */
> +#define PCI_ARI_CTRL_FG(x) (((x) >> 4) & 7) /* Function Group */
> +
> +/* Address Translation Service */
> +#define PCI_ATS_CAP 0x04 /* ATS Capability Register */
> +#define PCI_ATS_CAP_QDEP(x) ((x) & 0x1f) /* Invalidate Queue Depth */
> +#define PCI_ATS_MAX_QDEP 32 /* Max Invalidate Queue Depth */
> +#define PCI_ATS_CTRL 0x06 /* ATS Control Register */
> +#define PCI_ATS_CTRL_ENABLE 0x8000 /* ATS Enable */
> +#define PCI_ATS_CTRL_STU(x) ((x) & 0x1f) /* Smallest Translation Unit */
> +#define PCI_ATS_MIN_STU 12 /* shift of minimum STU block */
> +
> +/* Single Root I/O Virtualization */
> +#define PCI_SRIOV_CAP 0x04 /* SR-IOV Capabilities */
> +#define PCI_SRIOV_CAP_VFM 0x01 /* VF Migration Capable */
> +#define PCI_SRIOV_CAP_INTR(x) ((x) >> 21) /* Interrupt Message Number */
> +#define PCI_SRIOV_CTRL 0x08 /* SR-IOV Control */
> +#define PCI_SRIOV_CTRL_VFE 0x01 /* VF Enable */
> +#define PCI_SRIOV_CTRL_VFM 0x02 /* VF Migration Enable */
> +#define PCI_SRIOV_CTRL_INTR 0x04 /* VF Migration Interrupt Enable */
> +#define PCI_SRIOV_CTRL_MSE 0x08 /* VF Memory Space Enable */
> +#define PCI_SRIOV_CTRL_ARI 0x10 /* ARI Capable Hierarchy */
> +#define PCI_SRIOV_STATUS 0x0a /* SR-IOV Status */
> +#define PCI_SRIOV_STATUS_VFM 0x01 /* VF Migration Status */
> +#define PCI_SRIOV_INITIAL_VF 0x0c /* Initial VFs */
> +#define PCI_SRIOV_TOTAL_VF 0x0e /* Total VFs */
> +#define PCI_SRIOV_NUM_VF 0x10 /* Number of VFs */
> +#define PCI_SRIOV_FUNC_LINK 0x12 /* Function Dependency Link */
> +#define PCI_SRIOV_VF_OFFSET 0x14 /* First VF Offset */
> +#define PCI_SRIOV_VF_STRIDE 0x16 /* Following VF Stride */
> +#define PCI_SRIOV_VF_DID 0x1a /* VF Device ID */
> +#define PCI_SRIOV_SUP_PGSIZE 0x1c /* Supported Page Sizes */
> +#define PCI_SRIOV_SYS_PGSIZE 0x20 /* System Page Size */
> +#define PCI_SRIOV_BAR 0x24 /* VF BAR0 */
> +#define PCI_SRIOV_NUM_BARS 6 /* Number of VF BARs */
> +#define PCI_SRIOV_VFM 0x3c /* VF Migration State Array Offset*/
> +#define PCI_SRIOV_VFM_BIR(x) ((x) & 7) /* State BIR */
> +#define PCI_SRIOV_VFM_OFFSET(x) ((x) & ~7) /* State Offset */
> +#define PCI_SRIOV_VFM_UA 0x0 /* Inactive.Unavailable */
> +#define PCI_SRIOV_VFM_MI 0x1 /* Dormant.MigrateIn */
> +#define PCI_SRIOV_VFM_MO 0x2 /* Active.MigrateOut */
> +#define PCI_SRIOV_VFM_AV 0x3 /* Active.Available */
> +
> +/* Access Control Service */
> +#define PCI_ACS_CAP 0x04 /* ACS Capability Register */
> +#define PCI_ACS_SV 0x01 /* Source Validation */
> +#define PCI_ACS_TB 0x02 /* Translation Blocking */
> +#define PCI_ACS_RR 0x04 /* P2P Request Redirect */
> +#define PCI_ACS_CR 0x08 /* P2P Completion Redirect */
> +#define PCI_ACS_UF 0x10 /* Upstream Forwarding */
> +#define PCI_ACS_EC 0x20 /* P2P Egress Control */
> +#define PCI_ACS_DT 0x40 /* Direct Translated P2P */
> +#define PCI_ACS_CTRL 0x06 /* ACS Control Register */
> +#define PCI_ACS_EGRESS_CTL_V 0x08 /* ACS Egress Control Vector */
> +
> +#endif /* LINUX_PCI_REGS_H */
> --
> 1.7.5.4
>
>
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list